burneh
Product

The back office your team runs the business from.

Search anyone, fix anything, see who did what. The internal tool that usually gets duct-taped together, built properly, with permissions and an audit trail from the first screen.

Console/Customers
7 of 7
CustomerMRR
AL
Acme Labs
ActiveScale
$4,200
G
Globex
Past dueTeam
$890
I
Initech
TrialingStarter
$150
U
Umbrella
FlaggedScale
$3,100
S
Soylent
ActiveTeam
$1,020
H
Hooli
ActiveScale
$5,600
PP
Pied Piper
Past dueStarter
$210

Who can touch what, in one grid.

actionOwnerSupportAnalyst
View customers
customer.view
Refund invoice
invoice.refund
Suspend account
account.suspend
Export data
data.export
Edit billing
billing.edit
Delete account
account.delete

Nothing an admin does is invisible.

Permissions and the log aren't two features to keep in sync. Every privileged action runs through one wrapper: it checks the role, does the work, and records it. Skip the wrapper and the action simply doesn't exist.

  1. Dana O. refunded $49 on Globex · invoice #4471

    2m ago

  2. Sam C. suspended Umbrella

    1h ago

  3. System flagged for review past_due · over 30 days

    3h ago

  4. Priya N. exported customers.csv · 412 rows

    yesterday

  5. Marco R. changed plan on Initech · Starter to Scale

    yesterday

withAudit.ts
1// every privileged action goes through one gate,
2// so none of them can skip the check or the log
3export async function withAudit(actor, action, target, run) {
4 if (!can(actor.role, action)) throw new Forbidden(action);
5
6 const result = await run();
7 await audit.write({
8 actor: actor.id, action, target, at: clock.now(),
9 });
10 return result;
11}
Every line in the trail on the left came from this one function.

A back office your team can actually be trusted with.

Search, act, and resolve, with roles that gate every action and an audit trail that can't be skipped. No database client, no one-off scripts.