Add chapter outline data and recipe short titles

This commit is contained in:
pat
2026-09-01 03:44:03 +00:00
parent f0c6a48187
commit 5f24a406cf
+36
View File
@@ -56,6 +56,7 @@ const RE04 = {
time: "~15 min",
cost: "≈ $0.03",
vertical: "Real Estate",
shortTitle: "Market brief",
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.",
@@ -115,6 +116,7 @@ const RE05 = {
time: "~12 min",
cost: "≈ $0.02",
vertical: "Real Estate",
shortTitle: "Listing copy",
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.",
@@ -188,6 +190,7 @@ export const CHAPTER = {
{ id: "RE-05", href: "#re-05", title: "Listing copy" },
],
stakes: {
id: "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.",
@@ -195,6 +198,7 @@ export const CHAPTER = {
],
},
constraints: {
id: "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.",
@@ -202,12 +206,14 @@ export const CHAPTER = {
],
},
practice: {
id: "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: {
id: "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.",
@@ -224,3 +230,33 @@ export const CHAPTER = {
"Local redaction fields: owner_name, phone, exact_address.",
],
};
/** Outline groups for the chapter map. Headings come from the essay objects. */
export function buildOutline(chapter, recipes) {
return [
{
label: "Essay",
items: [chapter.stakes, chapter.constraints, chapter.practice, chapter.between].map((s) => ({
id: s.id,
label: s.heading,
})),
},
{
label: "Workflows",
items: recipes.map((r) => ({
id: r.anchor,
recipeId: r.id,
label: r.id + " · " + r.shortTitle,
time: r.time,
shortTitle: r.shortTitle,
})),
},
{
label: "End",
items: [
{ id: "further", label: "Further workflows" },
{ id: "sources", label: "Sources" },
],
},
];
}