
Custom Software
Project title: RAAFAT — School of Software Engineering (Mastery-Path Learning Platform)
A guided learning operating system for RAAFAT’s School of Software Engineering — login → structured curriculum → real lessons/exercises → saved progress — with Studio authoring and Operations admin, not a generic course catalog.
EdTech · Ethiopia
- TanStack Start
- Better Auth
- PostgreSQL
- Drizzle ORM
- Bun
- Docker/Coolify
- Tailwind CSS 4
Challenge
Learners needed a clear, skill-ordered path into software engineering (prompt engineering, frontend/backend craft, problem-solving) instead of scattered tutorials. Existing “course site” patterns would not support mentor-style sessions, reusable knowledge docs, RBAC, or an authoring pipeline that could grow into many schools later. Content and platform had to share one spine: what you see is in the DB.
Solution
We built a monorepo learning platform with four workspaces — Student (learn, practice, progress), Studio (draft → review → publish), Operations (users, roles, flags, audit), and in-app Docs (ADRs/standards). Auth is invite-only Better Auth; curriculum/progress/search sit on PostgreSQL with Drizzle; publish lifecycle and revision history keep content trustworthy. Deploy is Docker Compose on Coolify (elearning.raafat.site).
Result
End-to-end loop ships: login → curriculum → real lesson content → progress saved → ⌘K search → Studio authoring. Platform shell ~80%; Phase 0 curriculum seeded (~15% of master roadmap). Ops/security hardening and AI layer still ahead. Live beta URL: https://elearning.raafat.site. Traffic and satisfaction numbers: TBD.
Key features
- Student learning path with markdown lessons, TOC, completion, continue-learning, bookmarks, and progress (mastery %, phase bars)
- Practice exercises with hint/solution reveal and manual status (todo / attempted / solved)
- Content Studio publishing pipeline: draft → in review → approved → published → archived, plus revisions and media library
- Operations workspace: users/roles, memberships, audit log, feature flags, announcements, platform health
- PostgreSQL full-text search via command palette (⌘K) across lessons, knowledge, exercises, projects
- DB-backed RBAC (6 roles, 36 permissions) with soft-delete content lifecycle and Coolify-ready Docker deploy
Live site preview
Technical approach
Chose a single TanStack Start app + Postgres over microservices so one solo-dev team can ship vertical slices (ADR → schema/API → UI → real content). Domain-organized Drizzle schema (auth/, learning/, progress/, etc.) and ADRs gate decisions. Keyword FTS first; semantic/RAG deferred until production trust (backups, monitoring) is solid. Invite-only signup and bootstrap admin avoid open registration until content depth is ready.
What's next
Learning Command Center sessions (SPR-006), richer practice/grading, backup restore drills, monitoring; later semantic search and multi-school tenancy. Limitation today: thin curriculum (~1 chapter live vs 30+ target) and no automated code grading.
Project details
- Client
- RAAFAT-DIGITAL (internal product)
- Service
- Custom Software
- Timeline
- ~8–10 days for MVP
- Stack
- TanStack Start, Better Auth, PostgreSQL, Drizzle ORM, Bun, Docker/Coolify, Tailwind CSS 4

