Staff only. This dashboard is gated by Cloudflare Access and only accessible to verified
@vlozi.appstaff emails. All access is logged.
The ops dashboard is a cross-tenant god-view at ops.vlozi.app — a Next.js frontend backed by a Hono Worker API. It surfaces platform health metrics, customer profiles, revenue, credit usage, and staff audit logs in a single interface.
Architecture
Staff browser
│
▼
ops.vlozi.app ← Cloudflare Access (Zero Trust gate)
│
├─ /api/* → logicspike-internal-api (Hono Worker)
│ ├─ Reads: Core DB (read-replica, read-only)
│ └─ Writes: Ops DB (audit log, notes, rollups)
│
└─ /* → internal-dashboard (Next.js on Vercel)Access
Two conditions must both pass:
- Cloudflare Access — login via Cloudflare One-time PIN or your Cloudflare account. The email must be a
@vlozi.appaddress. - STAFF_EMAILS allowlist — the verified email must be in the
STAFF_EMAILSenvironment variable on the Worker.
Failing either gate returns a 403. There is no fallback, no override (except a dev-only bypass that still requires the allowlist).
Current staff list (env var, requires Worker redeploy to change):
founder@vlozi.app, hello@vlozi.app, starkdipanshu456@gmail.comWhat you can see
| Page | URL | What it shows |
|---|---|---|
| Overview | / |
Platform KPIs: workspaces, MRR, trials, past-due, users, credits |
| Customers | /customers |
All tenant workspaces with filters and search |
| Customer detail | /customers/:tenantId |
Profile, plan, members, credit balance, spend, transactions, notes |
| Revenue | /revenue |
MRR by plan, trials ending, past-due list, cancellations |
| Credits | /credits |
Platform credit pool, spend by service, top consumers (7/30/90d) |
| Growth | /growth |
User signups, workspace creation, waitlist, feedback inbox (7/30/90d) |
| Audit | /audit |
Staff access log (who viewed which customer, when) |
What data is excluded
The API explicitly excludes sensitive columns even though it reads the core DB:
- No tenant database connection strings (
tenants.databaseConfig) - No payment provider IDs (Razorpay/Stripe subscription or customer IDs)
- No API keys or secrets of any kind
Units
All monetary values are in paise (Indian Rupees × 100). mrrPaise: 299900 = ₹2,999/month.
Credit values are in credit units (1 credit = ₹0.83 at current pricing).
Local development
- Start
apps/internal-apion port 8797 (see its README) - Create
apps/internal-dashboard/.env.local:INTERNAL_API_ORIGIN=http://127.0.0.1:8797 - Run
pnpm --filter internal-dashboard dev - Open http://localhost:3003
In dev, Cloudflare Access is bypassed by setting DEV_BYPASS_EMAIL in apps/internal-api/.dev.vars. The bypass email must still be in STAFF_EMAILS.