Back to work

TrainMeLab

TrainMeLab (eMasterHub) is an AI-powered course authoring platform that turns raw reference material — PDFs, existing training documents, source content — into structured, publish-ready educational courses. It automates the heaviest parts of instructional design: document structuring, module/lesson breakdown, quiz generation, and content formatting, while giving creators full editorial control. Built for the Australian health and disability-support sector, with early adoption in NDIS and professional health training programs.

TrainMeLab

The Product

TrainMeLab lets creators upload a reference document — a policy manual, a clinical training guide, source material of any length or formatting quality — and generates a complete course from it: modules, lessons, learning objectives, case studies, quizzes, and formatted content blocks (definitions, key takeaways, Q&A, summaries), all traceable back to the source. Courses move through a full lifecycle from processing to outline to draft to published, with admin and creator roles managing the workflow.

The product is live, with a working end-to-end generation pipeline processing real reference documents from health and NDIS training providers.

My Role

I work across the full stack — FastAPI/PostgreSQL backend and Next.js/React frontend — and own both feature delivery and the estimation work that translates engineering complexity into timelines and cost for the client.

Over the course of the engagement I built:

  • The reference-material ingestion pipeline, from S3 upload through LLM structuring to coverage validation
  • The course/module/lesson data model and outline generation flow
  • The module and content-block editor used to review and refine generated courses
  • Quiz generation and auth/role management (creator vs. admin)

Specific surfaces I owned: reference document upload and processing, course outline generation, module/lesson/content-block editing, quiz configuration, and authentication and role-based access.

The Hard Problems

Document Structuring at Scale

Turning an arbitrary, inconsistently-formatted PDF into a clean module/lesson hierarchy is the core hard problem of the product — everything downstream (outline, lessons, quizzes) depends on getting this right. The original architecture split large documents into ~20K-character windows and ran an independent LLM call per window. It worked until it didn't: with no visibility across window boundaries, the model could correctly tag "Module 1" and "Module 2" in one window and then mistag "Module 3" as a lesson in the next, silently collapsing course structure.

The fix was to remove windowing entirely: a single LLM call over the full document, leveraging a long-context model, that normalizes whatever heading convention the source uses — "Part 1", numbered sections, bare headings, anything — into one fixed convention the deterministic downstream parser already expects. That eliminated the entire class of cross-window mistagging bugs, since there's no longer a boundary for classification to be inconsistent across.

Guaranteeing Content Coverage

A structuring pipeline that silently drops or summarizes source content is worse than one that's slow — for training material, especially in health and compliance contexts, missing content is a correctness failure, not a quality one. The system runs a coverage check after structuring, comparing generated output against source line coverage, and retries with the specific missing lines named directly in the prompt if a document falls under threshold. Getting the threshold right mattered: too strict and legitimate reformatting triggers spurious retries; too loose and real content loss slips through.

Next.jsPythonClaude SDKOpenAPI SDKAWSShadCNFigma

Have something to build?

Open to freelance contracts and full-time roles