AgentSkillsCN

learnink-core-system

LearnInk 的核心架构、编码规范、角色保护机制,以及项目环境策略。

SKILL.md
--- frontmatter
name: learnink-core-system
description: Arsitektur inti, standar coding, proteksi role, dan strategi environment proyek LearnInk.

LearnInk Core System

Identitas Proyek

  • Nama: LearnInk — Platform pembelajaran berbasis web (PWA).
  • Stack: Vite + React 18 + TypeScript + Supabase + TanStack Query.
  • Package Manager: Gunakan bun untuk semua operasi (install, build, lint, test).
  • Port Dev: 1400 (bukan 3000).

Arsitektur Folder

code
src/
├── components/
│   ├── ui/           # Komponen primitif (shadcn/ui)
│   ├── shared/       # Komponen reusable (MarkdownRenderer, ErrorBoundary)
│   ├── features/     # Komponen per-fitur (module/, dashboard/, auth/)
│   └── layout/       # Layout components (BottomNavigation)
├── contexts/         # React Context (Auth, Theme, Language, PWA)
├── hooks/            # Custom hooks (useModules, useQuiz, useUserRole, dll.)
├── integrations/     # Supabase client & types
├── pages/            # Route pages (public/, dashboard/, learning/, admin/)
├── lib/              # Utilities (utils.ts, logger.ts)
├── locales/          # i18n translations (ID, EN, ZH)
└── types/            # TypeScript type definitions

Aturan Wajib

TypeScript

  • DILARANG menggunakan tipe any. Gunakan unknown, generic, atau buat interface khusus.
  • Semua props komponen harus memiliki interface yang terdefinisi.
  • Import tipe Supabase dari @/integrations/supabase/types.

Lazy Loading

  • SEMUA halaman di App.tsx harus menggunakan lazy() + <Suspense>.
  • Komponen berat (seperti PythonCodeEditor) juga wajib lazy-loaded.

Proteksi Role

  • Gunakan <ProtectedRoute> untuk halaman yang memerlukan login.
  • Gunakan <RoleProtectedRoute allowedRoles={[...]}> untuk halaman admin/tutor.
  • SUPERADMIN tidak boleh di-ban, di-demote, atau diubah role-nya dari UI manapun.
  • Cek proteksi Superadmin ada di useUserRole.ts dan useUsers.ts.

Environment Strategy

  • .env.development → Supabase Dev project.
  • .env.production → Supabase Prod project.
  • JANGAN PERNAH expose Service Role Key di variabel VITE_*.
  • Edge Function secrets dikelola via supabase secrets set.

Terminologi

  • Gunakan "Lembaran" bukan "Halaman" untuk page di konteks UI Indonesia.
  • Teks UI menggunakan Bahasa Indonesia sebagai default, dengan dukungan EN dan ZH.

Git & Versioning

  • 1 hari = 1 versi maximum di CHANGELOG.
  • Kategori CHANGELOG: Improvements, Fixes, Patches.
  • Timezone: Jakarta (WIB, UTC+7).