⚠ SAMPLE — FICTIONAL TEST CLIENT Desmond Okonkwo-Reyes is not a real person. No real client, contact or vendor data appears on this page. Built for Joseph’s review, 2026-08-09 15:17 CDT.

Client Portal · Cultivate + Curate

Desmond Okonkwo-Reyes

DEEP TIER · portfolio owner · entity · active referrer · with us since 2019-08 · tag [Okonkwo-Reyes/Portfolio] (BUYER-side)

10blocks rendered 25layers deep in total 4 of 4deepest block DEEPtier
Canopy (Overview)
Understory (Workflow)
Root Level (Build)

What’s happening now DEPTH 3/4

1900 block of Wrenwood — acquisition — Option period · you are the BUYER.

  1. Executedsample D-0
  2. Option period endssample D+7
  3. Appraisalsample D+18
  4. Loan approvalsample D+26
  5. Final walksample D+33
  6. Close & fundsample D+35

A sample must not carry calendar dates that read as a real clock. Real portals bind these to the executed contract and the title company's iCal invite — never to a hand-typed snapshot.

What is still open, and whose it is

ItemOwnerState
Inspection scheduledUs✓ done
Survey — existing T-47 requested from sellerOther sidewaiting
Insurance quote for the entityYouwaiting

A milestone projection, not the money view. MILESTONE projection, not the disbursement lens. Our live /transaction-board/ is a money view built for Joseph (CDA reconcile badge). Same data, different projection — never a second board. (Requirements §8.)

Your home DEPTH 3/4

PropertyNeighborhoodRoleBeds/bathsSq ftAcquiredCurrent value
2100 block of Colquitt StRice/Museum DistrictPrimary residence4 / 3.53,4202019-08MISSING
5300 block of Dolores StBriarmeadow/TanglewildeLong-term rental3 / 21,8602021-05MISSING
1500 block of Bonnie Brae StRice MilitaryLong-term rental3 / 3.52,2402022-11MISSING
1900 block of Wrenwood StRice MilitaryAcquisition in flight3 / 2.52,010pendingMISSING

MISSINGNo AVM / home-valuation feed exists anywhere on this box. No tool, no credential, no source. (Requirements §10 item 1.) Every 'current value' cell on a real build needs a procured feed; here it renders MISSING rather than a guess.

4
doors on file
9,530
sq ft under ownership
3
Houston submarkets

Your neighborhood DEPTH 4/4

Rice/Museum District 5,496 comparable sales on file

$1,492,400
median sale price · 2026 (partial year)
$430
avg price per sq ft · 2026
42 days
avg days on market · 2026
Rice/Museum District20262025Change
Median sale price$1,492,400$1,158,500+28.8%
Avg price / sq ft$430$406+5.9%
Median lease$2,750$1,950+41.0%
Gross yield2.2%2.0%+0.2 pts
Year2017201820192020202120222023202420252026
Median sale$820,000$861,000$850,000$950,000$870,000$855,000$907,500$1,025,000$1,158,500$1,492,400
$ / sq ft$331$322$323$337$325$353$363$391$406$430
Gross yield2.9%2.3%2.5%2.3%2.5%2.8%2.6%2.5%2.0%2.2%

Method. Built by tools/value_trends_build.py from an MLS single-family export for this submarket — 5,314 typed records (SFH 2,123 · Townhouse 3,052 · Condo 139). A page in this family is not shippable until value_trends_verify.py exits 0; that is the gate that catches blank pages. 2026 is a partial year and is labelled as such everywhere it appears.

Rice/Museum District as of 2026-07-11 · MLS-derived dataset on this box

Briarmeadow/Tanglewilde 3,062 comparable sales on file

$487,000
median sale price · 2026 (partial year)
$226
avg price per sq ft · 2026
40 days
avg days on market · 2026
Briarmeadow/Tanglewilde20262025Change
Median sale price$487,000$407,500+19.5%
Avg price / sq ft$226$224+0.9%
Median lease$1,800$1,900-5.3%
Gross yield4.4%5.6%-1.2 pts
Year2017201820192020202120222023202420252026
Median sale$294,000$327,000$318,268$330,000$350,000$385,000$399,840$401,395$407,500$487,000
$ / sq ft$160$168$164$172$192$205$207$218$224$226
Gross yield5.1%5.3%4.9%5.0%5.1%5.6%5.4%5.6%5.6%4.4%

Method. Built by tools/value_trends_build.py from an MLS single-family export for this submarket — 2,980 typed records (SFH 821 · Townhouse 2,037 · Condo 122). A page in this family is not shippable until value_trends_verify.py exits 0; that is the gate that catches blank pages. 2026 is a partial year and is labelled as such everywhere it appears.

