Skip to content

aiedwardyi/quorum

Repository files navigation

Quorum

Multi-AI decision assistant powered by model debate

Replaces the manual workflow of copy-pasting between AI tabs. Instead of switching between Gemini, Perplexity, ChatGPT, and Claude to get multiple perspectives - just ask once and let them talk it out.

Try it live - bring your own key, no sign-in.

CI Next.js TypeScript Tailwind Gemini Perplexity Claude GPT

quorum-demo.mp4

How It Works

You:           "Should we use microservices or a monolith for our MVP?"

Gemini:        "Start with a monolith. Microservices add deployment complexity too early."
Perplexity:    "Monolith for speed, but design with clean module boundaries from day one."
Claude:        "Agreed on monolith-first. The bigger startup risk is building too slowly."
GPT:           "Use a monolith until real scaling bottlenecks appear."

Quorum:        "Recommended answer: Start with a monolith for the MVP.
               It is faster to ship, easier to debug, and lower risk early on."

               Vote split: 4/4 models chose monolith
               Minority view: If independent teams must ship separately on day one,
               move toward services earlier.

Each model sees what the others said, debates across rounds, and then Quorum returns a decisive recommendation rather than a neutral recap.


Product Direction

Quorum started as a multi-AI group chat for consensus. It is now a decision tool:

  • The verdict card leads with a recommended answer, not a neutral recap.
  • It shows the vote split, key reasons, the strongest minority objection, and when the opposite case is worth taking.
  • Continue the same thread after the verdict instead of resetting.
  • Signed-in users get saved threads and history, similar to ChatGPT or Claude.

It feels less like "here's what everyone said" and more like "here's what you should do, and why."


Themes

Switch instantly from the header or settings.

Quorum light theme
Light
Quorum dark theme
Dark
Quorum Tokyo Night theme
Tokyo
Quorum Lovelace theme
Rosé

Quick Start

Quorum is BYOK-first (bring your own key): paste your own provider API keys and go. No account, no database, no sign-in. Keys are stored only in your browser.

Prefer not to install? Try the hosted demo and paste your keys there. To run it locally:

git clone https://github.com/aiedwardyi/quorum.git
cd quorum
npm install
npm run dev

Open localhost:3000, open Settings, and paste an API key for any provider you want on the panel. That is the whole setup.

The consensus verdict and document OCR always run on Gemini, so add a Gemini key even if your panel is Claude/GPT/Perplexity only.

Set REQUIRE_USER_API_KEYS=true (recommended for any BYOK or public deploy) so a keyless request returns a clear "add your key" prompt instead of a generic provider error. Anonymous BYOK gives you an in-session thread; sign in (below) to save history across visits.


Self-Hosting with Accounts (optional)

Sign-in is an optional upgrade: saved, encrypted provider keys and thread history synced to a database. Skip this entire section for pure BYOK.

Create a .env.local from .env.example:

cp .env.example .env.local        # PowerShell: Copy-Item .env.example .env.local
# Enable accounts: sign-in UI + the server-side session key lookup.
# Build-time inlined - rebuild after changing.
NEXT_PUBLIC_AUTH_ENABLED=true
REQUIRE_USER_API_KEYS=true

# Database (Neon PostgreSQL)
DATABASE_URL=postgresql://user:password@host/neondb?sslmode=require

# Auth (NextAuth v5 + Google OAuth)
AUTH_SECRET=generate_with_openssl_rand_-base64_32
GOOGLE_CLIENT_ID=your_google_oauth_client_id
GOOGLE_CLIENT_SECRET=your_google_oauth_client_secret

# Encryption for accounts' saved provider keys
KEY_ENCRYPTION_SECRET=generate_with_openssl_rand_-base64_32

# Host provider keys: open deploy (REQUIRE_USER_API_KEYS=false), access codes, and free debates
GEMINI_API_KEY=your_gemini_api_key
PERPLEXITY_API_KEY=your_perplexity_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
OPENAI_API_KEY=your_openai_api_key

Important: Prefer .env.local for local secrets. It takes precedence over .env and is gitignored by default.

For Google login, create a Google OAuth client and add this authorized redirect URI:

http://localhost:3000/api/auth/callback/google

Gemini has two server-side auth paths (only relevant when serving your own keys):

  • Google AI Studio API key: set GEMINI_API_KEY.
  • Vertex AI ADC: leave GEMINI_API_KEY empty, set VERTEX_PROJECT_ID and VERTEX_LOCATION, then gcloud auth application-default login.

Then migrate the database and run:

npx prisma migrate dev
npm run dev

Privacy & Security

  • Your keys live only in your browser's localStorage and are sent to the server solely to call the model you picked. They are never persisted or logged server-side.
  • Signed-in users' saved keys are encrypted at rest, scoped per account, and never travel back to the client.
  • Browser BYOK is inherently exposed to XSS: any script running on the page can read localStorage. Use your own revocable keys, and self-hosters should serve a strict Content-Security-Policy.

Sharing Your Deployment

Set REQUIRE_USER_API_KEYS=true, ACCESS_CODES=code-one,code-two, and your server-side provider keys, then hand a code to a friend. They enter it once in Settings > Access code and debate on your deployment's keys - no API keys, no account. Codes only gate enforced deployments: without REQUIRE_USER_API_KEYS=true, your server keys serve every visitor. Rotate or revoke by editing the env var and redeploying; set spend limits on your provider dashboards.

Free debate after Google login

With NEXT_PUBLIC_AUTH_ENABLED=true and REQUIRE_USER_API_KEYS=true, each new account gets 1 free debate on host keys (time window + per-grant call budget for multi-call chat + consensus). BYOK and access codes still take priority and do not burn the grant.

Host-key daily budget

HOST_KEY_DAILY_BUDGET_USD (default 25) caps estimated spend on host keys for free debates and access codes. When the budget is hit, host keys stop for the UTC day; BYOK still works. This is an app-side stop, independent of provider dashboards.


Tech Stack

Layer Technology
Framework Next.js 16, React 19, TypeScript 5
Styling Tailwind CSS 4, shadcn/ui, Framer Motion
AI Models Gemini 2.5 Flash/Pro (Google AI Studio or Vertex AI), Perplexity Sonar Pro, Claude (Anthropic), GPT-4o (OpenAI)
Database PostgreSQL on Neon, Prisma 7
Auth NextAuth v5 + Google OAuth
Streaming Server-Sent Events (SSE)
i18n English / Korean
Themes Light, Solar, Dark, Tokyo, Rosé, Gruvbox, Mocha, Nord

Roadmap

See ROADMAP.md for details.

Phase Focus Status
Phase 1 Core group chat - Gemini + Perplexity Done
Phase 2 Claude + GPT, decisive verdict, continue-thread, 8 themes Done
Phase 3 Persistence, OAuth, thread history, BYOK backend Done
Phase 4 Share verdicts, decision workflows, custom models Future

License

MIT. See LICENSE for full terms.

About

Replaces the manual workflow of copy-pasting between AI tabs. Instead of switching between Gemini, Perplexity, ChatGPT, and Claude to get multiple perspectives - just ask once and let them talk it out.

Topics

Resources

License

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors