Inspiration
Look at any conference photo and half the audience is photographing the slides. That's the hook. People aren't taking those photos because they want a slide deck; they want the takeaway. Cerebro started as a fix for the camera-roll problem and grew into something more useful: a way to make hybrid events work for everyone in the room, the people online, and the speakers up front. The deck download was the obvious feature. The recap, the live transcript, and the Q&A agent are what actually solve the problem.
What it does
Three roles, one product, swap-toggled from the top bar:
- Attendee — sees the speaker's slides in sync, hops between concurrent live sessions via a cycler bar, downloads the deck, asks questions, and reads source-tagged answers (AI or speaker) in a thread under each question.
- Speaker — uploads their deck (PDF or images) which is parsed in-browser and replaces the demo content, controls the live slide, sees a queue of audience questions with an AI brief and a one-click "Send AI answer" action, and toggles live transcription from the side panel.
- Organizer — adds/edits/deletes sessions on the agenda, monitors live counters, and routes incoming questions to the speaker. The AI auto-handles high-confidence questions; everything else lands in a "For you to answer" section with a draft and a speaker note already attached.
LOOM VIDEO LINK HERE: https://www.loom.com/share/493447b8d176488c9c430a170a4076b6
How we built it
- Next.js 16 + React 19, App Router, Turbopack, TypeScript end-to-end.
- Tailwind v4 for layout, but every theme-aware color goes through CSS-in-JS so the three palettes swap atomically at runtime.
- pdfjs-dist does PDF parsing entirely client-side: each page renders to a canvas, gets converted to a data URL, and ships its extracted text along as presenter notes + grounding for the AI agent. The worker loads from a version-pinned jsDelivr URL to dodge bundler-worker headaches.
- Web Speech API wrapped in a
useSpeechRecognitionhook withcontinuous+interimResults, auto-restart ononend(Speech quits on silence), and slide-number capture via a ref so each final chunk is tagged with the slide that was live the moment it was committed. - Anthropic Claude API powers two routes:
Challenges we ran into
- **Web Speech API only works on chrome so please use chrome browser
- Grounding the Q&A agent so it doesn't bluff.** The prompt has three independent pressure points pushing toward "defer": the opening framing, a deliberately skewed confidence rubric, and an explicit
Accomplishments that we're proud of
The Q&A triage agent that says "I don't know — leave this for the speaker" more often than it answers. That selectivity is the actual product, not the answering.
Live transcription that survives tab focus loss and silence, and feeds the recap with what the speaker actually emphasized — not just what was on the slides.
What we learned
A small, honest AI feature beats a big, confident one. Telling the user "this is what I'm confident about, this is what I'm not" is more impressive than answering everything.
Browser-native APIs (Web Speech, IndexedDB, pdf.js) are surprisingly capable for hackathon-grade live demos. The whole thing runs client-side; the only server work is the Claude calls.
Prompt engineering rewards layering: one instruction gets ignored, three pressure points on the same axis produce reliable behavior.
What's next for Cerebro
- Speaker private notes view that the attendee never sees — annotations, follow-up tasks, "remember to mention X."
- Post-event digest — one Claude call that summarizes every session an attendee dropped into across the day.
- Q&A upvoting on the attendee side, mirrored to the organizer's queue so popular questions surface naturally.
- Multi-attendee sync via a thin server (WebSocket or SSE) so multiple browsers see the same live state — currently the demo is single-tab.
- PPTX / Keynote ingestion on the server side so speakers don't have to export to PDF first.
- Recap streaming — render the recap token-by-token as it generates, so the "wait, that's working live" moment lands harder.
- Mobile layout — the grid breaks under ~720px; collapse the sidebars into a bottom sheet.
Built With
- claude
- nextjs
- vercel
Log in or sign up for Devpost to join the conversation.