Briarmeadow/Tanglewilde as of 2026-07-11 · MLS-derived dataset on this box

Rice Military 7,092 comparable sales on file

$539,500
median sale price · 2026 (partial year)
$239
avg price per sq ft · 2026
68 days
avg days on market · 2026
Rice Military20262025Change
Median sale price$539,500$532,000+1.4%
Avg price / sq ft$239$246-2.8%
Median lease$2,700$2,950-8.5%
Gross yield6.0%6.7%-0.7 pts
Year2017201820192020202120222023202420252026
Median sale$440,000$440,000$465,000$471,000$485,000$532,600$565,000$562,350$532,000$539,500
$ / sq ft$203$204$206$207$216$235$252$254$246$239
Gross yield6.5%7.0%6.7%6.8%6.4%6.5%6.0%6.1%6.7%6.0%

Method. Built by tools/value_trends_build.py from an MLS single-family export for this submarket — 6,890 typed records (SFH 4,088 · Townhouse 1,932 · Condo 870). A page in this family is not shippable until value_trends_verify.py exits 0; that is the gate that catches blank pages. 2026 is a partial year and is labelled as such everywhere it appears.

Rice Military as of 2026-07-11 · MLS-derived dataset on this box

Around you DEPTH 2/4

Real places, real coordinates — rendered by the same local-insights engine our showing tours use.

Daily-life anchors — grocery & hardware

Weekly shop: H-E-B · Whole Foods Market · Kroger

Home & yard: The Home Depot · Lowe's

Shopping & the local scene

Curated centers: Heights Mercantile · M-K-T

Walkable retail corridors: 19th Street shopping district · Houston Farmers Market — count stores + restaurants per 0.25-mi grid in the walk radius -> walkability score.

Local favorites — local vibe, not chain

Houston Dairymaids · Lei Low — independent, high-rated spots (chains filtered out).

Local interest map

🛒Grocery🔧Hardware🛍Shopping centers🏪Store density / corridorsLocal favorites
Local layer as of 2026-06-10 · curated pins, local_interest_layer.py

Your referral impact DEPTH 3/4

7
introductions you have made · last 24 months
#3
your private standing among 62 client households
4
of those became someone we closed for

🎯 One more introduction reaches #2.

Private by default. You see your own standing and your own gap. You never see another client’s name, rank or count — and they never see yours.

PeriodIntroductions madeBecame a closing
sample year -310
sample year -221
sample year -132
sample year 011

Referral lineage: MISSINGMulti-generation referral lineage is UNCONFIRMED as reconstructible from our record. RM's referral surface is a 'Referrals Generated YTD' scoreboard that resets Jan 1 — a counter, not a graph. The inspiration deck's 'traced generations deep' is not a thing we can currently prove. (Requirements §10 item 3.)

Your entity DEPTH 2/4

Chalkline Holdings LLC · Texas series LLC (sample) · holds 2 of your doors.

Entity factValueWhere we hold it
Title vestingChalkline Holdings LLCTitle company file
Registered agentMISSINGnot in our record
EIN on file with lenderMISSINGnot in our record
Operating agreementon fileClient_[Address/Lastname] (client-only folder)

