What we’ve shipped.
Pulled live from specs/launch-plan.mdon every build. The most recent entry is what’s on production now.
- 2026-05-08
Step 31 (Agent disclaimers · Foundation-first onboarding · Spec process rule) complete. Five agents flagged for legal/financial liability: counsel + capper (kind: legal), numbersmith + boardprep + orgwright (kind: financial). lib/disclaimers.ts holds the per-agent disclaimer (kind, version, title, body, banner). New `agent_acceptances` table (self-heals per Step 17a — primary key (user_id, agent_id, version), stores accepted_at + ip_address + user_agent for evidence). `GET /api/agent-acceptance?agent=<id>` returns acceptance state; `POST /api/agent-acceptance` records acceptance with IP/UA from headers (rate-limited 30/10min). `<DisclaimerGate>` wraps the agent run page — full-modal disclaimer with checkbox blocks the UI until accepted, then renders children with a persistent always-on banner ("Drafts only — not legal advice. Accepted YYYY-MM-DD."). `/api/agents/run` enforces the same gate server-side: returns `{ ok:false, code:"no-disclaimer" }` 403 if no acceptance row matches the current version. Bumping a version in lib/disclaimers.ts re-prompts every user. Build-stage agent order changed from `[counsel, capper, recruiter, researcher, pitchwright]` to `[researcher, pitchwright, recruiter, capper, counsel]` so legal stops being the default suggested agent. Home + result panel walk new founders through 5 foundation fields (companyName → oneLiner → problem → solution → targetCustomer) via QuickCapture before any agent CTA appears; FirstRunModal stays dismissed until foundation is complete. Process rule added to launch-protocols.md §0: every product/policy decision must land in specs/; overrides EDIT prior text in place — never append a contradicting rule. Full disclaimer system docs in `specs/agent-disclaimers.md`.
- 2026-05-08
Step 30 (Launch readiness checker · Final spec consolidation) complete. /api/admin/launch-readiness deep-probes 12 required env vars (Anthropic, Clerk pub/secret, DATABASE_URL, Resend, Polar token + webhook secret, PostHog public + admin, Sentry DSN, Composio, Blob), 14 optional env vars (Sentry source maps, Resend webhook signing, Cron secret, Google + Bing verification, UptimeRobot, Vercel/Mercury/Carta/Greenhouse/Gusto/Rippling/Segment/Loom direct integration tokens), 11 database tables via SELECT 1 (users, profiles, briefs, wallets, wallet_entries, runs, integrations, brand_settings, email_sends, artifact_shares, newsletter_subscribers), and 6 public endpoints via HEAD (/api/health, /sitemap.xml, /robots.txt, /.well-known/security.txt, /manifest.webmanifest, /changelog/feed.xml). Returns `{ counts: { pass, warn, fail, total }, checks }`. /admin/launch-readiness UI consumes it: summary tiles + grouped lists with green/yellow/red pills + re-run button. AdminShell adds "Launch readiness" between Services and Observability. env-vars.md mentions /api/admin/credit-user as ledger recovery tool. launch-protocols.md gains §17 covering steps 17–30 patterns (self-healing tables, persistent runs hydration, suggest/broadcast, RSS feed). All 30 launch steps shipped — agenteam5.com is fully ready.
- 2026-05-08
Step 29 (Changelog RSS · Credit-user · Agent template fillers) complete. /changelog/feed.xml renders RSS 2.0 from launch-plan change log; metadata.alternates.types adds RSS discovery link. /admin/users replaced with manual wallet adjustment form (POST /api/admin/credit-user) — credits or debits permanent_balance, writes ledger entry tagged with admin email; rate-limited 60/hour/admin. Agent page (/app/agents/[id]) empty state lists templatesForAgent(agentId) as one-click prompt fillers — click to populate the input.
- 2026-05-08
Step 28 (Suggest engine · Broadcast · First-run modal) complete. /api/suggest reads briefs + integrations + runs + wallets and ranks suggestions (brief gap weight 100, missing integration 80, re-engagement nudge 70, first-run 90, Pro upsell 60). components/SuggestCard mounted at top of /app home. /admin/broadcast composer: audience picker (newsletter / users / both deduped), live HTML preview, test-send (30/10min), real-send (1/hour rate-limited, with confirm dialog). Auto-appends unsubscribe link if missing. components/FirstRunModal shows on first /app visit (localStorage gate); 3 quick-start prompt links + dismissible.
- 2026-05-08
Step 27 (Library cross-device · Landing auto-router · /help) complete. Library room (/app/library) inherits Step 26's DB-hydrated runs hook automatically — no code change needed. components/LandingRouter mounts before LandingDemo on landing: free-form prompt textarea + sample dropdown → POST /api/agents/route-pick → renders picked agent + reason + "Run it on my company" CTA that routes through the existing template handoff (writes pending-template entry then /sign-up?template=landing-<ts>). /help public FAQ across 6 areas (Getting started · Agents · Integrations · Billing · Privacy · Stuck) with FAQPage JSON-LD; sitemap covers /help + /mcp.
- 2026-05-08
Step 26 (Runs hydration · Spec refresh · Landing demo) complete. /api/runs/list returns the user's recent runs (limit 200/500); useRuns() hydrates local cache + DB on mount + merges (local wins on conflict so streaming-in-progress isn't overwritten). env-vars.md gains 8 self-serve direct integration entries (Vercel, Mercury, Carta, Greenhouse, Gusto, Rippling, Segment, Loom) + SHARE_SECRET + UPTIMEROBOT + cron secret note. runbook.md adds 4 procedures (add direct integration, observability quickstart, IndexNow ping, runs table backfill caveat). components/LandingDemo simulates a Pitchwright run streaming a baked deck-cover output character-by-character with brand styling + sign-up CTA after; mounted between Stage band and How-it-works on landing.
- 2026-05-08
Step 25 (Persist runs · Observability · Share OG · Skip onboarding) complete. /api/runs/save upserts agent run rows on completion (rate-limited 60/min/user, body capped at 200KB); lib/runs.ts upsert() fires persistRun() for terminal-state runs. /admin/observability server-renders 5 lists (users, runs, ledger, shares, newsletter subs) + 4 totals + cross-links to PostHog/Sentry. Admin nav adds "Observability" between Services and Admin. /share/[id]/opengraph-image.tsx renders dynamic per-artifact share card (title + 220-char excerpt + brand frame). Onboarding gains "Skip for now — just let me explore" link that seeds a minimal default profile + routes to /app.
- 2026-05-08
Step 24 (Template handoff · Newsletter unsubscribe · IndexNow) complete. lib/template-handoff.ts persists pending template id in localStorage between /templates click → /sign-up → /onboarding → /app/agents/[agent]?prompt=encoded; agent page reads ?prompt= and pre-fills the input. /api/newsletter/unsubscribe + /unsubscribe page + email link in newsletter confirmation. /api/cron/indexnow daily ping to Bing + Yandex with full sitemap URL list. IndexNow key file at /public/<key>.txt.
- 2026-05-08
Step 23 (Auto agent router · Newsletter · MCP docs) complete. /api/agents/route-pick uses Haiku 4.5 to classify a free-form prompt and return { agent, reason } as strict JSON; rate-limited per user/IP. newsletter_subscribers table self-heals in /api/newsletter/subscribe; rate-limited 5/hour/IP; sends a Resend confirmation email; captures PostHog newsletter_subscribed event. components/NewsletterForm mounted under landing's final CTA. /mcp public page documents bring-your-own MCP server flow + email-to-onboard. UNAVAILABLE set in lib/composio.ts shrinks to {mcp} and the tile points at /mcp.
- 2026-05-08
Step 22 (5 direct integration scaffolds · Polar refunds · Public artifact share · Templates gallery) complete. lib/direct-integrations.ts helper. /api/integrations/data/{carta-cap-table,greenhouse-pipeline,gusto-headcount,rippling-headcount,segment-sources} all auto-activate when their respective env keys are added. SELF_SERVE_INTEGRATIONS replaces UNAVAILABLE_INTEGRATIONS for these (only mcp truly unavailable now). Polar webhook handles order.refunded + refund.created → reverseTokens() inserts negative ledger entry + decrements permanent_balance (clamped at zero). Polar webhook events list updated to include refund types (registered via API). artifact_shares table self-heals in /api/share/run; mintable POST + revokable DELETE; public /share/[id] page renders Markdown body + bumps view counter + has CTA to sign up. Share-publicly button on every agent run (+20 tokens). lib/templates.ts holds 17 starter prompts across all 10 agents. /templates public page groups them by agent + ItemList JSON-LD + sign-up CTA per template.
- 2026-05-08
Step 21 (Calendar widget · Slack digest · Notion saver · Loom · Mobile tables) complete. /api/integrations/data/calendar-events via Composio googlecalendar (next 7 days). components/CalendarWidget mounted in /app/inbox. /api/cron/slack-digest fires weekdays 13:00 UTC; for each Slack-connected user sends Morning Coffee digest with run count + recent artifacts + tokens spent. /api/integrations/data/notion-save POST creates a page in user's Notion via Composio executeAction(NOTION_CREATE_PAGE); "Save to Notion · +15 tokens" button on every agent run output. /api/integrations/data/loom-recent ready for LOOM_API_KEY env var. Admin + cookie-policy tables wrapped overflow-x-auto + min-width to prevent mobile overflow.
- 2026-05-08
Step 20 (email_sends self-heal · Real /admin/emails · Deploy health · /press · Mercury) complete. Cron route self-heals email_sends table on first run (no manual migration). /admin/emails reads /api/admin/emails-activity which combines email_sends row counts with PostHog email_delivered/opened/clicked/bounced events grouped by campaign — open % and click % per template. /admin Morning Coffee shows Deploy health card (READY/BUILDING/ERROR counts + last 6 commits). /press kit page reads getBrand() + lists logo + colors + boilerplate + founder bio + press contact email. /api/integrations/data/mercury-balance scaffolded — pulls accounts + 30d transactions + computes runway when MERCURY_API_KEY env is set. Sitemap covers /press.
- 2026-05-08
Step 19 (Avatar, Promo codes, Referral firing, Inbox→Gmail, Vercel deploys, Reduced motion) complete. Clerk <UserButton /> mounted in AppShell header for avatar upload + account management. Promo code field on /app/wallet → /api/polar/checkout looks up promo_codes table → forwards Polar discountId; uses tracked + dedup via increment. lib/referral.ts + welcome route fires 500-token signup reward to referrer; polar webhook fires 2,000-token first-purchase reward to referrer (idempotent via ledger reason match). Inbox page fetches /api/integrations/data/gmail-inbox for live Gmail threads with kind classification (investor/contract/stripe/calendar/general). /api/integrations/data/vercel-deployments wraps Vercel REST API for build health (last ready, last error, recent 10). VERCEL_API_TOKEN stored. prefers-reduced-motion CSS media query honored at OS level on top of the explicit data-motion="reduced" preference.
- 2026-05-08
Step 18 (Brief→DB · GDPR export · 3 connected rooms · 6 SEO landing pages · Resend webhook · Services tab) complete. /api/profile/brief GET/PATCH backs the founder brief in briefs table; useBrief() debounces writes 500ms. /api/account/export streams full JSON dump (users + profiles + briefs + wallets + walletEntries + runs + streaks + quests + integrations + emailVerifications + emailSends) — link from /app/settings danger zone. MetricsRoom reads PostHog HogQL (DAU/WAU/MAU + stickiness + 7d signups/runs/purchases). ProductRoom reads GitHub recent repos via Composio executeAction(GITHUB_LIST_REPOS). CustomersRoom reads Stripe customer list via Composio. /pitch /build /launch /scale per-stage SEO landing pages (lib/stage-landing.ts) with stage-specific features + top agents + outcomes. /founder-os category page (4 principles + agents grid + FAQ JSON-LD). /ai-for-founders category page (10 jobs AI nails + 5 it shouldn't + FAQ JSON-LD). /api/resend/webhook validates Svix signatures, forwards email.delivered/opened/clicked/bounced to PostHog as `email_<event>` keyed on recipient + inferred campaign; webhook registered (id 1342499f) + RESEND_WEBHOOK_SECRET stored. /admin/services live-probes 12 providers with status pills + latency + manage links. Apex agenteam5.com no longer redirects at platform level — Next handles 308 → www so HSTS preload directive is preserved. UPTIMEROBOT_API_KEY stored. SENTRY_AUTH_TOKEN + SENTRY_ORG=agenteam5 + SENTRY_PROJECT=agenteam stored; source map upload enabled in next.config. Google + Bing site verifications live (NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION + NEXT_PUBLIC_BING_SITE_VERIFICATION). BingSiteAuth.xml served from /public.
- 2026-05-07
Step 17 (Brand consumers + DB-backed admin + brief editor + connected-data rooms) complete. Root layout generateMetadata/generateViewport read brand. AppShell + Footer + manifest read from BrandProvider/useBrand. Backlog + marketing plays moved off localStorage to /api/admin endpoints. /app/settings has founder-brief inline editor. FinanceRoom renders live Stripe revenue via Composio (last 30d, all-time gross, top customer). Pricing Pro yearly shows "Save $78" pill.
- 2026-05-07
Step 16 (Brand admin) complete. New brand_settings table (singleton id=1). lib/brand.ts cached reader. /api/admin/brand GET/PUT/DELETE with hex + length validation. /api/admin/brand/upload via Vercel Blob (needs BLOB_READ_WRITE_TOKEN env). /admin/brand UI with live preview tile, logo + favicon upload, color pickers, font selectors. Admin nav adds Brand entry. Consumer wiring (AppShell, footer, OG image, manifest reading from getBrand()) is the next pass.
- 2026-05-07
Step 15 (Cost-control, account delete, lifecycle drip, /vs, admin DB) complete. /api/agents/run rate-limited per Clerk user (30/5min). Account delete: /api/account/delete + two-step UI in /app/settings (cascade-deletes DB + Clerk + posthog reset). Lifecycle drip: email_sends table + /api/cron/lifecycle (Vercel Cron daily 14:00 UTC) + 3 new templates (day3 / day7 / day30). /vs/[competitor] × 8 SEO pages from getCompetitors() + /vs index + Article JSON-LD. Per-agent OG images via generateImageMetadata. Multiple enrichers per agent: Numbersmith→Stripe, Boardprep→Stripe+GitHub, Recruiter→GitHub. Admin backlog + marketing plays moved to DB API endpoints (still need consumer refactor). Resend domain DNS confirmed live globally; verifier still pending on Resend's side but emails sending fine.
- 2026-05-07
Step 14 (Per-agent SEO, changelog, CSP, Coldforge↔Gmail) complete. 10 per-agent landing pages at /agents/[id] generated from lib/agent-landing.ts (headline, meta, subhead, use cases, sample run, pull quote, related). /agents index page. /changelog auto-rendered from this spec. CSP header (self + Clerk + PostHog EU + Sentry DE + Composio + Polar; blocks framing). Rate-limited /api/polar/checkout (10/5min/user) + /api/integrations/connect (30/5min/user). lib/agent-context.ts enriches Coldforge + Researcher prompts with Gmail context via Composio executeAction when connected — fails open. Sitemap covers /agents/* and /changelog. Footer Product column expanded. Plus 3 companion specs: launch-protocols.md, env-vars.md, runbook.md.
- 2026-05-07
Step 13 (Rate limits, About, Status, Composio actions, next/font) complete. lib/rate-limit.ts in-memory token-bucket applied to /api/contact (5/10min IP), /api/verify (3/10min IP), /api/welcome (1/hour user). /api/contact upgraded with HTML escaping + Resend forward. /pricing FAQPage JSON-LD + per-route OG image. /about + /status pages. lib/composio.ts adds isUserConnected() + executeAction(). next/font/google for Outfit + Inter (self-hosted, no render-blocking link).
- 2026-05-07
Step 12 (Pricing, 404, headers, manifest, welcome email) complete. /pricing public page with Free/Pro pillars + token packs + FAQ + JSON-LD ItemList. app/not-found.tsx branded 404. /.well-known/security.txt (RFC 9116). app/manifest.ts + app/apple-icon.tsx (180×180 brand mark). next.config.ts headers(): HSTS preload, X-Content-Type-Options, X-Frame-Options, strict Referrer-Policy, Permissions-Policy. /api/health public endpoint. Brand rename Agenteam → Agenteam5. /api/welcome triggers Resend welcome email on onboarding finish.
- 2026-05-07
Step 11 (Legal, compliance, a11y, indexing) complete. Cookie consent banner gates PostHog (opt-out by default; honours DNT + GPC). 5 legal pages shipped under app/(legal): /privacy, /terms, /cookies, /acceptable-use, /security — plain-English, accurate to actual sub-processors, IL governing law, 14-day refund window. Footer redesigned with Product/Legal/Contact columns; brand renamed Agenteam→Agenteam5 everywhere. Google + Bing Site Verification meta tags read from NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION / NEXT_PUBLIC_BING_SITE_VERIFICATION env vars (placeholder until Alona registers and pastes codes). Sitemap updated to cover all 8 indexable pages. Skip-to-content link + #main landmark + standardised :focus-visible ring tied to brand accent. SOC certification status documented honestly on /security (not certified, framework-aligned, available for customer questionnaire). Site is now launch-ready end-to-end.
- 2026-05-07
Step 10 (Integrations via Composio) wired. COMPOSIO_API_KEY + COMPOSIO_BASE_URL added. lib/composio.ts wraps v3 REST. /api/integrations/connect/[provider] + /api/integrations/status routes. /app/integrations now does real OAuth via Composio managed auth: tile click → server initiates connection → user OAuth → callback to /app/integrations?connected=<id> → server status sync confirms. 22 of 31 tiles live (gmail, calendar, slack, notion, stripe, github, linear, hubspot, mixpanel, posthog, amplitude, intercom, zendesk, salesforce, brex, docusign, figma, zoom, discord, twitter, linkedin, supabase). 9 marked "coming soon" with lock icon: segment, greenhouse, gusto, rippling, mercury, carta, loom, vercel, mcp.
- 2026-05-07
Step 9 (SEO basics) complete. app/sitemap.ts + app/robots.ts shipped. app/opengraph-image.tsx generates a 1200×630 brand-coloured OG card via next/og (twitter-image re-exports). components/JsonLd.tsx adds Organization + SoftwareApplication structured data on landing. Sign-in (noindex) + Sign-up metadata tightened. metadataBase set on root layout so OG/Twitter URLs resolve. All 9 launch-prep steps done — agenteam5.com is real-payment-ready. Next: integrations expansion (Step 10).
- 2026-05-07
Step 8 (Sentry) complete. SENTRY_DSN + NEXT_PUBLIC_SENTRY_DSN added (DE region). @sentry/nextjs installed. sentry.client/server/edge.config.ts + instrumentation.ts (with Sentry.captureRequestError) + next.config wrapped with withSentryConfig. error.tsx + global-error.tsx capture render errors with retry CTA. /api/polar/checkout + /api/polar/webhook catch-blocks pipe exceptions via Sentry.captureException with route + event_type tags. Step 9 (SEO) next, then integrations expansion.
- 2026-05-07
Step 7 (PostHog) complete. Project "Agenteam5" on EU host, NEXT_PUBLIC_POSTHOG_KEY + HOST + POSTHOG_PERSONAL_API_KEY + POSTHOG_PROJECT_ID added to Vercel. posthog-js + posthog-node installed. PostHogProvider initializes browser SDK, identifies signed-in Clerk user, captures pageviews on App Router route changes. Custom events wired: signup_complete (onboarding finish), agent_run_start (3 call sites: home, agent page, workflow shell), verification_email_sent (api/verify), pack_purchase + pro_start + pro_end (polar webhook server-side via posthog-node). Morning Coffee KPI grid now fetches /api/admin/analytics which runs HogQL queries (visitors, signups, active-now, returning, paid, conversion) with prev-period comparison. Step 8 (Sentry) next.
- 2026-05-07
Step 6 (Anthropic key) complete. ANTHROPIC_API_KEY added (sensitive, prod+preview). Live agent runs work end-to-end on www.agenteam5.com.
- 2026-05-07
Step 5 (Polar) complete. POLAR_ACCESS_TOKEN + POLAR_ORG_ID + POLAR_WEBHOOK_SECRET + 6 product-id env vars added to Vercel. 6 products auto-created via Polar API (Starter $10, Builder $45, Operator $200, Scale $750, Pro monthly $39, Pro yearly $390). @polar-sh/sdk installed. /api/polar/checkout + /api/polar/webhook routes live. Webhook endpoint registered with Polar (id 5d13db08, listens to order.paid + subscription.*). Wallet page + TokenWall buttons hit real checkout, redirect to Polar, success returns to /app/wallet?purchase=success. Webhook credits permanent_balance via wallet_entries on order.paid; activates Pro on subscription.active. Step 6 (Anthropic key) next.
- 2026-05-07
Step 3 (Clerk auth) complete. NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY + CLERK_SECRET_KEY added to Vercel env. @clerk/nextjs installed; middleware protects /admin + sensitive /app routes; /sign-in + /sign-up routes built. DB schema migrated (13 tables created in Neon via /api/admin/db-migrate route). Step 4 (Resend) in progress.
- 2026-05-07
Step 2 (Neon Postgres) complete. DATABASE_URL + 15 related vars live in Production + Preview. Vercel API token in hand for steps 3+. Step 3 (Clerk) in progress.
- 2026-05-07
Spec expanded to full per-step ask + scope-of-work breakdown.
- 2026-05-07
Step 1 complete (domain + www both pointing to Vercel). Step 2 in progress (Neon via Vercel Storage).
- 2026-05-07
Initial plan written. Step 1 in progress.