Enterprise-grade Learning Management System for the Indonesian digital workforce
Tech Stack • Getting Started • Project Structure • Features • Database • Deployment
Naik Kelas (literally "Level Up") is a cohort-based LMS built for Koneksi, an Indonesian education company focused on outcome-driven learning. The platform enables mentors to deliver track-based curricula (Creator, Seller, Affiliator) and measure real-world economic productivity through action-based assessments.
| Layer | Technology |
|---|---|
| Framework | SvelteKit 2 + Svelte 5 Runes |
| Styling | Tailwind CSS 4 + Custom design tokens (src/lib/config/design.ts) |
| Database | Turso (LibSQL) via Drizzle ORM |
| Auth | Lucia v3 (session-based, cookie auth) |
| i18n | Paraglide (ID, EN, JP) |
| Payments | Midtrans Snap + manual transfer verification |
| Content | Markdown via mdsvex |
| Adapter | @sveltejs/adapter-node (production), local SQLite (development) |
# Clone and install
git clone <repo-url>
cd naikkelas.id
pnpm install
# Configure environment
cp .env.example .env
# Edit .env with your Turso credentials (or use local SQLite)
# Push database schema
pnpm run db:push
# Seed initial data (optional)
pnpm run db:seed
# Start development server
pnpm run dev
| Command | Description |
|---|---|
pnpm run dev |
Start dev server at localhost:5173 |
pnpm run build |
Production build via adapter-node |
pnpm run check |
Type-check with svelte-check |
pnpm run lint |
Lint with Prettier + ESLint |
pnpm run db:push |
Push schema changes to database |
pnpm run db:studio |
Open Drizzle Studio GUI |
pnpm run db:seed |
Seed development data |
pnpm run test:e2e |
Run Playwright end-to-end tests |
pnpm run deploy |
Safe deploy script with pre-flight checks |
naikkelas.id/
├── docs/ # 38+ documentation files (roadmap, API, design, etc.)
├── drizzle/ # Generated migrations
├── scripts/ # Deployment & seeding scripts
│ └── seed/ # Modular domain-based seed files
├── src/
│ ├── app.css # Global styles & Tailwind config
│ ├── app.html # HTML shell with inline theme script
│ ├── hooks.server.ts # Auth middleware (Lucia session validation)
│ ├── lib/
│ │ ├── components/ # 50+ Svelte components
│ │ │ ├── layouts/ # AppShell, Sidebar, DashboardHeader, Breadcrumb
│ │ │ ├── app/ # Role dashboards, overview graphs
│ │ │ ├── ui/ # Skeleton, reusable primitives
│ │ │ └── admin/ # Admin-specific components
│ │ ├── config/ # Design tokens, content config
│ │ ├── server/ # Server-side logic
│ │ │ ├── db/ # Drizzle schema (44 tables), relations
│ │ │ ├── auth.ts # Lucia auth setup
│ │ │ ├── rbac.ts # Role-based navigation & permissions
│ │ │ ├── payments/ # Payment processing logic
│ │ │ └── email.ts # Email templates & delivery
│ │ ├── stores/ # Svelte stores (theme, toast, page metadata)
│ │ ├── plugins/ # Feature toggle plugin system
│ │ └── utils/ # Formatting, SEO, analytics, lazy loading
│ ├── routes/
│ │ ├── (auth)/ # Login, registration, waiting list
│ │ ├── (dashboard)/ # Protected dashboard (app/*)
│ │ │ └── app/
│ │ │ ├── admin/ # Admin panel (users, courses, coupons, reports)
│ │ │ ├── mentor/ # Mentor tools (grading, submissions, broadcast)
│ │ │ ├── courses/ # Course catalog & learning interface
│ │ │ └── ... # 16 route groups total
│ │ ├── (public)/ # Landing pages, marketplace, docs
│ │ ├── api/ # REST endpoints (payments, webhooks, notes)
│ │ └── org/ # Organization public pages
│ └── types/ # Shared TypeScript types
├── static/ # Static assets (images, fonts, favicons)
└── e2e/ & tests/ # Playwright test suites
design.ts)backdrop-blur-xlfly + fade)Ctrl+K) for power-user navigation44 tables managed by Drizzle ORM on Turso (LibSQL):
Core: user, session, course, enrollment, cohort
Content: module, lesson, material, quiz, quizQuestion, quizChoice
Progress: lessonProgress, lessonNote, submission, submissionGrade, checkpoint, checkpointSubmission
Commerce: transaction, paymentProof, coupon, couponUsage, affiliateSale, affiliateLink
Social: discussion, courseReview, notification, broadcastMessage
Gamification: certificate, badge, userBadge, userXP
Multi-tenant: organization, organizationMember, organizationInvitation, workspace, workspaceMember
System: pluginRegistry, coursePlugin, partner, mentorApplication, waitingList, emailLog, whatsappLog
The application is deployed as a Node.js server using @sveltejs/adapter-node:
pnpm run deploy # Safe deploy with pre-flight checks
pnpm run build # Manual build
pnpm run preview # Preview production build locally
See docs/DEPLOYMENT.md for detailed deployment instructions.
Comprehensive documentation is available in the docs/ directory:
| Document | Description |
|---|---|
ROADMAP.md |
Development roadmap & business vision 2030-2035 |
DESIGN_REFERENCE.md |
Visual design system reference |
DASHBOARD_RBAC_STRUCTURE.md |
Role-based access control architecture |
API.md |
API endpoint documentation |
DEPLOYMENT.md |
Deployment guide |
SECURITY.md |
Security practices |
CONTRIBUTING.md |
Contribution guidelines |
WORKFLOW.md |
Development workflow |
AI_CODING_GUIDE.md |
AI-assisted coding conventions |
Private — © Koneksi. All rights reserved.