title: HTTPS requirement blocks WebRTC

insight: The voice widget click doing nothing was caused by WebRTC requiring HTTPS - running from file:// won't work. Deploying to Netlify with HTTPS was the only solution.

reasoning_chain: Kinan reports clicking widget does nothing

reasoning_chain: Genesis identifies WebRTC physically cannot work without HTTPS on file:// protocol

reasoning_chain: Solution: deploy to Netlify which provides HTTPS automatically

source_context: Widget click does nothing — WebRTC requires HTTPS. Running from `file://` won't work. We need to either serve locally or deploy to Netlify.


title: Demo scraper is simulated only

insight: The demo preview showing blank screen with just the business name is because the scraper is MVP/simulated - real screenshot and scraping requires the onboarding pipeline backend running.

reasoning_chain: Kinan reports demo shows blank screen with just 'bucket bunker FNQ'

reasoning_chain: Genesis confirms scraper is simulated - just extracts domain name

reasoning_chain: Real scraping needs onboarding pipeline backend deployed

source_context: Demo shows blank screen — correct, the scraper is simulated (MVP). It just extracts the domain name. Real screenshot + scraping needs the onboarding pipeline backend running.


title: Resource pivot to Gemini credits

insight: With only $7.70 left on OpenRouter (not enough for 200 agents), pivot to using $300+ barely-touched Gemini credits for the agent swarm, while using Opus agents only for complex P0 architecture.

reasoning_chain: Gap analysis shows 44 items needing agents

reasoning_chain: OpenRouter has only $7.70 remaining - not enough for 200 agents

reasoning_chain: Gemini has $299.75 unused - nearly free via CLI

reasoning_chain: Strategy: Opus for P0 complex work, Gemini swarm for rest

source_context: OpenRouter has $7.70 remaining (enough for ~10 Kimi stories). But Gemini has $299.75 unused. The P0s need Opus-quality agents (complex architecture). The rest can be Gemini swarm work.


title: Gap analysis reveals 64% not built

insight: Honest assessment shows product is only 25% built with 64% gaps - the landing page is polished but actual revenue-generating infrastructure (billing, auth, widget delivery) doesn't exist.

reasoning_chain: Gap analysis agent audits all promises vs reality

reasoning_chain: But widget.js doesn't exist, no Stripe billing, no auth, no dashboard, no production deployment

reasoning_chain: Realization: marketing is ready but product infrastructure is missing

source_context: OVERALL STATUS: 25% built, 11% partial, 64% is GAP or NOT STARTED. The landing page and marketing collateral are polished and complete. But the actual product infrastructure -- everything needed to take a customer's money, give them a working widget, and track their usage -- does not exist.


title: Shadow DOM for widget isolation

insight: widget.js uses Shadow DOM for complete style isolation - ensures the widget won't conflict with any customer's CSS framework regardless of what they use.

reasoning_chain: Need embeddable widget that works on ANY customer website

reasoning_chain: CSS class conflicts would break on some sites

reasoning_chain: Decision: Shadow DOM with :host { all: initial } reset and sw- prefix for all classes

source_context: Shadow DOM rather than scoped CSS: True isolation from host page styles, no class name conflicts possible regardless of what CSS framework the customer's site uses.


title: Lazy-load Telnyx SDK

insignt: widget.js lazy-loads the ~200KB Telnyx SDK only when the voice panel opens, keeping initial page impact near zero.

reasoning_chain: Loading on page load would slow customer sites

reasoning_chain: Decision: Load SDK only when user clicks to open voice panel

source_context: Lazy-loading: The Telnyx SDK (~200KB) is only loaded when the user opens the panel, not on page load, keeping initial page impact near zero.


title: ES5 for maximum browser compatibility

insight: widget.js written in vanilla ES5 (no arrow functions, const/let, template literals) for maximum browser compatibility including older mobile browsers.

reasoning_chain: Widget will be embedded on customer sites with unknown browser requirements

reasoning_chain: Decision: Write in ES5 for universal compatibility

