For the learner
For the teacher
Access & isolation
Every subject has an owner, and access is a first-class entitlement with a source, an expiry and a revocation history — not a boolean flag someone can flip and forget.
Technology
Backend
Python, FastAPI, Uvicorn, RQ worker queue
Data
PostgreSQL 16 + pgvector with row-level security, Redis
Retrieval
Hybrid dense + full-text search, BGE-m3 embeddings computed locally
Models
Task-routed LLMs with a fallback chain, plus bring-your-own-key providers
Scheduling
FSRS spaced repetition
Frontend
Vanilla HTML/CSS/JS — Cytoscape.js graph, KaTeX math, sanitised Markdown
Ingest
PyMuPDF for text-layer PDF, Markdown, git-repo sync
Operations
Docker Compose, nginx + Let's Encrypt, git-pull deploys with a hash-locked artifact gate
Embeddings run locally on CPU rather than through a paid API, and language models are routed per task — the tutor conversation, extraction, grading and evidence analysis do not all need the same model, and they do not all cost the same.
What is not built yet
A short, deliberately unflattering list — because knowing where a product ends is more useful than a feature grid that pretends it does not.