diff --git a/docs/finance/2026-07-11-model-v2-controller-notes.md b/docs/finance/2026-07-11-model-v2-controller-notes.md new file mode 100644 index 0000000..7c99dc2 --- /dev/null +++ b/docs/finance/2026-07-11-model-v2-controller-notes.md @@ -0,0 +1,88 @@ +# Financial Model v2 — Notes for Next Iteration + +**Date:** 2026-07-11 +**Re:** Family Intelligence financial model (3-statement, base case, Sep-2026 start) +**Context:** The fundraising page and investor conversations will anchor on a +**$15M seed**. The current model raises $8.5M, so the model and the public ask +disagree by ~2x — an investor who sees both will read the $15M as unmodeled. +The next iteration should rebuild the seed round around $15M. Everything below +is in service of that. + +First: the model is structurally excellent — the statements tie (Check row zero +every month), the MOQ/lead-time inventory engine with supplier advances and +customer deposits is real rigor, and excluding Phase 3 licensing revenue is the +right kind of conservatism. The notes below are about assumptions and round +architecture, not structure. + +## 1. Re-size the seed to $15M + +- Rebuild the Use of Funds tab for $15M. The strategic goal of the larger raise: + **24+ months of runway past first ship** (i.e., through roughly month 36), + so the Series A is raised on a year-plus of sales data instead of two months. +- Today, cash bottoms at ~$2.7M in month 14 and the plan *requires* a $22M + Series A to close in month 15 — two months after first revenue. That is the + single riskiest assumption in the model: a 6-month A delay bankrupts the base + case. The $15M seed exists to remove that cliff; the new model should show + the company surviving a Series A that arrives 12 months later than hoped. +- Re-time the Series A accordingly (likely month ~30+ from month 15) and revisit + whether the Series B is needed in the base case at all — currently cash never + drops below ~$18.5M before the B lands, which invites "why are you raising it?" + Keeping it as an explicit war-chest/scenario option is fine; label it as such. + +## 2. Reconcile the cap table to the $15M raise + +The current cap table has $8.5M at $25M pre (25.4% to seed investors). At $15M, +one of these has to give: + +- $15M at $25M pre → ~37.5% dilution — likely a non-starter for founders. +- $15M at ~$45M pre → ~25% dilution — conventional, but a $45M pre-money + pre-revenue needs the deck/memo to justify it. +- Please model both, plus the sensitivity row in between, and flag the implied + step-up to the Series A pre-money in each case (the existing 2.0–2.5x healthy + step-up note is the right frame). +- Also confirm intent: SAFEs vs. priced round. The model assumes priced rounds + throughout; investor feedback (Delana Tran) specifically asked which it is. + +## 3. Add a tariff/duty line to unit COGS + +Hardware is manufactured in Taipei/Shenzhen and lands in the US. There is no +tariff or duty line in the unit COGS build (freight-in is included; duties are +not visible). Please add an explicit tariff assumption per SKU — even a +placeholder rate we can flex (e.g., 0% / 10% / 25% scenario). At the current +$360 flagship COGS, a 10–25% duty is $36–90/unit and moves net hardware gross +margin from 52.5% to roughly 48–43%, so this materially changes the margin +story we tell publicly. + +## 4. Pressure-test the assumptions that all lean optimistic + +None of these are unreasonable alone; together they all lean the same way, and +the public page will quote their outputs. Please add sensitivity (or revise the +base) for: + +- **Subscription churn: 1.5%/month** (66-month lifetime). What does 2.0–2.5% + do to subscription LTV ($510 today) and blended LTV:CAC (2.7x today)? At + 2.5% churn + $300 CAC, LTV:CAC is ~2.0x — we should know which number we're + defending. +- **Blended CAC: flat $250 for five years.** CAC nearly always rises as early + adopters exhaust. Consider a ramp, or at minimum a sensitivity row. +- **Returns & warranty reserve: 3% of hardware revenue.** Low end for consumer + hardware v1; 5% would be a more defensible base for a first-generation device. +- **Companion backup conversion: 95%.** Small dollar impact, but 95% of + anything is a red flag in diligence — consider 75–85%. + +## 5. Small items + +- The "Subscriptions billed annually %" input is unused (set to "-"); either + wire it up or remove it so diligence doesn't ask. +- Interest income at 3% on large idle balances is fine, but with the re-timed + rounds those balances shrink — just confirm it flows through. +- Model start month (Sep-2026) drives every label; if the raise timing slips, + remember the page no longer shows a date, but the model will — keep the + "Last updated" discipline here instead. + +## What we'll quote publicly (so you know what gets scrutiny) + +After Hugh reviews v2, the fundraising page will cite: net hardware gross +margin, blended LTV:CAC, and the EBITDA-breakeven point (month + cumulative +devices). Those three outputs are the ones to make bulletproof. The $899 / +$9-month pricing and the ~110k-device scale framing are going up now. diff --git a/docs/superpowers/plans/2026-07-11-fundraising-page-feedback.md b/docs/superpowers/plans/2026-07-11-fundraising-page-feedback.md new file mode 100644 index 0000000..da3b58d --- /dev/null +++ b/docs/superpowers/plans/2026-07-11-fundraising-page-feedback.md @@ -0,0 +1,547 @@ +# /fundraising Page Feedback Revision — Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Revise `www/app/fundraising/page.tsx` per the investor-feedback spec: single $15M ask below proof, "Investor Preview" retitle, named team block, section reorder to the standard pitch arc, verified category proof, stage-1 economics facts, and a three-phase trajectory diagram. + +**Architecture:** All changes live in one Next.js client page (`www/app/fundraising/page.tsx`), its layout metadata, one new presentational component (`TrajectoryDiagram`), and one copy-contract vitest file that asserts invariants against the page source text (no DOM test lib exists in this repo; source-text assertions are the cheapest regression guard for copy). + +**Tech Stack:** Next.js 16 / React 19, Tailwind 4, vitest 4 (existing `www/tests/` node-side suite). + +**Spec:** `docs/superpowers/specs/2026-07-11-fundraising-page-feedback-design.md` + +## Global Constraints + +- The string "$15M" must appear **exactly once** on the page (the Ask section). No "$25M" or ranges anywhere, including `layout.tsx` metadata. +- No dateline anywhere ("August · September 2026" must not appear). +- H1 is "Investor Preview". The mailto subject stays `Investor%20Memo%20Request` (the email requests the full memo — intentional). +- Preserve: `InlineEmailGate` mechanics (scrim, `localStorage` key `fi_fundraising_unlocked`, reveal timing), all existing `gtag`/`trackOutbound` calls and citation links, `AnimatedElement`/`QuoteBox`/`MediaRow`/`SectionHeader` usage patterns. +- Gate boundary after reorder: hero + Section I (The Context) ungated; Sections II–V gated. +- No model-derived figures (margins, LTV:CAC, breakeven month) on the page — stage 2 is blocked on the $15M re-model review. +- All commands run from `www/`. Test with `npm run test`, lint with `npm run lint`, build with `npm run build`. + +--- + +### Task 1: P1 mechanical fixes — hero, title, metadata + +**Files:** +- Modify: `www/app/fundraising/page.tsx` (hero header, lines ~72–118; opening QuoteBox, lines ~133–151) +- Modify: `www/app/fundraising/layout.tsx:3-5` +- Test: `www/tests/fundraising-copy.test.ts` (create) + +**Interfaces:** +- Produces: `www/tests/fundraising-copy.test.ts` with a `read(file)` helper later tasks extend. + +- [ ] **Step 1: Write the failing copy-contract test** + +Create `www/tests/fundraising-copy.test.ts`: + +```ts +import { describe, it, expect } from 'vitest' +import { readFileSync } from 'node:fs' +import path from 'node:path' + +const read = (rel: string) => + readFileSync(path.join(__dirname, '..', rel), 'utf8') + +const page = read('app/fundraising/page.tsx') +const layout = read('app/fundraising/layout.tsx') + +describe('fundraising page copy contract', () => { + it('has no dateline', () => { + expect(page).not.toMatch(/August · September/) + }) + + it('is titled Investor Preview (mailto subject may still say Investor Memo)', () => { + expect(page).toContain('Investor Preview') + // Plain-text "Investor Memo" (with a space) is gone; the mailto subject + // uses "Investor%20Memo", which this regex cannot match. + expect(page).not.toMatch(/Investor Memo/) + }) + + it('has no $25M or raise range anywhere', () => { + expect(page).not.toMatch(/25M/) + expect(layout).not.toMatch(/25M/) + }) + + it('hero contains no raise ask', () => { + const hero = page.slice(page.indexOf('')) + expect(hero).not.toMatch(/raising/i) + expect(hero).not.toMatch(/\$1?5M/) + }) +}) +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` +Expected: FAIL — dateline, "Investor Memo", "$15M–$25M" all still present. + +- [ ] **Step 3: Edit the hero in `page.tsx`** + +Replace the entire block between `
`'s inner column div (currently: dateline byline → H1 → H2 → ask byline) with: + +```tsx +
+ {/* H1 Title with Leaf */} + +

