Clients
All clients
Loading…
Add a client
Resource limits — memory is enforced; CPU weight only applies under contention
Monthly fee (optional - shown on the Billing page)
Billing letterhead (optional, printed on statements)
Billing
Manual payment tracking - this platform has no payment processor built in. "Paid" just means you've confirmed the client's payment (bank transfer, GCash, cash, whatever channel they use) and are recording it here, for your own reference.
Loading…
Test Lab
Stress testing, load testing, and security scanning - built in, and hard-restricted to tenants flagged as test tenants (see the checkbox on Add a Client). Every action here runs for real against the selected tenant's own containers.
No test tenants yet - create one on the Clients page with "Test tenant" checked.
Seed synthetic order history
Wraps seed-load-test-data.mjs + backfill-stats.mjs.
Load test
Runs a k6 scenario against this tenant's api, isolated on its own network - see scripts/k6/.
Security scan
Rate-limit check, cross-tenant token check, optional OWASP ZAP baseline.
Recent runs
Select a test tenant to see its run history.
Errors
Not loaded yet.
Help & Docs
Plain-language notes on how this page works - written for whoever's running the business, not just whoever wrote the code.
Overview
Each "client" is one business running its own private copy of the app - its own database, its own login, its own web address (like acme.yourdomain.com). They share the same server, but nothing they do can be seen by another client. This page is where you create, update, and manage all of them from one place.
Updating the app (putting new code live)
When the app's code changes - a bug fix, a new feature - you don't touch anything technical. Just go to Clients and click Update all apps at the top. A window opens and walks through three steps automatically:
- Downloading update & building - the new version is fetched and prepared. Nobody is affected yet; every client keeps working normally.
- Applying update - the new version goes live for every client. This is the only moment with any interruption, and it's brief (about a minute).
- Done - you'll see a status line for every client confirming it came back up healthy.
If step 1 fails for any reason, nothing changes - every client just keeps running the version it had before. You can safely click it again once the issue is fixed.
Each client also has its own Rebuild web button (on its row in Clients). That one only refreshes that single client's look-and-feel (name, colors, logo) - it does not push new app code. For an actual code update, always use Update all apps.
Adding a new client
On the Clients page, fill in the "Add a client" form:
- Subdomain - the short name in their web address, e.g.
acmebecomesacme.yourdomain.com. Lowercase, no spaces. - Business type - pick the version of the app that matches what they sell (food & beverage vs. logistics/wholesale).
- Superadmin password - this is the login you'll hand to that client's owner/manager. Keep a copy somewhere safe; it isn't shown again.
- Test tenant - only check this for a rehearsal/demo account, never a real paying client. It unlocks the Test Lab tools, which are too heavy and risky to ever run against a live client by accident.
Creating a client takes a few minutes (it's building their private copy of the app from scratch). Once done, their link appears on the Clients page.
Managing an existing client
Each row on the Clients page has:
- Resources - raise or lower how much memory/CPU priority that client gets, if they're growing or you're consolidating.
- Stop / Start - temporarily take a client offline (e.g. non-paying, or maintenance) without deleting anything.
- Logs - a live technical readout of what that client's app has been doing. Mostly useful when troubleshooting with support.
- Download backup - all of that client's data as one file, checked to read back before it downloads. Keep it somewhere other than this server (your computer, Google Drive): if the server is ever lost, this is what brings the client back.
- Restore (red) - puts a client's data back from a backup: a file from Download backup (from this server or another one), or one of this server's daily backups. The current data is saved first as a "before restore" copy, so a restore can be undone. The app is offline for a few seconds.
- Wipe data (red) - erases that client's orders/inventory/history but keeps their login and settings. Irreversible.
- Delete (red) - removes the client entirely: their app, their data, their web address. Irreversible.
The red actions ask you to type the client's name and a second password to confirm, specifically so they can't happen by accident.
If the server is lost: install the platform on the new server, create each client again with the same name, then use Restore on each one with its downloaded backup file. Every day's backups are also listed under Platform health → download backups.
Billing
The Billing page is a simple paid/unpaid tracker, one row per client, reset every calendar month. It does not charge anyone or move any money - you still collect payment however you normally do (bank transfer, e-wallet, cash), and just click Mark Paid here once you've confirmed it landed. Set a monthly fee per client so you have a number to check against; it's just a note for you, not something enforced automatically.
Test Lab
A safe place to hammer a test client with fake orders and simulated traffic, to see how the system holds up before something similar happens for real. It only ever runs against clients explicitly flagged "Test tenant" when created - it will refuse to run against a real client, even if you try.
Errors & logs
The Errors page collects anything that went wrong across every client in one place, so you don't have to check each one individually. Logs (on a client's row) is the raw technical output from that client's app - useful mostly when working with support to diagnose something specific.
If something looks broken
- A client shows "unhealthy" or won't load - try Stop then Start on that row first.
- After clicking Update all apps, a client shows an error in the results - the others are unaffected; check that client's Logs, or retry the update.
- You're logged out unexpectedly - sessions last 8 hours; just sign in again.
- Still stuck - this panel is reached over a private connection (SSH tunnel), so whoever set that up for you is the right person to loop in.