feat(reader): add sample Real Estate chapter and nested recipes

This commit is contained in:
pat
2026-08-31 07:33:17 +00:00
parent ce9bb4f943
commit 0fba3c8175
+226
View File
@@ -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.",
],
};