Skip to content
All work
Startup · Jan – Aug 2024
Repeto logo

Repeto

AI study app: upload slides or papers, then summarize, chat, quiz and diagram them

Role
Co-founder, built most of the product
When
Jan – Aug 2024
Status
Acquired · #3 Product of the Day
Highlight
3K users in its first 2 weeks
0:00 / 1:39

Overview

What it is

Repeto lets a student upload a PDF, PPTX or DOCX and study it with AI. The app streams a summary and chat answers token by token, and generates quizzes, flashcards and Mermaid diagrams in background jobs. It was paid by subscription with a free trial and an affiliate programme.

I built most of the product: the Django REST API, the WebSocket streaming path, the Celery job pipeline, document ingestion and per-user retrieval, Stripe billing, and most of the Next.js frontend.

My co-founder wrote the prompts, the summarisation chains and the model fine-tuning.

Repeto reached 3,000 users within two weeks of launch, got 212 upvotes and #3 Product of the Day on Product Hunt, and was acquired.

Why it’s interesting

  • A LangChain callback buffers model tokens and pushes them into a Django Channels group, so the browser renders the answer while the chain is still running.
  • One WebSocket per user doubles as the result channel for Celery jobs: topics, quizzes, flashcards, diagrams and starter questions arrive as typed messages.
  • Each user gets their own Chroma collection, and every chunk carries document, page and paragraph metadata so retrieval can be filtered to one document.
  • A history-aware retriever rewrites follow-up questions into standalone search queries before they hit the vector store.
  • Uploads are converted to PDF, capped at 200 pages and embedded. If text extraction fails, the record is rolled back and the failure is logged for follow-up.
3K
users within 2 weeks of launch
212
upvotes on Product Hunt
#3
Product of the Day
Acquired
after launch

Architecture

How it fits together

BrowserNext.js 14, ReduxWS consumerChannels, Redis layerREST APIDjango, DRFCelery workersquiz, topics, diagramsChromaDBcollection per userMySQL26 modelsLLM providersOpenAI via LangChainREST, JWTstreamed chatretrieveenqueuetoken chunksgenerateresultscontextjob resultsrealtime push
Chat runs inside the API request and streams tokens to the user's WebSocket, while Celery jobs are enqueued by the API, call the LLM, store results and push them back over the same socket. data external sync call async / webhookhover a box to trace it

Try it

From lecture slides to a quiz

A student uploads their slides, Repeto generates a quiz from them, and they practise. This is an animation of that flow.

Screens

A closer look

Dashboard and library. Recent documents and practice sets, a folder tree, and charts for score and daily activity.

1 / 8

Tap a screenshot to enlarge it.

A question is asked and the answer arrives as chunks over the WebSocket, flushed once the buffer passes 15 characters.

Features

Everything it does

Library

  • Multi-format upload — PDF, PPTX and DOCX; Office files are converted to PDF with unoconv.
  • Page cap — Documents are truncated at 200 pages before embedding.
  • Folder tree — Drag-and-drop folders, rename and delete.
  • Dashboard — Recent activity, practice-score chart and a 10-day activity chart.

Chat

  • Streamed summary — Summarize the document on demand; the answer streams into the chat.
  • Retrieval chat — Free-form questions over the uploaded document, with memory of the last 20 messages.
  • Starter questions — Suggested questions are generated after upload and pushed to the page.
  • Per-answer actions — Simplify an answer, visualize it as a diagram, or generate follow-up questions.
  • Explain a screenshot — Draw a region of the PDF and send it to a vision model.

Reader

  • PDF reader beside chat — Slides and conversation side by side.
  • Selection menu — Select text to summarize, clarify it, or save it to notes.
  • Notes editor — A block editor per user, fed from the selection menu.

Practice

  • Topic extraction — Topics are extracted per document in a background job.
  • Quizzes — 5 to 30 questions: multiple choice, true or false, and short answer with keyword matching.
  • Flashcards — Generated from topics, with No, Almost or Yes self-grading.
  • Score history — Attempts are stored and charted per document and overall.

Billing and growth

  • Stripe subscription — Monthly or annual Checkout with a trial, promo codes and automatic tax.
  • Affiliate referral — The referral id travels in Checkout metadata.
  • Cancel flow — Cancellation records a reason and cancels at Stripe.
  • Lifecycle email — Reminder and feedback emails sent by cron through Brevo.

Tech stack

What it's built with, and why

Frontend

Next.js 14 + React 18
App router pages for the library, chat, practice and notes.
Redux Toolkit
Holds user and document state.
Tailwind
Styling for the app and marketing pages.
react-pdf
PDF reader beside the chat.
Mermaid 10
Renders generated diagrams inside an iframe.

Backend

Django 5 + DRF
REST API for auth, documents, chat, practice and payments.
Django Channels
Per-user WebSocket consumer that receives streamed tokens and job results.
Celery
Background topic, quiz, flashcard, diagram and starter-question jobs.

Data

MySQL
26 models over 48 migrations.
ChromaDB
Paragraph-level vectors in one collection per user.
Redis
Channels layer and Celery broker.

AI

LangChain
Chains, history-aware retriever and the streaming callback handler.
OpenAI
Chat, embeddings, GPT-4 Vision for screenshot questions.

Payments & integrations

Stripe
Checkout subscription with trial, promo codes and webhook role upgrade.
Brevo
Reminder and feedback emails.
PostHog and Mixpanel
Product analytics.
Tolt
Affiliate portal.