feat(reader): add sample Real Estate chapter and nested recipes
This commit is contained in:
@@ -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.",
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user