+ Investor Preview + +

+
+ + {/* H2 Subtitle */} + +

+ We're building a consumer hardware business and software platform for private intelligence. +

+
+
+``` + +(The H2 copy is rewritten in Task 4 — this task only deletes the dateline byline and the "$15M–$25M" ask byline, including its `email-underline.png` decoration.) + +- [ ] **Step 4: De-ask the opening QuoteBox** + +In the same file, change the opening QuoteBox `quote` prop from the "We're raising $15M–$25M to design, manufacture, and ship…" sentence to the thesis-only version: + +```tsx + quote={<>We're building the first device in a new category: beautiful consumer hardware running a fully local AI stack, where your most intimate data is understood, agentified, inferred against... but never exposed to the cloud.} +``` + +(All other QuoteBox props — `source`, `actionLabel`, `href`, `onClick` gtag — stay unchanged.) + +- [ ] **Step 5: Fix `layout.tsx` metadata** + +Replace lines 3–5 with: + +```ts +const title = "Fundraising · Family Intelligence"; +const description = + "The first device in a new category: beautiful consumer hardware running a fully local AI stack — private intelligence, never exposed to the cloud."; +``` + +- [ ] **Step 6: Run test to verify it passes** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` +Expected: PASS (4 tests) + +- [ ] **Step 7: Run the full suite and commit** + +Run: `cd www && npm run test && npm run lint` +Expected: all existing tests still pass, no lint errors. + +```bash +git add www/app/fundraising/ www/tests/fundraising-copy.test.ts +git commit -m "P1: drop dateline, retitle to Investor Preview, remove ask from hero + metadata" +``` + +--- + +### Task 2: Named team block + +**Files:** +- Modify: `www/app/fundraising/page.tsx` — the "Our Experience" section paragraph (currently the `

` beginning `We're patented inventors`) +- Test: `www/tests/fundraising-copy.test.ts` (extend) + +**Interfaces:** +- Consumes: `read()` helper and `page` constant from Task 1's test file. + +- [ ] **Step 1: Add failing tests** + +Append to the `describe` block in `www/tests/fundraising-copy.test.ts`: + +```ts + it('names the team', () => { + expect(page).toContain('Hugh Francis') + expect(page).toContain('Yatú Pelaez-Espinosa') + // Source uses an HTML entity for the apostrophe (O’Hagan) + expect(page).toMatch(/Norm O.{0,8}Hagan/) + }) + + it('does not claim the agency in past tense', () => { + expect(page).not.toMatch(/\bran\b.*agency/i) + expect(page).toMatch(/oversees/) + }) +``` + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` — Expected: FAIL (names absent). + +- [ ] **Step 2: Replace the anonymous experience paragraph** + +Replace the single `

` beginning `We're patented inventors…` with two paragraphs (no titles, per spec): + +```tsx +

+ The three of us have spent our careers building intimate, human-centric hardware.{" "} + Hugh Francis founded trackOutbound('garden3d')}>garden3d and Sanctuary Computer, and oversees a $6mm+ design & development studio. He's a patented inventor for architecting trackOutbound('light_phone')}>The Light Phone II & III (named among TIME Magazine's Best Inventions in 2019 and 2025), architected trackOutbound('mill')}>Mill's IoT infrastructure (from the founders of Google's Nest), and holds direct relationships in Taipei and Shenzhen with Foxconn, Arima, Coosea, and other top-tier contract manufacturers. +

