03 / Real-time
RITPulse
Quizzes, polls and Q&A for a whole lecture hall, live on every phone.
RIT Pulse lets a teacher run a live quiz, poll or Q&A with a room full of students. They join with a six-digit code, and the server keeps every phone on the same countdown, even if the host's browser closes.
- Role
- Sole developer
- Built
- August 2026
- Capacity
- Up to 1,000 players a session
- Stack
- Next.js 16, Convex, Better Auth, Turborepo
Case file

01
The idea
Ask the hall, watch it answer
A teacher opens a session, students join from their phones with a six-digit code and a nickname, and answers land on the projector as they come in. There are two modes: a scored quiz and an open Q&A floor.
- Seven question types: four graded ones, plus polls, word clouds and rating scales.
- The host can add a question mid-session, remove a player, or open, close and spotlight the Q&A floor.
- Guests reconnect with a saved token, so a dropped phone doesn't lose its score.
- AI can draft questions through Gemini, OpenRouter or a local Ollama model, rate-limited to 20 calls per 10 minutes.
02
The hard part
Every phone on the same deadline
A countdown that runs in the host's browser dies when that tab closes, and every phone's clock is slightly wrong. So the server owns time.
- Each question stores an absolute end time. A Convex scheduled job closes it at the deadline plus a 1.2-second grace, whether or not the host is still connected.
- Stale jobs check they still own the question before they act, so a skipped or restarted question can't be closed twice.
- Phones sync to a /clock endpoint: five samples, keep the fastest round trip, re-sync every 60 seconds and whenever the tab comes back into view.
03
Designed for a full hall
The read that grows with the square of the room
Each player's live view re-runs whenever a document it read changes, and every answer changes one player's row. With N players each re-reading all N players, a 300-player room costs about 300 × 300 = 90,000 reads per question.
- While a question is open, the player view skips the roster and reads a stored participant count instead.
- Answer keys stay on the server until the reveal, answer timing is checked on the server, and speed scoring falls from full points to half at the buzzer.
- Questions are copied into the session when it starts, so editing the quiz mid-run can't change what players see.
- tables
- 7tables
- pages
- 8pages
Built with
- Next.js 16
- React 19
- Convex
- Better Auth
- Tailwind CSS 4
- Turborepo
- TypeScript
- Gemini
next case file
HackFinity 3.0
I co-organised the hackathon, then built the app that judged it.
Read it