← All projects
TechRAQ · 2026

Course builder for an EdTech platform

Turns a company's raw documents into complete training courses: lessons, slides, quizzes and voiceovers. Each client's data stays fully separate. Cut manual authoring time by about 70%.

Role
Sole Backend & AI Systems Architect (at TechRAQ)
Built with
Python, FastAPI, PostgreSQL, Redis, Qdrant, ChromaDB, Anthropic Claude, OpenAI, Mistral, Docker

Results

  • 70%Authoring Time ReductionRaw enterprise docs to SCORM-compliant curriculum
  • 99.9%Gateway AvailabilityAutomated failover across Claude, OpenAI & Mistral
  • 0Cross-Tenant LeaksStrict logical isolation across PG, Redis & Qdrant
  • ≤ 3Bounded Retry BudgetDeterministic Pydantic + Ragas pedagogical rubric loop

By checkpointing each DAG node in Redis/PostgreSQL and enforcing a strict retry cap (≤3) with targeted section-level re-prompting rather than regenerating entire courses, median token spend per published SCORM package dropped by 52% while maintaining 99.9% uptime across provider rate limits.

The problem

Enterprise instructional designers spent dozens of hours manually authoring outlines, slides, assessments, and SCORM packages. Initial monolithic synchronous LLM wrappers suffered from HTTP request timeouts, cross-tenant state collisions, and structural/pedagogical hallucinations.

In more detail

End-to-end multi-modal curriculum engine converting raw enterprise knowledge bases into lesson plans, slide decks, quizzes, voiceovers, and compliant SCORM packages—slashing manual instructional authoring time by 70%.

How it works

┌──────────────────────────────────────────────────────────────────────────────┐
│ CLIENT / LMS REQUEST  ──►  FastAPI API Gateway (JWT + tenant_id Context)     │
└──────────────────────────────────────┬───────────────────────────────────────┘
                                       │
         ┌─────────────────────────────┼─────────────────────────────┐
         ▼                             ▼                             ▼
┌─────────────────────┐     ┌─────────────────────┐     ┌─────────────────────┐
│ PostgreSQL Schema   │     │ Redis Job & State   │     │ Qdrant Namespace    │
│ Scope: tenant_id    │     │ Queue: tenant:{id}  │     │ Filter: tenant_id   │
└─────────────────────┘     └──────────┬──────────┘     └──────────┬──────────┘
                                       │                           │
                                       ▼                           ▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ ASYNC MULTI-STAGE GENERATION DAG (Worker Pool + Checkpoint Recovery)         │
│                                                                              │
│  [1. Curriculum Outline] ──► [2. Slide Deck Synthesis] ──► [3. Quiz Matrix]  │
│                                                                  │           │
│  [5. Compliant SCORM Packager] ◄── [4. Multi-Modal TTS Audio] ◄──┘           │
└──────────────────────────────────────┬───────────────────────────────────────┘
                                       │
                                       ▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ BOUNDED SELF-CORRECTING PEDAGOGICAL GRADER (Max Retries = 3)                 │
│ • Stage A: Deterministic Pydantic / JSON Schema Structural Validator         │
│ • Stage B: LLM-as-a-Judge Rubric (Ragas Faithfulness + Bloom's Taxonomy)     │
│ • Gateway: Multi-Provider Router (Claude 3.5 Sonnet ⇄ GPT-4o ⇄ Mistral)      │
└──────────────────────────────────────────────────────────────────────────────┘

Key decisions

  1. Logical Multi-Tenancy Provisioned at Onboarding

    Enforced strict tenant_id isolation across PostgreSQL relational schemas, Redis session/job keys, and Qdrant/ChromaDB vector store namespaces so organization knowledge bases and generated artifacts never bleed across tenant boundaries.

  2. Asynchronous Multi-Stage Generation DAG

    Decoupled long-running multi-modal synthesis (Outline → Slides → Quizzes → TTS Voiceover → SCORM Archive) from the FastAPI event loop using Redis-backed background worker queues and granular stage state checkpointing.

  3. Bounded Self-Correcting Grader Loop

    Implemented deterministic Pydantic/JSON Schema validators paired with LLM-as-a-Judge pedagogical rubrics (Ragas-style faithfulness and Bloom's taxonomy alignment checks) with capped retry budgets to eliminate runaway token loops.

One request, step by step

Further reading