+ +

+ Yatú Pelaez-Espinosa & Norm O’Hagan are a product duo with 10+ years of creative collaboration: they founded trackOutbound('usb_club')}>USB Club, a hardware-enabled social network, founded the Advanced Concepts hardware team at trackOutbound('world')}>Sam Altman's World, researched new educational models at Other Internet, and in past lives designed at IBM and early Plaid. +

+``` + +Note: this intentionally consumes the `light_phone`, `usb_club`, `world`, and `mill` links from the deleted paragraph — no citation is lost. The AT&T mention is dropped (weakest credential, per the tighter memo bios). + +- [ ] **Step 3: Run tests, lint, commit** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts && npm run lint` +Expected: PASS. + +```bash +git add www/app/fundraising/page.tsx www/tests/fundraising-copy.test.ts +git commit -m "P1: named team block — Hugh + Yatú & Norm, no titles, present-tense agency" +``` + +--- + +### Task 3: Section reorder to the pitch arc + Ask section + gate boundary + +**Files:** +- Modify: `www/app/fundraising/page.tsx` (whole gated region) +- Test: `www/tests/fundraising-copy.test.ts` (extend) + +**Interfaces:** +- Produces: five `SectionHeader` sections — "The Context" (I), "The Device" (II), "Why This Wins" (III), "Who We Are" (IV), "The Ask" (V). Task 4 inserts copy into I–III; Task 5 inserts the diagram into III. + +- [ ] **Step 1: Add failing tests** + +Append: + +```ts + it('follows the pitch arc section order', () => { + const order = ['The Context', 'The Device', 'Why This Wins', 'Who We Are', 'The Ask'] + const idx = order.map((t) => page.indexOf(`title="${t}"`)) + expect(idx.every((i) => i >= 0)).toBe(true) + expect([...idx].sort((a, b) => a - b)).toEqual(idx) + expect(page).not.toContain('Business Concept') + expect(page).not.toContain('Our Experience') + }) + + it('asks for $15M exactly once, in The Ask section', () => { + expect(page.match(/\$15M/g)).toHaveLength(1) + expect(page.indexOf('$15M')).toBeGreaterThan(page.indexOf('title="The Ask"')) + }) + + it('gates from The Device onward; The Context is public', () => { + const gateStart = page.indexOf('/* ===== Email gate') + expect(page.indexOf('title="The Context"')).toBeLessThan(gateStart) + expect(page.indexOf('title="The Device"')).toBeGreaterThan(gateStart) + }) +``` + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` — Expected: FAIL. + +- [ ] **Step 2: Restructure the page body** + +This is a **move-only** step: existing JSX blocks are relocated verbatim (identified below by their bold lead-ins and current line ranges from the pre-task-1 file); the only *new* JSX is the Ask section (full code below). Target skeleton inside `
`: + +```tsx + {/* ===== I. THE CONTEXT — public teaser ===== */} + +
+
+ {/* KEEP: opening thesis QuoteBox (de-asked in Task 1) */} +
+ {/* MOVE HERE (out of the gated div):

beginning + "We're starting with families, then branching out" + (Pew 70% + Instagram/Mozilla links) */} + {/* MOVE HERE:

beginning "From there, the same stack extends" + (open-models + chipsets links, "AI as an offline appliance") */} + + {/* ===== Email gate: everything below fades until verified ===== */} +

+
+ + {/* ===== II. THE DEVICE ===== */} +
+ +
+ {/* MOVE HERE: MediaRow with moment-1 / family-together / moment-3 + ("Play tests for our early industrial designs.") */} + {/* Task 4 adds the lived-experience paragraph above the MediaRow */} + + {/* ===== III. WHY THIS WINS ===== */} +
+ +
+ {/* MOVE HERE:

beginning "Big AI labs can't afford to compete" + (Signal/Telegram moat argument) */} + {/* MOVE HERE:

beginning "The device will be sold at a premium" */} + {/* MOVE HERE: QuoteBox "This is a proven model" (Signal backups) */} + {/* MOVE HERE:

beginning "Our stack is licensable, too" (balena) */} + + {/* ===== IV. WHO WE ARE ===== */} +

+ +
+ {/* MOVE HERE: the two team paragraphs from Task 2 */} + {/* MOVE HERE: MediaRow with signal-source / family-together.webp / + moment-video ("We've built and scaled...") */} + {/* MOVE HERE:

beginning "We've built a working prototype" + — but strip its trailing ask/email sentence; keep prototype, + full-memo, and NYC/SF sentences. The email CTA moves to V. */} + + {/* ===== V. THE ASK ===== */} +

