Online
v3.5 prototype · 2026-07-18
EC
Dashboard
Platform at a glance — ported from the v3.4 concept into the v3.5 shell
Active users
482
+31 this week
Relays this week
1,204
+12%
Pending registrations
12
3 > 48h old
MRR
$1,335
CAD · 41 paying orgs
Pending registrations
Maya Okafor
maya@studionorth.ca
pro trial
Dev Batra
dev@parallel.dev
team
Lena Fischer
lena@fischer.io
free
Recent billing events
Trial → paid conversion
northbeam-studio · Loop discount applied at conversion
2h ago
Seat true-up +1 → 6 seats
parallel-dev · prorated · confirmed by admin
6h ago
Subscription canceled — perk suspended
quiet-harbor · win-back window opened (180d)
1d ago
Webhook write failed → 500, Stripe retried, ok
evt_1Rk…q2 · idempotency guard passed the retry
2d ago
Finance
Revenue, commitments, and cost — gated: finance / superadmin only
MRR
$1,335
CAD · 41 paying orgs
Collected (Jul)
$1,248
net of fees $1,193
Committed discount $
$1,530
17 active commitments
Realized discount $
$487.50
actual, not estimate
Committed vs realized. Committed = the estimate at mint (50% × 12 mo × $15 = $90/commitment). Realized = what a redeemed commitment actually cost — a subscription that cancels early stops its coupon with it, so realized lands under the estimate (realized_months / realized_cost, stamped on subscription.deleted).
Committed $ by state
committed11$990.00
redeemed6$540.00 est → $487.50 realized
suspended3$270.00 parked (win-back)
void2excluded · coupons revoked
expired4excluded · window lapsed
Revenue snapshots (daily)
DateMRRCollectedSubs
07-18$1,335$6441
07-17$1,320$11840
07-16$1,305$040
07-15$1,305$9140
Discount commitments
Loop founding-member perk lifecycle — shipped 2026-07-18 · relay-platform finance/db.py
committed redeemed · committed suspended⇄ win-back ·180d· void · committed→ window lapses → expired
Locked policy #1 — suspend, don't void. Cancel / leave-Loop parks the perk as a win-back offer; the daily sweep voids it (and revokes the Stripe coupon) after 180 days. Account deletion voids immediately. One active commitment per org — re-redeemed referrals and access codes return the existing grant, never a second one.
Commitments
Org / userSourceGrantStatusEst $Realized $Window
northbeam-studio
maya@studionorth.ca
loop_early_access50% × 12moredeemed$90.00
live · mo 2 of 12
applied at trial→paid
parallel-dev
dev@parallel.dev
loop_promo50% × 12mocommitted$90.00expires 2027-06-30
quiet-harbor
jo@quietharbor.co
loop_early_access50% × 12mosuspended$90.00parkedvoids 2027-01-13 · 179d left
fernweh-labs
ana@fernweh.io
loop_early_access50% × 12moredeemed$90.00$37.50
5 of 12 mo served · canceled
realized < estimate
hollis-and-co
sam@hollis.co
referral50% × 12mocommitted$90.00expires 2027-05-02
driftline (deleted)
account_deleted
loop_promo50% × 12movoid$90.00$0coupon revoked
tidepool
win_back_window_lapsed
loop_early_access50% × 12movoid$90.00$0sweep · coupon revoked
gable-works
never subscribed
loop_promo50% × 12moexpired$90.00$0365d window lapsed
mira-collective
left Loop (settings)
referral50% × 12mosuspended$90.00parkedvoids 2026-12-28 · 163d left
arden-supply
erik (manual grant)
manual50% × 12mocommitted$90.00expires 2027-07-11
Guard rails shipped: at-most-one-active per org (A2) · expires_at written at mint, 365-day redemption window (A3) · daily commitment-lifecycle sweep expires + voids · void revokes the Stripe coupon so the discount can't outlive the grant (A5).
Trials
Card-less Pro trials + Stripe-side trials — conversion, nudges, lapse
Trialing now
14
tier=pro · stripe_status=trialing
Converted (Jul)
5
36% cohort conversion
Nudges sent
9
T-7 ×6 · T-1 ×3
Lapsed → free
4
2 in dunning first
Locked policy #2 — discount applies at conversion. A Stripe-side trial flips trialing→active on the same subscription — no checkout. The webhook now applies the org's active commitment to the live subscription at that transition (apply_commitment_to_subscription). It previously evaporated, silently.
Trial cohort
OrgEndsStageLoop commitmentOutcome
northbeam-studioconverted 07-18converted50% applied at conversion ✓$7.50/mo × 12, then $15
bright-alder07-25 · 7dT-7 nudgedcommitted · will apply
cove-analytics07-19 · 1dT-1 nudgednone
gable-workslapsed 07-12→ freecommitment expired with ittrial.expired sent
Seats & Teams
Member ↔ paid-seat sync — Team $15/seat, 3-seat floor, prorated true-ups
Locked policy #3 — auto true-up with a confirm. Adding a member pushes the Stripe quantity (prorated); the invite flow answers 402 seat_confirmation_required with a seat-impact preview until the admin confirms. Member removal trues down but never below the floor. The old drift — invite members, bill unchanged — is closed.
Team orgs
OrgMembersPaid seatsFloorSync$ / mo
parallel-dev663in sync true-up +1 · 07-18 · prorated $8.06$90
hollis-and-co443in sync$60
mira-collective233floor held removed 1 · stays at 3-seat min$45
arden-supply543confirm pending invite held at 402 until confirmed$60
Guard demos
Seats & Segments
Cost and revenue by commercial status — free, EAP, paid, discounted — not one blended org list
2 open decisions this view assumes. (1) What EAP grace lapses into isn't decided — today the daily eap-graduation sweep drops an expired-grace org straight to free (app.py); if grace should instead land on a discounted paid tier, that conversion + its discount don't exist yet — "EAP · Grace" and "Free" are genuinely different populations below, not two labels for one thing. (2) The graduation discount shown here is a 30% placeholder until the campaign terms lock — the segment shape doesn't change either way.
Segment
Orgs in view
Maps to real code: tier / grace_expires_atbilling.py get_plan_status(). Seat sync (team only) — billing.sync_subscription_seats(). Contract discount — org_contracts.discount_pct. Cost attribution — finance/costs.py (planned, P4).
Churn & win-backs
Planned — P4 (after cost + reconciliation land)
P4 · planned

