Skip to content

Latest commit

 

History

History
260 lines (194 loc) · 12.3 KB

File metadata and controls

260 lines (194 loc) · 12.3 KB

Sinau LMS - Roadmap & Development Plan

Version: 0.1.1
Date: Jul 22, 2026
Status: M2–M5 Backend Complete | Next: M6 Frontend
Approach: API-first (Backend Rust complete, then Frontend SvelteKit)


Development Approach

API-first strategy: Build all backend API endpoints and business logic first (M2-M5), then build the frontend (M6). Every feature has both API implementation AND tests.

Benefits:

  • Backend can be tested independently via curl/httpie/Postman
  • Frontend is a thin consumer — low coupling
  • API Tokens enable headless usage before UI exists
  • Stabilize auth, RBAC, storage, webhooks before UI

Roadmap Overview

Milestone Description Status
M2 Foundation API (Auth, Users, Orgs, Courses, Chapters, Activities) ✅ Complete (Sprint 1–3)
M3 Content API (Media, Storage, Clone, Validation, Export) ✅ Complete (Sprint 4–5)
M4 Access Control (RBAC, API Tokens, Webhooks, Folders, Groups) ✅ Complete (Sprint 6–7)
M5 Engagement (Search, Analytics, Enrollments, Communities, Assignments, Certificates) ✅ Complete (Sprint 8–9)
M6 Frontend (SvelteKit 5) 🔲 Next
M7 Production (Docker, CI/CD, Deploy) 🔲 Planned

Testing Strategy

Test Types (applied to every feature)

Type Purpose Tool Coverage Target
Unit tests Business logic, services, models Rust built-in 80%+
Integration tests API endpoints with real DB Rust + test DB Every route
Contract tests JSON response shape validation Custom assertions Key endpoints

Test Organization

Test Rules

  1. Every route MUST have at least one integration test (happy path).
  2. Every service function MUST have at least one unit test.
  3. Auth-protected routes MUST test 401 (no auth) and 403 (wrong role).
  4. CRUD endpoints MUST test: create, read, update, delete.
  5. Run tests on every commit via CI: + .
  6. Test database: separate SQLite file ( or ), never touch dev data.

M2 - Foundation API (Week 1-3)

Sprint 1: Project Skeleton (Week 1)

# Task Est. Depends On Tests
2.1 Initialize Cargo workspace (server/) 2h - Compile passes
2.2 Config system (ENV parsing, AppState) 3h 2.1 Unit: config reads ENV correctly
2.3 Database setup (sqlx, SQLite pool) 2h 2.2 Unit: pool connects, migration runs
2.4 Unified error handling (AppError enum) 2h 2.1 Unit: error serializes to JSON
2.5 Health check endpoint (GET /api/health) 1h 2.3 Integration: returns DB status
2.6 Test infrastructure (common helpers, test DB setup) 3h 2.3 Shared test module ready
2.7 Docker Compose skeleton (server only) 2h 2.1 runs

Sprint 2: Auth & Users API (Week 2)

# Task Est. Depends On Tests
2.8 Migration 001: users + user_identities 2h 2.3 Migration applies cleanly
2.9 Copy auth module from Hompimpah (config, oauth, session) 3h 2.2 Compile passes
2.10 Adapt auth for Sinau (JWT issuer, user creation) 3h 2.9 Unit: JWT issue/validate
2.11 Auth middleware (require_auth, require_role) 2h 2.10 Unit: middleware rejects 401/403
2.12 Auth routes (providers, login, callback, logout, me) 3h 2.11 Integration: full OAuth flow mock
2.13 User service (find_or_create, upsert_identity) 2h 2.8 Unit: find_or_create idempotent
2.14 User routes (GET /users, GET /users/:id, PUT) 2h 2.13 Integration: CRUD + role guard

Sprint 3: Orgs & Courses API (Week 3)

