Portal Architecture Plan — the "org chart" consolidation (2026-06-01)
Sam's question: "Am I doing it wrong with 1 million pages? Should there be a hierarchy/architecture like a company org chart?" YES — that instinct is correct. Today: 25 loose HTML pages + 147 briefings, each a silo, fixes don't propagate (the sprawl disease). This plan = the fix. PLAN ONLY — approve the shape, then build.
The core problem (quantified)
- 25 standalone .html pages in outputs/ — each hand-built, own copy of styles/logic. A fix to one (dropdowns, dark mode, crest) does NOT reach the others.
- 147 dated briefings loose in the same folder — no browseable index.
- Result: sprawl, drift, slow, "which page is real?" This is NOT how mature apps work. Sam is right.
WordPress vs what we're doing (Sam asked)
- WordPress = public marketing SITE (blog/brochure), heavy, not for live-data apps.
- This is an APP (private ops dashboard, live data, actions) → HTML + Cloudflare Worker is the RIGHT tool. Sam is NOT doing it wrong. A pro would build the same kind of thing.
THE ORG CHART (target architecture)
Hook Street (you)
│
├── ONE shell (shared header/crest, nav, design tokens, auth) ── every page inherits this
│
├── /home → decide.html engine (Protect/Advance/Waiting + loops) [the START]
├── /money → obligations + cash (Plaid live) + runway
├── /cameras → Hikvision grid (after DDNS) + ecobee/Ring deep-links
├── /family → Chanie + kiosk view (scoped)
├── /stocks → MIS/peek
├── /briefings → INDEX of the 147 (browseable, filterable) — not 147 loose files
└── /services → Hook Street Services / Operator Cockpit (the sellable)
- ONE shared layer = design tokens (colors/dark mode), the crest, nav, the action dropdowns, the
?as=scoping, the live-data fetch helpers. Defined ONCE. Every section pulls from it. A fix propagates everywhere — kills the disease. - Folders by purpose (the hierarchy Sam wants), not 25 flat files.
- Retire the duplicates: of the 25, most collapse. home/home-cockpit/decide/next/start/start-here → ONE home. 8 chanie-* variants → ONE chanie. Old ones → archive.
How to actually do it (HTML, no framework bloat)
- A shared
_shell.css+_shell.js(the design tokens + nav + helpers) that EVERY page includes via one line. Change it once → all pages change. (This is the "components" mature apps use, done simply.) - OR a tiny build step that stamps the shell into each page. Decide at build time — keep it light.
- Keep Cloudflare Worker as the data spine (already there). No WordPress, no heavy framework.
Foundation decision (revisited, now clear)
- HTML + sheets/Worker = for SAM + family (1-3 trusted people). This is the consolidation above. DO THIS FIRST.
- Supabase app (command-center, already built, unused) = for STRANGERS with their own login + own private data. This is the TRIAL-USER path (below). Not needed until Sam onboards an outside tester.
TRIAL USER / entrepreneur pilot (PARKED — Sam's call: after his own home works)
Sam's idea: give 1-2 outside people a private trial — their own Google login, their data saved in a real DB (NOT a sheet), 2-week run, Sam helps them, learns what's valuable, finds pricing, builds relationships/capital/connections.
- This is exactly what Supabase command-center is for (per-user auth + private data). It's the reason that foundation exists.
- Timing (locked): AFTER Sam's one-home is built + worth showing. Onboarding a stranger onto a half-built scattered system burns the relationship. Right instinct, right timing = later.
- When ready: deploy command-center (Supabase+Netlify), add trial user's Google email, scope to their own data, 2-wk pilot, capture what they customize → that's the product + the valuation conversation.
Cloudflare session annoyance (quick fix, separate)
Sam: pages say "log in again" on reload (session expired), back-button still shows cached page. Fix = lengthen the CF Access session policy (e.g. 24h → 1 month) so Sam stops re-logging. Small setting in CF Access. (Sam-side or guided.)
BUILD ORDER (when Sam says go)
- Shared shell (_shell.css + _shell.js: tokens, crest, nav, dropdowns, scoping, fetch helpers). The foundation of no-more-sprawl.
- ONE home = decide.html engine, on the shell. Retire home/home-cockpit/next/start/start-here into it.
- Sections rebuilt on the shell: /money, /briefings (index the 147), /stocks, /family.
- Speed: parallel loads + cache so it snaps.
- Retire the duplicate pages → archive.
- THEN: cameras (after DDNS), voice-loop, trial-user (Supabase).
What Sam approves before building
- The org-chart structure above (sections + folders).
- "ONE shared shell, fixes propagate" as the method.
- Which page wins as the home (recommend: decide.html engine).
- That duplicates get retired (archived, not deleted).