Case Study · GenAI Systems

KIA

AI Academic Guidance Platform

Eight GenAI modules running off one retrieval core. I built this as the AI Engineer on a seven person team at IIT Madras, and it won the Best Software Engineering Project award.

Best Software Engineering Project Award AI Engineer · Team of 7 Flask · Vue 3 · LangChain · Gemini · ChromaDB

Kia, walked through end to end

A short recorded walkthrough of all eight modules in the actual running app.

What Kia actually does

Every week of the course gave us new lecture videos, slides, and assignments. What was missing wasn't content. It was a way to actually use it: something that could summarise a lecture in seconds, quiz me on what I'd just watched, and tell me exactly what I got wrong and why that mattered.

8
GenAI Modules
7
Engineers on the Team
6
Build Milestones
Award
Best Software Engineering Project

The problem

Students on a fully online CS/DS degree lean hard on recorded lectures and self paced revision, with no live TA in the room. The LMS shows content. It doesn't reason about a student's actual gaps, doesn't grade a submission's real error, and doesn't turn twelve weeks of transcripts into something you can query minutes before an exam.

The brief

Build a working academic platform with real auth, a real database, a real deployed frontend, where every core interaction is backed by an LLM doing something specific. Retrieval grounded chat, structured summarisation, targeted quiz generation, code error diagnosis. GenAI as the engine, not the garnish.

My Role: AI Engineer

I owned the GenAI layer end to end. Prompt design and evaluation for every LLM backed module, the retrieval architecture behind the chatbot and quiz engines, and the reliability work that keeps structured LLM output from breaking a live Flask API.

  • Designed the retrieval pipeline: transcript chunking, embedding, and ChromaDB retrieval that grounds every chatbot and notes generation response in actual course material instead of the model's open domain knowledge.
  • Wrote the structured output prompts for six generation modules (summaries, notes, quizzes, error explanations) so Gemini's responses parse reliably into the Flask and Vue data contracts instead of breaking on malformed JSON.
  • Built the personalised feedback loop: scoring a quiz attempt and generating a targeted "what to review" report, not a generic percentage.
  • Wired up LangChain orchestration for the modules that needed multi step reasoning (lecture to summary to topic notes to practice questions), keeping context consistent across the chain.

One retrieval spine, eight reasoning surfaces

Every module reuses the same backbone. Course content gets chunked and embedded once, then retrieved on demand to ground whichever LLM task a student triggers. That kept the system coherent instead of eight disconnected prompts wired to eight buttons.

Content Layer
Lecture transcripts, slides, and assignment specs, chunked and normalised per week and topic.
Retrieval Layer
ChromaDB vector store and embedding pipeline. Every generation call retrieves grounded context before prompting.
Reasoning Layer
Gemini API via LangChain, with task specific prompt templates for chat, summarisation, quiz generation, and error analysis.
Backend
Flask, SQLAlchemy ORM, JWT and Google OAuth2
Frontend
Vue 3 CLI, Vue Router, Axios
GenAI
LangChain, Gemini API, ChromaDB, HuggingFace
Data
Flask Migrate, PDFKit for exports
Testing
Pytest, Thunderclient and Postman for API contracts
Deployment
Vercel frontend, documented local setup and seed data

All eight, the way I'd walk a reviewer through them

This is the actual breakdown I use in interviews. What each module takes in, what it does with an LLM, and what it hands back to the student.

01Retrieval Chat

Kia: Contextual Course Chatbot

My build. Retrieval and persistence layer

A persistent chatbot that answers course specific questions, grounded in this course's own lectures rather than generic knowledge. Ask what Gini impurity is and Kia doesn't just define it. It retrieves and cites the exact lecture numbers where the concept is taught, so the answer is something you can act on, not just something that sounds right.

Input
Student query and chat history
Retrieval
ChromaDB similarity search over embedded transcripts
Output
Grounded answer with specific lecture references

Naive RAG returns plausible but ungrounded answers when retrieval quality is poor. I tuned chunk size and retrieval depth against a set of test queries specifically to keep citations accurate rather than invented, and persisted chat history per session so context survives page navigation.