# Task Est. Depends On Tests
2.15 Migration 002: organizations + user_organizations 2h 2.8 Migration applies cleanly
2.16 Seed default org on startup 1h 2.15 Unit: seed creates default org
2.17 Migration 003: courses 1h 2.15 Migration applies cleanly
2.18 Course service + routes (CRUD + list + published/public) 4h 2.17 Integration: full CRUD + filters
2.19 Migration 004: chapters + course_chapters 1h 2.17 Migration applies cleanly
2.20 Chapter service + routes (CRUD + reorder) 3h 2.19 Integration: CRUD + reorder
2.21 Migration 005: activities + chapter_activities 1h 2.19 Migration applies cleanly
2.22 Activity service + routes (CRUD) 3h 2.21 Integration: full CRUD

M2 Deliverable: All auth, user, org, course, chapter, activity endpoints working. Full test coverage. Testable via curl.


M3 - Content API (Week 3-5)

Sprint 4: Media & Storage API (Week 4)

# Task Est. Depends On Tests
3.1 Storage trait (StorageBackend: local + S3) 3h 2.2 Unit: trait methods
3.2 LocalStorage implementation 2h 3.1 Unit: upload, delete, get_url
3.3 S3Storage implementation (aws-sdk-s3) 3h 3.1 Integration: upload/delete against MinIO
3.4 Migration 007: media table 1h 2.8 Migration applies cleanly
3.5 Media upload endpoint (POST /media/upload) 3h 3.4 Integration: upload, verify file, check metadata
3.6 Static file serving (uploaded files) 2h 3.5 Integration: GET returns uploaded file
3.7 Course thumbnail upload endpoint 2h 3.5 Integration: thumbnail set + get

Sprint 5: Content CRUD API (Week 5)

# Task Est. Depends On Tests
3.8 Course clone endpoint (POST /courses/:uuid/clone) 3h 2.18 Integration: clone copies all data
3.9 Course meta endpoint (nested chapters + activities) 2h 2.18 Integration: returns full tree
3.10 Activity content validation (TipTap JSON schema) 2h 2.22 Unit: valid/invalid JSON
3.11 Content export endpoint (activity as markdown/HTML) 2h 2.22 Integration: returns formatted content

M3 Deliverable: Media upload (local + S3), course clone, content validation, export. Full test coverage.


M4 - Access Control API (Week 5-7)

Sprint 6: RBAC & Ownership (Week 6)

# Task Est. Depends On Tests
4.1 Role-based route guards (admin/teacher/student) 3h 2.11 Integration: each role tested
4.2 Course ownership check (teacher edits own only) 2h 4.1 Integration: owner/non-owner
4.3 Published/public visibility logic 2h 2.18 Integration: published/unpublished
4.4 Organization CRUD routes 3h 2.15 Integration: full CRUD
4.5 Organization membership management 2h 4.4 Integration: add/remove members

Sprint 7: API Tokens & Webhooks (Week 7)

# Task Est. Depends On Tests
4.6 Migration 007: api_tokens 1h 2.8 Migration applies cleanly
4.7 Token CRUD endpoint 2h 4.6 Integration: create, list, delete
4.8 Bearer token auth middleware 2h 4.7 Integration: Bearer auth + JWT fallback
4.9 Migration 008: webhooks 1h 2.8 Migration applies cleanly
4.10 Webhook CRUD routes 2h 4.9 Integration: full CRUD
4.11 Event dispatcher + HMAC-SHA256 signing 4h 4.10 Integration: webhook fires on event
4.12 Folder CRUD (group courses) 2h 2.17 Integration: CRUD
4.13 User group CRUD + course access 3h 4.1 Integration: group + access check

M4 Deliverable: Full RBAC, ownership, API tokens, webhooks, folders, groups. All tested.


M5 - Engagement API (Week 7-9)

Sprint 8: Search & Analytics (Week 8)

# Task Est. Depends On Tests
5.1 SQLite FTS5 migration for courses + activities 2h 2.17 Migration applies cleanly
5.2 Search endpoint (GET /search?q=...&type=...) 3h 5.1 Integration: search returns results
5.3 Analytics migration (progress, enrollment, completion) 2h 2.8 Migration applies cleanly
5.4 Progress tracking (mark activity complete) 3h 5.3 Integration: mark + get progress
5.5 Enrollment + completion endpoints 2h 5.3 Integration: enroll + check completion

