-
-
Argue it out with the greats.
-
Yes, if…" scroll with the seal, every vote, "How this was decided" and the conditions.
-
Hypatia's page in the plain-words guide.
-
The character-select screen, with Hypatia featured and Socrates invited.
-
The table, the papyrus replies, a rebuttal ("Diogenes → Hypatia"), the remembered facts and "The moderator sums up"
Inspiration
Big decisions usually get made alone, late at night, with no one to argue with. When you ask a chatbot, you get one careful, polite answer that rarely helps you decide.
In 1985, Steve Jobs imagined a day when a student could ask Aristotle a question and get an answer. Plato's Symposium is a dinner party where each guest makes their case. I wanted both: a table of great minds who actually disagree, and a method that ends in a decision.
What it does
Symposium seats you at a table of ancient Greek philosophers and lets them argue your very modern question.
- Choose your table. Pick three to five of nine thinkers on a character-select screen: Aristotle, Plato, Diogenes, Epicurus, Heraclitus, Pythagoras, Epictetus, Hypatia and Thucydides. Socrates can join as a guest with exactly one question.
- Ask anything. Type your own question, pick an example, or start from today's news.
- Let them argue. A moderator sets a sharp focus each turn; two philosophers answer and one rebuts, in character, written out by quill on papyrus. Tag one with @ to ask them directly, or talk to one privately. The table remembers the facts you give it, and "Sum up" shows where they agree, where they disagree and what's still unknown.
- Call the vote. Choose a real decision method: Should I? (a go/no-go gate), Which one? (a weighted decision matrix) or What could go wrong? (a pre-mortem). Each philosopher scores the question, they debate the scores, and they poll out loud.
- Get a verdict you can trust. The verdict is computed in code from their scores, never made up by the model. It's written on a papyrus scroll in plain words (Yes, Yes if…, Not yet) with the Greek beneath, every philosopher's vote, the conditions to meet, and a plain explanation of how it was decided.
- Ask "What if…?" Change one fact and the table votes again, showing exactly what changed.
There's also a plain-words guide to each philosopher, optional music, fire and sound effects, a herald who can read the verdict aloud, and a demo mode that runs without an API key.
How I built it
I planned before writing any code, using the Devpost Learn Skill Pack: a scope, a product requirements doc, a technical spec and a build checklist (all in the repo's devpost/ folder). Then I built it slice by slice with Claude Code, testing each slice before moving on.
- App: Next.js 15, React 19, TypeScript and Tailwind CSS.
- AI: OpenAI. A fast model (gpt-5.4-mini) runs the moderator, the scores and the polls as structured JSON, validated with Zod. A stronger model (gpt-5.5) writes the in-character speeches, streamed to the browser. Anthropic's Claude works as an alternative provider.
- Real disagreement: every philosopher has a fixed "lean" (Pythagoras wants the numbers to balance, Heraclitus bets on change, Diogenes votes against anything done for status), so the table genuinely splits.
- Verdict math: pure TypeScript, separate from the model, covered by 40 unit tests.
- Art and sound: portraits, scenery and logo painted with OpenAI's image model; music, fire, sound effects and the narrator voice generated with ElevenLabs.
Challenges I ran into
- The table agreed too politely. Every philosopher runs on the same model, so they drifted to the same cautious answer. Giving each one a fixed lean, and a fairer rule for how a single vote is tallied, turned a lopsided result into real splits.
- Talk was short and generic. I added a moderator focus for each turn, rebuttals between philosophers, banned filler phrases, and made the table remember the user's own numbers.
- The first UI didn't work. On a laptop the debate area was barely 127 pixels tall. I rebuilt it around one layout: the table on the left, the full conversation on the right.
- A verdict that never appeared. A stale-state bug reset the screen right after a vote finished, and later the papyrus writing effect waited forever on an empty line. Both were found by testing the full flow in a headless browser.
- Making the demo video. Recording one smooth take of a live web app, then laying in voice, music and sound effects at the right frames, took more iterations than building some features.
Accomplishments that I'm proud of
- The verdict is computed and explained in code. The model argues; the math decides.
- The philosophers genuinely disagree, then settle it with a real decision method.
- It feels like a place, not a chat window: painted portraits, a candlelit hall, writing on papyrus and a sealed verdict scroll.
- Three complete decision methods, a demo mode, tests and full planning docs, built in a day.
What I learned
- Planning first pays off. Having a scope, requirements and a spec meant every change had somewhere to land, even when I pivoted the whole cast to Greek philosophers halfway through.
- Giving an AI agent rich, specific context and honest feedback ("this is unusable", "too generic") works far better than one-line prompts.
- The most convincing AI features keep the model on the side it's good at (language and character) and keep decisions in plain, testable code.
- Design matters as much as features: the same app felt "vibe coded" until it had a real visual identity.
What's next for Symposium
- A public deployment with rate limiting, so anyone can try it without running it locally.
- Shareable verdict links and images.
- A voice for every philosopher, and a quick "Which philosopher are you?" quiz as an entry point.
- More reliability: retrying failed vote steps and measuring the cost per vote.
Built With
- claude-code
- elevenlabs
- nextjs
- node.js
- openai
- react
- tailwindcss
- typescript
- vitest
- zod

Log in or sign up for Devpost to join the conversation.