Kia's landing screen inside the course dashboard, offering weekly summaries and topic notes
Kia's entry point inside the course dashboard. A student can jump straight to a task or just start typing.
Kia chatbot answering a Gini impurity question with cited lecture references
Kia retrieving and citing lecture numbers 9.1, 9.3, and 9.4 for a Gini impurity query.
Kia explaining the Naive Bayes classifier with a structured, bolded breakdown
Structured explanation of Naive Bayes, broken into the parts a student actually needs to check.
Kia recommending specific video lectures on decision trees
Pointing to the exact lecture videos on decision trees instead of a generic answer.
02Video Summarizer

AI Video Summarizer

My build. Transcript to summary pipeline

Lecture videos run long, and re-watching one to find a single explanation is a bad use of revision time. This module takes a lecture's transcript and condenses it into a short, structured summary a student can read in under a minute, without losing the specific technical detail that would actually show up in an exam.

Input
Lecture video transcript
Prompt design
Chunked summarisation, keeping formulas and named concepts intact
Output
Condensed, structured lecture summary

The failure mode with long transcript summarisation is losing specific detail to generic paraphrase. I chunked longer transcripts before summarising each part, then merged the results, so a forty minute lecture doesn't collapse into three vague sentences.

03Week Summarizer

AI Week Summarizer

My build. Structured prompt design

One step up from a single lecture: generate a full week's summary across every lecture in that week, unified into one document. Week 7's Naive Bayes derivation, for instance, rendered with proper mathematical notation, straight from the raw lecture content rather than a manually written recap.

Input
Week number, 1 through 12
Prompt design
Template enforcing theorem blocks, derivations, and math notation
Output
Unified week summary, copyable and downloadable as PDF

A plain "summarise this" prompt gives inconsistent structure every time. I designed the template to force a consistent shape, theorem and derivation blocks rather than a loose paragraph, so the output is reliably exam usable.

Generated Week 7 summary covering Naive Bayes with formal theorem notation
Week level summary generator rendering Bayes' theorem correctly, including the conditional independence assumption.
04Topic Notes

AI Topic Notes Generator

My build. Structured prompt design

Search any course topic, for example Convolutional Neural Networks, and get structured notes back: comparison tables, code snippets, and key formulas, not a wall of prose. This is the module I reach for myself before an exam, so I was strict about the output being something worth reading twice.

Input
Free text topic string
Prompt design
Template enforcing tables, code blocks, and named architectures
Output
Formatted notes, copyable and downloadable as PDF
Generated notes on CNN architectures with a comparison table and code example
Topic notes generator. CNN architecture comparison table plus Keras code, generated on demand.
05Question Generation

AI Topic Questions Generator

My build. Prompt templates and answer key validation

On demand practice questions for any topic, including questions that embed runnable code a student has to trace through by hand, not just recall based options. Type "Backpropagation" and get five questions ranging from conceptual, like the purpose of backpropagation, to applied, like tracing a NumPy weight update line by line.

Input
Free text topic, autocompleted against the course taxonomy
Generation
Mixed conceptual and code tracing question types per prompt
Output
Structured question set with validated answer keys
Generated practice questions on backpropagation including a code-tracing question
Generated practice set on backpropagation, mixing conceptual recall with a code tracing question.
06Mock Assessment

AI Mock Quiz Generator

My build. Adaptive question generation

Full mock tests built for the actual assessment structure of the course, Quiz 1, Quiz 2, and the End Term, not generic multiple choice. Questions embed real, runnable code, so a student is graded on reading and tracing code, which is closer to what the real exam asks of them.

Input
Assessment type: Quiz 1, Quiz 2, or End Term
Generation
Adaptive question selection matched to that assessment's weight and format
Output
Full mock test with scoring
Mock Quiz 2 interface with a scikit-learn StandardScaler code question
Mock quiz engine. Questions embed real, runnable code, here a StandardScaler and Keras RNN question set.
07Feedback Loop

AI Topic Recommendations

My build. Scoring logic and targeted feedback generation

This is the module I'm most particular about, because it's where the system stops being a content generator and starts being a tutor. After a student finishes a mock quiz, Kia doesn't just return a score. It generates a topic by topic diagnostic: exactly which concepts to revisit, and why, based on which questions were missed.

Input
Submitted answers plus question topic tags
Reasoning
Maps wrong answers to specific sub topics and review guidance
Output
Score, per topic assessment, downloadable PDF report

