Aurora Meter Pro · live preview

Every Pro screen, running on sample data.

The hosted dashboard, Stripe billing sync, quota alerts, rollups, reconciliation, prepaid credits and the LiveView components, previewed here on seeded sample data.

Live · simulated · tick 0

Nothing here is real: a seeded simulation of a SaaS with 128 customers so you can see what ships.

01 · Hosted real-time dashboards

The hosted dashboard

Mounted inside your own Phoenix app at a route you choose. Every tile below updates as meter events arrive, with no polling and no separate analytics database.

app.yoursaas.com/admin/usage

Usage & billing

Scale plan · billing period Oct 9, 2026 to Nov 8, 2026

Last 6 months ▾ Export CSV

Active subscriptions

128

▲ +6

MRR

$19,072

▲ +11%

Metered revenue

$4,210

▲ +23%

Events reported

1,240,318

this period

Metered usage by month

AI generations (thousands)

Metered AI generations by month: May 42,000 units, Jun 55,000 units, Jul 61,000 units, Aug 78,000 units, Sep 94,000 units, Oct 120,318 units.

May Jun Jul Aug Sep Oct

Included allowances

org_acme

Included allowances this period: AI generations 7,420 of 10,000, 74 percent, API calls 128,900 of 250,000, 52 percent, Seats 18 of 25, 72 percent, Exports 47 of 50, 94 percent.

AI generations 7,420 / 10,000
API calls 128,900 / 250,000
Seats 18 / 25
Exports 47 / 50

Top customers

AI generations, this period

Customer Plan Usage Status
Acme Corp Scale
10,850 / 10,000 100%
overage
Umbrella Scale
41,300 / 50,000 83%
near limit
Stark Industries Scale
22,400 / 50,000 45%
healthy
Initech Pro
7,600 / 10,000 76%
healthy
Globex Pro
6,120 / 10,000 61%
healthy
Wayne Enterprises Pro
3,050 / 10,000 31%
healthy
Hooli Free
96 / 100 96%
near limit
Vandelay Free
71 / 100 71%
healthy

Live meter events

streaming
Time Customer Feature Qty Stripe
12:04:28 Acme Corp ai_generations +3 reported ✓
12:04:26 Globex api_calls +128 reported ✓
12:04:24 Initech exports +1 reported ✓
12:04:21 Umbrella ai_generations +7 reported ✓
12:04:18 Hooli api_calls +64 reported ✓
12:04:16 Stark Industries ai_generations +2 reported ✓

02 · Stripe Checkout + webhook sync

Stripe billing sync

Checkout creates the subscription, a self-contained HMAC webhook verifier keeps the local copy in lockstep, and metered overage is reported to Stripe Billing Meters so it lands on the next invoice by itself.

Upcoming invoice

stripe · Acme Corp Finalises Nov 9, 2026
Scale plan$149.00
AI generations overage (850 × $0.01) $8.50
API callsincluded
Exportsincluded
Total $157.50

The overage line follows the meter above: every AI generation past the included 10,000 is a Stripe meter event.

Webhook timeline

312 invoices paid
  1. 12:04:29 meter_event reported · mtr_evt_k82jd1 verified ✓
  2. 12:04:22 invoice.paid · in_1q9x2m verified ✓
  3. 12:04:10 customer.subscription.updated · sub_9dk2la verified ✓
  4. 12:03:47 meter_event reported · mtr_evt_a01pz7 verified ✓
  5. 12:02:54 checkout.session.completed · cs_7hd0ql verified ✓

Signatures are checked against the webhook secret, and the credit grant is keyed on the payment, so two events for the same payment fund the account once. A redelivery still does the work of looking the payment up.

03 · Quota alerts

Quota alerts

Threshold alerts are deduplicated per customer, per feature, per period, so a customer hovering around 80% gets one email rather than forty. A handler that fails is retried, which can produce a second alert for the same crossing.

  • 80% Email the customer
  • 95% Show the upgrade prompt
  • 100% Throttle on hard caps, bill overage on metered plans

Alerts feed

deduplicated · newest first

Acme Corp passed 100% of AI generations

12:03:58

10,850 / 10,000 this period · Scale plan

Overage billed to Stripe

Hooli passed 95% of AI generations

12:01:12

96 / 100 this period · Free plan

Upgrade prompt shown

Umbrella passed 80% of AI generations

11:58:40

41,300 / 50,000 this period · Scale plan

Email sent

04 · Historical rollups + CSV export

Historical rollups and CSV export

Live counters are ephemeral by design. Pro persists month and day rollups per customer and feature, so finance gets a table and you get a one-click usage.csv.

Rollups · org_acme · ai_generations

By month

Monthly rollups of metered AI generations, newest first, in units
Oct 2026 120,318
Sep 2026 94,000
Aug 2026 78,000
Jul 2026 61,000
Jun 2026 55,000
May 2026 42,000

By day

