QYour two direct questions
shattique-admin.html is a redirect stub (title literally “Moved Pure Admin · Overview”). Shattique is Infra / Deploy (from pure-users.js), and his panel was folded into the Pure Admin family. Nothing lost — but it points at a different admin home than the Board I just built (see the fragmentation below).pure-hats.js renders the signed-in user's real hats from pure_identity_hats via the mcp_my_hats() RPC, and pure-role-reconciliation.html already compares live hats to an approved baseline. The gap: the Admin Console I extended (pure-admin-console.html) does not mount pure-hats.js or scope by hat — it shows a fixed “Tech Lead” identity. So the board is hat-aware in the data but not in the UI yet.1The core finding: five “admin homes”, one job
The live branch (puremlstech/puremls @ Testin.MikeSupabase) has 580 files. At least five of them are a top-level “admin home”, plus ten role-specific admins. This is the fragmentation you're feeling — nothing is missing, it's duplicated and unrouted.
| Surface | What it is | Status | Recommend |
|---|---|---|---|
| pure-admin-center.html | “Pure Admin Center” — live member directory; Mike (super-admin) opens anyone's dashboard, teammates view each other. | live | keep — canonical people/operator home |
| pure-admin/overview.html | “Pure Admin · Overview” — hat-rank-scoped operator console, live KPIs (org members, listings, board), nav to people/marketplace/tech. | live | merge into Admin Center (near-duplicate) |
| pure-admin-console.html | “Admin Console” — the system console I just extended: Overview · Board · Orchestration · Crons · Permissions · Security · Site Map · Site Control · Audit. | live | keep — canonical system/dev home (make it the “System” tab of Admin Center) |
| admin-hub.html | “Admin Hub — Brokerage Reporting” — broker health, agent production, items needing a broker. | live | merge Broker view of Admin Center |
| pure-admin.html | “Broker Admin — moved” — redirect. | stub | park |
| shattique-admin.html | “Moved Pure Admin · Overview” — redirect. | stub | park |
Role-specific admins (each is a good page — they should be tabs/links inside one shell, not islands)
| Surface | Owns | Hat |
|---|---|---|
| brand-admin.html | Brand workspace (visual tokens, brand standards) | Brand Manager |
| org-admin.html | Org Security & Seats — per-seat MFA + idle sign-out | Broker / Staff |
| pure-tech-admin.html | Tech Control Panel | Tech Lead |
| pure-app-admin.html | App Access Control | Tech / Super |
| pure-components-admin.html | Design System registry | Brand / Tech |
| pure-field-admin.html · pure-email-admin.html | Field-level ACLs · email/SMTP | Tech / Staff |
| pure-mls-console.html · pure-qa-console.html · pure-testdrive-admin.html | MLS ops · QA · test-drive | MLS Admin / Tech |
2Control & command centers, access & ticketing
Control / command
poppy-control-center.html (Poppy orchestration) · pure-lane-control.html · site-control.html (governance registry) · pure-ops.html (Operations Console — crons + lane-mail). Workspace-only: lane-b/pure-command-center.html (Bv7), lane-b/MCP Admin Console.html.
Access / identity / security
pure-access-control / -review / -rules · poppy-access-map · pure-guest-access · pure-travel (by location) · pure-fund-controls · pure-mobile-auth (3FA) · pure-mfa · pure-auth-providers · pure-role-reconciliation.
Roles / hats model
Three layers, one truth: pure_identity_hats (DB: person × org × role, rank 0–5) pure-hats.js (renders real hats via mcp_my_hats()) pure-roles.js (CSS scoping: client‹agent‹broker‹admin‹superadmin). welcome-hats.html onboards them. The DB is canonical.
Ticketing (just pulled forward)
ticket-intake.html (rawrefined, human-gated) · ticket-approve.html · pure-ticket-triage.html · pure-board-sync.js · pure-tasks.js (byEffort). Live board = pure_board (618 rows). Reads: anon-OK via mcp_board_list/mcp_approvals_list. Writes: gated — no anon write (APR-10 is the open request to allow one).
3Version lineage — v4 v7
From MERGE-SESSION-HANDOFF.md and the batch ledger. The estate was three parallel builds merged into today's single live site.
| Version | Where | Role today |
|---|---|---|
| v4 / v4.8 | merge-v3/ | “Engine room” — mechanics being absorbed into v5. Mine for logic, don't ship. |
| v5 | v5/ | The standard build — surfaces, deal room, grants. |
| v5B | fable-v5/ | Parking lot — best already pulled (money loop, Deal Spine, Association suite). |
| combined-deploy/ | batch snapshots | Canonical merged deploy artifacts (immutable, stamped). |
| v7 (live) | acquisto.biz | The merged static site on Netlify puremlstech/puremls @ Testin.MikeSupabase. 580 files. |
4Problems worth naming
pure-hats.js, pure-admin-center.html, admin-hub, org-admin, brand-admin, poppy-control-center, pure-role-reconciliation…). Editing here risks shipping backwards. This is the highest-risk item.pure-admin-console “the Pure Admin Center”, but pure-admin-center.html is a separate, real page. The canon needs to pick one.pure_board; approve/deny/claim need the MCP key or an authed session. Any action button must route through the gated path, not fake a PATCH.pure-hats.js exists and works; the Admin Console just doesn't mount it yet.5Recommendations — make it one system (no reinvention)
Pull the live-only admin/identity files into this workspace (or agree the workspace is display-only and edit via live blobs). Until this is done, every “improvement” risks regressing the live site. Cheap, mechanical, unblocks everything.
Make pure-admin-center.html the single front door. It already does “Mike opens anyone's dashboard”. Mount pure-hats.js so the top-right “view as” switcher drives which tabs show. Every other admin becomes a tab or deep-link inside it, scoped by hat: Brokeradmin-hub, Brandbrand-admin, Techpure-admin-console (System + Board), Orgorg-admin, MLSpure-mls-console.
The new live Board tab becomes the “Work” surface of the Tech/Super view. Retire pure-admin.html, shattique-admin.html, and pure-admin/overview.html via the Boneyard (park + ribbon successor), never silent-delete — per your own standing rule.
Approve/deny/claim/new-ticket route through pure-mcp (needs the server key) or a post-auth session. Until the auth window lands, keep writes behind sign-in and keep ticket-intake.html (rawrefinedqueue) as the create path. Resolve APR-10 to decide if a scoped anon write is ever allowed.
site-directory.html / site-graph.html already exist — make one the canonical index every hat reaches from home, and let site-control.html's governance registry (per-hat visibility, kill-switch) drive what each hat sees. This is how “580 files” stops feeling like chaos.
What do you want me to execute?
Pick one and I'll build it in checkpointed steps (one surface per turn, so nothing interrupts). I won't start a mega-merge unprompted.