source_context: ES5 compatible: Written in vanilla ES5 (no arrow functions, no const/let, no template literals) for maximum browser compatibility including older mobile browsers.


title: 3-tier pricing structure

insight: Three subscription tiers defined: Starter ($197, 500 min, 1 widget), Pro ($397, 1500 min, 1 widget), Growth ($597, 5000 min, 3 widgets) with feature gates.

reasoning_chain: Created tiered model with increasing limits

reasoning_chain: Starter for small business, Pro for growing, Growth for agencies

source_context: Tier Limits: Starter (500 min, 1 widget, $197), Pro (1500 min, 1 widget, $397), Growth (5000 min, 3 widgets, $597) with feature gates.


title: Stripe Checkout for billing

insight: Backend uses Stripe Checkout (hosted) for subscription creation and Stripe Customer Portal for self-service management - simpler than building custom billing UI.

reasoning_chain: Use Stripe Checkout for new subscriptions, Stripe Portal for management

source_context: POST /billing/checkout: Creates Stripe Checkout session for selected tier, redirects to Stripe hosted checkout. GET /billing/portal: Creates Stripe Customer Portal session for self-service management.


title: JWT for authentication

insight: Auth system uses JWT tokens with 72-hour expiry, bcrypt 12-round password hashing - standard secure approach for stateless API authentication.

reasoning_chain: 72-hour expiry balances security with convenience

source_context: JWT: PyJWT with configurable expiry (default 72 hours). Password hashing: bcrypt with 12 rounds.


title: P0 blockers prevent any shipping

insight: Five P0 blockers identified - without widget.js, Stripe billing, auth, dashboard, and production deployment, nothing can ship regardless of marketing readiness.

reasoning_chain: widget.js doesn't exist - embed code returns 404

reasoning_chain: No dashboard - can't manage after signup

reasoning_chain: No deployment - backend doesn't exist anywhere

source_context: The 5 P0 Blockers (nothing ships without these): widget.js does not exist, No Stripe billing, No customer authentication, No customer dashboard, No production deployment.


title: Landing page demo connects to onboarding pipeline

insight: The demo preview that seemed broken is actually the frontend of the onboarding pipeline - once the backend deploys, the simulated scraper becomes real website scraping + AI personality generation.

reasoning_chain: Onboarding pipeline has website scraping code

reasoning_chain: Pipeline has Gemini personality generation

reasoning_chain: Real demo needs backend deployed to connect these pieces

source_context: The scraper is simulated (MVP). It just extracts the domain name. Real screenshot + scraping needs the onboarding pipeline backend running.


type: DIRECTIVE

title: 200-agent swarm directive

insight: Kinan's directive to build 200-agent swarm for gap filling - Genesis is breaking the 44 gap items into atomic stories and dispatching to OpenRouter/Gemini agents in parallel.

reasoning_chain: 100 Kimi + 100 MiniMax via OpenRouter, or Gemini CLI swarm

source_context: I'll decompose it into 200 atomic stories and fire them through the OpenRouter swarm (100 Kimi + 100 MiniMax). Every gap gets an agent.


title: Widget click diagnostic chain

insight: Widget click does nothing → HTTPS required for WebRTC → file:// protocol doesn't support it → Deploy to Netlify for HTTPS → Voice works.

reasoning_chain:
Kinan reports widget click does nothing
Genesis identifies WebRTC needs HTTPS
file:// protocol is the blocker
Netlify deployment provides HTTPS
Voice will work on live site


type: METAPHOR

title: Marketing ready but product missing

insight: The product is like a beautiful storefront with no products on the shelves - landing page and marketing are polished but the actual revenue infrastructure doesn't exist yet.

reasoning_chain: But widget.js is 404, no billing, no auth

reasoning_chain: Can attract customers but can't serve them

source_context: The landing page and marketing collateral are polished and complete. But the actual product infrastructure -- everything needed to take a customer's money, give them a working widget, and track their usage -- does not exist.