Multi-AI decision assistant powered by model debate
Quorum is moving away from a neutral "consensus recap" and toward a decision-oriented workflow:
- models debate in the background
- the final card gives a recommended answer first
- users can see vote split, reasons, and minority view
- users can continue the same thread after verdict
- logged-in users can reopen saved threads later
The core experience — a group chat where you + Gemini + Perplexity discuss a topic together.
- Project scaffolding (Next.js + Tailwind + shadcn/ui)
- Gemini + Perplexity provider wrappers
- Chat API route (SSE streaming)
- Consensus scoring API route
- Chat UI — thread, bubbles, input bar, model selector
- Consensus meter + summary card
- Wire end-to-end flow
- Home page with prompt input
Status: ✅ Complete — all 6 tasks done. Full loop working: home → chat → debate → consensus.
Make the ending state decisive and make debates reusable.
- Add Claude (Anthropic SDK) + GPT (OpenAI SDK) provider integrations
- Replace neutral summary schema with decision-oriented verdict schema:
recommendedAnswervoteSplitconfidencereasonsminorityViewoppositeCase- optional
modelAgreement
- Model selection UI — users choose which AIs participate (up to 4)
- Response length control (short / medium / long) — UI + API wired with word targets
- Configurable round count (1 / 2 / 3 / 5) — wired end-to-end, homepage -> settings -> debate loop
- Deduplicate consensus display — ONE location, not sidebar + summary card
- Fix Gemini third-person / name-prefix bug (BUG-009 — buildContents formatting)
- Home page redesign — Phase 2 with model selector, dark mode, i18n, rainbow border
- Chat page UI refresh — Phase 2 components ported, wired to Phase 1 streaming logic
- Premium summary/final verdict polish — higher-contrast summary card, final verdict eyebrow, stronger dark-mode presentation
- Homepage -> chat page config passthrough (sessionStorage, all settings carry over)
- Consensus bar real-time updates (fills after each round)
- Smart auto-scroll + scroll-to-bottom button
- Thinking indicator with colored model icons (merged into ChatBubble)
- Wire response length to system prompt (short ~75w, medium ~150w, long ~300w)
- i18n for AI-generated content — locale passed to system prompts for chat + consensus API
- Between-round status feedback (brief "analyzing..." bubble)
- Round divider labels in chat thread ("ROUND 1", "ROUND 2" visual separators)
- Stop button stuck state fix (BUG-012)
- API error graceful handling (rate limits, quota)
- Continue discussion from completed verdict (follow-up in same thread)
- Session persistence foundation
- Chat history page
- BUG-015: Document upload — files now parsed client-side and content sent to AI models
- Document/media upload (PDF, DOCX, Excel, text) — parse-before-navigate on homepage, inline on chat
- File upload warnings — users warned when files are truncated (>50k chars) or empty (scanned PDFs)
- Share verdict via link (public read-only snapshot page, no full transcript)
- Export conversation as markdown/PDF
Make saved work, identity, user-owned model access, and recommendation UX feel complete.
- User login modal with Google OAuth
- User accounts (persist settings, encrypted keys, history)
- Saved thread sidebar / history browser
- Follow-up question shortcuts from verdict card
- Korean / English i18n polish for decision-oriented verdict copy
- API key management — server-side encrypted storage (saved keys are never returned to the browser)
- BYOK backend — provider calls prefer the signed-in user's key, with server env keys as fallback
- BYOK settings UX polish
- Default to dark mode
- Theme system — 8 themes (Light/Dark/Tokyo Night/Lovelace/Gruvbox/Catppuccin/Nord/Solarized) with icon grid picker in Settings
- Theme-aware semantic color tokens (success/warning/danger) — ConsensusMeter + SummaryCard respond to active theme
- Additional custom themes (accent colors, more palettes)
- Settings page - Account + Preferences tabs
- Fix settings modal tab scroll position (BUG-039)
- Voice input (Watson STT)
- Homepage chat history section (logged-in users can access past debates from homepage)
- Mobile-friendly chat history (responsive history browsing on chat page)
- Persistent locale in localStorage
- Settings icon visible for logged-out users on homepage
- Home navigation from chat page (avatar dropdown)
- Consistent "Sign In" / localized labels across pages
- BUG-016: Gemini streaming cut-off (increased chunk timeout for thinking models)
- BUG-017: Perplexity garbled characters (HTML entity and citation artifact cleanup)
- BUG-018: Contradicting verdicts across rounds (prior verdict context in consensus prompt)
- BUG-032: History dropdown navigation fixed
- BUG-033: Thread dropdown flicker fixed
- BUG-037: Allow typing during debate (only block sending)
Differentiate beyond generic multi-model chat.
- Korean-first decision workflows (shopping, career, startup, study, local comparisons)
- Grounded decision mode with web-backed debate for real-world choices
- Devil's advocate mode — force one model to argue against consensus
- Debate templates (patent review, architecture decision, risk analysis)
- Custom model support (any OpenAI-compatible endpoint)
- Share full sessions via link with explicit privacy controls
- Usage dashboard (active users, debates, model usage, language distribution)
- File reading support (PDF, DOCX, Excel) - parse and send as context to AI models
- Move settings into avatar dropdown (pending user test feedback)
- Rounds selector in chat header (pending user test feedback)
| Decision | When | Options |
|---|---|---|
| Database | ✅ Decided | PostgreSQL on Neon + Prisma ORM |
| API key storage | ✅ Decided | Encrypted DB storage; plaintext keys are never returned to the client |
| Auth system | ✅ Decided | NextAuth v5 + Google OAuth |
| Deployment | ✅ Decided | AWS Amplify (Seoul, ap-northeast-2) |
- Less is more — lightweight, minimal, user knows what to do on page load
- Customization is good, clutter is bad — good amount of options with clean UI/UX
- One source of truth — no duplicate information displays
- Non-technical users welcome — sensible defaults first, BYOK when users want control