A scoring engine that just says "5 out of 50" isn't useful to anyone. The harder problem was prompting the model to turn a raw answer sheet into specific, actionable study guidance, flagging something like "review StandardScaler's transformation formula" rather than "study data preprocessing," which meant carefully mapping question content to named library and concept references.

Generated performance report with score and specific named topics to review
The generated performance report, naming StandardScaler, return_sequences, and KFold instead of a bare percentage.
08Code Diagnosis

AI Error Explainer

My build. Error analysis prompt and code context passing

An in browser code editor lets students submit programming assignment solutions. When a submission fails its test cases, Explain Error sends the student's actual code plus the failure output to the LLM, which diagnoses the root cause in plain language and suggests the specific fix, rather than just echoing the stack trace.

Input
Submitted code and failed test case output
Reasoning
Root cause diagnosis, distinguishing logic errors from type errors
Output
Plain language explanation plus a concrete one line fix
# Student's submitted, broken code
def sum_of_array(arr):
    return sum(arr)

arr = list(map(str, input().strip().split()))  # bug: str, not int
result = sum_of_array(arr)

What Kia returned: the program crashed because it tried to add up strings instead of numbers. sum() needs integers, but the input was read as a list of strings through map(str, ...). The fix is to change it to map(int, ...). A root cause explanation and a one line fix, not a raw traceback.

AI error analysis explaining a type mismatch bug in submitted Python code
Live error diagnosis on a real submission. Type mismatch identified and fixed in one suggested line.

What's actually running under the eight modules

A conventional Flask and Vue split, on purpose. The interesting engineering is in the GenAI orchestration layer, not the framework choice.

Frontend

  • Vue 3 CLI
  • Vue Router
  • VueMarkdown
  • JavaScript, HTML, CSS
  • Bootstrap
  • Axios
  • ESLint

Backend

  • Flask
  • SQLAlchemy ORM
  • JWT Authentication
  • Werkzeug Security
  • Google OAuth2 API
  • PDFKit
  • Pytest

GenAI

  • LangChain
  • Google Gemini API
  • HuggingFace
  • ChromaDB

Tooling

  • GitHub
  • Jira
  • Figma
  • PlantUML
  • Swagger Editor
  • Thunderclient

Shipped like production software, not a course demo

Auth
JWT based session auth with Google OAuth2 as an alternate login path, backed by Werkzeug password hashing. Not a toy login form.
Data layer
SQLAlchemy models with Flask Migrate version controlled schema migrations, plus a seed data script for reproducible local environments.
Testing
A dedicated Pytest suite and Thunderclient and Postman collections used to validate API contracts between the Flask backend and Vue frontend before integration.
Process
Six formal build milestones, tracked scrum meetings with minutes recorded, and structured client meeting documentation. Run like a real client engagement, not a solo assignment.
Exports
Every generated artifact, notes, summaries, quiz reports, is downloadable as a PDF via PDFKit, so generated content survives outside the session.

Best Software Engineering Project, IIT Madras

Certificate of Appreciation. Best Course Project for Software Engineering.

Awarded by the IIT Madras BS Degree Program for the Software Engineering course project, Jan 2025 term, across the full cohort of student teams building competing systems for the same brief.

As AI Engineer, my specific contribution, the RAG grounded chatbot, the six generation modules, and the personalised quiz feedback engine, was the technical core the evaluators pointed to as what set this submission apart from a standard academic portal.

Isolated prompts and integrated AI systems are different disciplines

Grounding beats generation

A model that answers fluently but ungrounded is worse than one that says less but cites its source. Retrieval became the trust layer for the whole system.

Structured prompting is an API contract

Every generation prompt had to produce output a Flask endpoint and Vue component could parse reliably. Prompt design became a systems integration problem, not a wording exercise.

Feedback needs to be specific to matter

The gap between "you scored 5 out of 50" and "review StandardScaler's transformation formula" is the whole value of an AI tutor. Specificity was the goal, not a nice to have.

Building the reasoning layer, not just the interface

That's the thread across my GenAI, RAG, and speech AI work. Happy to walk through the retrieval architecture, the prompt evaluation process, or any part of this system in more depth.