Sprint 9: Discussions & Assignments (Week 9)

# Task Est. Depends On Tests
5.6 Migration 009: communities (threads + replies) 2h 2.8 Migration applies cleanly
5.7 Community routes (CRUD, threaded replies) 4h 5.6 Integration: create thread, reply, list
5.8 Migration 010: assignments + submissions 2h 2.8 Migration applies cleanly
5.9 Assignment routes (create, submit, grade) 4h 5.8 Integration: full flow
5.10 Certificate generation endpoint (PDF) 4h 5.4 Integration: cert generated on completion

M5 Deliverable: Complete backend API. Search, analytics, discussions, assignments, certificates. Full test coverage.


M6 - Frontend (Week 9-12)

Sprint 10: SvelteKit Shell (Week 9-10)

# Task Est. Depends On Tests
6.1 Initialize SvelteKit 5 (web/) 2h M5 Compiles
6.2 API client layer (typed fetch wrappers) 3h 6.1 Unit: client handles errors
6.3 Auth store + OAuth flow (login, callback, logout) 4h 6.2 E2E: login/logout works
6.4 Protected layout (dashboard) 2h 6.3 E2E: unauth redirect to login

Sprint 11: Dashboard (Week 10-11)

# Task Est. Depends On Tests
6.5 Course list + create/edit pages 4h 6.4 E2E: CRUD course
6.6 Chapter/activity management UI 4h 6.5 E2E: reorder chapters
6.7 TipTap editor integration 4h 6.6 E2E: edit + save content
6.8 Media upload in editor 2h 6.7 E2E: inline image
6.9 User management page (admin) 3h 6.4 E2E: list users

Sprint 12: Public & Settings (Week 11-12)

# Task Est. Depends On Tests
6.10 Public course view page 3h 6.5 E2E: view published course
6.11 Chapter -> activity navigation 2h 6.10 E2E: navigate content
6.12 Settings page (org, webhooks, API tokens) 3h 6.4 E2E: configure webhook
6.13 Search UI 2h 6.10 E2E: search finds course
6.14 Analytics dashboard (admin) 3h 6.4 E2E: stats visible

M6 Deliverable: Complete frontend consuming backend API. Full user-facing application.


M7 - Production (Week 12-13)

# Task Est. Depends On Tests
7.1 Multi-stage Dockerfile (server + web) 3h M6 Docker build succeeds
7.2 Docker Compose production config 2h 7.1
7.3 Traefik routing config 1h 7.2 Domain + TLS works
7.4 PostgreSQL migration test 2h 7.2 All migrations pass on Postgres
7.5 CI pipeline (Woodpecker/GA): test + clippy + build 3h - CI green on PR
7.6 Environment documentation (.env.example) 1h - Clear setup guide
7.7 README.md + CONTRIBUTING.md 2h - Complete docs
7.8 CHANGELOG.md (v0.0.1) 1h - Release notes ready

M7 Deliverable: Deployable, tested, documented, production-ready LMS.


Risk Register

Risk Likelihood Impact Mitigation
sqlx SQLite/Postgres syntax mismatch Medium Medium Test migrations on both from day 1
TipTap Svelte extension breaking changes Low High Pin version, test before upgrade
Auth module divergence from Hompimpah Medium Low Document adaptations, share improvements back
OAuth provider API changes Low Medium Abstracted in oauth.rs, easy to fix
Scope creep (adding Tier 2 features early) High High Strict MVP scope, defer to Phase 2
Test DB pollution between tests Medium Medium Use in-memory SQLite per test, clean setup/teardown
S3 integration test requires external service Medium Low Use MinIO Docker sidecar or mock S3 for CI

Success Metrics (MVP)

Metric Target
Auth flow (Google/GitHub/Keycloak) Works end-to-end in < 5s
Course CRUD Create + view in < 2 API calls
Test coverage 80%+ on backend services, 100% route coverage
API response (read) < 50ms p95 (single entity)
Docker deploy Fresh deploy in < 5 minutes
CI pipeline All tests pass in < 3 minutes