+ +
+ +
+ We're raising $15M to design, manufacture, and ship the first device in this category — with the runway to prove it in families' homes. It's the same stack every private-intelligence product after it will run on.} + showQuotes={false} + source="Email us for the full memo & a demo" + actionLabel="invest@intelligence.family" + href="mailto:invest@intelligence.family?subject=Investor%20Memo%20Request" + onClick={() => { + if (typeof window !== 'undefined' && window.gtag) { + window.gtag('event', 'email_click', { + event_category: 'engagement', + event_label: 'investor_memo_request_ask', + value: 1, + }); + } + }} + /> +
+ +
{/* /gated content */} + {/* KEEP: scrim + InlineEmailGate block exactly as-is */} +
{/* /email gate wrapper */} +
+``` + +Rules for the move: +- Move blocks **verbatim** — do not touch copy, links, or `trackOutbound` labels in this task. +- The old "Our Prototype & Memo" paragraph loses only its final sentence (`If you'd like a demo, please email us at …` through the underlined mailto span) — that CTA is superseded by the Ask QuoteBox. Keep "please" politeness in the Ask QuoteBox `source` line implicitly ("Email us for the full memo & a demo"). +- The scrim `
` (GATE_SCRIM background, `InlineEmailGate` at `top: 400`) and all state logic (`unlocked`, `revealing`, `handleUnlock`, `GATE_LOCKED_STYLE`) are unchanged. + +- [ ] **Step 3: Run tests to verify pass** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` +Expected: PASS. + +- [ ] **Step 4: Visual smoke-check the gate** + +Run: `cd www && npm run dev` and open `http://localhost:3000/fundraising` (clear the `fi_fundraising_unlocked` localStorage key + `fi_verified` cookie first). +Expected: hero + The Context fully readable; content fades into the scrim just after "The Device" header; email form sits in the fade; reveal animation still smooth after entering a code (or temporarily set `localStorage.fi_fundraising_unlocked = '1'` to check the unlocked layout). Adjust `GATE_LOCKED_STYLE.maxHeight` / gate `top` **only if** the teaser clip looks wrong (e.g. cuts mid-image); keep changes minimal. + +- [ ] **Step 5: Lint, full suite, commit** + +Run: `cd www && npm run test && npm run lint` + +```bash +git add www/app/fundraising/page.tsx www/tests/fundraising-copy.test.ts +git commit -m "P2: reorder to pitch arc (Context/Device/Why/Who/Ask), single \$15M ask, gate from The Device" +``` + +--- + +### Task 4: New narrative copy — hero lane, lived-experience, category proof, stage-1 economics + +**Files:** +- Modify: `www/app/fundraising/page.tsx` +- Test: `www/tests/fundraising-copy.test.ts` (extend) + +**Interfaces:** +- Consumes: section skeleton from Task 3 (insertion points named there). + +- [ ] **Step 1: Add failing tests** + +```ts + it('opens on the category-creation lane', () => { + expect(page).toContain('new category of computing') + }) + + it('cites verified category proof', () => { + expect(page).toMatch(/tonies/i) + expect(page).toContain('Yoto') + expect(page).toContain('630') + expect(page).toContain('86%') + }) + + it('has stage-1 economics only (no model outputs)', () => { + expect(page).toContain('$899') + expect(page).toContain('$9/month') + expect(page).toContain('110,000') + expect(page).not.toMatch(/52\.5|2\.7x|LTV/) + }) +``` + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` — Expected: FAIL. + +- [ ] **Step 2: Rewrite the hero H2** + +```tsx +

+ Private intelligence is a new category of computing: AI that lives in your home, works offline, and answers to no one. We're starting with the family. +

+``` + +- [ ] **Step 3: Add the lived-experience paragraph** + +Insert in Section II (The Device), above the play-test MediaRow: + +```tsx +

+ The device is a living archive of your family. It sits on the kitchen shelf, and when you invite it into the conversation it can resurface the story your grandfather told last Thanksgiving, find the recording of your daughter's first words, and help your kids interview their grandparents while they still can. Everything it hears and remembers stays inside the house. That's the unlock: an AI families actually welcome at the dinner table, because it works for them and no one else. +

+``` + +- [ ] **Step 4: Add the category-proof sentence** + +Insert in Section III (Why This Wins), directly after the "premium consumer price point / encrypted backup" paragraph: + +```tsx +

+ Family-focused hardware plus subscription is a proven category: trackOutbound('tonies_proof')}>tonies built a public company on it (€630M revenue in FY2025, up 31%, at a record EBITDA margin), and trackOutbound('yoto_proof')}>Yoto grew 86% last year to £95M with backing from the Chan Zuckerberg Initiative. +

+``` + +- [ ] **Step 5: Add the stage-1 economics line** + +Insert in Section III, after the licensing/balena paragraph (last content before Section IV): + +```tsx +

+ The math is simple: an $899 device, a $9/month end-to-end encrypted backup subscription, and a five-year plan built on ~110,000 devices — roughly 0.05% of the 200M+ English-speaking households we're selling into. +

