-
-
Citexa Landing Page
-
Citexa "How It Works" Section
-
Citexa Settings Page
-
Citexa Course Library Page
-
Citexa Course Detail Page
-
Citexa Video Source Viewer Page
-
Citexa Study Workspace Page
-
Citexa Practice Quiz Page
-
Citexa Analytics Dashboard Page
-
Citexa Course Map Page
-
Citexa Revision Page
-
Citexa Exam Lab Page
-
Citexa Course Glossary Page
-
Citexa Past-Paper Priority Guide Page
-
Citexa Daily Goals Page
Inspiration
Students now lean on AI chatbots to study, but those tools answer from general knowledge. They don't know your lecture, your textbook or your slides, and they can't show where an answer came from. A confident wrong answer is worse than no answer when you're preparing for an exam.
We wanted a study companion that only speaks from the student's own material, proves every claim by pointing to the exact page, slide or video moment, and says "this isn't covered" instead of guessing. We also wanted it to notice what the student actually knows and adapt, instead of serving the same generic quiz to everyone.
What it does
Citexa turns lecture videos, PDFs, PowerPoint decks and YouTube links into one searchable, multimodal knowledge base.
- Multimodal ingestion: PDFs and slides are parsed page by page, videos are transcribed with timestamps, and YouTube links use the video's own captions. A vision model captions figures and diagrams so they become searchable too. Every piece of knowledge stores its exact location: a page, a slide, or a start and end second.
- Source-grounded tutor: every answer carries numbered citations. Clicking one opens the real page or slide image, or plays the video at that second. If the course material doesn't support an answer, Citexa refuses and says what the course does cover. Outside knowledge is available only on request, in a separate block clearly labeled "not source-backed".
- Adaptive quizzes: multiple-choice, short-answer and numerical questions, tagged by topic, source and difficulty. Wrong options are tagged with the misconception they represent, short answers get partial credit with cited feedback, and repeated questions are filtered out.
- Learner model: Bayesian Knowledge Tracing plus a forgetting curve tracks mastery per concept. A diagnostic quiz handles new students, and chat behaviour (for example asking the same thing twice) counts as evidence.
- Study tools: a course concept map with prerequisites, flashcards for weak topics, and an exam planner that schedules revision.
- Accessibility: answers in English, Hindi or Hinglish, with voice input and read-aloud through the browser's speech APIs.
How we built it
Ingestion pipeline
An upload queues a background job: extract text per page, slide or transcript window; render page images; caption figures with a vision model; chunk the text; then use an LLM to build topics, concepts and prerequisite edges across sources. Each unit is tagged to concepts and embedded into PostgreSQL with pgvector.
Grounding
Retrieval combines vector similarity with keyword search, limited to the learner's own ready sources. The model must return structured JSON, {answerable, answer, citationUnitIds}, using only the supplied units. The server then intersects the cited IDs with the units actually retrieved. An answer with no valid citation is thrown away and replaced with a refusal, so the model can't invent a source.
Quiz verification
After one model generates a question, a second, different model independently solves it, and any question where the two disagree is dropped. Numerical answers are checked with a math-expression evaluator with tolerance.
Learner model
For each concept we track \(P(L)\), the probability the student knows it. After an answer, the posterior depends on the slip rate \(s\) and the guess rate \(g\):
$$ P(L \mid \text{correct}) = \frac{P(L)\,(1-s)}{P(L)\,(1-s) + (1-P(L))\,g} $$
$$ P(L \mid \text{wrong}) = \frac{P(L)\,s}{P(L)\,s + (1-P(L))\,(1-g)} $$
Then a learning step is applied, where \(t\) is the learn rate:
$$ P(L)' = P(L) + (1 - P(L))\,t $$
The guess rate depends on the question type: higher for multiple choice, lower for numerical. Memory decay is modelled as \(R(t) = e^{-t/S}\), where the stability \(S\) grows after successes and shrinks after misses. A review is scheduled when predicted retention falls to about 80%. Success on a concept also nudges its prerequisites upward, and failure nudges dependent concepts downward.
Question priority combines both signals:
$$ \text{priority} = (1 - P(L)) + 0.5\,(1 - R) + 0.25\,\text{(exploration bonus)} $$
Tech stack
| Layer | Tools |
|---|---|
| Front end | React, Vite, Tailwind CSS |
| API | Express, TypeScript, Drizzle ORM |
| Database | PostgreSQL + pgvector (Neon) |
| AI | Groq-hosted Llama 3.3 70B (tutor, structure, assessment), Llama 3.1 8B (validator), Whisper large-v3 (transcription), a vision model for figures |
| Processing | Python (PyMuPDF, python-pptx, yt-dlp), ffmpeg, LibreOffice |
| Auth and hosting | Clerk, Docker on Render |
Evaluation
The repo includes an evaluation harness covering RAGAS metrics (faithfulness, answer relevancy, context precision and recall), citation hit rate, refusal accuracy and false-refusal rate, simulated students comparing adaptive and random quizzing, and an answer-key audit.
Challenges we ran into
- Rate limits on a free API tier. Vision and transcription calls hit Groq's per-minute limits. We added retries that wait exactly as long as Groq asks, send only pages that actually contain figures to the vision model, and skip vision calls for a while after the quota is exhausted.
- Fragile AI output. One bad JSON response used to fail a whole source even though its study units were saved. Topic building now retries a failed batch as two smaller batches, then skips it, and the source still becomes usable with an honest note that the topic map is partial.
- YouTube blocking. Cloud servers are often blocked from downloading videos, so we read the video's captions first and fall back to download only if needed. Uploading the MP4 always works.
- Keeping the tutor honest. The hard part wasn't making it answer, it was making it refuse correctly, and still handle follow-ups like "explain simpler" without a false refusal.
- Hindi and Hinglish retrieval. Default search is keyword plus lightweight hash embeddings. We added an optional local multilingual embedding model so Hindi questions can find English sources.
What we learned
Grounding has to be enforced by the server, not just requested in the prompt. Verifying generated quiz answers with a second model catches many bad keys, though two models can still share errors. Showing the real source next to every answer makes a tutor far more trustworthy than a fluent paragraph.
Honest limitations
- Cross-model verification reduces but doesn't remove correlated errors.
- The support check is model-based, so rare false supports are possible.
- Simulated-student results depend on the simulator's assumptions and aren't evidence of real learning gains.
- Speech features work best in Chrome and Edge.
What's next
A larger evaluation on real course material, and testing with real students.
Try it
Code: https://github.com/adeeba14-07/Citexa
Live app: https://citexa-j5h2.onrender.com
Built With
- clerk
- docker
- drizzle-orm
- express.js
- ffmpeg
- groq
- libreoffice
- llama-3
- neon
- node.js
- pgvector
- postgresql
- pymupdf
- python
- react
- render
- tailwindcss
- typescript
- vite
- whisper
- yt-dlp
Log in or sign up for Devpost to join the conversation.