AI Education Platform
An adaptive learning platform that personalises course content using AI. Generates custom lesson plans, quizzes, and explanations based on each student's knowledge gaps and learning pace.
An adaptive learning platform that uses LLMs to generate personalised educational content. Students take a diagnostic assessment, and the platform builds a custom curriculum addressing their specific knowledge gaps. Each lesson, quiz, and explanation is generated dynamically based on their performance history.
The platform supports STEM subjects at university level. It has been tested with 200+ students in a beta programme, with 85% reporting better concept retention compared to traditional study methods. The system processes 50+ AI-generated content requests per user session with a 3-second median response time.
I was responsible for the full stack — from the AI prompt architecture and retrieval pipeline to the frontend and deployment infrastructure.
University students preparing for technical exams face a one-size-fits-all problem. Standard textbooks and video courses cover material linearly, but every student has different gaps in their understanding. A student who understands calculus but struggles with linear algebra must still work through the entire curriculum.
Existing adaptive learning platforms (Khan Academy, Coursera) use rule-based branching that is expensive to author and limited in scope. They cannot generate new content on demand or explain a concept in a way tailored to a specific student's background.
The goal was to build a system that could: assess a student's knowledge in minutes, generate a personalised curriculum, create unlimited practice problems with step-by-step solutions, and adapt in real-time as the student progresses.
We tested three approaches for content generation: prompt-based (single GPT-4 call with context), RAG-based (retrieve relevant material + generate), and fine-tuned models. The RAG approach won by a significant margin — it produced more accurate, factually consistent content and reduced hallucination rates from 12% to 2%.
For the assessment engine, we experimented with Bayesian Knowledge Tracing (BKT) and Item Response Theory (IRT). IRT proved more effective for our use case because it models both question difficulty and student ability on the same scale, allowing precise measurement of when a student has mastered a concept.
The vector search pipeline was prototyped with Pinecone, Weaviate, and pgvector. We chose pgvector because it eliminated an external dependency, reduced latency by 40% (no network hop), and made backups/restores trivial since vectors lived alongside relational data.
The AI pipeline required async processing (multiple parallel LLM calls), streaming responses, and Python ecosystem access (LangChain, NumPy for IRT calculations). FastAPI provided all of this with excellent async support and automatic OpenAPI documentation.
Eliminated an external vector database service. With pgvector, the course material embeddings live in the same PostgreSQL database as user profiles and progress data. This means a single query can join user history with relevant content vectors, avoiding distributed query complexity.
LLM responses can take 5-15 seconds. Streaming the response token-by-token reduced perceived latency from 8 seconds to under 1 second (time-to-first-token). We chose SSE over WebSockets because the data flow is unidirectional (server to client) and SSE works natively with HTTP/2.
As a two-person team, we could not justify DevOps overhead. Vercel handled the Next.js deployment with zero configuration. Upstash provided Redis and rate limiting as serverless APIs. The trade-off is higher cost at scale, but for an MVP with 200 beta users, the development speed was worth it.
Tested 20+ prompt strategies for curriculum generation and assessment. Built evaluation framework for accuracy.
RAG pipeline with pgvector, streaming responses, and adaptive assessment engine.
Course interface, lesson viewer, LaTeX rendering, and progress tracking.
Closed beta with university students across 5 STEM subjects.
Improved chunking strategy and hybrid search after analysis of failed retrievals.
Early versions of the platform occasionally generated confident but incorrect explanations. A student studying linear algebra was told that 'all square matrices are invertible' — a clear error. We solved this by implementing a two-pass system: the first pass generates content, the second pass verifies it against known sources. If confidence drops below a threshold, the response includes a citation rather than a generated explanation.
The first version made sequential LLM calls: assess knowledge, generate curriculum, create lesson, generate quiz. Total time: 45+ seconds. We parallelised independent calls (lesson generation runs alongside quiz question generation) and added streaming for progressive rendering. Median session initiation dropped to 8 seconds, and ongoing interactions feel instant due to streaming.
200+ beta users across 5 university subjects.
85% of users reported improved concept retention (self-reported survey, n=142).
Median AI response time: 3 seconds (streaming, time-to-first-token).
90% reduction in hallucination rate after two-pass verification system (from 12% to ~1.2%).
Note: these are beta metrics. A formal educational study has not been conducted.
The two-pass verification system should have been designed from day one. We added it as a reaction to user feedback, which eroded trust in the early weeks.
I would invest in a more robust evaluation framework earlier. We manually reviewed hundreds of generated responses instead of building an automated evaluation pipeline with known test cases.
The IRT-based assessment engine was over-engineered for the beta phase. A simpler rule-based system would have reached the same accuracy and allowed us to iterate faster on the UX.
Streaming is not optional for AI interfaces. Users will wait 3 seconds for a full response but will read a stream that takes 10 seconds. Perceived latency matters more than actual latency.
RAG with verified source material is the most reliable way to reduce hallucinations in educational content. Pure generation without retrieval is too risky for factual domains.
Adaptive learning requires careful UX design — students need to feel challenged but not overwhelmed. The IRT model gave us precise control over difficulty progression.