From 2b76c45620153eb7a0bec4acd033ddc59574a45a Mon Sep 17 00:00:00 2001 From: pat Date: Sat, 29 Aug 2026 20:36:15 +0000 Subject: [PATCH 01/65] docs: ratify product-health metrics (2026-08-29) Activation 20/35 from access-key date; campaign contributor waitlist 50/100; post-key submissions 10/25 in 90 days; renewal 40/60 excluding lifetime; curation SLA demoted from launch bar. --- AiBook_PRD.md | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/AiBook_PRD.md b/AiBook_PRD.md index 09d4f07..d4dcff0 100644 --- a/AiBook_PRD.md +++ b/AiBook_PRD.md @@ -4,7 +4,7 @@ type: prd status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-26 +last-updated: 2026-08-29 --- # 📚 AIBook.fun — Product Requirements Document @@ -249,12 +249,18 @@ metrics; those measure the *campaign*, not the *product.* A funded campaign can dead product if nobody activates, renews, or contributes. ### Product health (report these first) -| Metric | Floor | Target | Why it matters | -|:--|:--|:--|:--| -| **Activation** — read 1 workflow + do 1 Try-it in 14 days | 20% | 35% | The North-Star. Is the core loop actually useful? | -| **Workflow submissions** during campaign window | 10 | 25 | Early signal that Layer 2 (contribution) is real | -| **Renewal rate** — year-1 cohort | — | 60% | Is a *subscription* the right model at all? | -| **Curation turnaround** ≤ 10 working days | 80% | 95% | Can we keep quality without becoming the bottleneck? | + +**Ratified 2026-08-29 (Product).** These are the numbers we run. Do not quote the 60% renewal target on Kickstarter or any public surface. + +| Metric | Floor | Target | Clock / notes | Why it matters | +|:--|:--|:--|:--|:--| +| **Activation** — read 1 workflow + finish 1 Try-it | 20% | 35% | **14 days from access-key date, not pledge date.** North-Star. | Is the core loop actually useful? | +| **Contributor waitlist** during the campaign | 50 | 100 | People who *say* they will contribute a workflow. Not written recipes. | Early Layer-2 signal without betting launch on cold-start writing | +| **Workflow submissions** | 10 | 25 | First **90 days after keys go out** | Is paid/open contribution real once the library exists? | +| **Renewal rate** — year-1 **paid** cohort | 40% | 60% | **Exclude lifetime SKUs** from the denominator. 60% is internal. | Is a *subscription* the right model at all? | +| **Curation turnaround** ≤ 10 working days | 80% | 95% | **Ops SLA after Layer 2 is on** — not a launch health bar | Can we keep quality without becoming the bottleneck? | + +Leading indicator before fulfillment: % of the pre-launch list who run the *sample* Try-it. ### Campaign performance (the fundraise) | Metric | Min | Target | Stretch | @@ -284,8 +290,9 @@ dead product if nobody activates, renews, or contributes. registrar login.)* 2. **Resolve the pricing spine together — lifetime ([D-1](#10-open-decisions)) *and* royalties ([D-2](#10-open-decisions)).** They're linked, and both block copy freeze. -3. **Ratify the North-Star + the product-health floors** (§8) so we're measuring the right - thing from Day 1. +3. **~~Ratify the North-Star + the product-health floors~~ Done 2026-08-29.** Locked in §8: + activation 20/35 from access date; campaign waitlist 50/100; post-key submissions 10/25 in + 90 days; renewal 40/60 excluding lifetime; curation SLA not a launch bar. 4. **Ratify the Minimum Lovable Library number and assign every workflow an author** (§5.2). 5. **Confirm the two unconfirmed co-authors** (Higher Ed, Communities) or re-scope those verticals out of v1. From 353d749b52082cbca0c078f4ccf9aa76e05f3e9a Mon Sep 17 00:00:00 2001 From: pat Date: Sat, 29 Aug 2026 20:36:16 +0000 Subject: [PATCH 02/65] docs: point Spec activation clock at access key; metrics ratified 2026-08-29 --- AiBook_Spec.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AiBook_Spec.md b/AiBook_Spec.md index eca52de..3c4646c 100644 --- a/AiBook_Spec.md +++ b/AiBook_Spec.md @@ -4,7 +4,7 @@ type: spec status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-26 +last-updated: 2026-08-29 companions: [AiBook_PRD.md, AiBook_Implementation_Plan.md] --- @@ -56,7 +56,8 @@ ambition — but an engine needs one cylinder firing before you add the rest. He Everything else the product wants to be — a contributor economy, a cohort program, an onboarding corpus for AI agents — is a **layer built on top of this loop**, and only worth building once the loop demonstrably works. We measure that with one number, **Activation**: *did -a reader run at least one workflow within 14 days?* (Full metric set in [PRD §8](AiBook_PRD.md).) +a reader run at least one workflow and finish one Try-it within 14 days of getting access +(access key, not pledge)?* Floors/targets ratified 2026-08-29 — full set in [PRD §8](AiBook_PRD.md). ### The product in layers | Layer | What | When | From 82acad15f203915cfdfb455b77eed784bf44fa6f Mon Sep 17 00:00:00 2001 From: pat Date: Sat, 29 Aug 2026 20:36:17 +0000 Subject: [PATCH 03/65] docs: mark Gate 0.3 product-health ratification done (2026-08-29) --- AiBook_Implementation_Plan.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AiBook_Implementation_Plan.md b/AiBook_Implementation_Plan.md index ed14817..0513610 100644 --- a/AiBook_Implementation_Plan.md +++ b/AiBook_Implementation_Plan.md @@ -4,7 +4,7 @@ type: implementation-plan status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-26 +last-updated: 2026-08-29 companions: [AiBook_PRD.md, AiBook_Spec.md] --- @@ -33,13 +33,13 @@ Before any copy or build locks, close these. Most are decisions or de-risking, n |:--|:--|:--|:--| | 0.1 | **Renew aibook.fun today.** It expires 09-05; launch is 09-26. | Whoever holds the registrar login | It's a chore, not a decision. A lapsed domain 3 weeks before launch is a self-inflicted disaster. | | 0.2 | **Decide the pricing spine — lifetime *and* royalties together** (D-1 + D-2). | Commercial lead (@GTM) | Both block copy freeze; they're linked (see [Spec §6](AiBook_Spec.md)). | -| 0.3 | **Ratify the North-Star + product-health floors** (activation, submissions, renewal). | Product (@pat) + team | So we measure the right thing from Day 1, not just dollars. | +| 0.3 | **~~Ratify the North-Star + product-health floors~~ Done 2026-08-29.** Activation 20/35 from access date; campaign waitlist 50/100; post-key submissions 10/25 in 90 days; renewal 40/60 excluding lifetime; curation is an ops SLA, not a launch bar. See PRD §8. | Product (@pat) | Locked. Don't quote 60% renewal publicly. | | 0.4 | **Ratify the Minimum Lovable Library number and assign every workflow an author.** | Product + co-authors | This is the #1 risk; turn it from hope into owned work. | | 0.5 | **Confirm the two unconfirmed co-authors, or cut their verticals from v1** (D-3). | Commercial lead (@GTM) | Scope certainty before outline lock. | | 0.6 | Open the claims register; assign a post-campaign renewal owner. | Product + Commercial | Truth-in-claims gate; don't leave renewal unstaffed. | | 0.7 | Set up the Kickstarter creator account + identity verification. | Campaign lead (@THY) | Long lead time; do it early. | -**✅ Gate 0 — decisions closed.** Pricing spine decided · targets ratified · Minimum Lovable +**✅ Gate 0 — decisions closed.** Pricing spine decided · **targets ratified (2026-08-29)** · Minimum Lovable Library scoped with authors · domain renewed · claims register open. *Until pricing is decided, don't freeze copy. Until the domain is renewed, don't push anything live.* From 9dfdf07ce3bb49a0ddafb8a0358445067df2ca55 Mon Sep 17 00:00:00 2001 From: pat Date: Sun, 30 Aug 2026 23:25:57 +0000 Subject: [PATCH 04/65] =?UTF-8?q?docs:=20lock=20reading=20IA=20=E2=80=94?= =?UTF-8?q?=20chapters=20as=20essays=20with=20nested=20full=20workflows=20?= =?UTF-8?q?(2026-08-31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AiBook_PRD.md | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/AiBook_PRD.md b/AiBook_PRD.md index d4dcff0..14d2123 100644 --- a/AiBook_PRD.md +++ b/AiBook_PRD.md @@ -4,7 +4,7 @@ type: prd status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-29 +last-updated: 2026-08-31 --- # 📚 AIBook.fun — Product Requirements Document @@ -142,8 +142,9 @@ the structural answer to "how do I know this AI advice isn't hallucinated?" | **Costs** | Model/tool costs where known — honesty about the economics | | **Author & sources** | Who wrote it, when, for which vertical, with citations | -**Chapters** are curated collections of these recipes, one set per vertical: Real Estate · -Financial Advisors · Fractional C-Suite · Higher Ed · Communities · Technology. **Editions** +**Chapters** are substantial essays, one per vertical (Real Estate · Financial Advisors · +Fractional C-Suite · Higher Ed · Communities · Technology), with full Workflow Recipes +**nested in the argument**. See [§5.4](#54-the-reading-surface-locked-2026-08-31). **Editions** refresh annually — which is the honest justification for a *subscription* rather than a one-time purchase: the content genuinely goes stale as AI changes. @@ -172,6 +173,49 @@ decision, not a nice-to-have**, because the entire "living book" thesis depends --- +### 5.4 The reading surface (locked 2026-08-31) + +People read **chapters**, not a shelf of detached cards. A chapter is a substantial essay +for one vertical: it argues a way of working, then **nests full workflows inside that +argument** as the proof. + +This is a deliberate break from treating the workflow as the only page. The workflow is +still the unit of *practice* (and of activation). The chapter is the unit of *reading*. + +**Chapter page** +- Title, vertical, edition, authors +- Opening promise (what this chapter is for) plus a **Skip to a Try-it** control — activation + must not require finishing the essay +- Essay body: sections that teach the practice (stakes, constraints, how we work here) +- Nested **Workflow blocks** at the points in the argument they earn — not bunched in an appendix +- End matter: further workflows in this vertical, sources, last updated + +**Nested workflow block** (the recipe, in full — not a teaser) +1. Chrome: recipe ID, version, time, cost +2. Title as the job +3. Problem +4. Actors +5. Setup (tools, sample files, cost) +6. **Safeguards before the steps** so data-handling is read before anyone pastes a client list +7. Method, with real tool output *in* the steps +8. Evidence +9. Try-it (~15 min, sample data, mark complete — fires Activation) +10. Share result (community template; events, not content) +11. Author, sources, last updated + +**Addressability** +- Every workflow has a stable ID (e.g. `RE-04`) and a URL that opens the chapter scrolled to + that block (and a focused/print view of the same block). Campaign samples, clone-and-run + kits, and Workflow-of-the-Week link here — never to an essay with no way in. +- PDF matches this stack: chapter essay + in-place recipes. Print and web must not drift. + +**Non-goals for the reader** +- No chatbot on the chapter page +- No crypto/Web3 language +- Nested recipes are not collapsed “click to reveal” cards that hide the Method + +--- + ## 6. Requirements Priorities: 🔴 must-have for 9/26 · 🟡 should-have (launch window) · 🟢 post-launch. From 46d366e6b0ce0ae547ea85ffc6fa358897c05807 Mon Sep 17 00:00:00 2001 From: pat Date: Sun, 30 Aug 2026 23:25:57 +0000 Subject: [PATCH 05/65] docs: chapters are the reading unit; workflows nest in the essay --- AiBook_Spec.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/AiBook_Spec.md b/AiBook_Spec.md index 3c4646c..b1cb008 100644 --- a/AiBook_Spec.md +++ b/AiBook_Spec.md @@ -4,7 +4,7 @@ type: spec status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-29 +last-updated: 2026-08-31 companions: [AiBook_PRD.md, AiBook_Implementation_Plan.md] --- @@ -147,9 +147,11 @@ answer to "how do I know this isn't hallucinated AI advice?" | **Costs** | Model/tool costs where known — honesty about economics | | **Author & sources** | Who, when, which vertical, with citations | -**Chapters** are curated collections of these per vertical. **Editions** refresh annually — +**Chapters** are the reading unit: a substantial essay per vertical, with **full workflows +nested in the argument** (not a table of contents of cards). **Editions** refresh annually — which is the honest justification for a *subscription*: AI moves fast enough that a static book -goes stale, so the value is in staying current. +goes stale, so the value is in staying current. Reading IA locked 2026-08-31; see +[PRD §5.4](AiBook_PRD.md). ### 4.2 Seed the shelf before you sell tickets (the cold-start rule) The value proposition is a rich library. The failure mode is a near-empty one. Crowd-sourced From 10ef165596da9e70076c092572eeffc4e4c8a16d Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:16:36 +0000 Subject: [PATCH 06/65] =?UTF-8?q?docs:=20sign=20D-1/D-2=20=E2=80=94=20$47/?= =?UTF-8?q?yr,=20no=20v1=20lifetime=20SKU,=20founding=20writers=20on=20con?= =?UTF-8?q?tract;=20domain=20renewed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AiBook_PRD.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/AiBook_PRD.md b/AiBook_PRD.md index 14d2123..2f89c14 100644 --- a/AiBook_PRD.md +++ b/AiBook_PRD.md @@ -246,8 +246,8 @@ Requirements are grouped by the layer they serve; **most 🔴 items serve the co | ID | Requirement | Pri | |:--|:--|:--| | A-1 | Post-campaign access: a digital key unlocks PDF + web reader for 12 months, renews annually | 🟢 | -| A-2 | Anchor price **$47/yr** *(draft — needs commercial re-sign)* + hardcopy at-cost upcharge | 🔴 | -| A-3 | Lifetime tier — **decision required before copy freeze** (see [D-1](#10-open-decisions)) | 🟡 | +| A-2 | Anchor price **$47/yr** *(signed 2026-08-31)* + hardcopy at-cost upcharge. No lifetime SKU as an equal product. | 🔴 | +| A-3 | Lifetime tier — **not offered as a v1 SKU** (D-1 signed 2026-08-31: $47/yr only). Revisit only as a capped early-bird later, not as an equal product. | 🟢 | | A-4 | Fulfillment ledger: backer ↔ key/upcharge tracked (a spreadsheet is fine for v1) | 🟢 | ### 6.4 The other layers — mostly 🟡 / 🟢 @@ -280,7 +280,7 @@ Requirements are grouped by the layer they serve; **most 🔴 items serve the co | NFR-3 | **Privacy:** no confidential client data in any workflow or campaign asset; track events, not content. | | NFR-4 | **Availability:** landing page up through the campaign; emails on schedule; affiliate tracking live from Day 1 (the 30-day cookie means every hour of Day 1 counts). | | NFR-5 | **Content quality:** every workflow passes the Recipe template + at least one co-author review. | -| NFR-6 | **Domain continuity:** aibook.fun must not lapse (it currently expires 09-05 — see [§9](#9-immediate-next-steps)). | +| NFR-6 | **Domain continuity:** aibook.fun must not lapse (**renewed 2026-08-31**). | | NFR-7 | **Accessibility:** reader and landing page are mobile-readable, targeting WCAG AA. | | NFR-8 | **Cost discipline:** pre-revenue burn stays within the ~$6K budget ([Appendix C](#appendix-c--budget)). | @@ -329,11 +329,10 @@ Leading indicator before fulfillment: % of the pre-launch list who run the *samp ## 9. Immediate next steps **This week — decisions and de-risking (before any copy or build locks):** -1. **Renew aibook.fun today.** It expires 09-05; launch is 09-26. This is a chore, not a - strategic decision — do it now and delete it from the risk list. *(Owner: whoever holds the - registrar login.)* -2. **Resolve the pricing spine together — lifetime ([D-1](#10-open-decisions)) *and* royalties - ([D-2](#10-open-decisions)).** They're linked, and both block copy freeze. +1. **~~Renew aibook.fun~~ Done.** Domain renewed (confirmed 2026-08-31). Launch remains 09-26. +2. **~~Resolve the pricing spine (D-1 / D-2)~~ Done 2026-08-31.** Anchor is **$47/yr**. No + lifetime SKU as an equal product. Founding writers are engaged **on contract** — v1 is an + authored book; open royalties are not the v1 mechanic. Copy freeze is unblocked on price. 3. **~~Ratify the North-Star + the product-health floors~~ Done 2026-08-29.** Locked in §8: activation 20/35 from access date; campaign waitlist 50/100; post-key submissions 10/25 in 90 days; renewal 40/60 excluding lifetime; curation SLA not a launch bar. @@ -364,8 +363,8 @@ decision-maker has a starting point — but the recommendation is not yet a deci | # | Decision | Recommendation | Blocks | |:--|:--|:--|:--| -| **D-1** | **Lifetime tier — offer it, and at what price?** A ~$97–147 lifetime breaks even against $47/yr in ~2–3 years, which *undercuts the recurring-revenue thesis.* | **Pick a spine.** Keep $47/yr as the anchor. If you want a lifetime option, frame it *only* as a bounded early-bird instrument to capitalize the community fund (capped quantity), not the default SKU. Don't ship recurring + lifetime as equals. | KS copy freeze | -| **D-2** | **Contributor payment — how do people earn for *writing workflows* (not just referring)?** Today the only paid mechanic is affiliate referral. | **Resolve before launch.** This is the engine of the "living book." Decide: royalty pool, per-accepted-workflow bounty, or an explicit "v1 is authored, paid contribution ships in Q1" — but decide, don't leave blank. | The core value prop | +| **D-1** | ~~Lifetime tier~~ **Signed 2026-08-31.** Product price is **$47/yr**. No lifetime SKU as an equal v1 product. | Locked. Don't quote a lifetime price. Hardcopy remains an at-cost upcharge. | — | +| **D-2** | ~~Writer payment~~ **Signed 2026-08-31.** The first set of writers is engaged **on contract**. v1 is an authored book. Affiliate referral can still pay for *referring backers*; it is not how writing is paid. Open contribution + any royalty/bounty is post-v1 (Layer 2), not a launch mechanic. | Locked for v1. Revisit royalties before opening Layer 2. | — | | **D-3** | **Co-author confirmations** (Higher Ed, Communities verticals). | Confirm within the week or cut those verticals from v1 and add post-launch. | Chapter outline, scope | | **D-4** | **Refresh the source-of-truth plan** to the 9/26 dates and re-signed terms (depends on D-1/D-2). | Do after D-1/D-2 land. | Copy freeze | | **D-5** | **Human-first or agent-first for v1?** Writing for human motivation and for machine ingestion are different jobs. | **Human-first.** Build the content format so agents *can* read it later (K-7), but optimize v1 for human learners. Agent onboarding is Layer 4. | Content design | From 53828e8d730d24306cdf1f10bb9d3ee309fb8a1f Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:16:37 +0000 Subject: [PATCH 07/65] =?UTF-8?q?docs:=20commercial=20spine=20signed=20?= =?UTF-8?q?=E2=80=94=20$47/yr;=20writers=20on=20contract?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AiBook_Spec.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/AiBook_Spec.md b/AiBook_Spec.md index b1cb008..1fd1ac8 100644 --- a/AiBook_Spec.md +++ b/AiBook_Spec.md @@ -96,7 +96,7 @@ These are gates, not preferences — a workflow or a claim either clears them or | Actor | Who | Their job | The boundary | |:--|:--|:--|:--| -| **Reader / subscriber** | Practitioners (real estate, financial advisors, fractional execs, higher ed, communities, tech) | Get current, trustworthy AI workflows to apply this week | Pays for access (~$47/yr — *draft*) | +| **Reader / subscriber** | Practitioners (real estate, financial advisors, fractional execs, higher ed, communities, tech) | Get current, trustworthy AI workflows to apply this week | Pays for access (**$47/yr** — signed) | | **Co-author** | Confirmed: three founders across RE/FA, C-suite, and tech. Potential: two more for Higher Ed & Communities | Own a vertical; write and curate its workflows | Content follows the template; curated | | **Curator / editor** | Co-authors + community editors | Keep the quality bar; run the editorial pipeline | Curating ≠ owning the platform | | **Affiliate** | Community, podcast, press | Refer backers; earn commission | Commission rates below | @@ -221,9 +221,9 @@ from the core loop.* | Item | Value | Status | |:--|:--|:--| -| Anchor subscription | $47/yr digital + hardcopy upcharge | **Draft** — needs commercial re-sign for the 9/26 relaunch | -| Lifetime access | Proposed; ~$97–147 one-time *(figures illustrative — do not quote)* | **Open decision** ([D-1](#8-open-decisions)) | -| Contributor royalties | None documented today; current mechanic is affiliate referral only | **Open decision** ([D-2](#8-open-decisions)) | +| Anchor subscription | **$47/yr** digital + hardcopy at-cost upcharge | **Signed 2026-08-31** | +| Lifetime access | Not a v1 SKU | **Signed D-1:** $47/yr only | +| Founding writers | Paid **on contract** (v1 is authored). Affiliate still pays referrals, not writing. | **Signed D-2 2026-08-31.** Royalties/bounties wait for Layer 2. | | Projected revenue | ~$53,600 at 706 backers | Draft planning figure | | Pre-revenue budget | ~$6,000 (ads + KS fees + affiliate fee) | Draft planning figure | | "eBookNFT platform" | A future idea; this book is the first product | Not in scope | @@ -277,8 +277,8 @@ carries a recommendation as a starting point, not a settled answer. | # | Decision | Recommendation | |:--|:--|:--| -| **D-1** | Lifetime tier — offer it, at what price/position? | Keep $47/yr as the anchor; a lifetime option only as a bounded early-bird capitalization play, not the default. | -| **D-2** | Contributor payment — how do people earn for *writing* workflows, not just referring? | **Resolve before launch** — it's the engine of the "living book." Royalty pool, per-workflow bounty, or an explicit "v1 authored, paid contribution in Q1." | +| **D-1** | ~~Lifetime~~ **Signed 2026-08-31:** **$47/yr** only. No lifetime SKU as an equal product. | Locked. | +| **D-2** | ~~Writer pay~~ **Signed 2026-08-31:** founding writers on **contract**. v1 authored. Layer 2 royalties later. | Locked for v1. | | **D-3** | Confirm the two unconfirmed co-authors (Higher Ed, Communities) | Confirm this week, or cut those verticals from v1 and add post-launch. | | **D-4** | Refresh the source-of-truth plan to the 9/26 dates & re-signed terms | Do after D-1/D-2 land. | | **D-5** | Human-first or agent-first for v1? | Human-first. Build the format so agents *can* read it later; optimize v1 for human learners. | From ad4bc12c000ad26989e6e656576615bf79d71259 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:16:38 +0000 Subject: [PATCH 08/65] docs: close Gate 0.1 and 0.2 (domain + pricing) --- AiBook_Implementation_Plan.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/AiBook_Implementation_Plan.md b/AiBook_Implementation_Plan.md index 0513610..be05fb0 100644 --- a/AiBook_Implementation_Plan.md +++ b/AiBook_Implementation_Plan.md @@ -31,17 +31,16 @@ Before any copy or build locks, close these. Most are decisions or de-risking, n | # | Task | Owner | Why it's first | |:--|:--|:--|:--| -| 0.1 | **Renew aibook.fun today.** It expires 09-05; launch is 09-26. | Whoever holds the registrar login | It's a chore, not a decision. A lapsed domain 3 weeks before launch is a self-inflicted disaster. | -| 0.2 | **Decide the pricing spine — lifetime *and* royalties together** (D-1 + D-2). | Commercial lead (@GTM) | Both block copy freeze; they're linked (see [Spec §6](AiBook_Spec.md)). | +| 0.1 | **~~Renew aibook.fun~~ Done 2026-08-31.** | Registrar owner | Closed. | +| 0.2 | **~~Pricing spine~~ Done 2026-08-31.** **$47/yr** is the product. No lifetime SKU as an equal. Founding writers on **contract** (v1 authored). | Commercial + Product | Copy freeze unblocked on price. | | 0.3 | **~~Ratify the North-Star + product-health floors~~ Done 2026-08-29.** Activation 20/35 from access date; campaign waitlist 50/100; post-key submissions 10/25 in 90 days; renewal 40/60 excluding lifetime; curation is an ops SLA, not a launch bar. See PRD §8. | Product (@pat) | Locked. Don't quote 60% renewal publicly. | | 0.4 | **Ratify the Minimum Lovable Library number and assign every workflow an author.** | Product + co-authors | This is the #1 risk; turn it from hope into owned work. | | 0.5 | **Confirm the two unconfirmed co-authors, or cut their verticals from v1** (D-3). | Commercial lead (@GTM) | Scope certainty before outline lock. | | 0.6 | Open the claims register; assign a post-campaign renewal owner. | Product + Commercial | Truth-in-claims gate; don't leave renewal unstaffed. | | 0.7 | Set up the Kickstarter creator account + identity verification. | Campaign lead (@THY) | Long lead time; do it early. | -**✅ Gate 0 — decisions closed.** Pricing spine decided · **targets ratified (2026-08-29)** · Minimum Lovable -Library scoped with authors · domain renewed · claims register open. *Until pricing is decided, -don't freeze copy. Until the domain is renewed, don't push anything live.* +**✅ Gate 0 — decisions closed.** **Pricing spine signed ($47/yr; writers on contract)** · **targets ratified (2026-08-29)** · Minimum Lovable +Library scoped with authors · **domain renewed (2026-08-31)** · claims register open. *Until the library has named authors and D-3 is closed, don't treat content as on track. Copy freeze still waits on claims + co-author scope.* --- From efc859b339e3abd8f2f99f90e825dfa14764e2a3 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:21:18 +0000 Subject: [PATCH 09/65] =?UTF-8?q?docs:=20add=20workflows/=20chapter=20blan?= =?UTF-8?q?k=20for=20review=20(PRD=20=C2=A75.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/chapter-structure.md | 189 +++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 workflows/chapter-structure.md diff --git a/workflows/chapter-structure.md b/workflows/chapter-structure.md new file mode 100644 index 0000000..bb619a4 --- /dev/null +++ b/workflows/chapter-structure.md @@ -0,0 +1,189 @@ +--- +status: draft-for-review +type: chapter-template +edition: 2026 +vertical: # real-estate | financial-advisors | fractional-c-suite | higher-ed | communities | technology +title: "" +authors: [] +recipe_ids: [XX-01, XX-02] +last_updated: 2026-08-31 +--- + +# Chapter structure (for review) + +This is the blank chapter, matching PRD §5.4 (locked 2026-08-31). Review the shape before anyone writes a real vertical. + +**How to use it.** Copy this file to `workflows/[vertical-slug].md` (example: `workflows/real-estate.md`). Replace `XX` with the vertical prefix. Leave this file as the blank. + +**What a chapter is.** A substantial essay for one vertical. Full workflows sit inside the argument, at the point they earn, not in an appendix and not as a stack of cards. + +**What a workflow is.** The unit of practice. Read it, run the Try-it (~15 min), share the result. That Try-it is what counts as activation. + +**Rules that do not move.** +- Skip-to-Try-it at the top. Activation does not wait for the essay. +- Safeguards before Method. Data handling is read before anyone pastes a client list. +- Method shows real tool output, not a description of it. +- Nested recipes stay open. Do not hide Method behind "click to reveal." +- Every recipe has a stable ID and a heading it can link to. +- No chatbot on the page. No crypto or Web3 language. +- PDF must match this stack: essay + in-place recipes. + +**Vertical prefixes** + +| Vertical | Slug | ID prefix | +|:--|:--|:--| +| Real Estate | `real-estate` | `RE` | +| Financial Advisors | `financial-advisors` | `FA` | +| Fractional C-Suite | `fractional-c-suite` | `CS` | +| Higher Ed | `higher-ed` | `HE` | +| Communities | `communities` | `CM` | +| Technology | `technology` | `TE` | + +Fill every `[bracket]`. Two nested recipes are shown so the essay-wraps-workflow pattern is obvious. Add more at the points in the argument they belong. Delete the unused slot rather than leaving a hollow block. + +--- + +# [Chapter title] + +[Vertical] · 2026 edition · [Author names] + +## What this chapter is for + +[One short promise. The job this vertical's reader is trying to get done this week, and what they will be able to run by the end of the chapter.] + +**Skip to a Try-it:** [XX-01](#xx-01) · [XX-02](#xx-02) + +## [Essay: the stakes] + +[Why this work is hard here. Specific to the vertical, not a generic AI preamble. Name the actual failure: a listing that stalls, a client file that leaks, a committee that will not move.] + +## [Essay: constraints] + +[What you cannot ignore in this vertical. Tools people already use. Compliance, clients, time. What "done" looks like for them.] + +## [Essay: how we work here] + +[The practice this chapter argues for. Then the first workflow, at the moment the argument needs proof.] + +--- + + + +### [Job title. This is the workflow title, written as the job.] + +**XX-01** · v0.1 · ~[N] min · ~$[cost or "free with tools you already have"] + +#### Problem + +[The real task. One job, not a category.] + +#### Actors + +- Who runs it: [role] +- Who is affected: [client, student, team] +- What the model is allowed to do: [draft / classify / retrieve]. What a human must still do: [send / approve / file] + +#### Setup + +- Tools: [named tools, versions if it matters] +- Sample files: [what we ship with this recipe, or "use the anonymized packet below"] +- Cost: [model/tool cost if known. If unknown, say so.] + +#### Safeguards + +Read this before the steps. + +- Data handling: [what never goes into the prompt. What is ok if stripped.] +- Human oversight: [the checkpoint before anything leaves the building] +- Failure modes: [how this goes wrong in this vertical] +- Escalation: [who you call, and when you stop] + +#### Method + +Ordered steps. Paste the actual tool output inside the step that produced it. A screenshot or a quoted block beats a paraphrase. + +1. [Step] + ``` + [real output] + ``` +2. [Step] +3. [Step] + +#### Evidence + +[What "it worked" looks like. An artifact, a number, a before/after. Not "the user felt more confident."] + +#### Try it (~15 min) + +- Sample data: [what they use so they do not need a live client] +- What to produce: [the artifact] +- Done when: [a check they can mark. Completing this is activation.] + +#### Share the result + +[What they post: the outcome, not the workflow text. Point at the community template when it exists. Events, not content.] + +**Author:** [name] · **Sources:** [links or citations] · **Last updated:** [date] + +--- + +## [Essay continues] + +[The argument picks back up. What the first recipe proved, what it did not. Then the next workflow, when the next claim needs proof.] + +--- + + + +### [Second job title] + +**XX-02** · v0.1 · ~[N] min · ~$[cost] + +#### Problem + +[ ] + +#### Actors + +[ ] + +#### Setup + +[ ] + +#### Safeguards + +[ ] + +#### Method + +1. [ ] +2. [ ] + +#### Evidence + +[ ] + +#### Try it (~15 min) + +[ ] + +#### Share the result + +[ ] + +**Author:** [name] · **Sources:** [ ] · **Last updated:** [date] + +--- + +## Further workflows in this vertical + +- [XX-01](#xx-01) — [job title] +- [XX-02](#xx-02) — [job title] +- [Later IDs, once assigned] + +## Sources + +[Chapter-level sources. Recipe-level citations stay on the recipe.] + +**Last updated:** 2026-08-31 From 48425b0bafe52c7dc440f5ae993a257ffc216218 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:21:19 +0000 Subject: [PATCH 10/65] docs: index the chapter blank; chapters are the reading unit; $47/yr signed --- README.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 68e8e14..a41206e 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ **A living, crowd-written field guide to using AI agents responsibly at work.** -AIBook.fun's unit of content isn't a chapter — it's a **workflow you can actually run**: a -documented, tested recipe for getting a real job done with AI, guardrails included. It's written -and kept current by the practitioners who use it, and it launches as an annual subscription, -crowdfunded on Kickstarter. +People read **chapters**. Each chapter is a substantial essay for one vertical, with full +workflows nested in the argument. The workflow is the unit of practice: a documented, tested +recipe for a real job, guardrails included. The first edition is written on contract by founding +authors. It launches as a **$47/yr** subscription, crowdfunded on Kickstarter. -> **Status: planning stage.** This repository holds the product's planning documents. The product -> is not yet live, and everything here is a working draft — figures, dates, and commercial terms -> are planning assumptions, not commitments. Public launch is **targeted for September 26, 2026**. +> **Status: planning + writing.** Planning docs and the chapter blank live here. The product is +> not yet live. **$47/yr** is signed. Domain `aibook.fun` is renewed. Other figures and unsigned +> terms are still planning assumptions, not for public quote. Launch target **26 Sep 2026**. ## The idea in one loop @@ -30,22 +30,23 @@ not read AI theory. ## What's in this repository -This is a documentation and planning repo. Three companion documents define the product: +This is a documentation and writing repo. | Document | What it covers | |:--|:--| -| [Product Requirements (PRD)](AiBook_PRD.md) | What we're building and why — scope, requirements, success metrics, open decisions | -| [Product Specification (Spec)](AiBook_Spec.md) | The thinking behind it — vision, principles, content model, business model | -| [Implementation Plan](AiBook_Implementation_Plan.md) | How and when — the path from now to launch and fulfillment | +| [Product Requirements (PRD)](AiBook_PRD.md) | What we're building and why. Scope, requirements, success metrics, open decisions | +| [Product Specification (Spec)](AiBook_Spec.md) | The thinking behind it. Vision, principles, content model, business model | +| [Implementation Plan](AiBook_Implementation_Plan.md) | How and when. Path from now to launch and fulfillment | +| [Chapter structure](workflows/chapter-structure.md) | The blank chapter for review. Copy it into a vertical file when writing starts | New here? Start with the **[Spec](AiBook_Spec.md)** for the vision, then the **[PRD](AiBook_PRD.md)** -for the specifics. +for the specifics. Writers start at **[chapter structure](workflows/chapter-structure.md)**. ## How it works (the short version) -- **Content:** every entry follows one *Workflow Recipe* template — problem, method (showing the - real tool output), safeguards, evidence, a ~15-minute Try-it, and costs. The template is the - quality guarantee — the structural answer to "how do I know this AI advice isn't made up?" +- **Content:** readers get a chapter essay. Nested in it, every workflow follows one recipe: + problem, actors, setup, safeguards, method (real tool output), evidence, a ~15-minute Try-it, + share, costs, author. Safeguards sit before the steps. The template is the quality guarantee. - **Editions:** the guide refreshes annually — which is why it's a subscription. AI moves fast, and stale advice is worthless. - **Contribution:** the first edition is written by a founding set of co-authors; open community From 0bc2fcd10b1a335b2c1c5267cdad0e1e11127a75 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:21:20 +0000 Subject: [PATCH 11/65] =?UTF-8?q?docs:=20close=20leftover=20D-2=20copy;=20?= =?UTF-8?q?point=20=C2=A75.4=20at=20workflows/chapter-structure.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AiBook_PRD.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/AiBook_PRD.md b/AiBook_PRD.md index 2f89c14..9dcad9a 100644 --- a/AiBook_PRD.md +++ b/AiBook_PRD.md @@ -161,15 +161,15 @@ post-launch aspiration. Community contribution is **Layer 2** — an experiment we've seeded a library worth subscribing to. ### 5.3 Be honest: v1 is an *authored* book, not yet a *crowd* book -The prior draft's "contributor economy" pays co-authors **15% affiliate commission** — which -is a reward for *referring backers*, not for *writing workflows*. Writing a workflow currently -earns a byline and nothing else. The mechanic that would actually pay contributors — royalties -— is unresolved (see [D-2](#10-open-decisions)). +The prior draft's "contributor economy" pays co-authors **15% affiliate commission**, which +is a reward for *referring backers*, not for *writing workflows*. -So for v1, we state plainly: **the first edition is written by a founding set of co-authors and -the team.** Open community contribution — with a real incentive attached — is the very next -thing we build, and its incentive design ([D-2](#10-open-decisions)) is a **launch-blocking -decision, not a nice-to-have**, because the entire "living book" thesis depends on it. +**Signed 2026-08-31 (D-2):** founding writers are paid **on contract**. v1 is an authored book. +Affiliate referral can still pay for referring backers. It is not how writing is paid. Open +contribution with royalties or bounties waits for Layer 2. + +So we state plainly: **the first edition is written by a founding set of co-authors and the +team.** Layer 2 is the next thing we build, after the library is worth subscribing to. --- @@ -214,6 +214,9 @@ still the unit of *practice* (and of activation). The chapter is the unit of *re - No crypto/Web3 language - Nested recipes are not collapsed “click to reveal” cards that hide the Method +**Writing drafts** live in [`workflows/chapter-structure.md`](workflows/chapter-structure.md). +Copy that blank into a vertical file (`workflows/real-estate.md`, etc.) when a chapter is assigned. + --- ## 6. Requirements @@ -425,16 +428,17 @@ changes from the prior draft, and the reasoning: funnel are explicitly later layers. 3. **Elevated the content cold-start** to the #1 risk and added the *Minimum Lovable Library* launch gate (§5.2). -4. **Told the truth about incentives** (§5.3): v1 is an authored book; the "contributor - economy" is currently a referral scheme; paid contribution (D-2) is now launch-blocking. -5. **Forced the subscription-vs-lifetime tension** into a real decision (D-1). +4. **Told the truth about incentives** (§5.3). **D-2 signed 2026-08-31:** founding writers on + contract; v1 authored; royalties wait for Layer 2. Affiliate still pays referrals, not writing. +5. **Forced the subscription-vs-lifetime tension** into a real decision. **D-1 signed 2026-08-31:** + **$47/yr** only. No lifetime SKU as an equal v1 product. 6. **Split the validation bar from the funding floor** (§8) so a funded-but-dead outcome can't hide. 7. **Reframed the pitch as utility-first** (§4, §9 hook test) — the buyer wants a workflow, not an ownership philosophy. 8. **Demoted governance to proportionate** (Appendix B), keeping only the NFT-scrub and truth-in-claims as active gates. -9. **Turned the domain "decision" into a same-day chore** (§9). +9. **Turned the domain into a same-day chore** (§9). **Done 2026-08-31:** `aibook.fun` renewed. 10. **Translated the jargon out.** Internal codes, handles, and merge-history are gone from the body; a who's-who / glossary can be maintained separately if the team wants traceability back to the source-of-truth IDs. From 20cd0d09c899482ecebd630c0904fca29d74efd9 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:21:21 +0000 Subject: [PATCH 12/65] docs: mark aibook.fun domain renewed in digital surface table --- AiBook_Spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AiBook_Spec.md b/AiBook_Spec.md index 1fd1ac8..c2e3a46 100644 --- a/AiBook_Spec.md +++ b/AiBook_Spec.md @@ -182,7 +182,7 @@ around and after launch, not gating it: ### 4.4 Digital surface (current state) | Surface | What it is | Status | |:--|:--|:--| -| `aibook.fun` domain | Public home: pitch, sample workflows, affiliate signup, campaign link | Parked — **expires 09-05, renew immediately** | +| `aibook.fun` domain | Public home: pitch, sample workflows, affiliate signup, campaign link | **Renewed 2026-08-31** | | Landing page (built) | A staged proof-of-concept, ready to review and push live | Staged locally, not yet public | | Subscription access | Digital key → PDF + web reader + annual updates | Not built yet (post-campaign) | | Community | Team channel live; cohort spaces not built | Partial | From ce9bb4f94349b035ae2e58e528360a798e2c4c31 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:21:23 +0000 Subject: [PATCH 13/65] docs: content is the critical path; chapter blank lives in workflows/ --- AiBook_Implementation_Plan.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/AiBook_Implementation_Plan.md b/AiBook_Implementation_Plan.md index be05fb0..fc92da9 100644 --- a/AiBook_Implementation_Plan.md +++ b/AiBook_Implementation_Plan.md @@ -4,7 +4,7 @@ type: implementation-plan status: draft owner: Patrick (Product) launch-target: 2026-09-26 -last-updated: 2026-08-29 +last-updated: 2026-08-31 companions: [AiBook_PRD.md, AiBook_Spec.md] --- @@ -16,12 +16,11 @@ companions: [AiBook_PRD.md, AiBook_Spec.md] > [Appendix — What changed](#appendix--what-changed-in-this-revision) for how this revision > differs from the prior draft. -**The clock:** today is late August 2026; **launch is 9/26/2026** — roughly **4–5 weeks out**. -Every week counts, and the critical path has little slack. The domain expires **09-05**, so -step one is non-negotiable and immediate. +**The clock:** today is 31 Aug 2026; **launch is 26 Sep 2026**. Domain and price are signed. +Content is the remaining critical path. **The critical path in one line:** -`renew domain + make the pricing decisions → seed the Minimum Lovable Library → freeze copy → no-crypto scrub → submit to Kickstarter → launch 9/26` +`assign MLL authors + D-3 co-authors → write the library → freeze copy → no-crypto scrub → submit to Kickstarter → launch 9/26` --- @@ -52,8 +51,8 @@ campaign around an empty library fails. ### 1A · Content — seed the Minimum Lovable Library (critical path) | Task | Owner | |:--|:--| -| Lock the chapter outline (chapters per vertical, a named owner each) | Co-authors | -| Publish the Workflow Recipe template + 3 filled examples | Product | +| Lock the chapter outline (chapters per vertical, a named owner each). Blank is [`workflows/chapter-structure.md`](workflows/chapter-structure.md) | Co-authors | +| Review and freeze the chapter blank, then 3 filled examples | Product + authors | | **Seed the Minimum Lovable Library to its floor number** (team + co-authors write & test the workflows) | Co-authors + team | | 3 "clone-and-run" kits, each **verified by actually running it** | Dev + QA support | | 2 sample chapters (the backer preview) | Two lead co-authors | @@ -74,7 +73,7 @@ campaign around an empty library fails. | Task | Owner | |:--|:--| | Kickstarter page copy (all sections, 9/26 dates) | Campaign lead + exec co-author | -| **Copy freeze — commercial terms locked** (lifetime/royalties per D-1/D-2) | Commercial lead (sign) | +| **Copy freeze** (price already signed: $47/yr, writers on contract; still freeze claims + NFT scrub) | Commercial lead (sign) | | **No-crypto scrub gate on every asset** (translation table) | Campaign lead (owner) | | Hero video: script → shoot → edit (2–3 min) | Creative lead (@LFG) + co-authors | | Cover design + 3D mockups | Creative lead | From 0fba3c8175220a9cda02c34864338c09ad5e6af0 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:17 +0000 Subject: [PATCH 14/65] feat(reader): add sample Real Estate chapter and nested recipes --- marketing-site/data/sample-chapter.js | 226 ++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 marketing-site/data/sample-chapter.js diff --git a/marketing-site/data/sample-chapter.js b/marketing-site/data/sample-chapter.js new file mode 100644 index 0000000..1833e1d --- /dev/null +++ b/marketing-site/data/sample-chapter.js @@ -0,0 +1,226 @@ +/** + * Sample chapter + nested recipes for the reading demo. + * Imported by pages under /read. Not a CMS. + */ + +export const LIBRARY = [ + { + num: "01", + name: "Real Estate", + slug: "real-estate", + href: "/read/real-estate", + desc: "Market briefs and listings, without leaking client data", + status: "ready", + }, + { + num: "02", + name: "Financial Advisors", + slug: "financial-advisors", + desc: "Portfolio summaries that stay compliant and reviewed", + status: "coming", + }, + { + num: "03", + name: "Fractional C-Suite", + slug: "fractional-c-suite", + desc: "Board updates and plans with real escalation paths", + status: "coming", + }, + { + num: "04", + name: "Higher Ed", + slug: "higher-ed", + desc: "Course and research workflows with academic integrity", + status: "coming", + }, + { + num: "05", + name: "Communities", + slug: "communities", + desc: "Moderation and programming that respects members", + status: "coming", + }, + { + num: "06", + name: "Technology", + slug: "technology", + desc: "Agent patterns, evals, and the responsible defaults", + status: "coming", + }, +]; + +const RE04 = { + id: "RE-04", + anchor: "re-04", + version: "1.2", + time: "~15 min", + cost: "≈ $0.03", + vertical: "Real Estate", + title: "Draft a property-market brief with an AI agent without leaking client data.", + problem: + "You need a neighborhood market brief for a client meeting this week. The listing sheet and client notes cannot go into a public model.", + problemJob: + "Job: turn messy local data into a credible one-pager in minutes, safely.", + actors: [ + "Listing agent runs it.", + "Client receives the brief.", + "Model may draft and classify. A human must review before send.", + ], + setup: [ + "Tools: local redaction script (brief CLI), Claude or your usual model.", + "Sample files: sample_listings.csv, market-1pager template.", + "Cost: about $0.03 on the sample run (2,140 tokens).", + ], + safeguards: [ + "Redaction runs on your machine. Raw client data never reaches the model.", + "A human checklist is required before the brief is shared. The checklist is part of the recipe.", + "Stop if identifiers remain after the strip report. Do not prompt until owner_name, phone, and exact_address are gone.", + ], + method: [ + { + text: "Strip identifiers from the source data locally (a provided script does this).", + }, + { + text: "Prompt the agent with the anonymized sample and a fixed brief template.", + term: "re-04", + }, + { + text: "Review the draft against the checklist before anything leaves your machine.", + }, + ], + evidence: [ + "A one-pager brief on Maple Heights (sample), ready for a meeting once a human signs the checklist.", + "Sample metrics from that run: median $420/sqft, 22 days on market, 1.8 months of inventory.", + ], + tryit: { + minutes: 15, + sample: "Use the included sample_listings.csv (no live client file).", + produce: "Produce the market-1pager brief and walk the human checklist.", + done: "Mark complete when you have a brief you would send after review. Completing this is the activation demo.", + href: "/samples/sample_listings.csv", + hrefLabel: "sample_listings.csv", + chip: "cost to try ≈ $0.03", + }, + shareBlurb: + "Ran RE-04 on sample comps — Maple Heights median $420/sqft, 22 DOM.", + author: "Founding library · sample", + sources: "Sample MLS packet (non-confidential); market-1pager template shipped with the recipe.", + lastUpdated: "31 Aug 2026", +}; + +const RE05 = { + id: "RE-05", + anchor: "re-05", + version: "1.0", + time: "~12 min", + cost: "≈ $0.02", + vertical: "Real Estate", + title: "Rewrite a listing description from public comps without pasting the client address book.", + problem: + "You need listing copy that sounds like this house, not every house on the street. The CRM holds owner notes and the showing list. Those do not go into a public model.", + problemJob: + "Job: draft 180-word listing copy from public facts only, then edit it yourself.", + actors: [ + "Listing agent runs it.", + "The public listing receives the copy.", + "Model drafts. A human edits, files, and posts to MLS.", + ], + setup: [ + "Tools: listing-copy CLI, listing-voice template, Claude or your usual model.", + "Sample files: sample_comps.json (public comps only).", + "Cost: about $0.02 on the sample run (1,280 tokens).", + ], + safeguards: [ + "Prompt only with public listing facts. No CRM export, no showing list, no owner notes.", + "A human edits the draft before it hits MLS. Do not auto-post.", + "Stop if a private note, phone, or exact owner name appears in the draft.", + ], + method: [ + { + text: "Export public comps for the block. Leave the CRM closed.", + }, + { + text: "Run listing-copy against the sample comps and the house-voice template.", + term: "re-05", + }, + { + text: "Edit the draft. Cut anything that could only have come from a private note.", + }, + ], + evidence: [ + "A 184-word listing draft, public facts only, reading grade 8.", + "Comps on the block closed between $398 and $441/sqft in 60 days. The draft prices to that range without naming a client.", + ], + tryit: { + minutes: 12, + sample: "Use the included sample_comps.json (public comps, no address book).", + produce: "Produce a ~180-word listing description and a human edit pass.", + done: "Mark complete when the draft has no private fields. Completing this is the activation demo.", + href: "/samples/sample_comps.json", + hrefLabel: "sample_comps.json", + chip: "cost to try ≈ $0.02", + }, + shareBlurb: + "Ran RE-05 on sample comps — 184-word listing draft, public facts only.", + author: "Founding library · sample", + sources: "Public comps sample packet; listing-voice template shipped with the recipe.", + lastUpdated: "31 Aug 2026", +}; + +export const RECIPES = [RE04, RE05]; + +export const RECIPES_BY_ID = { + "RE-04": RE04, + "RE-05": RE05, +}; + +export const CHAPTER = { + slug: "real-estate", + vertical: "Real Estate", + edition: "2026", + authors: "Founding library · sample", + title: "Work the listing without leaking the client", + promise: + "In this chapter you run two jobs a realtor actually has this week, on sample data, without putting a client file in a public model.", + lastUpdated: "31 Aug 2026", + skip: [ + { id: "RE-04", href: "#re-04", title: "Market brief" }, + { id: "RE-05", href: "#re-05", title: "Listing copy" }, + ], + stakes: { + heading: "The stakes", + paragraphs: [ + "A listing that stalls because the market brief is late is a lost weekend. A listing that leaks because you pasted the client sheet into a public model is a lost license. Real estate work runs on both clocks: the showing at 4pm, and the file that must never leave the office.", + "The failure is not that AI sits unused. It is a one-pager that is late, generic, or built from a client name that should not have been in the prompt. Buyers notice fluff. Brokers notice a privacy incident. Neither is recoverable in the same week.", + ], + }, + constraints: { + heading: "Constraints you cannot ignore", + paragraphs: [ + "You already work in MLS exports, a CRM, and a phone that rings during the write-up. Done is a brief the client can read in a meeting, with numbers you can stand behind, reviewed by a human. Public models are useful for draft and classify. They are not a filing cabinet.", + "Owner names, phones, exact addresses, and showing lists stay on your machine. Comps, medians, and days on market can travel, once identifiers are stripped. If a field could pick one household out of the block, it does not go in the prompt.", + ], + }, + practice: { + heading: "How we work here", + paragraphs: [ + "Redact locally. Prompt with a sample or a stripped file. Review against a checklist. Share the artifact, not the workflow text. The first job this week is the neighborhood market brief. Run it on sample comps before you touch a live listing.", + ], + }, + between: { + heading: "The brief is half the meeting", + paragraphs: [ + "The brief gets you into the room with numbers. The other half is the listing copy: public comps, a description that does not sound like every other house on the street, and an address book that never belongs in the prompt. Same rule. Different job.", + ], + }, + further: [ + { id: "RE-04", href: "#re-04", title: "Draft a property-market brief without leaking client data" }, + { id: "RE-05", href: "#re-05", title: "Rewrite a listing description from public comps" }, + { id: "RE-06", title: "Offer-response notes from public remarks (later)", coming: true }, + ], + sources: [ + "Sample MLS packet shipped with this chapter (non-confidential).", + "market-1pager and listing-voice templates in the recipe kit.", + "Local redaction fields: owner_name, phone, exact_address.", + ], +}; From 3dd20d13c00ffdbdd359dd1f1d171558a5156304 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:18 +0000 Subject: [PATCH 15/65] feat(reader): persist Try-it activation in localStorage --- .../components/reader/useActivation.js | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 marketing-site/components/reader/useActivation.js diff --git a/marketing-site/components/reader/useActivation.js b/marketing-site/components/reader/useActivation.js new file mode 100644 index 0000000..4a93216 --- /dev/null +++ b/marketing-site/components/reader/useActivation.js @@ -0,0 +1,43 @@ +import { useCallback, useEffect, useMemo, useState } from "react"; + +function keyFor(id) { + return `aibook-demo-activation:${id}`; +} + +/** + * Demo-only activation state. Completing a Try-it writes + * localStorage key `aibook-demo-activation:`. + */ +export default function useActivation(ids) { + const list = useMemo(() => ids, [ids.join("|")]); + const [complete, setComplete] = useState(() => + Object.fromEntries(list.map((id) => [id, false])) + ); + + useEffect(() => { + const next = {}; + list.forEach((id) => { + try { + next[id] = window.localStorage.getItem(keyFor(id)) === "1"; + } catch { + next[id] = false; + } + }); + setComplete(next); + }, [list]); + + const toggle = useCallback((id) => { + setComplete((prev) => { + const value = !prev[id]; + try { + window.localStorage.setItem(keyFor(id), value ? "1" : "0"); + } catch { + /* private mode: still toggle in memory */ + } + return { ...prev, [id]: value }; + }); + }, []); + + const count = list.filter((id) => complete[id]).length; + return { complete, toggle, count, total: list.length }; +} From 265d64abd626b85cf6a930c07227c327a66a6db2 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:19 +0000 Subject: [PATCH 16/65] feat(reader): add slim reader nav --- .../components/reader/ReaderNav.jsx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 marketing-site/components/reader/ReaderNav.jsx diff --git a/marketing-site/components/reader/ReaderNav.jsx b/marketing-site/components/reader/ReaderNav.jsx new file mode 100644 index 0000000..12b26ae --- /dev/null +++ b/marketing-site/components/reader/ReaderNav.jsx @@ -0,0 +1,41 @@ +import { useEffect, useState } from "react"; +import Link from "next/link"; + +export default function ReaderNav({ chapterName }) { + const [scrolled, setScrolled] = useState(false); + + useEffect(() => { + const onScroll = () => setScrolled(window.scrollY > 12); + onScroll(); + window.addEventListener("scroll", onScroll, { passive: true }); + return () => window.removeEventListener("scroll", onScroll); + }, []); + + return ( + + ); +} From 8314dad5745491f743b50bd4103f8e32e82bf6be Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:21 +0000 Subject: [PATCH 17/65] feat(reader): add slim reader footer --- .../components/reader/ReaderFooter.jsx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 marketing-site/components/reader/ReaderFooter.jsx diff --git a/marketing-site/components/reader/ReaderFooter.jsx b/marketing-site/components/reader/ReaderFooter.jsx new file mode 100644 index 0000000..2e81528 --- /dev/null +++ b/marketing-site/components/reader/ReaderFooter.jsx @@ -0,0 +1,32 @@ +import Link from "next/link"; + +export default function ReaderFooter() { + return ( +
+
+
+
+
+ AIBook. + fun +
+

