Skip to content

Latest commit

 

History

History
81 lines (70 loc) · 5.5 KB

File metadata and controls

81 lines (70 loc) · 5.5 KB

Killswitch | PRD

Problem Statement (verbatim)

Design a premium, AI-powered Idea Evaluation & Founder Guidance System that helps founders decide whether to pursue, pivot, or kill an idea — produces clear actionable next steps (not generic advice), feels like a sharp opinionated advisor (not a motivational coach), is simple and fast, and becomes something founders return to weekly for clarity and direction.

Product Philosophy

"A brutally honest, highly intelligent partner who understands me, my idea, and tells me exactly what to do next."

Diagnose BEFORE prescribing. Never generic. Every action must include exact people, exact scripts, exact assumptions to validate.

Architecture

  • Backend: FastAPI + Motor (MongoDB).
    • LLM: provider abstraction in backend/llm_provider.py. Switches via LLM_PROVIDER env var:
      • emergent (default) — uses emergentintegrations + Universal Key
      • bedrock — uses anthropic[bedrock] SDK with AWS credentials
      • Both run in worker thread via asyncio.to_thread to keep the event loop responsive.
    • Auth: provider abstraction in backend/auth_provider.py. Switches via AUTH_PROVIDER env var:
      • emergent (default) — Emergent-managed Google OAuth, sessions in db.user_sessions
      • jwt — email + password (bcrypt) + signed JWT in session_token cookie
      • Both share the same cookie name and get_current_user_from_token API so the rest of the app is unchanged.
    • Async job pattern for long-running LLM calls.
  • Frontend: React 19 + react-router-dom 7. Tailwind + custom CSS. No heavy UI framework — sharp editorial Swiss/Stripe-Notion feel.
    • Calls GET /api/auth/config once on boot to detect provider; landing CTA + nav adapt automatically; /login and /register routes are mounted only in JWT mode.
  • Storage: MongoDB collections — users, user_sessions (emergent only), ideas, diagnoses, checkins, diagnosis_jobs.

User Personas

  1. First-time founder — needs bluntness about assumptions, less jargon
  2. Technical builder — push hard on distribution, not features
  3. Non-technical founder — push hard on scrappy validation without building
  4. Repeat founder — skip basics, go deeper on strategic risks

Core Features (v1 — IMPLEMENTED)

  • ✅ Landing page (editorial, sharp, opinionated)
  • ✅ Google Sign-in (Emergent OAuth) + founder-type picker
  • ✅ 8-step progressive Idea Intake
  • ✅ Async AI Diagnosis (Claude Sonnet 4.5): verdict (pursue/pivot/kill) + one-line headline + diagnosis + "what you're missing" insight + kill conditions + momentum signals + 4 scores (FMF/WTP/Momentum/Execution Risk) + competitor signal + 3-5 hyper-specific this-week actions with copyable scripts
  • ✅ Dashboard with per-idea verdict badges, scores, streak
  • ✅ Weekly Check-in flow — re-diagnoses based on what was done; verdict may flip
  • ✅ Idea Evolution timeline (history of verdicts)
  • ✅ Streak tracking (resets if >14 days between check-ins)
  • ✅ Action toggle (mark done)
  • ✅ Public Share link (/share/:slug) — shows verdict + insight + scores + action titles/why ONLY; scripts (how) and assumptions redacted. Tweet/LinkedIn share buttons. Virality driver.
  • ✅ Export to PDF — browser print with dedicated print CSS (hides nav/buttons, pages diagnosis cleanly)
  • ✅ .ics Calendar reminder — weekly recurring "Friday 9am" check-in invite, downloadable from idea page
  • ✅ Revoke share link

Endpoints

  • GET /api/ — health
  • POST /api/auth/session — exchange session_id → session_token cookie
  • GET /api/auth/me, POST /api/auth/logout, POST /api/auth/founder-type
  • POST /api/ideas | GET /api/ideas | GET /api/ideas/{id} | DELETE /api/ideas/{id}
  • POST /api/ideas/{id}/diagnose{job_id, status:"pending"}
  • GET /api/ideas/{id}/diagnose/jobs/{job_id} → polling endpoint
  • POST /api/ideas/{id}/actions/{action_id}/toggle
  • POST /api/ideas/{id}/checkins
  • GET /api/dashboard/summary
  • POST /api/diagnoses/{id}/share | DELETE /api/diagnoses/{id}/share
  • GET /api/share/{slug} — PUBLIC, no auth

Testing Status

  • Backend: 18/18 pytest passing (iteration 2). Async diagnose validated end-to-end. Polling non-blocking. Share redaction verified.
  • Frontend: Landing + public share page verified via screenshot. Authenticated dashboard requires real Google OAuth in-browser.

Known Limitations (from iter 2 report)

  • No per-user rate limit on /diagnose (LLM spend risk)
  • create_idea and friends don't use FastAPI Depends() — boilerplate-heavy but works
  • Share slug uniqueness relies on secrets.token_urlsafe(8) entropy (not DB-unique index)
  • EMERGENT_LLM_KEY budget exhausted during testing — user must top up at Profile → Universal Key → Add Balance

Backlog / Future

  • P0: Server-side email reminders (SendGrid/Resend) for weekly check-ins — currently .ics only
  • P0: Rate limiting + concurrent-job cap on /diagnose
  • P1: "Delta summary" — AI-generated diff between weekly diagnoses ("Last week you were at KILL, this week PIVOT because…")
  • P1: OG image generation for share pages (dynamic verdict card)
  • P2: Founder referral loop ("invite 2 founders to get 1 free diagnosis")
  • P2: Weekly email digest with top action + accountability nudge
  • P2: Multi-idea portfolio view & idea comparison
  • P2: Kill-log (archive of killed ideas + lessons)

Changelog

  • 2026-04-24: v1 shipped. Landing, intake, async diagnosis, check-ins, evolution, share, PDF, ICS, founder-type adaptation. Async job pattern to handle >60s LLM calls via preview ingress.