Admin Guide
Getting admin access
Admin access is a lockbox table (admin_users) with no self-service UI — there's no "make this person an admin" button anywhere in the app on purpose, since this table has zero row-level-security policies and is only ever read from inside the database's own SECURITY DEFINER functions. Adding a new admin means inserting a row directly in Supabase, keyed to that person's existing account — ask whoever has database access to do this.
Once you're an admin, sign in normally at /workspace, then go to /admin. The check happens client-side after sign-in, so you'll briefly see the regular workspace sign-in screen first if you're not already logged in.
Overview (/admin)
The dashboard landing page — sidebar stat cards and an activity feed merging recent signups and report purchases. This is read-only; use it to spot-check activity, not to take action.
Users (/admin/users)
Lists every account with sign-up date, last active, report count, and two things you can act on:
- Approved / Pending toggle — new accounts start pending. Until approved, they can still search, register, save parcels, and use the Plano Tool, but the AI Checklist and Ask AI tabs are blocked with a clear "pending approval" message. Click a user's row to open their detail page and approve or revoke them.
- Entitlements — on a user's detail page, which report tiers they're allowed to buy and an optional usage cap (defaults to unlimited). Most accounts never need this touched.
The same detail page also shows and lets you adjust a user's Plano credit balancedirectly — type a number (negative to deduct) and click Add/Deduct. Use this for one-off corrections; for a real payment, use the Credit Requests queue below instead so there's a record of it.
Below the account table sits a Solo early-access invite card — the same link-based invite mechanism companies use (see Organizations below), but for one individual with no organization attached. Enter an email, generate the link, and copy/send it yourself; there's a pending-invites list underneath to copy the link again or revoke it.
Credit Requests (/admin/credit-requests)
Stripe checkout isn't wired up in production yet, so this is currently the only real path for someone to buy more Plano/export credits. A user picks an amount on the request page, chooses SINPE Móvil, Bitcoin, or cash, and submits — it shows up here as Pending with their email, the amount, the payment method, and any note they left.
Your job on each pending request:
- Confirm you actually received payment (SINPE/Bitcoin/cash, arranged directly with the user)
- Click Approve & top up — this credits their account immediately and marks the request fulfilled
- If payment never arrives, click Cancel instead — no credits are granted
The History section below the pending queue shows every past request (fulfilled or cancelled) for reference.
Reports (/admin/reports)
A flat list of every purchased report, tier, amount, and which parcel it's for.
Organizations (/admin/organizations)
Company accounts — see the Company Accounts page for what a company gets. This is where LandIQ CR provisions and manages them; there's no self-serve path, so every company starts here.
The list page creates a new company (name + cap mode — pooled or per seat) and links to each company's detail page, which covers everything about that one account:
- Billing & caps — name, status (active/suspended/cancelled), billing shape (prepaid/subscription), cap mode, seat limit, and the monthly report/watch caps. A Reset billing cycle button zeroes usage counters on demand; subscription companies also reset automatically on first use after their cycle date.
- Branding — the same logo/color/name/contact fields the company admin sets themselves on
/company/settings, editable here too. - Members — link an existing LandIQ CR account (they must already have signed up) straight into the company by email + role, or remove one.
- Invites — generate a sharable
/invite/...link for someone without an account yet, bound to their email and role. Links are single-use and expire in 14 days; copy or revoke any pending invite from the list here. - Payments — a manual ledger. Record each payment as it comes in (amount, currency — USD or CRC, method — SINPE/Bitcoin/cash/bank transfer, optional note); void one if it was entered in error. This is the company-account equivalent of the Credit Requests queue above.
Revenue (/admin/revenue)
A read-only rollup of money actually recorded: company payments (from the Payments ledger above) plus fulfilled Plano credit requests, split by stream (Enterprise vs. Credits) and currency (USD and CRC are never summed together). Shows this month and trailing 12-month totals, a monthly USD chart, and a breakdown by company.
Pricing (/admin/pricing)
Live-edit the numbers the rest of the site reads at runtime: the three report tier prices (Quick, Full, Pro), Plano credit starting balance and cost per action, and the credit-pack top-up size/price. Changes apply immediately to new checkouts and credit actions — though report/pack checkout itself still waits on Stripe being configured (see Known gaps below). Saving only writes the fields you actually changed.
Known gaps (as of this writing)
- Stripe isn't configured in production — the report-purchase checkout and the old $9.99-credit-pack checkout both fail with a 500 if actually clicked. This is why Credit Requests exists as a manual workaround, and why company billing (above) is a manual payments ledger instead of live checkout. Fixing it means adding a real
STRIPE_SECRET_KEYto Vercel's project environment variables. - Real payment details are placeholders — the request page tells users to "contact us" for a SINPE number or Bitcoin address rather than showing one, since real ones haven't been filled in yet (in
RequestCreditsClient.tsx). - No self-serve company signup — every company account is provisioned here by a LandIQ CR admin; see Organizations above and the Company Accounts page in this wiki.