Why I hit a box for 36 hours

Lectures are the one place captions would help the most people at once, and the one place that has none. The fix today is a phone propped on the desk running a transcription app. It helps one student, dies at 40%, and nobody gives up their phone for ninety minutes anyway.

So: one box for the whole room. You slap it. Everyone reads.

What it does

Slap it. Shake the box (or hit the big orange button). It wakes up, joins Wi-Fi, and throws a QR code on its screen. The mascot gets slapped on boot. Non-negotiable.

Read it. Everyone who scans the code gets live captions on their own laptop or phone, in their own language. English, Vietnamese, Japanese. The prof just talks.

Ace it. When the lecture ends, Slap turns what it heard into:

  • a concept map you can click around like Obsidian
  • flashcards with spaced repetition that nags you at the right time
  • practice questions in the style of the prof's own examples
  • a 3-minute "type everything you remember" recall check, graded against the transcript
  • exam topics ranked by how hard the prof hinted
  • a spoken study partner that quizzes you out loud (yes, in David Attenborough's voice if you want)

One box serves the room. Only your progress is yours.

How we built it

  • The box: ESP32-S3, an I2S mic, a 2.42" OLED, an IMU for shake detection, and a 3D-printed screwless housing I designed in OpenSCAD and printed the night before. Firmware in C++ on PlatformIO. Every wire is a jumper, so no PCB.
  • The pipe: raw 16 kHz audio over one WebSocket to a Node server (Hono + ws), into Deepgram for streaming speech-to-text, through Google Translate, out to every browser in the room.
  • The brains: Claude generates the outline, concepts, cards and questions as one validated bundle per lecture. FSRS schedules the cards. Fish Audio does the voices.
  • The app: TypeScript end to end. React Router, Tailwind, Neon Postgres, one shared types package so the firmware, server and web app can't disagree.

Challenges

  • First time ever doing WebSockets or streaming audio. Built it first, kept it dumb.
  • Teaching the IMU the difference between a slap and someone bumping the desk (0.4 g off average for 120 ms, if you're curious).
  • The ESP32 is 2.4 GHz only and my hotspot had opinions.
  • The mic boards came without header pins. The week before the event was my first time soldering. Twenty joints, zero fires.

What I learned

Show the hardware first. Study apps are a crowded room; a box you hit is not. Also: the device should do one thing. Every feature I wanted to put on it belonged in the app.

What's next

V2 coming soon!

Built With

Share this project:

Updates

Submission history