A web app that helps tech‑startup cofounders decide which direction to take their startup — using a panel of AI advisors instead of a single opinion.
You ask a strategic question. Three Claude advisors — Growth, Finance, and People — talk to each other in a live group chat, each reading the running transcript and responding until all three agree. Only then is ChatGPT called: it receives the original question, all company context, every teammate's input and the full transcript, and writes a single concise, personalised decision. The whole conversation streams to the team in real time (no refresh).
User question
│
▼
┌──────────── live group chat (streamed over SSE) ────────────┐
│ Claude Growth ⇄ Claude Finance ⇄ Claude People │
│ (sequential turns, each sees the transcript, up to 3 rounds)│
└───────────────────────── all agree ────────────────────────┘
▼
ChatGPT — Final Decision
(question + context + team input + full transcript → concise, personalised call)
- Email + password accounts, organised into businesses.
- Team invites — two ways:
- Shareable link: generate a reusable invite link from the Team tab and paste it to anyone; when they open it and sign in, they join the team instantly.
- In-app invite: invite an existing user by email — they get a persistent notification banner (delivered live) and join once they Accept, or they can Dismiss it.
- Real-time everywhere (SSE): new questions, teammate responses, the advisor group chat, and the final decision all appear without refreshing.
- Context (RAG): add/remove company facts that get injected into the advisors and the final call.
- Editable prompts per business for all four roles (growth, finance, people, final), with one‑click reset to defaults.
- The decision panel: watch the advisors deliberate as chat bubbles, then the concise final verdict with concrete next steps — the panel commits to a clear call.
- History of every decision, including the full chat transcript.
Requirements: Node.js v22 or newer (it uses Node's built‑in SQLite, so there's nothing else to install — no database server, no build step).
git clone <your-repo-url>
cd iamright
npm install
cp .env.example .env # optional, but recommended
npm startThen open http://localhost:3000, click Sign up, create a business, and ask the panel a question.
No API keys needed to try it. Out of the box the app runs in mock mode — it returns realistic, deterministic advisor output so you can click through the entire product and demo it immediately. The mode badge in the top bar shows
MOCKorLIVE.
Edit .env and add both keys:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_MODEL=gpt-4o # final decision-maker
ANTHROPIC_MODEL=claude-opus-4-8 # the three group-chat advisorsRestart (npm start). When both keys are present (and MOCK_LLM isn't true), every run hits
the real APIs — Claude (with structured JSON outputs) for the three advisors' group chat and
ChatGPT for the final decision. Remove either key to fall back to mock mode.
npm testBoots the server on a throwaway database and runs an end‑to‑end check of signup/login, businesses, team membership + tenant isolation, context, prompts, and the full decision pipeline.
| Piece | Choice |
|---|---|
| Server | Node + Express (server.js) |
| Storage | Node's built‑in node:sqlite → a single data.db file (lib/db.js) |
| Auth | HMAC‑signed cookie + bcrypt (lib/auth.js) |
| Pipeline | lib/llm.js — 3-advisor group chat (loops until agreement) → ChatGPT decision, with mock fallback |
| Realtime | Server-Sent Events (/api/stream) — invites, topics, live chat, decisions |
| UI | Vanilla HTML/CSS/JS in public/ (no framework, no build) |
Reset everything: stop the server and delete data.db (and data.db-wal / -shm).
- Auth is demo‑grade (great for the pitch and local use; not hardened for production).
- Invites work two ways — a reusable shareable link (anyone who opens it and signs in joins, handy when they don't have an account yet) and a targeted in-app invite to an existing user by email. Neither sends an actual email; the link is reusable and non-expiring (demo-grade).
- Context is injected directly into prompts (no vector search) — simple and fast for a small team.
- Realtime uses SSE held in memory, so it's single-process (fine for local/demo; a multi-instance deploy would need a shared pub/sub).
Postgres + pgvector for embeddings‑based RAG, real email delivery + revocable/single-use invite tokens, token‑by‑token streaming of each advisor message, per‑run cost/token tracking, and role‑based permissions.