DEEP TIER · portfolio owner · entity · active referrer · with us since 2019-08
· tag [Okonkwo-Reyes/Portfolio] (BUYER-side)
1900 block of Wrenwood — acquisition — Option period · you are the BUYER.
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.
| Item | Owner | State |
|---|---|---|
| Inspection scheduled | Us | ✓ done |
| Survey — existing T-47 requested from seller | Other side | waiting |
| Insurance quote for the entity | You | waiting |
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.)
| Property | Neighborhood | Role | Beds/baths | Sq ft | Acquired | Current value |
|---|---|---|---|---|---|---|
| 2100 block of Colquitt St | Rice/Museum District | Primary residence | 4 / 3.5 | 3,420 | 2019-08 | MISSING |
| 5300 block of Dolores St | Briarmeadow/Tanglewilde | Long-term rental | 3 / 2 | 1,860 | 2021-05 | MISSING |
| 1500 block of Bonnie Brae St | Rice Military | Long-term rental | 3 / 3.5 | 2,240 | 2022-11 | MISSING |
| 1900 block of Wrenwood St | Rice Military | Acquisition in flight | 3 / 2.5 | 2,010 | pending | MISSING |
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.
| Rice/Museum District | 2026 | 2025 | Change |
|---|---|---|---|
| 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 yield | 2.2% | 2.0% | +0.2 pts |
| Year | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 yield | 2.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.
| Briarmeadow/Tanglewilde | 2026 | 2025 | Change |
|---|---|---|---|
| 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 yield | 4.4% | 5.6% | -1.2 pts |
| Year | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 yield | 5.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.
| Rice Military | 2026 | 2025 | Change |
|---|---|---|---|
| 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 yield | 6.0% | 6.7% | -0.7 pts |
| Year | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 yield | 6.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.
Real places, real coordinates — rendered by the same local-insights engine our showing tours use.
Weekly shop: H-E-B · Whole Foods Market · Kroger
Home & yard: The Home Depot · Lowe's
Curated centers: Heights Mercantile · M-K-T
Walkable retail corridors: 19th Street shopping district · Houston Farmers Market
🎯 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.
| Period | Introductions made | Became a closing |
|---|---|---|
| sample year -3 | 1 | 0 |
| sample year -2 | 2 | 1 |
| sample year -1 | 3 | 2 |
| sample year 0 | 1 | 1 |
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.)
Chalkline Holdings LLC · Texas series LLC (sample) · holds 2 of your doors.
| Entity fact | Value | Where we hold it |
|---|---|---|
| Title vesting | Chalkline Holdings LLC | Title company file |
| Registered agent | MISSING | not in our record |
| EIN on file with lender | MISSING | not in our record |
| Operating agreement | on file | Client_[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.
| Document | Year | Where it lives | You can |
|---|---|---|---|
| Closing statement — Colquitt | 2019 | Client-only folder | download |
| Closing statement — Dolores | 2021 | Client-only folder | download |
| Closing statement — Bonnie Brae | 2022 | Client-only folder | download |
| Survey / T-47 — Dolores | 2021 | Client-only folder | download |
| Executed contract — Wrenwood | in flight | Client-only folder | download |
| Seller's disclosure — Wrenwood | in flight | Client-only folder | download |
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.
| Resource | Kind | Content ladder tier |
|---|---|---|
| The investor's HCAD protest packet — entity-held property | How-to | Anchor Content |
| What a series LLC actually changes at the closing table | How-to | Timeless Insights |
| Rent-vs-sell on a Houston rental: the 6 numbers | Master framework | Pillar Content |
| Turn cost benchmarks between tenants | Helpful tips | Evergreen Baselines |
| Storm-ready: the Houston homeowner checklist sample link target — public TPJG site | Helpful tips | Anchor 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.”
| Category | Preferred partner | When you’d need them | On file | |
|---|---|---|---|---|
| General Contractor | Ninth Ward Build Group FICTIONAL | after you close · before you buy · while under contract | 36 | Introduce me |
| Roofer | Copperline Roofing FICTIONAL | after you close | 4 | Introduce me |
| Plumber | Wrenwater Plumbing FICTIONAL | — | 1 | Introduce me |
| HVAC | Northline Air & Comfort FICTIONAL | after you close | 2 | Introduce me |
| Landscaper | Bayou Bend Grounds Co. FICTIONAL | after you close · while under contract | 9 | Introduce me |
| Pest Control | Cicada Pest Solutions FICTIONAL | — | 3 | Introduce me |
| Property Insurance | Sabine Ridge Insurance Agency FICTIONAL | after you close · while under contract | 6 | Introduce me |
| Home Warranty | Keystone Home Warranty FICTIONAL | after you close · while under contract | 4 | Introduce me |
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.)
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
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).
| Input | Value |
|---|---|
| Transactions on file | 6 |
| Roles held | buyer, seller, landlord |
| Individual or entity | entity |
| Properties owned | 4 |
| Referrals given | 7 |
| Manual override by Joseph | MISSING |
| Resolved tier | DEEP |
| Rule applied | 6 transactions + entity + 7 referrals -> DEEP (PROPOSED, not ruled) |
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%).
| Block | id | Depth here (DEEP) | Depth on the BASE sample |
|---|---|---|---|
| What’s happening now | now | 3 / 4 | 1 / 4 |
| Your home | home | 3 / 4 | 1 / 4 |
| Your neighborhood | neighborhood | 4 / 4 | 1 / 4 |
| Around you | local | 2 / 4 | absent |
| Your referral impact | referral | 3 / 4 | 1 / 4 |
| Your entity | entity | 2 / 4 | absent |
| Your documents | documents | 2 / 4 | absent |
| Resources that don’t expire | resources | 2 / 4 | 1 / 4 |
| Our preferred people | vendors | 3 / 4 | 1 / 4 |
| A note from us | note | 1 / 4 | 1 / 4 |
| DEEP sample | BASE sample | |
|---|---|---|
| Blocks rendered (width) | 10 | 7 |
| Total layers (depth) | 25 | 7 |
| Deepest single block | 4 of 4 | 1 of 4 |
| Properties rendered | 4 | 1 |
| Neighborhood datasets | 3 | 1 |
| Live deal | yes | no |
| Generator | client_portal_sample_build.py | client_portal_sample_build.py |
| Code path | identical | identical |
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.
| Held about this client | Visible to them? | Why |
|---|---|---|
| Their transactions, documents, home | yes | theirs |
| Their own referral count and private rank | yes | this is the return engine |
| Another client’s name, rank or count | never | private by default (TO-6) |
| Our frequency / vendor scores | never | our commercial intelligence |
| Our internal classification and notes | never | our commercial intelligence |
| The persona profile we hold on them | never | Q6 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.
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.
| Piece | Where it comes from |
|---|---|
| Generator | tools/client_portal_sample_build.py — one file, one code path, both samples |
| This client record | data/client-portal-samples/deep.json |
| Tables | tools/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 + map | local_interest_layer.py — keyless, Leaflet 1.9.4 + OpenStreetMap. No new mapping dependency was added. |
| Vendor categories + phases | data/vendors/directory.json (902 vendors) — taxonomy and counts only |
| Brand | tools/brand_gate.py — client-facing is The Curator, locked by Joseph 2026-05-15 |
| Page furniture | Canopy / Understory / Root Level tabs, already shipped on /digital-avatar/ and /voice-digitization/ |
| Publishing gate | tools/page_type_gate.py + config/page-types.json |
| Change record | tools/lib_change_log.py → /changes/ |
| On this page | Status | What a real build would need |
|---|---|---|
| The household, the names, the client tag | INVENTED | a real client record — and Q2 (mask polarity) and Q3 (auth) resolved first |
| Transaction history, deal status, milestone dates | INVENTED | config/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) | INVENTED | the real property record. Block-level here on purpose, so the sample points at no real household |
| Referral counts, private rank, next-rung gap | INVENTED | a referral graph we do not currently have — RM’s surface is a “Referrals Generated YTD” counter that resets every Jan 1 |
| The preferred-vendor businesses | INVENTED | the 902-row directory plus the RM “Preferred Partners” group (94) |
| Neighborhood medians, $/sq ft, days on market, yield | REAL | already real — MLS-derived, on this box, dated |
| Vendor categories, phase tags, directory counts | REAL | already real |
| Local places, coordinates and the map | REAL | already real — curated pins + OpenStreetMap |
| Every “current value” cell | MISSING | an AVM / valuation feed. None exists anywhere on this box — no tool, no credential, no source. That is a procurement decision, not an engineering one. |
| # | Blocker | Why it stops a real build |
|---|---|---|
| Q3 | No 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. |
| Q2 | Mask 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-6 | The 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-7 | The 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. |
| §10 | No 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.
| Data | As of | Source |
|---|---|---|
| Briarmeadow/Tanglewilde market data | 2026-07-11 | briarmeadow-value-trends/data.json |
| Rice/Museum District market data | 2026-07-11 | museum-district-value-trends/data.json |
| Rice Military market data | 2026-07-11 | rice-military-value-trends/data.json |
| Vendor directory | 2026-08-09 | data/vendors/directory.json |
| Local-insight pins | 2026-06-10 | local_interest_layer.HEIGHTS_PINS |
| This page | 2026-08-09 14:30 CDT | this build |
Every block on the Canopy tab carries its own as-of stamp. Nothing unknown is guessed — it renders MISSING with the reason.