Skip to content

AI / Generative AI / Full Stack

LearnForge

LearnForge is my most ambitious build so far: a full tutoring platform where a student uploads their own course content and gets back grounded explanations, generated quizzes and spaced-repetition flashcards. It pairs a Next.js front end with a Django REST Framework backend and a retrieval layer over the student's own documents.

Next.jsDjango REST FrameworkPostgreSQLOpenAILangChainChromaDBWhisperJWT

Repository not public — happy to walk through the code on a call

LearnForge — schematic overview diagram
Schematic overview — a diagram, not a product screenshot
01Overview

What it is.

Most study tools either give you generic content or make you write your own questions. LearnForge starts from the material a student already has — a course PDF, a set of lecture notes, a recorded lecture — and builds the study loop around that specific content.

The platform handles the whole cycle: ingest and chunk the source material, embed it into a vector store, answer questions with citations back to the source, generate quizzes at a chosen difficulty, and track which topics a learner keeps getting wrong.

02 — The problem

A student revising from a 200-page course handbook has no fast way to check understanding. Generic AI chat answers confidently but drifts away from the syllabus, and hand-writing practice questions is slow enough that most people skip it.

03 — The approach

Ground every answer in the learner's own uploaded material using retrieval-augmented generation, then reuse the same retrieved context to generate quizzes and flashcards — so practice questions and explanations both come from the same source of truth.

04Key features

What it actually does.

Document, video and audio ingestion

PDFs and notes are parsed and chunked directly; recorded lectures are transcribed with Whisper first so spoken content joins the same index.

Grounded AI tutoring

Questions are answered from retrieved chunks of the learner's material, with the source passage shown alongside the answer.

AI-generated quizzes

Multiple-choice sets are generated per topic and difficulty, with explanations attached to each answer.

Flashcards and spaced review

Key concepts are turned into flashcards so recall practice sits next to the reading material.

Progress tracking

Quiz results are stored per topic so weak areas surface instead of being buried in a single overall score.

JWT authentication

Token-based auth separates each learner's uploads, chat history and progress from everyone else's.

05Architecture

How the pieces fit together.

LearnForge — system architecture diagram
Ingestion, retrieval and generation paths. Diagram, not a screenshot.
  1. 01

    Next.js client

    Course workspace, tutor chat, quiz runner and progress views. Talks to the API over authenticated fetch calls.

  2. 02

    Django REST Framework API

    Auth, course and document CRUD, quiz lifecycle and progress endpoints. The single place business rules live.

  3. 03

    Ingestion pipeline

    Extract → transcribe (Whisper, for media) → chunk → embed. Runs behind the API so uploads do not block the request.

  4. 04

    ChromaDB vector store

    Holds embeddings per course so retrieval is scoped to the material a learner actually uploaded.

  5. 05

    LangChain + OpenAI

    Orchestrates retrieval, prompt assembly and generation for tutoring answers, quizzes and flashcards.

  6. 06

    PostgreSQL

    Relational store for users, courses, documents, quiz attempts and progress history.

06Technology

The stack.

Chosen for the problem, not for the resume.

Frontend
Next.jsReactTypeScript
Backend
DjangoDjango REST FrameworkPythonJWT
AI
OpenAILangChainChromaDBWhisper
Data
PostgreSQLEmbeddingsVector search
07AI & data workflow

From input to output.

The sequence a single request travels through.

  1. 01

    Ingest

    Documents are parsed and media is transcribed so every source ends up as plain text.

  2. 02

    Chunk & embed

    Text is split into overlapping chunks and embedded into ChromaDB, namespaced per course.

  3. 03

    Retrieve

    A learner's question is embedded and matched against that course's chunks by semantic similarity.

  4. 04

    Generate

    Retrieved passages are assembled into the prompt so the model answers from the material rather than memory.

  5. 05

    Assess

    The same context generates quiz items; attempts are scored and written back as per-topic progress.

08What I learned

The part that stuck.

Student portfolio, so this section is the point — here is what this build actually taught me.

  • 01

    Chunking strategy changes answer quality more than prompt wording does. Overlapping chunks sized around a paragraph gave far better retrieval than large page-sized splits.

  • 02

    Keeping the vector store namespaced per course avoided the most common RAG failure I hit early on — answers leaking in from an unrelated document.

  • 03

    Django REST Framework's serializers pushed me to define the API contract properly before writing the UI, which saved a lot of rework on the Next.js side.

  • 04

    Transcription is slow enough that it has to be treated as background work; doing it inside the upload request made the interface feel broken.

Next project

AI Quiz & MCQ Generator

A full-stack app that turns an uploaded document — or a live web search — into a graded multiple-choice quiz.

Work together

Have a project idea?

I'm open to freelance projects, collaborations, internships, and opportunities where I can contribute while continuing to grow.

Usually replies within a day · Lahore, Pakistan · PKT (UTC+5)

Chat on WhatsApp