Skip to content

Router.Africa — Build Inventory

What to build for the dashboard: screens, then features. Orgs, workspaces, and multi-user are all included from day one.

Structure: an org owns members and roles. Each org has one or more workspaces. Each workspace has its own currency and its own credit balance, plus its own keys, usage, and logs. The workspace currency decides what the workspace pays in when topping up and which published rates it sees. Balances are always shown as credits, never with a currency symbol or code. Every org gets a “Default” workspace automatically, so a solo user never has to think about it.

# Screen Description
1 Sign up Email + password, Google/GitHub buttons, one consent checkbox, live password check
2 Sign in Email + password or social
3 Reset password Request link, set new password
4 Verify email Shows the address (editable), resend with countdown
5 Choose models and currency Onboarding step. Models pre-checked with defaults. Currency preselected from the user’s country. One click to accept
6 Your API key Onboarding step. Key auto-generated in the Default workspace, shown once, copy button, sample curl (same snippet as the docs quickstart). Then lands on Overview
7 Accept invitation Landing page for an invite link. Sign in or sign up, then join the org
# Screen Description
8 Overview This workspace’s credit balance, last-24h spend (in credits) and requests, alerts (e.g. low balance), quickstart curl (same snippet as the docs quickstart), link to the API docs, “Add credits” button
# Screen Description
9 Usage Spend (credits) / requests / tokens chart with date range and timezone. Breakdown by model, provider, key, member. Toggle: this workspace / all workspaces. Credits from workspaces with different currencies are never summed. “As of a few minutes ago” note
# Screen Description
10 Logs Table: time, model, status, latency, tokens, cost (credits), key, member. Filters: workspace, key, model, status, date. Column chooser
11 Log detail Side drawer with the full record of one request
# Screen Description
12 Key list Keys in the current workspace: name, owner, status, models enabled, spend vs cap, expiry
13 Create key Name, owner (me / workspace), expiry, spend cap (in credits) and reset period, models
14 Key reveal Shown once after create or rotate. Copy button, must confirm saved
15 Key detail Side drawer. Edit name, cap, models, expiry. Rotate, revoke
# Screen Description
16 Balance This workspace’s credit balance, active holds, “Add credits” and “Transfer credits” buttons
17 Top-up Customer enters the credit amount. Screen shows credits, the transaction fee, and the total to pay, collected in the workspace currency via Niobi. Pending / success / failed states
18 Transfer credits Move credits from this workspace to another in the same org. Same currency: 1 for 1. Different currency: shows how many credits the destination receives at one final conversion rate, then confirm. The rate is fixed at confirm
19 Transactions Top-ups (credits, fee, total collected), transfers, settlements, holds released. Toggle: this workspace / all workspaces
20 Rates Published per-model, per-token-type final rate in credits per token, for this workspace’s currency. One number each
21 Billing details Org-level. Name, country, address, tax ID. Shown before the first top-up
# Screen Description
22 Workspaces list Name, currency, credit balance, key count, member count. No cross-workspace total. “New workspace” button
23 Create workspace Name, currency, members. Currency is fixed after the first top-up. Optionally fund it by transferring credits
24 Workspace settings Name, currency (read-only once funded), delete. Delete requires moving the remaining balance out first. Can’t delete the last workspace
25 Workspace members Who has access to this workspace. Add or remove org members
# Screen Description
26 Members Table: member, org role, workspaces, key count. Invite, change role, remove
27 Invitations Pending invites. Resend, revoke
28 Remove member Dialog. Revoke their keys or reassign them
# Screen Description
29 Profile Name, email
30 Security Password, linked social logins, log out everywhere
31 Organization Name, transfer ownership, delete org
32 Data & privacy Prompt/response retention opt-out (on by default), set per workspace, for the current workspace
33 Notifications Low-balance threshold (in credits) and email, set per workspace
# Screen Description
34 Org switcher Top-left dropdown. Switch org, create org
35 Workspace switcher Sidebar dropdown showing each workspace’s currency. Switch workspace, create workspace
36 Empty, error, no-access states 404, “you don’t have access”, empty tables and charts with a CTA

Admin (staff only, at admin.router.africa)