+``` + +(Stage 2 — margin, LTV:CAC, breakeven — is added only after the $15M re-model is reviewed. See spec item 9.) + +- [ ] **Step 6: Tests, lint, commit** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts && npm run lint` +Expected: PASS. + +```bash +git add www/app/fundraising/page.tsx www/tests/fundraising-copy.test.ts +git commit -m "P2: category-lane hero, lived-experience beat, tonies/Yoto proof, stage-1 economics" +``` + +--- + +### Task 5: Trajectory diagram component + +**Files:** +- Create: `www/components/TrajectoryDiagram.tsx` +- Modify: `www/app/fundraising/page.tsx` (import + render in Section V, above the Ask QuoteBox) +- Test: `www/tests/fundraising-copy.test.ts` (extend) + +**Interfaces:** +- Produces: `export default function TrajectoryDiagram(): JSX.Element` — no props, self-contained, fi-green palette. + +- [ ] **Step 1: Add failing test** + +```ts + it('renders the trajectory diagram', () => { + expect(page).toContain(' +
+ {PHASES.map((phase, i) => ( +
+
+ {phase.label} + {phase.title} + {phase.detail} +
+ {i < PHASES.length - 1 && ( + + )} +
+ ))} +
+
+ + The private intelligence stack, built once: local inference · e2e-encrypted sync · zero-knowledge fleet tooling + +
+
+ Phase 1's fleet is Phase 3's reference customer. +
+ + ); +} +``` + +- [ ] **Step 3: Render it in the page** + +In `page.tsx`: add `import TrajectoryDiagram from "@/components/TrajectoryDiagram";` and render `` in Section V, between the "The Ask" `SectionHeader` and the $15M QuoteBox (the ask lands immediately after the reader sees how it compounds). + +- [ ] **Step 4: Visual check + tests + commit** + +Run: `cd www && npx vitest run tests/fundraising-copy.test.ts` — Expected: PASS. +Run dev server; confirm the diagram reads correctly at mobile width (panels stack vertically, arrows hidden) and desktop. Confirm `fi-green` classes exist in the Tailwind theme (they're used by QuoteBox with `border-fi-green-500/50`, so they do — if a class variant is missing, borrow the exact classes QuoteBox uses). + +```bash +git add www/components/TrajectoryDiagram.tsx www/app/fundraising/page.tsx www/tests/fundraising-copy.test.ts +git commit -m "P3: three-phase trajectory diagram with shared stack bar" +``` + +--- + +### Task 6: Full verification + +**Files:** none new. + +- [ ] **Step 1: Full test suite** — `cd www && npm run test` → all pass (copy-contract + existing OTP/CRM suites). +- [ ] **Step 2: Lint + format** — `cd www && npm run lint && npm run format:check` (run `npm run format` if check fails, re-stage). +- [ ] **Step 3: Production build** — `cd www && npm run build` → succeeds with no type errors. +- [ ] **Step 4: Manual walkthrough** — dev server, fresh profile (no cookie/localStorage): + - Hero: "Investor Preview", category H2, no date, no ask. + - Public: thesis QuoteBox + The Context readable; gate fade starts after "The Device" header. + - Complete a real OTP flow (or set the localStorage key) → reveal animation → all five sections in order → single $15M ask at the bottom with diagram above it. + - Link previews: view page source, confirm `og:description` has no dollar figure. +- [ ] **Step 5: Commit any fixups; report status** — including test output — before merging/PR (use superpowers:finishing-a-development-branch). +``` diff --git a/docs/superpowers/specs/2026-07-11-fundraising-page-feedback-design.md b/docs/superpowers/specs/2026-07-11-fundraising-page-feedback-design.md new file mode 100644 index 0000000..3ce531e --- /dev/null +++ b/docs/superpowers/specs/2026-07-11-fundraising-page-feedback-design.md @@ -0,0 +1,132 @@ +# /fundraising Page — Investor Feedback Revision + +**Date:** 2026-07-11 +**Target:** `www/app/fundraising/page.tsx` +**Source feedback:** Notion "Feedback" doc (Leyna Chiang, Toby Shorin, Delana Tran), evaluated against the live page from an investor's perspective. + +## Context & Decisions + +The page is a public teaser that will spread beyond warm intros, so it is designed +for the least-context (cold) reader. Decisions made during brainstorming: + +| Decision | Choice | +|---|---| +| Audience | Mixed / will spread — treat as cold | +| Raise ask | Single figure: **$15M** (range removed). Controller re-models the seed at $15M targeting 24+ months post-launch runway; page ships with $15M regardless since the model is being rebuilt to match. | +| Team framing | Named, no titles: Hugh + Yatú & Norm ("the three of us") | +| Opening lane | Category creation ("private intelligence is a new category of computing"), immediately backed by traction | +| Scale math on page | Two-stage: raise-proof pricing/scale facts now; model figures (margin, LTV:CAC, breakeven) only after Hugh reviews the re-modeled financials. No projections on the public page. | + +### Feedback explicitly ignored (with reasons) + +- Leyna's "please" copy nit — already addressed on the page; she retracted it. +- Leyna's "traditional memo with projections" — resolved by retitling to "Investor Preview"; projections stay in the gated full memo. +- Toby's time-to-profitability graph — comparable-company profitability data is unverifiable; replaced by a cited category-proof sentence. +- Delana's data room (Docsend/Papermark) — superseded by the email-OTP verification work (`feat/email-otp-verification`). +- Domain whitelisting on the email gate — Hugh is handling in another branch. + +## P1 — Red-flag removal (mechanical, do first) + +1. **Delete the dateline.** Remove "August · September 2026" byline (both hero + occurrences). No replacement on the public page. +2. **Retitle** "Investor Memo" → **"Investor Preview"** (hero H1). The mailto + subject "Investor Memo Request" stays as-is — the email requests the full + memo, which remains a memo; only the page is a preview. +3. **Single ask, below proof.** Remove "$15M–$25M" from the hero byline and from + the opening QuoteBox. The ask appears exactly once — "$15M" — in a QuoteBox in + the final section (after team/traction), with the `invest@intelligence.family` + CTA. The opening QuoteBox becomes the category thesis statement (no dollar figure). +4. **Named team block.** Replace the anonymous "We're patented inventors" paragraph + with named bios, no titles: + - **Hugh Francis** — founded garden3d, Sanctuary Computer, Index Space; oversees + a $6mm+ design & development agency (present tense — he still runs it); + patented for architecting The Light Phone II & III (TIME Best Inventions 2019 + & 2025); architected Mill's IoT infrastructure; direct CM relationships + (Foxconn, Arima, Coosea); conversational business/engineering Chinese. + - **Yatú Pelaez-Espinosa & Norm O'Hagan** — product duo with 10+ years of + collaboration; founded USB Club (raised $1.2mm); founded the Advanced + Concepts team at World (a Sam Altman company); researchers at Other + Internet; previously designed at IBM and early Plaid. + +## P2 — Narrative restructure + +5. **Full section reorder** per the standard pitch arc (problem → solution → + momentum → ask): + - **Hero** — category thesis, no ask, no date + - **I. The Context** — the problem: ~70% of Americans distrust Big AI with + their data yet use AI daily (existing Pew link); why now: open models trail + frontier by months, consumer chips can run them (existing links) + - **II. The Device** — the solution: lived-experience beat + play-test images + - **III. Why This Wins** — moat (Signal argument), business model (encrypted + backup subscription + licensing), category proof + - **IV. Who We Are** — team block (P1.4), Light Phone/Mill/World credentials, + traction (working prototype, Mozilla research 28k+ impressions, CM + relationships) + - **V. The Ask** — $15M, once, email CTA + - Section names/numerals updated accordingly ("Business Concept" no longer exists). +6. **Rewrite hero H2** to the category-creation lane. Direction: "Private + intelligence is a new category of computing" — AI that lives in your home, + works offline, answers to no one — starting with the family. The first gated + paragraph must immediately back the ambition with the Mozilla research traction. +7. **Lived-experience beat.** One paragraph in section II painting the + living-wiki moment (device at the dinner table, resurfacing family memories + and stories) fused with the privacy thesis — bridging "distrusts Big AI" → + "wants this in my home." +8. **Category-proof sentence** in section III, with source links, matching the + page's cited-claim style: + > Family-focused hardware + subscription is a proven category: Tonies built a + > public company doing €630M/yr on it (FY2025, +31%, record adjusted EBITDA); + > Yoto grew 86% last year to £95M. + - Sources: tonies FY2025 press release (mynewsdesk/EQS); Music Ally Yoto 2024 + revenue article. Tin Can may be cited as a demand signal only (no numbers), + or omitted. +9. **Unit-economics proof line** (gated section) — two stages: + - **Stage 1 (ship now, raise-proof facts only):** pricing and market-sliver + framing — an $899 device, a $9/mo end-to-end-encrypted backup subscription, + and a five-year plan built on ~110k devices: roughly 0.05% of the 200M+ + English-speaking household market. Pricing is a product decision; the + device count is scale framing, not a profitability claim. + - **Stage 2 (after the $15M re-model and Hugh's review):** add the model + figures — net hardware gross margin, LTV:CAC, EBITDA-breakeven point. + Current draft values (52.5%, 2.7x, month 41) are expected to move with + the tariff line, churn/CAC stress tests, and the new spend plan; do not + publish until reviewed. See `docs/finance/2026-07-11-model-v2-controller-notes.md`. + +## P3 — Diagram + +10. **Three-phase trajectory diagram** (also fills the "Business Trajectory + Expansion Graphic" placeholder in the Notion memo). Composition: + - Three phase panels left → right: Phase 1 "One product, one market" + (family device + subscription, 200M households) → Phase 2 "One stack, + many markets" (legal · journalism · healthcare SKUs) → Phase 3 "One + stack, every hardware company" (platform licensing + fleet management). + - A shared foundation bar under all three: "The private intelligence stack + (built once): local inference · e2e-encrypted sync · zero-knowledge fleet + tooling." This bar is the load-bearing idea — built once, monetized three ways. + - Caption: "Phase 1's fleet is Phase 3's reference customer." + - Lives in section III or V; must match the page's existing visual language + (fi-green palette, serif headings). + +## Out of scope (tracked elsewhere) + +- Controller brief: re-model seed at $15M (24+ months post-launch runway), add + tariff/duty line to unit COGS, pressure-test churn (1.5%/mo), CAC ($250 flat), + returns reserve (3%), and reconcile pre-money/dilution ($15M at $25M pre = + ~37.5% dilution; a ~$45M pre implies ~25%). +- Email gate domain whitelisting (Hugh, separate branch). +- Full memo (Notion) edits. + +## Implementation notes + +- All changes are within `www/app/fundraising/page.tsx` (plus any new image asset + for the diagram under `www/public/fundraising/`). +- Preserve: email gate mechanics (`InlineEmailGate`, scrim, localStorage), + gtag tracking calls (update `event_label`s where copy changes meaning), + existing citation links, `AnimatedElement` usage, QuoteBox/MediaRow/ + SectionHeader components. +- The gate boundary may shift with the reorder: the hero + section I (The + Context) should read as the ungated teaser; gate from section II onward. + Keep the teaser clip height (`GATE_LOCKED_STYLE.maxHeight`) visually correct + after reordering. +- Verify with the running app that the locked/reveal states still render + correctly after the restructure. diff --git a/www/app/fundraising/layout.tsx b/www/app/fundraising/layout.tsx index 9183200..60dfee2 100644 --- a/www/app/fundraising/layout.tsx +++ b/www/app/fundraising/layout.tsx @@ -1,8 +1,8 @@ -import type { Metadata } from "next"; +import type { Metadata } from 'next'; -const title = "Fundraising · Family Intelligence"; +const title = 'Fundraising · Family Intelligence'; const description = - "We're raising $25M to ship the first device in a new category: beautiful consumer hardware running a fully local AI stack, never exposed to the cloud."; + 'The first device in a new category: beautiful consumer hardware running a fully local AI stack. Private intelligence, never exposed to the cloud.'; export const metadata: Metadata = { title, diff --git a/www/app/fundraising/page.tsx b/www/app/fundraising/page.tsx index 6793e37..d039189 100644 --- a/www/app/fundraising/page.tsx +++ b/www/app/fundraising/page.tsx @@ -1,13 +1,13 @@ 'use client'; -import { useState, useEffect } from "react"; -import type { CSSProperties } from "react"; -import SectionHeader from "@/components/SectionHeader"; -import QuoteBox from "@/components/QuoteBox"; -import MediaRow from "@/components/MediaRow"; -import LeafIcon from "@/components/LeafIcon"; -import InlineEmailGate from "@/components/InlineEmailGate"; -import { AnimatedElement } from "@/components/PageAnimations"; +import { useState, useEffect } from 'react'; +import type { CSSProperties } from 'react'; +import SectionHeader from '@/components/SectionHeader'; +import QuoteBox from '@/components/QuoteBox'; +import MediaRow from '@/components/MediaRow'; +import LeafIcon from '@/components/LeafIcon'; +import InlineEmailGate from '@/components/InlineEmailGate'; +import { AnimatedElement } from '@/components/PageAnimations'; function trackOutbound(label: string) { if (typeof window !== 'undefined' && window.gtag) { @@ -21,7 +21,8 @@ function trackOutbound(label: string) { // Fixed-px gradient so the teaser fade reads identically whether the scrim // sits over the clipped teaser or over the full content mid-reveal. -const GATE_SCRIM = 'linear-gradient(to bottom, rgba(215,221,212,0) 0px, rgba(215,221,212,0) 96px, var(--fi-green-100) 300px)'; +const GATE_SCRIM = + 'linear-gradient(to bottom, rgba(215,221,212,0) 0px, rgba(215,221,212,0) 96px, var(--fi-green-100) 300px)'; const GATE_LOCKED_STYLE: CSSProperties = { maxHeight: 460, @@ -32,10 +33,19 @@ const GATE_LOCKED_STYLE: CSSProperties = { export default function Fundraising() { const [unlocked, setUnlocked] = useState(false); const [revealing, setRevealing] = useState(false); + // The FigJam embed stays inert until clicked so scrolling over it moves the + // page, not the canvas; mousing away re-locks it. Touch devices have no + // mouseleave to re-lock with, so they never activate: without this the + // near-full-viewport canvas would trap page scrolling after one tap. + const [figmaActive, setFigmaActive] = useState(false); + const activateFigma = () => { + if (window.matchMedia('(hover: hover)').matches) setFigmaActive(true); + }; useEffect(() => { try { - if (localStorage.getItem('fi_fundraising_unlocked') === '1') setUnlocked(true); + if (localStorage.getItem('fi_fundraising_unlocked') === '1') + setUnlocked(true); } catch {} }, []); @@ -52,12 +62,17 @@ export default function Fundraising() { // Fully locked (teaser clipped) vs. revealing/unlocked. While locked the // gated region is inert so keyboard users can't tab into the clipped links. const locked = !unlocked && !revealing; - const gatedStyle: CSSProperties | undefined = locked ? GATE_LOCKED_STYLE : undefined; + const gatedStyle: CSSProperties | undefined = locked + ? GATE_LOCKED_STYLE + : undefined; return (
{/* Back link */} - +
- - August · September 2026 - - {/* H1 Title with Leaf */} -

