A curriculum-locked AI assessment platform that grew into a full LMS
DASH Language School had two problems. Creating assessments manually was slow and inconsistent — a recurring drain on teacher time with no guarantee of quality or coverage. And students preparing for exams were turning to generic AI tools that had no idea what was actually in their curriculum.
When I came in, the brief was narrow: fix the AI problem. Build something that locks question generation to the school's own materials. But talking through it with the CEO made the fuller picture clear — the school had no centralized place for students to access course materials, track their progress, or practise between assessments. Solving the AI problem inside that gap meant building around it too.
So DASH Portal became a full LMS with AI assessment at its core.
The platform is built across three portals, each serving a key user category: Admin portal, Instructor portal, and Student portal
Student Portal — every course's materials in one place, curriculum-locked assessments on demand, and a shared course question pool that keeps growing as students test. Student Portal is mobile-friendly and available anytime. Students can also retake their own assessments from scratch.
Teacher Portal — upload materials, get AI-generated assessments automatically, track student performance and spot knowledge gaps.
Admin Portal — manage users, courses, and teacher assignments from one place, with every uploaded file secured behind presigned URLs through Cloudflare R2.
The AI architecture was a deliberate departure from the default RAG playbook — chunk documents, embed everything, store in a vector DB, run similarity search. But DASH's content structure made that unnecessary. Courses were already organized into sections, each covering a discrete concept. And since students are enrolled in specific courses, there was no search problem — we always knew exactly what content was relevant.
It was a selection problem, not a retrieval problem.
So the pipeline stops at chunking. At assessment time, N sections are randomly selected from the course, injected directly into the LLM context, and fresh questions are generated from those exact chunks. Every student gets a different test. Curriculum-locked. No embeddings, no vector DB, no reindexing pipeline — and assessment quality identical to the full RAG approach, with fairer curriculum coverage from true randomness.
Getting to that chunked text is its own problem, and it required a deliberate architectural design of its own. Every uploaded file — PDF, PPTX, DOCX, audio, or video — has to become plain text before the AI can use it; a binary file can't be sampled into a prompt. Office documents convert to PDF first, scanned pages run through a cascading OCR pipeline, and audio/video lectures are transcribed automatically — each of these built on stacked free-tier services rather than one paid API, so ingestion scales with usage at effectively zero processing cost. Every format lands as the same clean, chunked text either way.
Large files are also streamed and extracted in small batches rather than loaded whole into memory, with only one file processing at a time and others queued. That keeps the platform responsive under memory constraints and means a single large upload never stalls the rest of the system.
I wrote about this architecture decision in detail in a LinkedIn post - https://shorturl.at/qX9qp
DASH moved from fully manual assessment creation to AI-generated, curriculum-locked assessments.
The shared question pool compounds over time — every assessment taken adds to the bank available to future students on the same course, making the platform more valuable the more it's used.