Skip to content

rlmsinclair/iamright

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧭 Startup Direction Advisor

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)

✨ What it does

  • 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.

🚀 Run it (works on a fresh MacBook in ~1 minute)

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 start

Then 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 MOCK or LIVE.

🔑 Turn on the real Claude + ChatGPT (live mode)

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 advisors

Restart (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.

🧪 Test

npm test

Boots 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.

🗂️ How it's built

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).

📝 Notes

  • 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).

Possible upgrades (intentionally left out to stay minimal)

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.

About

Three Claude advisors debate your startup decision live until they agree

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages