Admin console (platform operators)
The platform admin console is for the operator of an EvoPlatform installation — the person who runs the service itself. If you're a customer using an app, you don't need anything here: workspace admins manage their teams from inside the apps.
Access
The console is served at the platform service's root URL (for a default install, the host you deployed to, e.g. https://platform.example.com/). Sign in with a platform admin account — email and password only; platform admins sit above workspaces, so there is no workspace field.
The very first admin comes from the deployment itself: on first boot the service creates one from BOOTSTRAP_ADMIN_EMAIL / BOOTSTRAP_ADMIN_PASSWORD (only when no platform admin exists yet). After signing in, change that password, and add more admins from the Users tab if you want a second set of hands.

Every console action calls the platform's /admin/* API, which requires a token carrying the platform_admin claim — the console itself holds no authority. Logins are rate limited per IP.
(All screenshots below are from a local development install with fictional demo data.)
The tabs
Tenants
Each row is a customer workspace: slug, name, plan, status, and company profile (phone, address).

- New tenant creates a workspace by hand — the manual alternative to self-service signup. Admin-created tenants start with access to every registered app.
- Suspend / Activate blocks or restores all logins for the workspace. Suspension is reversible and touches no data.
- Delete is a soft delete (restorable). Purge is real erasure and deliberately requires the tenant to be soft-deleted first, so one mistaken click can never destroy data.
- Export downloads the tenant's platform-owned data as JSON (users, roles, app access, audit trail — secrets structurally excluded) for portability or backup.
+ New tenant opens the workspace form, including the company profile:

Users
All accounts, filterable by workspace.

- Create users, edit profiles, assign per-app roles from the dropdowns.
- Tenant admin lets a user manage their own workspace's members from inside the apps. Platform admin grants access to this console — hand it out sparingly.
- Password sets a new password for a user (the self-service path is the emailed reset link; this is the override).
- An unverified badge means the user hasn't proven their mailbox yet and cannot sign in.
Apps
The registry of applications connected to the platform.

- Register app creates a client id and shows the client secret once — the platform stores only a hash. (The
evo registerCLI automates this and writes the credentials into the app's.env.) - Rotate secret invalidates the old secret immediately — use it if a secret may have leaked or on a schedule.
- Roles defined here are what workspace members can be assigned per app.
- Stripe price is the Price id sold as this app's subscription; checkout uses it, and the webhook then drives access automatically.
- Tenant access is the enablement matrix: which workspaces may sign in to this app, each with a status — active, trial (with end date), past due (with grace date), or suspended. This is your manual override for what billing and signup normally manage on their own.
Audit
Every significant action — logins, member changes, invites, billing events, admin operations — with who, what, and when. Filter by action, workspace, and date range; export the filtered set as CSV or JSON.

SMTP
Where the platform's email (verification, invites, password resets) comes from. Resolution order per send: the tenant's own config → the platform default (set it here) → the environment fallback. Passwords entered here are stored encrypted, which is why a fresh production install should get its SMTP config through this tab rather than an env file.

Common tasks
| Task | Where |
|---|---|
| Onboard a company by hand | Tenants → New tenant (starts enabled on all apps) |
| Let signups happen without you | Set SIGNUP_MODE (invite with links from POST /auth/signup-links, or open) |
| Make someone a workspace admin | Users → Edit → Tenant admin |
| Connect a new app | Apps → Register app, or evo register from the app repo |
| Sell an app | Apps → Stripe price (plus Stripe keys in the service env) |
| Cut one workspace off one app | Apps → Tenant access → status dropdown or Disable |
| Answer "who did this?" | Audit → filter → Save CSV |
| Recover a lost admin account | Set the bootstrap env vars and restart the service |