Daily rollups of metered AI generations, newest first, in units
2026-10-23 2,714
2026-10-22 4,050
2026-10-21 4,410
2026-10-20 4,120
2026-10-19 3,980

usage.csv

Download usage.csv
date,org,feature,units
2026-10-19,org_acme,ai_generations,3980
2026-10-20,org_acme,ai_generations,4120
2026-10-21,org_acme,ai_generations,4410
2026-10-22,org_acme,ai_generations,4050
2026-10-23,org_acme,ai_generations,2714

Filter by customer, feature and date range; the export streams straight from the rollup table, so it is the same numbers as the invoice.

05 · Prepaid credits and top-ups

Prepaid credits and top-ups

The credit ledger is in the free MIT core: grant, hold, settle and release, in integer micro-dollars, every write under a row lock and appended to a transaction log. Pro adds the payment rail: a Stripe Checkout that sells an amount of credit, and an auto top-up that charges a saved card when the balance falls past a threshold you set.

Balance

Spendable
$64.50
Promotional
$24.50
Paid
$40.00
Held
$6.20
Debt
$0.00

A wallet can go into debt. While it does it reports zero spendable and refuses a new hold, so the figure is here even at zero rather than appearing the first time it matters.

Lots, in spend order

promotional first, then expiry
The demo tenant's credit lots in the order the ledger spends them: promotional credit first, then the earliest expiry, then the oldest.
Lot Kind Remaining Expires
lot_promo_signup promotional
$24.50 49%
Nov 13, 2026
lot_top_up_aug paid
$22.00 22%
no expiry
lot_top_up_sep paid
$18.00 18%
no expiry

Settling a hold takes from the highest-priority lot first, and the balance above is the sum of what is left. Watch a hold settle and the same amount leaves both.

Estimate, hold, settle

Before the work runs, a hold reserves an estimate. When it finishes, settling charges what it actually cost and releases the rest. If it raises, the hold is released and nothing is charged.

  • hold_rpt_9f21 $4.20 open
  • hold_rpt_9f20 $2.00 open
  • hold_rpt_9f1e $1.50 settled

Auto top-up

When it falls below
$25.00
Charge
$100.00
Card
•••• 4242

The charge carries an idempotency key written before it is attempted, so a retry lands on the same payment rather than a second one.

Top-ups

  • 2 days ago $100.00 auto succeeded
  • 11 days ago $100.00 manual succeeded
  • 18 minutes ago $50.00 auto uncertain

Stripe has not confirmed that last charge yet. Pro keeps it as uncertain rather than guessing: it is neither granted nor failed, the recovery pass will retrieve the payment and find out, and until it does nobody has been charged twice and nobody has been given credit that was not paid for.

06 · Reconciliation

Reconciliation

A background pass compares local counters with what Stripe holds and raises an item for every difference, so nothing diverges unnoticed. A person resolves the item; the pass reports, it does not rewrite your ledger.

Reconciled, no differences found
7s ago

128 subscriptions · 1,240,318 events compared · 0 open

Schedule
hourly
Open items
0
On a difference
raise an item, telemetry

07 · Subscription-aligned billing periods

Subscription-aligned billing periods

Allowances reset on each customer's Stripe billing anchor, not on the first of the month. The period you meter is the period you invoice.

Current period · org_acme · Scale day 15 of 31
Started Oct 9, 2026 Resets Nov 9, 2026
Anchor
stripe current_period_start · day 9
Resets in
16 days
Mid-cycle upgrade
prorated, allowance widens now
Free plans
calendar month fallback

08 · LiveView components

LiveView components

Drop a usage panel into your own settings page. The components subscribe over PubSub and update in place as the counters move, the same live values the dashboard shows.

lib/my_app_web/live/settings_live.html.heex
# the whole panel
<AuroraMeter.Components.usage_panel org={@org} title="Usage this period">
  <:meter feature=:ai_generations label="AI generations" />
  <:meter feature=:api_calls label="API calls" />
  <:meter feature=:seats label="Seats" />
  <:meter feature=:exports label="Exports" />
</AuroraMeter.Components.usage_panel>

# or one bar at a time
<AuroraMeter.Components.usage_bar org={@org} feature=:ai_generations />

# live values arrive over PubSub
def mount(_params, _session, socket) do
  AuroraMeter.subscribe(socket.assigns.org)
  {:ok, socket}
end

Usage this period

org_acme · plan :scale

AI generations 7,420 / 10,000
API calls 128,900 / 250,000
Seats 18 / 25
Exports 47 / 50

rendered by usage_panel · updating live

Everything in Pro

One licence per application, every screen above included.

$99 a month per application, with a 14-day free trial. The metering core stays free and MIT.

  • Stripe Checkout + webhook sync
  • Metered usage → Stripe Billing Meters
  • Subscription-aligned billing periods
  • Historical rollups + CSV export
  • Hosted real-time dashboards
  • Quota alerts + reconciliation
  • Email support, 2 business days