From a85ad2e1d924eeba78243d7473500e3bc2f453c2 Mon Sep 17 00:00:00 2001 From: pat Date: Tue, 1 Sep 2026 07:19:48 +0000 Subject: [PATCH] feat(reader): show workflow kit on chapter pages --- marketing-site/data/sample-chapter.js | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/marketing-site/data/sample-chapter.js b/marketing-site/data/sample-chapter.js index d3bf90e..66798b4 100644 --- a/marketing-site/data/sample-chapter.js +++ b/marketing-site/data/sample-chapter.js @@ -107,6 +107,13 @@ const RE01 = { author: "Founding library · sample", sources: "Sample MLS packet (non-confidential); market-1pager template shipped with the recipe.", lastUpdated: "31 Aug 2026", + kit: { + youRun: "Listing agent", + tools: ["brief CLI (local redaction)", "Claude"], + files: ["sample_listings.csv", "market-1pager template"], + model: "Claude", + artifact: "One-pager market brief", + }, }; const RE02 = { @@ -167,6 +174,13 @@ const RE02 = { author: "Founding library · sample", sources: "Public comps sample packet; listing-voice template shipped with the recipe.", lastUpdated: "31 Aug 2026", + kit: { + youRun: "Listing agent", + tools: ["listing-copy CLI", "Claude"], + files: ["sample_comps.json", "listing-voice template"], + model: "Claude", + artifact: "180-word listing draft", + }, }; export const RECIPES = [RE01, RE02]; @@ -237,6 +251,10 @@ export const CHAPTER = { /** Outline groups for the chapter map. Headings come from the essay objects. */ export function buildOutline(chapter, recipes) { return [ + { + label: "Start", + items: [{ id: "need", label: "What you need" }], + }, { label: "Essay", items: [chapter.stakes, chapter.constraints, chapter.practice, chapter.between].map((s) => ({ @@ -252,6 +270,7 @@ export function buildOutline(chapter, recipes) { label: r.id + " · " + r.shortTitle, time: r.time, shortTitle: r.shortTitle, + tools: r.kit && r.kit.tools ? r.kit.tools.join(", ") : "", })), }, { @@ -263,3 +282,30 @@ export function buildOutline(chapter, recipes) { }, ]; } + +/** Union of recipe kits for the chapter "What you need" strip. */ +export function collectChapterKit(recipes) { + const tools = []; + const files = []; + const models = []; + const add = (arr, value) => { + if (value && !arr.includes(value)) arr.push(value); + }; + recipes.forEach((r) => { + const k = r.kit || {}; + (k.tools || []).forEach((item) => add(tools, item)); + (k.files || []).forEach((item) => add(files, item)); + add(models, k.model); + }); + return { + tools, + files, + models, + tryits: recipes.map((r) => ({ + id: r.id, + time: r.time, + cost: r.cost, + artifact: r.kit && r.kit.artifact, + })), + }; +}