Add chapter outline data and recipe short titles
This commit is contained in:
@@ -56,6 +56,7 @@ const RE04 = {
|
|||||||
time: "~15 min",
|
time: "~15 min",
|
||||||
cost: "≈ $0.03",
|
cost: "≈ $0.03",
|
||||||
vertical: "Real Estate",
|
vertical: "Real Estate",
|
||||||
|
shortTitle: "Market brief",
|
||||||
title: "Draft a property-market brief with an AI agent without leaking client data.",
|
title: "Draft a property-market brief with an AI agent without leaking client data.",
|
||||||
problem:
|
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.",
|
"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",
|
time: "~12 min",
|
||||||
cost: "≈ $0.02",
|
cost: "≈ $0.02",
|
||||||
vertical: "Real Estate",
|
vertical: "Real Estate",
|
||||||
|
shortTitle: "Listing copy",
|
||||||
title: "Rewrite a listing description from public comps without pasting the client address book.",
|
title: "Rewrite a listing description from public comps without pasting the client address book.",
|
||||||
problem:
|
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.",
|
"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" },
|
{ id: "RE-05", href: "#re-05", title: "Listing copy" },
|
||||||
],
|
],
|
||||||
stakes: {
|
stakes: {
|
||||||
|
id: "stakes",
|
||||||
heading: "The stakes",
|
heading: "The stakes",
|
||||||
paragraphs: [
|
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.",
|
"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: {
|
constraints: {
|
||||||
|
id: "constraints",
|
||||||
heading: "Constraints you cannot ignore",
|
heading: "Constraints you cannot ignore",
|
||||||
paragraphs: [
|
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.",
|
"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: {
|
practice: {
|
||||||
|
id: "practice",
|
||||||
heading: "How we work here",
|
heading: "How we work here",
|
||||||
paragraphs: [
|
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.",
|
"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: {
|
between: {
|
||||||
|
id: "between",
|
||||||
heading: "The brief is half the meeting",
|
heading: "The brief is half the meeting",
|
||||||
paragraphs: [
|
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.",
|
"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.",
|
"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" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user