- Investor Memo +

+ Investor Preview -

- We're building a consumer hardware business and software platform for private intelligence. +

+ Private intelligence is a newly possible category of + computing.

{/* Byline */} + AI that runs local in your home, your office, your hand. +
- We're raising $15M–$25M + We're starting with families. -
- to ship our first device.

@@ -120,169 +142,637 @@ export default function Fundraising() { {/* ===== SECTION: Single-column teaser ===== */}
-
-
-
-
-
- -
- - -
-
- We're raising $15M–$25M to design, manufacture, and ship the first device in a new category: beautiful consumer hardware running a fully local AI stack, where your most intimate data is understood, agentified, inferred against... but never exposed to the cloud.} - showQuotes={false} - source="Email us to learn more" - actionLabel="invest@intelligence.family" - href="mailto:invest@intelligence.family?subject=Investor%20Memo%20Request" - onClick={() => { - if (typeof window !== 'undefined' && window.gtag) { - window.gtag('event', 'email_click', { - event_category: 'engagement', - event_label: 'investor_memo_request_callout', - value: 1, - }); - } - }} - /> -
- - {/* ===== Email gate: everything below fades until an email is submitted ===== */} -
-
- -

- We're starting with families, then branching out. There are ~84 million households in the US alone, and 200M+ across the English-speaking world. It's a safe place to prove our technology: high value emotionally, low stakes legally. trackOutbound('pew_trust')}>Nearly 70% of Americans don't trust Big AI with their data, but trackOutbound('research_instagram')}>the Instagram response to our research (across 28k+ impressions, with Mozilla Foundation) was overwhelmingly positive: privacy-preserving AI architecture is what wins customers over. -