Entity facts we hold vs entity facts we do not. A real build reads these from the transaction party record (config/transaction-parties/*.json), never from memory.

Your documents DEPTH 2/4

DocumentYearWhere it livesYou can
Closing statement — Colquitt2019Client-only folderdownload
Closing statement — Dolores2021Client-only folderdownload
Closing statement — Bonnie Brae2022Client-only folderdownload
Survey / T-47 — Dolores2021Client-only folderdownload
Executed contract — Wrenwoodin flightClient-only folderdownload
Seller's disclosure — Wrenwoodin flightClient-only folderdownload

Joseph's own permission boundary, verbatim from the Cultivate/Consultation spec: 'Client only — Top folder Client_[Address/Lastname] contains CMA, Netsheet' vs 'Share with public — Subfolder docs_[Address/Lastname] contains property details.' The portal inherits it. It does not invent a new access model.

Resources that don’t expire DEPTH 2/4

ResourceKindContent ladder tier
The investor's HCAD protest packet — entity-held propertyHow-toAnchor Content
What a series LLC actually changes at the closing tableHow-toTimeless Insights
Rent-vs-sell on a Houston rental: the 6 numbersMaster frameworkPillar Content
Turn cost benchmarks between tenantsHelpful tipsEvergreen Baselines
Storm-ready: the Houston homeowner checklist sample link target — public TPJG siteHelpful tipsAnchor Content

Why every row carries a tier. “Timeless resources” is not a loose word — it classifies against Joseph’s own ladder in the Definitions tab: Pillar Content (Master Framework) > Anchor Content (Core Reference) > Timeless Insights (Enduring Value) > Evergreen Baselines (Infinite Relevance). His own definition of Anchor Content already names this surface: “content that stays anchored in place on a site or portal.”

Our preferred people DEPTH 3/4

CategoryPreferred partnerWhen you’d need themOn file 
General ContractorNinth Ward Build Group FICTIONALafter you close · before you buy · while under contract36Introduce me
RooferCopperline Roofing FICTIONALafter you close4Introduce me
PlumberWrenwater Plumbing FICTIONAL1Introduce me
HVACNorthline Air & Comfort FICTIONALafter you close2Introduce me
LandscaperBayou Bend Grounds Co. FICTIONALafter you close · while under contract9Introduce me
Pest ControlCicada Pest Solutions FICTIONAL3Introduce me
Property InsuranceSabine Ridge Insurance Agency FICTIONALafter you close · while under contract6Introduce me
Home WarrantyKeystone Home Warranty FICTIONALafter you close · while under contract4Introduce me
Vendor directory as of 2026-08-09 · 902 vendors on file, 85 flagged preferred

The categories and phase tags are real — read live from data/vendors/directory.json and its transaction_phase field. The businesses named are invented, on purpose: a sample page does not publish 902 real vendors’ names and phone numbers.

What “Introduce me” would do — and why it does nothing here. The spec is an auto-notification to the vendor and the agent, then a cross-introduction between the two of them. That leg is BLOCKED: functions/api/tour-email.js enqueues into KV and names a consumer, tools/tour_email_poller.py, that does not exist on this box. No notification feature may assume that transport works until a consumer exists and is proven. (Requirements TI-7 / §10 item 5.)

A note from us DEPTH 1/4

Desmond — Wrenwood is the fourth door and the first one you are buying inside the entity, so the moving parts are different this time: the insurance binder has to name Chalkline, not you, and the lender will ask for the operating agreement before they ask for anything else. We have both on our side of the list. Separately, Dolores is inside the window where a rent-versus-sell conversation is actually worth having — the Briarmeadow number below is the reason, not a hunch. And Amara closed in March off your introduction; that is four of the seven now.

— Joseph & Keri · The Property Joes Group

The bespoke depth rule, as data

Joseph: “Depending upon the complexity and the sophistication of their portfolio will determine how deep and wide their portal will be.”

Both sample portals come out of one generator and one code path. The only thing that differs is the client record. Width = which blocks exist at all. Depth = how many layers each block goes (1 headline → 2 breakdown → 3 history → 4 method/source).

What put this client on this tier

InputValue
Transactions on file6
Roles heldbuyer, seller, landlord
Individual or entityentity
Properties owned4
Referrals given7
Manual override by JosephMISSING
Resolved tierDEEP
Rule applied6 transactions + entity + 7 referrals -> DEEP (PROPOSED, not ruled)

These thresholds are NOT approved

Q1 in the requirements is open: Joseph has defined no tiers and no thresholds, and there is no portfolio-complexity score anywhere in the doc or on our box. The rule above is the proposed derivation (DEPTH-3), rendered here so it can be argued with rather than buried in code. The intended design is machine derives → Joseph overrides → the override always wins — our own calibration across 140 rulings says his judgement outranks our filter (his sponsor sheet 100%, our usage heuristic 28%).

This record’s block manifest

BlockidDepth here (DEEP)Depth on the BASE sample
What’s happening nownow3 / 41 / 4
Your homehome3 / 41 / 4
Your neighborhoodneighborhood4 / 41 / 4
Around youlocal2 / 4absent
Your referral impactreferral3 / 41 / 4
Your entityentity2 / 4absent
Your documentsdocuments2 / 4absent
Resources that don’t expireresources2 / 41 / 4
Our preferred peoplevendors3 / 41 / 4
A note from usnote1 / 41 / 4

Side by side

 DEEP sampleBASE sample
Blocks rendered (width)107
Total layers (depth)257
Deepest single block4 of 41 of 4
Properties rendered41
Neighborhood datasets31
Live dealyesno
Generatorclient_portal_sample_build.pyclient_portal_sample_build.py
Code pathidenticalidentical

The point of the exercise. If those two columns had come out the same, the architecture would be wrong — bespoke-ness would have to be hand-built per client, which is the one thing the rule forbids (DEPTH-1: one generator; bespoke-ness is data, never a second generator). Far better to find that out on a fictional client.

What a client would never see

Held about this clientVisible to them?Why
Their transactions, documents, homeyestheirs
Their own referral count and private rankyesthis is the return engine
Another client’s name, rank or countneverprivate by default (TO-6)
Our frequency / vendor scoresneverour commercial intelligence
Our internal classification and notesneverour commercial intelligence
The persona profile we hold on themneverQ6 and Q7, both unresolved

Q6 is open: what a client is allowed to learn about how we rank them is a relationship judgement, not an engineering one. The split above is the recommendation, not the ruling.

This page is deliberately wrong in exactly one way

It is classified internal — the page type for creator-only pages — so it carries the library navigation furniture (the “Library” and “Full Index” pills, bottom left). A real client portal must never carry that furniture. It is a live route into the private library and a map of the whole estate.

We typed it internal on purpose, because that is honestly what it is — a review artifact for Joseph — and because the correct type does not exist yet. config/page-types.json has exactly three types (internal, grouped, public) and fails closed. A fourth — client-facing: private, no library furniture, not public, not indexed — must be added before a single real portal page can deploy (TREE-6). Pretending otherwise would have been the easier lie.

How this page was built

PieceWhere it comes from
Generatortools/client_portal_sample_build.py — one file, one code path, both samples
This client recorddata/client-portal-samples/deep.json
Tablestools/lib_table_standard.py — the ONE shared component (sortable, filterable, row-moveable, first column frozen). Not re-implemented here.
Market figures<slug>-value-trends/data.json, built by tools/value_trends_build.py from MLS exports
Local insights + maplocal_interest_layer.py — keyless, Leaflet 1.9.4 + OpenStreetMap. No new mapping dependency was added.
Vendor categories + phasesdata/vendors/directory.json (902 vendors) — taxonomy and counts only
Brandtools/brand_gate.py — client-facing is The Curator, locked by Joseph 2026-05-15
Page furnitureCanopy / Understory / Root Level tabs, already shipped on /digital-avatar/ and /voice-digitization/
Publishing gatetools/page_type_gate.py + config/page-types.json
Change recordtools/lib_change_log.py/changes/

What is fictional, and what is real

On this pageStatusWhat a real build would need
The household, the names, the client tagINVENTEDa real client record — and Q2 (mask polarity) and Q3 (auth) resolved first
Transaction history, deal status, milestone datesINVENTEDconfig/transaction-parties/*.json plus the title company’s iCal invite as the source of truth for dates — never a hand-typed snapshot
Addresses (block-level only, never a parcel)INVENTEDthe real property record. Block-level here on purpose, so the sample points at no real household
Referral counts, private rank, next-rung gapINVENTEDa referral graph we do not currently have — RM’s surface is a “Referrals Generated YTD” counter that resets every Jan 1
The preferred-vendor businessesINVENTEDthe 902-row directory plus the RM “Preferred Partners” group (94)
Neighborhood medians, $/sq ft, days on market, yieldREALalready real — MLS-derived, on this box, dated
Vendor categories, phase tags, directory countsREALalready real
Local places, coordinates and the mapREALalready real — curated pins + OpenStreetMap
Every “current value” cellMISSINGan AVM / valuation feed. None exists anywhere on this box — no tool, no credential, no source. That is a procurement decision, not an engineering one.

What blocks a real client portal today

#BlockerWhy it stops a real build
Q3No client-facing authentication exists.Our own live /clients/ page says it plainly: “They are not password-protected — the URL is the credential.” Fine for a page only Joseph opens. Not fine for a page carrying a client’s contracts, settlement sheets and referral rank. That is why this sample client is fictional.
Q2Mask polarity inverts./clients/<slug>/ exists and is built FOR JOSEPH — which is exactly why one live file shows 11 contacts and masks 17. A client portal is built FOR THE CLIENT: same data, opposite audience. assert_no_leak() has to run once per audience.
TREE-6The client-facing page type does not exist.The publishing gate has three types and fails closed. No portal page can legally deploy until a fourth is added.
TI-7The notification transport has no consumer./api/tour-email enqueues into KV and names tools/tour_email_poller.py, which does not exist on this box. Vendor/agent auto-notification cannot be built on a promise.
§10No AVM feed.The highest-return-frequency block in the inspiration material, and we hold zero data for it.

Full requirements, the reuse inventory and all 13 open questions: exports/briefs/client-portal-requirements.md. Q1, Q2 and Q3 block any real build.

Freshness of everything on this page

DataAs ofSource
Briarmeadow/Tanglewilde market data2026-07-11briarmeadow-value-trends/data.json
Rice/Museum District market data2026-07-11museum-district-value-trends/data.json
Rice Military market data2026-07-11rice-military-value-trends/data.json
Vendor directory2026-08-09data/vendors/directory.json
Local-insight pins2026-06-10local_interest_layer.HEIGHTS_PINS
This page2026-08-09 15:17 CDTthis build

Every block on the Canopy tab carries its own as-of stamp. Nothing unknown is guessed — it renders MISSING with the reason.