The master control surface for Platmetrix — managing every tool, account, paywall and access grant across the platform.
The Platform Admin Console is the master control surface for Platmetrix. From one place you manage every tool in the suite, every account, the paywalls that gate paid work, and the access each person holds. This handbook is written for the two roles that operate it.
| Role | What they can do | What they can't |
|---|---|---|
| Master admin | Everything: all tools, create/delete any account, reset any password, flip any paywall, push site changes, and grant assignability to others. | Nothing is withheld — this is the top of the tree. |
| Platform admin | Manage accounts, tools, access and invitations; run the Quote Builder; day-to-day operations. | Destructive site-wide changes and granting assignability (reserved for master). |
Below the two admins sits a hierarchy of account holders. The concept that makes it work is assignability — a right that lets certain account holders create and manage accounts beneath them without being full admins. A Regional Manager assigns Property Managers; a Property Manager assigns on-site staff; an Enterprise Owner assigns its own users. Master and Platform admins sit above all of it.
Accounts that can create sub-accounts show a green can assign tag next to their role. End users (staff, residents, individual clients) have no such tag — they consume access, they don't hand it out.
Only the Master admin can grant assignability. That keeps control of who can spawn accounts in one pair of hands, no matter how large the tree grows.
The console has four tabs across the top. The number on each tab is a live count.
| Tab | What it holds | You go here to… |
|---|---|---|
| Tools | The full tool registry, grouped by product family. | See every tool, its release status, access tier, and which roles can open it. |
| Accounts | Every account, filterable by role. | Open a person's account & payment info, or jump into any tool they hold. |
| Access | A per-account grant board. | Tick tools on or off for an account. |
| Invitations | Accounts invited but not yet active. | Resend, activate, or revoke. |
Opens the account drawer: contact details, reporting line, assignability, and the full payment information block — plan, deposit, invoice, balance, renewal and market tier. Reset password, impersonate and suspend live at the bottom.
Opens that tool's admin panel for that account: how many sub-users are registered, who is active, invitations out, the account's own grant, and — for PropIQ — its client admin and licensed properties.
Tools live in four families. Every tool has a handle (e.g. PM·PROP), a release status, and an access tier that decides how it's granted.
| Tool | Handle | What you manage |
|---|---|---|
| Admin Console | PM·ADMIN | The master surface itself — accounts, protected pages, the access matrix and payment tiers. |
| Quote Builder | PM·QUOTE | Build and price client proposals; it lives in the portal toolbar for admins. |
| Tool | Handle | What you manage |
|---|---|---|
| PropIQ | PM·PROP | Property operations — maintenance, prospects, leasing, banking, reconciliation. Granted per property (see Section 06). |
| AssetIQ | PM·ASSET | Portfolio & asset performance — valuations, equity and returns rollup across properties. |
| LoanIQ | PM·LOAN | Loan & debt tracker — amortization, debt-service coverage, maturities and lender packages. |
| Resident Portal | PM·RESID | Resident-facing app — payments, requests and documents, scoped to a single unit. |
| Tool | Handle | What you manage |
|---|---|---|
| Market Intelligence | PM·MKTIQ | Site scorecards, comps, Go/No-Go radar and underwriting. This is the paywalled report product — its live market is Dayton, OH. Access is set by tier, not a simple on/off (see Section 04). |
| Tool | Handle | What you manage |
|---|---|---|
| Unit Studio | PM·UNIT | Floor-plan and 3D unit designer with casework elevation builder. |
| Facade Studio | PM·FACADE | Facade and massing studies in 3D. beta |
| Site Planner | PM·SITE | Site planning — earthwork, detention, parking yield and cost model. |
| Construction Phasing | PM·PHASE | Stick-frame trade sequencing and phasing. beta |
Every tool except Market Intelligence is a straight grant — open an account, click the tool, use Manage access, or tick it on in the Access tab. Market Intelligence is granted by paywall tier instead, because a client can hold the market at study level or full level.
A tool shown as owner on an account (e.g. a Property Manager who owns PropIQ for their property) is locked as granted and can't be accidentally revoked. Everything else toggles freely.
Market Intelligence is sold in stages. The paywall is a single field on the account — page_access.tier — and moving it is how you unlock work as money clears. There are no webhooks to wait on and no redeploys: you flip the tier, and the client's view changes on their next load.
| Tier | Stored value | What the client sees |
|---|---|---|
| — No access | none | The market isn't on their account. |
| Awaiting deposit | granted | A payment prompt only — the deposit link. |
| Deposit paid · study | deposit | The desktop study unlocks. |
| Paid in full | full | The full report — site pins, aerials, scorecards, comps, underwriting. |
Payment confirmation is a human step on purpose. Money clears → you raise the tier → access opens. Because storage reads are tier-gated on the server, a client can't skip a stage by viewing source.
Enterprise accounts show the paid deposit and paid invoice; single-market clients show the open Stripe link and balance due; child accounts show billing rolling up to their parent. Stripe handles deposits; QuickBooks carries the invoice number.
Flipping to full emails the client that their study is unlocked. Flipping to deposit instead sends the client a receipt and alerts the Director of Sales to follow up.
Accounts fall on one of two branches beneath the admins: the consulting / market-intelligence side (Enterprise Owners and their Clients) and the property-management side (Regional Managers, Property Managers, Staff, Residents).
| Role | Can assign? | Typical grant |
|---|---|---|
| Master admin | Yes — and grants assignability | All tools |
| Platform admin | Yes | Admin Console, Quote Builder, Design Studio |
| Sales admin | No | Quote Builder — create & modify quotes |
| Enterprise owner | Yes (its own users) | Market Intelligence |
| Regional manager | Yes (managers & staff) | AssetIQ, LoanIQ, PropIQ |
| Property manager | Yes (its own staff) | PropIQ |
| Client / Staff / Resident | No | Their one tool |
When you open a tool on an account, the registered users and invitations sent lists are built from that account's sub-accounts — you don't maintain them by hand. Invite a user under an Enterprise Owner and they appear here the moment the invite goes out.
Granting a tool emails the user that it’s available to them, scoped to the property and role you chose.
Adding a user emails them a welcome with sign-in details; if you mark them an administrator, the note says so.
PropIQ is licensed differently from the other tools because it's bought per property, and the client runs their own staff inside it. Opening PropIQ on an account shows two sections you won't see on other tools.
Each PropIQ account has one client admin — the person on the client side who assigns property staff and sets their access levels. For a Regional Manager that's usually themselves; for a single property it's the Property Manager. Use Change to reassign it.
These are the specific properties the account purchased PropIQ for. Each row shows the property, unit count, address, its assigned client admin, staff count and status.
Creating a new property and assigning its client-specific admin rights are Main / Platform admin actions (marked with that tag on the section). The client admin manages staff within a property; only you and platform admins spin up new properties and grant the property-level admin seat.
Holding a tool is only the first layer. Inside each tool, every person has a set of rights — the specific actions they're allowed to take. These are the access levels you see and edit on each user in the account matrix (Operations → tool → company → property → expand a user).
When a user is added, their role seeds a starting set of rights. The clearest example is the maintenance chain in PropIQ:
| Level | Can do |
|---|---|
| Property manager | Everything below, plus schedule, manage vendors and prospects, post charges, and manage staff & access. |
| Maintenance supervisor | View calendar, view & create tickets, schedule work, assign tickets, close & route to property management, upload photos, manage vendors. |
| Maintenance tech | View calendar, view & create tickets, close & route to the supervisor, upload photos. |
| Leasing agent | View calendar, view tickets, manage prospects. |
| Accountant | View tickets, post charges. |
Open a user in the account matrix and expand Access & permissions. Granted rights are filled in; the count (e.g. 5/12) shows how many of the tool's capabilities that person holds.
Rights are specific to the tool you're viewing.
View calendar, view tickets, create tickets, schedule work, assign tickets, close & route to supervisor, close & route to property management, upload photos, manage vendors, manage prospects, post charges, manage staff & access.
Make payments, submit requests, attach request photos, view documents, view community news, post community news, review applications.
View dashboards, edit valuations, view debt, export reports.
View loans, edit amortization, run DSCR, manage lender packages.
A Regional Property Manager edits rights only for people within their own properties. Property staff see their rights read-only. Master and Platform admins can edit anywhere — the same subtree scoping that governs the rest of the hierarchy.
Rights are data, not code — which is why the RPM can change them live with no deploy. Here's the chain each time a capability is toggled.
project_access — keyed by user, property and tool — carries a capabilities array. The chips you see are that array.project_access row's capabilities — one write, applied instantly.can_assign (Regional PM, PM, or admin). Everyone else is read-only.assign. RLS guards the data; the app guards the screen.The capabilities column and its policy are part of portal-hierarchy-upgrade.sql — the same migration that adds delegated administration and the properties table.
Every account is one auth.users record joined to one profiles row. Here's the full chain each time you create one — useful when something looks off and you need to know which layer to check.
handle_new_user trigger on auth.users inserts into public.profiles with the same id, the email, and defaults: is_admin=false, status='invited'.account_type, parent_account_id (who they report to) and can_assign (whether they may create sub-accounts). Master is the only role that may set can_assign=true.project_access (IQ apps), page_access.tier (Market Intelligence), and — for PropIQ — a properties assignment. This is what lights up their tool buttons, each grant seeded with the role’s default rights (see Section 07).invited → active on first sign-in. Delegated accounts sit at pending until an admin activates them.Because access is data in Supabase — not baked into the site — none of this needs a redeploy. Create, grant, flip a tier, revoke: all live the instant you save.
It's almost always the profile row or a grant, not the login. Check, in order: does a profiles row exist with the right account_type and parent_account_id? Is there a matching project_access / page_access grant? Are the RLS helper functions installed?
Two systems run the platform: Netlify serves the front end, Supabase holds the data, auth, and access rules. The delegated model in this handbook needs one schema upgrade before it's live.
portal-hierarchy-upgrade.sql adds the columns and table the console assumes. Run it in the Supabase SQL Editor before deploying the console.
Run the SQL first, then deploy. If you deploy first, the console loads but shows empty until the columns and properties table exist.
Netlify manual deploys replace the whole site, so a page can't ship alone — the entire bundle goes together.
index.html, home.html, viewer.html, admin.html, this platform-admin page, and config.js.config.js is present — it carries the Supabase URL and publishable key; without it the site can't connect.It's the connection. A deploy missing it will load a blank, sign-in-looping site.
| Surface | What lives there |
|---|---|
| SQL Editor | Migrations and RLS policies. Paste full blocks — the schema upgrade above, plus per-table policies. |
| Authentication → Users | Create logins (Add user + Auto Confirm) and send invites. |
| Storage | Private buckets: protected-pages (market reports), resident-docs (resident files). |
| Edge Functions → Secrets | Keys only — e.g. FRED_API_KEY, Stripe keys. Never put keys in front-end files. |
Publishable Supabase key in config.js is fine — that's its job. Everything secret (Stripe secret, FRED, service-role) lives only in Supabase Edge Function secrets. If a secret ever appears in chat or a file, rotate it immediately.
| Task | Where |
|---|---|
| Grant a tool to an account | Accounts → click account → Manage access, or Access tab |
| Unlock a paid market study | Click client → raise Market tier to Deposit paid / Paid in full |
| Reset a password | Click account → Reset password |
| Add a PropIQ property | Click account → PropIQ → Create property |
| Name a property's client admin | PropIQ panel → Assign admin on the property row |
| Activate a pending sub-account | Invitations tab → Activate |
| Let someone create sub-accounts | Master only → set can_assign=true on their profile |
| Term | Meaning |
|---|---|
| Assignability | The right to create and manage accounts beneath you. Granted only by the Master admin. |
| Client admin | The client-side person who manages property staff and their access inside PropIQ. |
| Paywall tier | The Market Intelligence access stage: none → awaiting → deposit → full. |
| Owner grant | A tool locked as granted to the account that owns it, so it can't be revoked by mistake. |
| RLS | Row-Level Security — Supabase rules that scope each account to only its own rows. |
profiles | The table joining each login to its role, parent, assignability and status. |
Access is data, not deployment. Almost everything you do in this console takes effect live — the only thing that needs a Netlify deploy is a change to the page files themselves.