Internal notes
Every customer profile has a Notes section at the bottom. Notes are staff-authored free-text annotations that are only visible inside the ops dashboard — they are never shown to customers.
Adding a note:
- Open a customer profile
- Type in the note box at the bottom
- Click Add
Notes appear in reverse-chronological order. Each note shows the author's email and timestamp.
Notes are stored in the ops database — separate from the core product database. They persist across deployments and are not affected by customer data operations.
Adding a note is an audited action — it is logged to the access log alongside the customer view.
Audit log
Ops → Audit
The audit log records every time a staff member views a customer profile or adds a note. This provides accountability for access to sensitive customer data.
| Column | Value |
|---|---|
| When | Time of access (relative + hover for exact) |
| Staff | Email of the staff member |
| Action | view_customer or add_note |
| Target | Tenant ID (clickable link to profile) |
What is NOT logged:
- Navigating to overview, revenue, credits, or growth pages
- Performing a customer search (only the detail view is logged)
Log limits: The audit page shows the last 200 entries. The ops DB retains all entries (no automatic deletion). There is no current retention policy — oldest entries must be manually managed.
Platform metrics pages
Overview
Live aggregated snapshot of platform KPIs — workspaces, users, MRR, credits, consumption. All reads are live (no rollup cache).
Note: At high transaction volumes the credit consumption queries (30-day window) can be slow. If the overview page times out, the rollup cron needs to be re-enabled first.
Revenue
MRR breakdown by plan, active trials (with end dates), past-due subscriptions, and the last 20 cancellations. Useful for billing health checks and sales reporting.
MRR calculation:
- Monthly plans:
priceMonthlyInr × subscribers - Yearly plans:
priceYearlyInr / 12 × subscribers - All values in paise (divide by 100 for INR)
Credits
Platform-wide credit usage with a 7/30/90-day toggle:
- Total credits across all tenant wallets
- Spend by service (which product is consuming most)
- Top 20 consumers by net spend
Net spend formula correctly accounts for the hold/capture/void ledger — held-but-voided credits do not count toward consumption.
Growth
User signup and workspace creation trends (daily chart), waitlist snapshot, and feedback inbox.
The waitlist and feedback data is optional — if the relevant tables don't exist in the core DB (e.g., staging), those sections will be empty with no error shown.
Performance note
All metric pages use live queries against the core database. The rollup cron (which would pre-compute daily snapshots) is currently disabled due to the Cloudflare account 5-cron limit.
If queries become slow at scale, the fix is:
- Free a cron slot on the account (remove or merge another cron)
- Uncomment
[triggers]inapps/internal-api/wrangler.toml - Add the index:
CREATE INDEX CONCURRENTLY credit_tx_created_at_debit_idx ON credit_transactions (created_at) WHERE amount < 0 - Deploy — the Worker will populate rollup tables nightly and reads will be instant
Staff access management
Staff access is controlled by two things:
- Cloudflare Access — which emails can pass the Zero Trust gate (managed in Cloudflare dashboard → Zero Trust → Access → Applications)
- STAFF_EMAILS env var on the Worker — secondary allowlist (requires Worker redeploy to change)
Both must allow the email. Removing someone from either one immediately revokes access.
To add a staff member:
- Add their email to the Cloudflare Access policy
- Add their email to
STAFF_EMAILS(requireswrangler secret putor bulk update + redeploy)
To revoke access:
- Remove from Cloudflare Access policy — this is instant and sufficient; no redeploy needed
- (Optional) Also remove from
STAFF_EMAILSfor clean hygiene