Churned MRR · dunning recovery · suspended-perk win-backs (reactivation offers by days-left in window) · cohort retention. Sits on top of the reconciliation work — not trustworthy before it.
Contracted revenue forecast
Planned — P4 · forward booked revenue, not trailing MRR
P4 · planned

Per active sub: price × quantity × interval out to N months with renewal dates · step-ups when a discount window closes (50%/12mo bills mo 1–12 at $7.50, mo 13+ at $15 — estimated_cost + duration_months feed the curve) · trials probability-weighted at the cohort conversion rate · expected billings next 3 / 6 / 12 mo.
Cash flow & payouts
Planned — P5 · when capital actually lands, in CAD
P5 · planned

Stripe payout ingestion (payout.created / payout.paid + Balance API) · finance_transactions grouped by payout · cash calendar (charge dates + payout lag = bank-landing dates, CAD after FX) · runway = payouts − (platform_expenses + payroll).
Payment gateway
Connection health and console-managed configuration — RCTX-1055 · adapter-driven, not Stripe-shaped
Scenario
Connected accountchecked 12s ago
Stripe · Relay Context Inc.
acct_1RQx8kGH2 · CA · settles CAD
live mode
Health checks7 of 7 passing
Console-managed configuration
Secrets — presence only
API secret key •••••••••••• present
Webhook signing •••••••••••• present
Secrets live in /etc/relay/secrets and are read at boot. The console reports whether they are present and working, never their values, and offers no way to set them. Rotation is a host operation, documented in the gateway runbook.
Why this panel is adapter-shaped. Every row above comes from the active provider's own adapter.health() and adapter.config_schema(), so a Launchpad product on a different processor inherits this screen by implementing the adapter, with no console changes. Provider-specific checks (Stripe Tax) arrive as adapter-declared rows rather than hardcoded ones. Contract: SPEC.payment-gateways.md (RCTX-1056).

The check that catches real outages is webhook freshness, and it needs no API call: the newest row in processor_events against the count of live subscriptions. Every other check catches misconfiguration; only this one catches the silence where money should be. Config writes are audited (RCTX-1054) and are the first natural candidate for approval quorum (RCTX-1053) — changing a price ID deserves a second pair of eyes.
Access codes
Issued-code audit — minting happens in the app; oversight lives here
Loop parity (decided): a grant_loop code now mints the same 50%/12mo commitment as a referral join — source loop_promo, so promo cost stays separable from referral cost in Commitments.
Issued codes
CodeCampaignGrantsRedeemedStatus
LOOP-SUMMERloop-summer-26Loop + 30d Pro18 / 50active
PRESS-KITpress-outreach30d Pro4 / 25active
EAP-CLOSEeap-wave-3Loop31 / 31exhausted
Demo analytics
Campaign funnels ending at MCP activation — the admin-only half; detail never surfaces in the room
Landing funnel · loop-summer-26
Landing view
1,082100%
Demo started
47644%
Code claimed
20619%
Registered
979%
MCP activated
545%
RELAY CONSOLE · V3.5 UNIFIED SHELL · PROTOTYPE · 2026-07-18 NOT WIRED — SAMPLE DATA · REAL CONSOLE: relay-platform/relay-console