All work

AI web app · Web (Streamlit)

StudyMate AI

Upload lecture notes, generate quizzes, and get theory answers graded.

  • 5AI providers, including an offline mock
  • 3document formats (PDF, DOCX, PPTX)
  • 4question types, including AI-graded theory
  • 0API keys needed for a first run

The problem

Students revise from long lecture PDFs and slide decks. Writing practice questions by hand is slow, and generic AI chat tools make up questions that are not in the material.

What I built

StudyMate AI follows one clear journey: Upload, Generate, Take Quiz, Results.

  • Upload a PDF, Word or PowerPoint file. StudyMate extracts the text and turns it into clean study notes.
  • Generate multiple-choice, true/false, short-answer, theory or mixed quizzes. Each question is labelled with the page, slide or section it came from.
  • Theory questions are open-ended. An AI grader marks them against a model answer and key points and returns feedback.
  • Download notes, quizzes, answer keys and results. Attempts are stored locally in SQLite.

How it works

  • Any AI provider. A small provider interface supports local Ollama, Gemini, Groq and Hugging Face, all set through environment variables. A mock provider makes a fresh deploy work end to end with no keys and no external calls.
  • Fallback when quotas run out. With Gemini, it tries the chosen model first, then cycles through fallback models when one is busy or out of quota, while tracking its own request budget locally.
  • Validation before display. Model output is validated. Broken questions are dropped and missing explanations filled in, so one bad field never blocks a quiz.
  • Privacy by default. Local processing is the default. Cloud providers only see the text when you select them.

Testing

Eleven pytest modules cover document loading and conversion, AI providers, quiz validation, the database, exports and a deploy scenario, using the mock provider and generated temporary documents, so the tests never call real AI APIs.

Known limits

Scanned PDFs need OCR, which is not supported yet. Short answers are marked by normalised exact matching, not semantic grading.