Internal Review · Lane A

Admin & Control Consolidation

A spider of every admin, control, command, access and identity surface across the live v7 site and the v4 v5B lineage — what exists, what overlaps, what's live vs workspace-only, and how to make it one coherent system without reinventing anything.

Stamped …

QYour two direct questions

“Does this take Shattique's admin panel into account?” — Yes, and it was already handled: 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).
“Does it take all PURE user hats into account?” — Partly. The canonical hats are already live and DB-driven: 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.

live deployed at root stub redirect only workspace built, not at live root keep merge park Boneyard
SurfaceWhat it isStatusRecommend
pure-admin-center.html“Pure Admin Center” — live member directory; Mike (super-admin) opens anyone's dashboard, teammates view each other.livekeep — 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.livemerge 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.livekeep — 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.livemerge Broker view of Admin Center
pure-admin.html“Broker Admin — moved” — redirect.stubpark
shattique-admin.html“Moved Pure Admin · Overview” — redirect.stubpark

Role-specific admins (each is a good page — they should be tabs/links inside one shell, not islands)

SurfaceOwnsHat
brand-admin.htmlBrand workspace (visual tokens, brand standards)Brand Manager
org-admin.htmlOrg Security & Seats — per-seat MFA + idle sign-outBroker / Staff
pure-tech-admin.htmlTech Control PanelTech Lead
pure-app-admin.htmlApp Access ControlTech / Super
pure-components-admin.htmlDesign System registryBrand / Tech
pure-field-admin.html · pure-email-admin.htmlField-level ACLs · email/SMTPTech / Staff
pure-mls-console.html · pure-qa-console.html · pure-testdrive-admin.htmlMLS ops · QA · test-driveMLS 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.

VersionWhereRole today
v4 / v4.8merge-v3/“Engine room” — mechanics being absorbed into v5. Mine for logic, don't ship.
v5v5/The standard build — surfaces, deal room, grants.
v5Bfable-v5/Parking lot — best already pulled (money loop, Deal Spine, Association suite).
combined-deploy/batch snapshotsCanonical merged deploy artifacts (immutable, stamped).
v7 (live)acquisto.bizThe merged static site on Netlify puremlstech/puremls @ Testin.MikeSupabase. 580 files.

4Problems worth naming

Workspace ≠ live. The live branch has files this design workspace doesn't (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.
Five admin homes, no single front door. A user landing on “admin” can hit any of five different shells with different nav and different scope.
CLAUDE.md conflates two files. It calls the Site Control tab of pure-admin-console “the Pure Admin Center”, but pure-admin-center.html is a separate, real page. The canon needs to pick one.
Board writes are gated but the UI implies otherwise. Anon is read-only on 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.
Hats are DB-true but not UI-bound in the console. pure-hats.js exists and works; the Admin Console just doesn't mount it yet.

5Recommendations — make it one system (no reinvention)

1
Reconcile workspace live firstdo now

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.

2
Anoint ONE Admin Center + a hat switcherdo now

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.

3
Fold the Board + role-admins in as tabs, park the stubsnext

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.

4
One gated write path for the boardnext

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.

5
Publish a Site Directory as the mapsoon

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.

PURE MLS Technologies · a product of Acquisto Real Estate · internal review, not a public page