- -

- From there, the same stack extends to any industry where private data needs inference: law, journalism, healthcare, and any organization that's regulated or conscientious about trust. This product category is newly possible: trackOutbound('models_shrink')}>open models now trail frontier cloud models by just months, and trackOutbound('chips_grow')}>consumer chipsets are fast enough to run them. This is AI that no one can surveil or turn off. It runs in your home without internet, with no server to go dark and no company that can revoke it. AI as an offline appliance. -

- -
- -
- -

- Big AI labs can't afford to compete in this category. The hyperscalers' core business depends on your data living in their cloud; building a private, on-device stack is diametrically opposed to how they work. Even a privacy-forward cloud is still a cloud: your data still goes to someone else's server, and you have to trust that no one looks at it. Our industrial design will be high taste and hard to replicate, but truly local, encrypted, and privacy-preserving inference is our real moat. There's a reason Google hasn't cloned Signal or Telegram. -

- -

- The device will be sold at a premium consumer price point, but the memories it holds are irreplaceable, and families will pay extra to never lose them. We sell a recurring, end-to-end encrypted cloud backup, where the keys live only with the family and the data syncs as an opaque vault we cannot open. All inference runs locally; the cloud is a sealed mirror. -

- -
- This is a proven model: Signal now trackOutbound('signal_backups')}>charges for encrypted backups, Telegram for Premium, Apple for trackOutbound('apple_adp')}>Advanced Data Protection on iCloud+, and Proton, 1Password, Bitwarden, Tresorit, and Standard Notes all run profitable subscriptions on zero-knowledge encryption their own servers can't read. We're applying the same architecture to the most precious archive a family owns.} - showQuotes={false} - source="" - actionLabel="Signal's Private Backups" - actionHref="https://signal.org/blog/introducing-secure-backups/" - onActionClick={() => trackOutbound('signal_backups_footer')} - /> -
- -

