Résumé
All work
← All work

EdTech · 2025

Swift Prep

An AI study app that turns a student's syllabus into study material, flashcards, quizzes and presentations.

My role
Full-stack developer
Team
Three developers
When
March to November 2025

Overview

Swift Prep is an AI study app for students who start late. It turns a syllabus into study material, flashcards, quizzes and presentations, and tracks progress. Three developers built it, with 25 pages and 27 API routes; I built pages and API routes across it from March to November 2025.

The problem

Its own line is "because your exam doesn't care that you just started". A student who starts late has a syllabus, a deadline and no plan. Swift Prep turns the syllabus into material shaped to how that student learns, then gives them ways to practise and see their progress.

Screens

The landing page hero.
How it works: a timeline of steps from sign-up to exam day.
The landing page's features section.

What I built

  • The admin dashboard: users, issues and analytics, and the admin-only API route that gathers its data on the server.
  • The signed-in app: the layout every signed-in page shares, with its sidebar and the bottom navigation on phones, and much of the flashcards, quiz and profile pages.
  • The first AI study tools: the first roadmap and flashcard generation APIs on Gemini, and the first roadmap, dashboard, progress and assignment pages.
  • The landing page: the hero, features, how it works, FAQ and call to action.

Key features

  • Google sign-in, and a setup that records grade, subjects, technical level and preferred formats.
  • Study material and syllabi generated from what the student uploads.
  • Flashcards and quizzes, generated and checked against schemas.
  • Assignments: reports, code, presentations with images, exported as PDF or Google Slides.
  • Google Classroom connection.
  • Progress tracking.
  • An MCP endpoint for Claude or Cursor, with API keys the student creates and can revoke.
  • An admin dashboard for users, issues and analytics.

Decisions and challenges

  • One layout for every signed-in page. I put the sidebar, and later the phone's bottom navigation, in a single shared layout, so a new page gets navigation by being placed in the group, with nothing to repeat.
  • The admin view is built on the server. The dashboard's data comes from one admin-only route that checks the user is an admin, reads profiles, issues and auth users with the service role, and groups issues by status, so no admin data or key ever reaches a student's browser.
  • Schemas on the model's output. The flashcard and quiz routes were reworked to validate what Gemini returns, because a model's JSON is not guaranteed to match the shape the page renders.
  • Keys you can see once. API keys for the MCP endpoint are shown once and stored as hashes, so a leaked database does not leak working keys.

System architecture

The Next.js app serves the pages and 27 API routes. Supabase handles Google sign-in and stores the data; the AI routes call Gemini through one shared helper, with Zod schemas on what goes in and what comes out; and an MCP route lets Claude or Cursor read a student's data with a key the student created.

Results

  • The app is live at swift-prep.vercel.app.

Built with

Next.js 15 and React 19 · TypeScript and Zod · Supabase · Gemini through the Vercel AI SDK · Upstash Redis · Google Slides and Classroom APIs, and pptxgenjs · react-markdown, KaTeX, Mermaid and React Flow · Serwist · Tailwind CSS, shadcn/ui and Framer Motion · Model Context Protocol · Sentry