Implementation blueprint
A production-ready path for SkillTrack.
The interactive sample uses GenMB Authentication and scoped Key-Value storage for a saved personal workspace. A production release should move shared class records and role decisions to a server-backed database.
Frontend
React + TypeScript, Vite, Tailwind and accessible SVG charts with lazy-loaded dashboard routes.
Backend & hosting
Server functions or a Node/TypeScript API, PostgreSQL, background score jobs, and a CDN-hosted frontend.
Auth & permissions
GenMB Auth for identity; server-side policy checks ensure faculty can only reach their classes and learners reach only their own records.
Observability
Audit trail for roster changes, immutable activity timestamps, error monitoring and scheduled inactivity alerts.
Database schema
| Table | Key fields |
|---|---|
| users | id, email, display_name, created_at |
| departments | id, name, academic_year, faculty_owner_id |
| classes | id, department_id, name, section, academic_year |
| enrollments | id, class_id, student_user_id, roll_no, status |
| class_attributes | id, class_id, position (1–6), label, scoring_source |
| daily_logs | id, student_user_id, class_id, topic, category, confidence, notes, logged_on |
| attribute_scores | id, student_user_id, class_attribute_id, score, computed_at |
API surface
POST /classes Create a class or department.
GET /classes/:id/roster Faculty-scoped student list and alerts.
POST /classes/:id/students/import Validated CSV import with an error report.
PATCH /classes/:id/attributes Exactly six ordered skill definitions.
POST /daily-logs Student-owned activity log; queues score recalculation.
GET /students/me/dashboard Private dashboard, trend and class-average comparison.
Security model
Every server mutation checks the authenticated user before touching data. Faculty identities are verified against class ownership or departmental membership; students are verified against an active enrollment. The browser never decides an authorization role. Database row-level policies repeat the same ownership rules, and every roster transfer, removal, score adjustment and class deletion writes an audit event.