Section titled “Admin (staff only, at admin.router.africa)”
# Screen Description
37 Admin overview Signups, active workspaces, requests, spend and margin today, failed top-ups, gateway sync errors
38 Orgs Search all orgs. Detail: workspaces, members, status. Set the org’s rate limits and hold toggle (applies to all its workspaces). Suspend / reactivate
39 Users Search all users. Detail: orgs, status. Suspend, force logout, resend verification
40 Workspace detail Credit balance, currency, ledger, keys. Freeze, manual balance adjustment with a required reason
41 Keys Search any key (by name or pasted key). Revoke. Shows the rate limit each key inherits from its org. Customers never see these
42 Rates Today’s published rate per model, token type, currency, in credits per token. Last refresh status, recompute, history
43 Markup rules List and edit rules: flat / percentage, scoped to global, currency, model, or transfers
44 FX and currencies Daily mid-market rates per currency, last update, manual override. Enable or disable supported currencies
45 Model catalog Enable or disable models, set the pre-checked onboarding defaults, mark deprecated
46 Transactions and top-ups Search everything. Each top-up shows credits, fee, and total collected. Pending and failed top-ups, refunds, reconcile against Niobi
47 Margin report Provider cost (Bifrost’s reported cost) vs what was charged, by model, currency, and day. Top-up fee revenue shown separately
48 Gateway sync Each Router.Africa key vs its Bifrost virtual key. Shows out-of-sync keys, retry
49 Audit log Every audited event, filter by org, user, action, date
50 Staff Staff users and their admin role
51 Top-up fees Transaction fee per vendor, flat or percentage. Shown to customers before they pay
52 Workspace discounts Percentage off the published rate for one workspace, all models or one model. Reason required. List, edit, disable. Audit-logged
53 Unbilled usage Calls Bifrost logged that the ledger did not charge, and token-count mismatches. Per row: request, workspace, key, model, tokens, Bifrost cost. Charge or release without charge, reason required. Audit-logged
54 Scheduled jobs Every job: last run, last status, next run, running now, overdue flag. Drill in for run history (start, duration, status, summary counts, error). Edit schedule and config, enable or disable (reason required), Run now. Admin can edit, Support read-only. Audit-logged
Feature Description
Orgs and memberships Every signup creates an org. Users belong to orgs with a role
Org roles Owner, Admin, Member, with permission checks in one place
Workspaces Each org has one or more. A “Default” workspace is created automatically
Workspace currency Chosen at creation, preselected from the user’s country. Changeable until the first top-up, then fixed. Sets the currency the workspace pays in and which published rates apply
Credits The balance unit. 1 credit = 1 unit of the workspace currency at top-up. Shown as credits, never with a currency symbol or code. Not redeemable for cash
Wording rule Credits are currency internally (ledger, admin) but never presented as money to customers: no “wallet”, “cash”, or currency symbol on balances, no withdrawal or refund-to-cash. Applies to the dashboard, API, emails, receipts, and docs. Currency appears to customers only on the top-up payment amount and the workspace’s currency label
Workspace balance Each workspace has its own ledger: credit balance, holds, settlements. This is the account the request path charges
Charging Customer is charged the tokens Bifrost reports × the published rate, locked at hold time. Bifrost’s cost is kept separately for margin only
Top-up fee A fee per vendor, set in Admin, added to the top-up. Customer pays credits + fee, receives only the credits. Fee is stored on the top-up record and recorded as revenue, not as balance
Credit transfer Move credits between workspaces in the same org. Recorded as a paired debit and credit
Cross-currency transfer Converts using the daily mid-market rate plus markup, same rule as model pricing. Between two non-USD currencies the mid-market rates are chained through USD (ZAR→USD × USD→ZMW) and the markup is applied once to the result, never per leg. The customer sees one final rate, no breakdown. The rate is locked at confirm and stored on both ledger entries
Workspace access Owners and Admins see every workspace. Members see only workspaces they’ve been added to
Who can pay and transfer Owners and Admins only
Workspace deletion rule Balance must be moved out first. The last workspace can’t be deleted
Invitations Email invite, expiring link, resend, revoke
Key ownership Each key belongs to one workspace and is owned by a user or the workspace. Owner is recorded on the key
Model allowlist per key Checked on every request before routing
Spend cap per key In credits, with optional daily / weekly / monthly reset
Key expiry Optional expiry date, enforced on request
Spend attribution Every usage event carries org, workspace, key, and key owner
Org and workspace in the URL Every dashboard route carries both from day one
Low-balance alerts Per workspace, in credits
Transactional emails Verify, invite, low balance, receipt
Audit events Recorded from day one: key created/revoked, top-up, transfer, member and workspace changes
Rate limits Set per org in Admin (Orgs screen), copied onto each key’s Bifrost virtual key, never shown to customers
Admin origin Separate origin, admin.router.africa, with its own session cookie and CORS scope. Not reachable from the customer dashboard origin
Staff access Separate staff flag, not an org role. Admin pages and admin API routes have their own permission checks
Staff roles Admin (full) and Support (read-only plus limited actions like force logout)
API docs links “Docs” link in the dashboard shell; API reference link on the Rates screen. The docs themselves are scoped in api-docs-scope.md
Admin audit Every admin action is recorded with who, what, and a required reason for money or access changes

Auto top-up, guardrail policy bundles, SSO/SAML, customer-facing audit log screen, admin “view as customer”, webhooks, per-member budgets, custom roles, global search, an org-wide total balance in a reference currency.