+ Reading demo. Not the live book. Workflows sit inside a chapter, + not on a shelf of cards. +

+
+
+ Home + Library + Preview +
+
+
+ © 2026 WeOwnAI · MIT-licensed docs · This page is a reading-environment demo. +
+ Activation is stored in this browser only. No chatbot. No live client data. +
+
+
+ ); +} From 6d13ab5962004828b2dec466a8651b57b153c3c3 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:22 +0000 Subject: [PATCH 18/65] feat(reader): reuse terminal chrome for nested method output --- .../components/reader/TermOutput.jsx | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 marketing-site/components/reader/TermOutput.jsx diff --git a/marketing-site/components/reader/TermOutput.jsx b/marketing-site/components/reader/TermOutput.jsx new file mode 100644 index 0000000..4fee946 --- /dev/null +++ b/marketing-site/components/reader/TermOutput.jsx @@ -0,0 +1,60 @@ +/** Same terminal chrome as the marketing Recipe (.term / .term-bar). */ + +export function TermRE04() { + return ( +
+
+ + + + agent — property-brief · sample dataset (non-confidential) +
+
+        {"$ "}
+        {"brief"}
+        {" --input "}
+        {"sample_listings.csv"}
+        {" --template market-1pager\n\n"}
+        {"✓ redacted 3 fields (owner_name, phone, exact_address)\n✓ 41 comps in radius · median $/sqft computed\n\n"}
+        {"MARKET BRIEF — Maple Heights (sample)\n"}
+        {" · Median list: $420/sqft  (▲ 4.1% QoQ)\n · Days on market: 22  (was 31)\n · Inventory: 1.8 mo — seller-leaning\n · Read: price to comp, expect <2 wks at ask\n\n"}
+        {"# cost this run: $0.03 · model: claude · 2,140 tokens"}
+      
+
+ ); +} + +export function TermRE05() { + return ( +
+
+ + + + agent — listing-copy · sample comps (public facts) +
+
+        {"$ "}
+        {"listing-copy"}
+        {" --input "}
+        {"sample_comps.json"}
+        {" --voice house-voice --out draft.md\n\n"}
+        {"✓ used 6 public comps (no CRM fields present)\n✓ 184 words · reading grade 8\n\n"}
+        {"LISTING DRAFT · 14xx Cedar (sample street, public facts)\n"}
+        {" · Bright corner lot, 3 bed / 2 bath, maple kitchen from 2019.\n · Priced to the block: comps closed $398–$441/sqft in 60 days.\n · No owner name, phone, or showing list in the prompt.\n\n"}
+        {"# cost this run: $0.02 · model: claude · 1,280 tokens"}
+      
+
+ ); +} + +const TERMS = { + "re-04": TermRE04, + "re-05": TermRE05, +}; + +export default function TermOutput({ id }) { + const Cmp = TERMS[id]; + if (!Cmp) return null; + return ; +} From b87b7516dcd1ba758f8bdfa6b4eccdc5fc7a1441 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:23 +0000 Subject: [PATCH 19/65] feat(reader): add full nested workflow block --- .../components/reader/WorkflowBlock.jsx | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 marketing-site/components/reader/WorkflowBlock.jsx diff --git a/marketing-site/components/reader/WorkflowBlock.jsx b/marketing-site/components/reader/WorkflowBlock.jsx new file mode 100644 index 0000000..08b5a3e --- /dev/null +++ b/marketing-site/components/reader/WorkflowBlock.jsx @@ -0,0 +1,232 @@ +import { useState } from "react"; +import Link from "next/link"; +import TermOutput from "./TermOutput"; + +function ShieldCheck() { + return ( + + ); +} + +function CheckMark() { + return ( + + ); +} + +async function copyText(text) { + try { + await navigator.clipboard.writeText(text); + return true; + } catch { + try { + const el = document.createElement("textarea"); + el.value = text; + el.setAttribute("readonly", ""); + el.style.position = "fixed"; + el.style.left = "-9999px"; + document.body.appendChild(el); + el.select(); + const ok = document.execCommand("copy"); + el.remove(); + return ok; + } catch { + return false; + } + } +} + +export default function WorkflowBlock({ + recipe, + complete = false, + onToggleComplete, + focused = false, +}) { + const [copied, setCopied] = useState(false); + + const onShare = async () => { + const ok = await copyText(recipe.shareBlurb); + if (!ok) return; + setCopied(true); + window.setTimeout(() => setCopied(false), 1800); + }; + + return ( +
+
+ + recipe {recipe.id} · v{recipe.version} · {recipe.time} · {recipe.cost} + + {recipe.vertical} +
+ +
+

+ {recipe.title} +

+ +
+
Problem
+
+ {recipe.problem}{" "} + {recipe.problemJob} +
+
+ +
+
Actors
+
+
    + {recipe.actors.map((line) => ( +
  • {line}
  • + ))} +
+
+
+ +
+
Setup
+
+
    + {recipe.setup.map((line) => ( +
  • {line}
  • + ))} +
+
+
+ +
+
Safeguards
+
+ {recipe.safeguards.map((line) => ( +
+ + {line} +
+ ))} +
+
+ +
+
Method
+
+
    + {recipe.method.map((step, i) => ( +
  1. +
    + {step.text} + {step.term ? : null} +
    +
  2. + ))} +
+
+
+ +
+
Evidence
+
+ {recipe.evidence.map((line) => ( +

+ {line} +

+ ))} +
+
+ +
+
Try it
+
+

+ About {recipe.tryit.minutes} minutes. {recipe.tryit.sample}{" "} + {recipe.tryit.produce} +

+

+ {recipe.tryit.done}{" "} + + {recipe.tryit.hrefLabel} + +

+

+ ◷ {recipe.tryit.chip} +

+ {onToggleComplete ? ( +
+ +
+ ) : null} +
+
+ +
+
Share
+
+

+ Copy a short result line. Share the outcome, not the recipe text. +

+
+ +
+
+
+ +
+
Record
+
+ Author: {recipe.author} + Sources: {recipe.sources} + Last updated: {recipe.lastUpdated} + {focused ? ( + + + Back to the chapter + + + ) : ( + + Open on paper + + )} +
+
+
+
+ ); +} From 7743e6fa750dcbe6d64ce6e982d61252a3b39d93 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:24 +0000 Subject: [PATCH 20/65] feat(reader): add reading-demo library page --- marketing-site/pages/read/index.jsx | 57 +++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 marketing-site/pages/read/index.jsx diff --git a/marketing-site/pages/read/index.jsx b/marketing-site/pages/read/index.jsx new file mode 100644 index 0000000..d500b00 --- /dev/null +++ b/marketing-site/pages/read/index.jsx @@ -0,0 +1,57 @@ +import Head from "next/head"; +import Link from "next/link"; +import ReaderNav from "../../components/reader/ReaderNav"; +import ReaderFooter from "../../components/reader/ReaderFooter"; +import { LIBRARY } from "../../data/sample-chapter"; + +export default function ReadLibrary() { + return ( + <> + + Library — AIBook.fun reading demo + + + + + +
+
+
+ Reading demo · not the live book +

Chapters, not a shelf of cards.

+

+ A chapter is a substantial essay for one vertical. Full workflows nest + in the argument, at the point they earn. One chapter is readable here. + The rest of the shelf is listed so you can see the library. +

+
+ {LIBRARY.map((item) => + item.status === "ready" ? ( + + {item.num} + {item.name} + {item.desc} + + + ) : ( +
+ {item.num} + {item.name} + {item.desc} + Coming +
+ ) + )} +
+
+
+
+ + + ); +} From 6dfa941683501cc6a44a6302076b11bb59f5baf7 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:25 +0000 Subject: [PATCH 21/65] feat(reader): add Real Estate sample chapter --- marketing-site/pages/read/real-estate.jsx | 145 ++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 marketing-site/pages/read/real-estate.jsx diff --git a/marketing-site/pages/read/real-estate.jsx b/marketing-site/pages/read/real-estate.jsx new file mode 100644 index 0000000..f74d242 --- /dev/null +++ b/marketing-site/pages/read/real-estate.jsx @@ -0,0 +1,145 @@ +import { useEffect } from "react"; +import Head from "next/head"; +import ReaderNav from "../../components/reader/ReaderNav"; +import ReaderFooter from "../../components/reader/ReaderFooter"; +import WorkflowBlock from "../../components/reader/WorkflowBlock"; +import useActivation from "../../components/reader/useActivation"; +import { CHAPTER, RECIPES } from "../../data/sample-chapter"; + +const RECIPE_IDS = RECIPES.map((r) => r.id); + +function Essay({ heading, paragraphs }) { + return ( +
+

{heading}

+ {paragraphs.map((p) => ( +

{p}

+ ))} +
+ ); +} + +export default function RealEstateChapter() { + const { complete, toggle, count, total } = useActivation(RECIPE_IDS); + const [first, second] = RECIPES; + + useEffect(() => { + const hash = window.location.hash; + if (!hash) return; + const el = document.getElementById(hash.slice(1)); + if (el) el.scrollIntoView({ behavior: "smooth", block: "start" }); + }, []); + + return ( + <> + + {CHAPTER.title} — AIBook.fun reading demo + + + + + + +
+
+ + {count}/{total} Try-its complete + + + {RECIPES.map((r) => ( + + {r.id} + {complete[r.id] ? " · done" : ""} + + ))} + +
+
+ +
+
+
+
+ Reading demo · not the live book +

+ {CHAPTER.vertical} · {CHAPTER.edition} edition +

+

{CHAPTER.title}

+

{CHAPTER.authors}

+ +

{CHAPTER.promise}

+ +
+ Skip to a Try-it + {CHAPTER.skip.map((s) => ( + + {s.id} + {s.title} + + ))} +
+ + + + + + + + + + + +
+

Further workflows in this vertical

+
    + {CHAPTER.further.map((item) => ( +
  • + {item.coming ? ( + <> + + {item.id} + {" "} + {item.title} + + ) : ( + <> + + + {item.id} + + {" "} + {item.title} + + )} +
  • + ))} +
+ +

Sources

+
    + {CHAPTER.sources.map((s) => ( +
  • {s}
  • + ))} +
+ +

Last updated: {CHAPTER.lastUpdated}

+
+
+
+
+
+ + + ); +} From aac526f7a1d9bc4e13bceebb2a21e84c31a59531 Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:26 +0000 Subject: [PATCH 22/65] feat(reader): add print/focus recipe view --- marketing-site/pages/read/recipe/[id].jsx | 88 +++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 marketing-site/pages/read/recipe/[id].jsx diff --git a/marketing-site/pages/read/recipe/[id].jsx b/marketing-site/pages/read/recipe/[id].jsx new file mode 100644 index 0000000..e7a81ad --- /dev/null +++ b/marketing-site/pages/read/recipe/[id].jsx @@ -0,0 +1,88 @@ +import Head from "next/head"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import ReaderNav from "../../../components/reader/ReaderNav"; +import ReaderFooter from "../../../components/reader/ReaderFooter"; +import WorkflowBlock from "../../../components/reader/WorkflowBlock"; +import useActivation from "../../../components/reader/useActivation"; +import { RECIPES_BY_ID } from "../../../data/sample-chapter"; + +export default function RecipeFocus() { + const router = useRouter(); + const raw = typeof router.query.id === "string" ? router.query.id : ""; + const recipe = RECIPES_BY_ID[raw] || RECIPES_BY_ID[raw.toUpperCase()] || null; + const { complete, toggle } = useActivation(recipe ? [recipe.id] : []); + + if (!router.isReady) { + return ( + <> + +
+
+

Loading recipe…

+
+
+ + ); + } + + if (!recipe) { + return ( + <> + + Recipe not in this demo — AIBook.fun + + + +
+
+ Reading demo · not the live book +

This recipe is not in the sample.

+

+ The demo ships two nested workflows, RE-04 and RE-05, inside the Real + Estate chapter. +

+

+ + Back to the chapter + +

+
+
+ + + ); + } + + return ( + <> + + + {recipe.id} on paper — AIBook.fun reading demo + + + + + + +
+
+ Reading demo · not the live book +

Print / focus view

+

+ ← Back to the chapter + {" · "} + Library +

+ +
+
+ + + ); +} From b4ad25c1ec7fe85f725db5d712af25f5a2e1066f Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:27 +0000 Subject: [PATCH 23/65] feat(reader): add sample listings for RE-04 Try-it --- marketing-site/public/samples/sample_listings.csv | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 marketing-site/public/samples/sample_listings.csv diff --git a/marketing-site/public/samples/sample_listings.csv b/marketing-site/public/samples/sample_listings.csv new file mode 100644 index 0000000..b49e378 --- /dev/null +++ b/marketing-site/public/samples/sample_listings.csv @@ -0,0 +1,7 @@ +id,neighborhood,list_price,sqft,dom,owner_name,phone,exact_address,beds,baths +MH-01,Maple Heights,504000,1200,18,Jane Client,555-0140,12 Oak Street,3,2 +MH-02,Maple Heights,612000,1450,24,Sam Owner,555-0141,88 Birch Avenue,3,2 +MH-03,Maple Heights,459000,1100,31,R. Patel,555-0142,4 Cedar Court,2,2 +MH-04,Maple Heights,670000,1580,12,Lee Family Trust,555-0143,21 Maple Drive,4,3 +MH-05,Maple Heights,538000,1288,22,A. Gomez,555-0144,9 Pine Lane,3,2 +MH-06,Maple Heights,481000,1140,27,Hidden,555-0145,16 Walnut Place,3,1 From 1f52209f87c12f669f6c81d8423db0580892963f Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:28 +0000 Subject: [PATCH 24/65] feat(reader): add sample comps for RE-05 Try-it --- .../public/samples/sample_comps.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 marketing-site/public/samples/sample_comps.json diff --git a/marketing-site/public/samples/sample_comps.json b/marketing-site/public/samples/sample_comps.json new file mode 100644 index 0000000..9382b09 --- /dev/null +++ b/marketing-site/public/samples/sample_comps.json @@ -0,0 +1,19 @@ +{ + "note": "Public comps only. No CRM fields, no owner names, no phones, no showing lists.", + "block": "14xx Cedar (sample street)", + "subject": { + "beds": 3, + "baths": 2, + "sqft": 1320, + "year_kitchen": 2019, + "lot": "corner, public record" + }, + "comps": [ + { "id": "C1", "closed_price_sqft": 398, "dom": 19, "beds": 3, "baths": 2, "closed_days_ago": 18 }, + { "id": "C2", "closed_price_sqft": 441, "dom": 11, "beds": 3, "baths": 2, "closed_days_ago": 27 }, + { "id": "C3", "closed_price_sqft": 412, "dom": 22, "beds": 3, "baths": 2, "closed_days_ago": 41 }, + { "id": "C4", "closed_price_sqft": 425, "dom": 16, "beds": 3, "baths": 3, "closed_days_ago": 9 }, + { "id": "C5", "closed_price_sqft": 405, "dom": 28, "beds": 2, "baths": 2, "closed_days_ago": 55 }, + { "id": "C6", "closed_price_sqft": 433, "dom": 14, "beds": 3, "baths": 2, "closed_days_ago": 33 } + ] +} From 98830de44e7465fe1e517de253ef3750b418df8b Mon Sep 17 00:00:00 2001 From: pat Date: Mon, 31 Aug 2026 07:33:29 +0000 Subject: [PATCH 25/65] feat(nav): send logo home and add Sample chapter link --- marketing-site/components/Nav.jsx | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/marketing-site/components/Nav.jsx b/marketing-site/components/Nav.jsx index 00e1d0b..92e4540 100644 --- a/marketing-site/components/Nav.jsx +++ b/marketing-site/components/Nav.jsx @@ -1,12 +1,29 @@ import { useEffect, useRef, useState } from "react"; +import Link from "next/link"; const LINKS = [ { href: "#recipe", label: "A recipe" }, { href: "#contents", label: "Contents" }, { href: "#letter", label: "Why" }, { href: "#faq", label: "FAQ" }, + { href: "/read", label: "Sample chapter" }, ]; +function NavItem({ href, label, onClick }) { + if (href.startsWith("/")) { + return ( + + {label} + + ); + } + return ( + + {label} + + ); +} + export default function Nav() { const [scrolled, setScrolled] = useState(false); const [open, setOpen] = useState(false); @@ -39,16 +56,14 @@ export default function Nav() { return (