- Our stack is licensable, too. The infrastructure under the family device (on-device inference, encrypted sync, and fleet tooling that updates thousands of devices without ever reading their contents) is what a hospital network or a law firm needs to run AI on data that can't leave the building. Think a platform company like trackOutbound('balena')}>balena, but for specialist IoT fleets that run private inference at the edge. The consumer arena hardens our tech, then we license it to enterprises. -

- -
- -
- -

- We're patented inventors for our work architecting and shipping trackOutbound('light_phone')}>The Light Phone II & III (named among TIME Magazine's Best Inventions in both 2019 and 2025). We've built hardware-enabled social networks like trackOutbound('usb_club')}>USB Club, and led advanced-concepts hardware teams for trackOutbound('world')}>Sam Altman's World, AT&T, trackOutbound('mill')}>Mill (from the founders of Google's Nest), and more. We hold direct relationships in Taipei and Shenzhen with Foxconn and other top-tier contract manufacturers, and we understand, in detail, how hardware is built and launched at scale. -

- -
- -
+
+
+
+
+
+ +
+ {/* ===== I. THE CONTEXT — public teaser ===== */} + - - -

- We've built a working prototype and written a full investor memo: product, unit economics, go-to-market, and the three-phase path from a single device to a platform company powering every privacy-conscious hardware maker. Our team lives in New York City and San Francisco. If you'd like a demo, please email us at{" "} - - +

+ +

+ + We're starting with families, then branching out + + . There are ~84 million households in the US alone, and + 200M+ across the English-speaking world. It's a + safe place to prove our technology: high value + emotionally, low stakes legally.{' '} + trackOutbound('pew_trust')} > - invest@intelligence.family + Nearly 70% of Americans don't trust Big AI + {' '} + with their data, but{' '} + trackOutbound('research_instagram')} + > + the Instagram response to our research + {' '} + (across 28k+ impressions, with Mozilla Foundation) was + overwhelmingly positive:{' '} + + privacy-preserving AI architecture is what wins + customers over + + . +

+ +

+ From there,{' '} + + the same stack extends to any industry where private + data needs inference + + : law, journalism, healthcare, and any organization + that's regulated or conscientious about trust. This + product category is newly possible:{' '} + trackOutbound('models_shrink')} + > + open models now trail frontier cloud models by just + months - - . -

- -
{/* /gated content */} - - {!unlocked && ( -
-
- + , and{' '} + trackOutbound('chips_grow')} + > + consumer chipsets are fast enough to run them + + . This is AI that no one can surveil or turn off. It + runs in your home without internet, with no server to go + dark and no company that can revoke it.{' '} + AI as an offline appliance. +

+ + {/* ===== Email gate: everything below fades until verified ===== */} +
+
+ {/* ===== II. OUR FIRST DEVICE ===== */} +
+ +
+ +

+ + This device is a living archive of your family. + {' '} + It sits on the kitchen shelf, and when you invite it + into the conversation it can resurface the story + your grandfather told last Thanksgiving, find the + recording of your daughter's first words, and + help your kids interview their grandparents while + they still can. Everything it hears and remembers{' '} + stays inside the house, so everyone + can rest easy knowing their cherished memories are + captured for them, and them alone. +

+ +
+ +
+ + {/* ===== III. WHY THIS WINS ===== */} +
+ +
+ +

+ + Family-focused hardware plus subscription is a + proven category + + :{' '} + trackOutbound('tonies_proof')} + > + tonies built a public company on it + {' '} + (€630M revenue in FY2025, up 31%, at a record + adjusted EBITDA margin), and{' '} + trackOutbound('yoto_proof')} + > + Yoto grew 86% in 2024 to £95M + {' '} + with backing from{' '} + trackOutbound('czi_yoto')} + > + the Chan Zuckerberg Initiative + + . +

+ +

+ + Big AI labs can't afford to compete in this + category + + . The hyperscalers' core business depends on + your data living in their cloud; building a private, + on-device stack is diametrically opposed to how they + work. Even a privacy-forward cloud is still a cloud: + your data still goes to someone else's server, + and you have to trust that no one looks at it. Our + industrial design will be high taste and hard to + replicate, but{' '} + + truly local, encrypted, and privacy-preserving + inference is our real moat + + . There's a reason Google hasn't cloned Signal or + Telegram. +

+ +

+ The device will be sold at a premium consumer price + point, but the memories it holds are irreplaceable, + and families will pay extra to never lose them.{' '} + + We sell a recurring, end-to-end encrypted cloud + backup + + , where the keys live only with the family and the + data syncs as an opaque vault we cannot open. All + inference runs locally; the cloud is a sealed + mirror. +

+ +
+ + This is a proven model: + Signal now{' '} + + trackOutbound('signal_backups') + } + > + charges for encrypted backups + + , Telegram for Premium, Apple for{' '} + trackOutbound('apple_adp')} + > + Advanced Data Protection + {' '} + on iCloud+, and Proton, 1Password, Bitwarden, + Tresorit, and Standard Notes all run + profitable subscriptions on zero-knowledge + encryption their own servers can't read. + We're applying the same architecture to + the most precious archive a family owns. + + } + showQuotes={false} + source="" + actionLabel="Signal's Private Backups" + actionHref="https://signal.org/blog/introducing-secure-backups/" + onActionClick={() => + trackOutbound('signal_backups_footer') + } + /> +
+ +

+ Our stack is licensable, too. The + infrastructure under the family device (on-device + inference, encrypted sync, and fleet tooling that + updates thousands of devices without ever reading + their contents) is what a hospital network or a law + firm needs to run AI on data that can't leave + the building. Think a platform company like{' '} + trackOutbound('balena')} + > + balena + + , but for specialist IoT fleets that run private + inference at the edge. The consumer arena hardens + our tech, then{' '} + we license it to enterprises. +

+ +
+
setFigmaActive(false)} + > +