Set up billing — the required row on the customer's pre-launch checklist

Founders' standup 2026-09-17: billing is a required checklist row, never a wizard step. The customer's copy shows it with the checkout button on the row itself, because Settings › Billing is hidden from customers.

17 Sept 2026 · branch onboarding/i2-billing-row · captured against propflow-stage · at bd11303e66

Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.

1 · Company Settings, as the company admin — three rows now, billing last

Captured as a real org_admin of Test Client Co on stage. The row reads Not set up. — the honest answer: no Stripe customer exists under this admin's email or the company's admins' emails, and the company row carries no customer id (nothing writes one yet; the PR body says why). Beside it, Set up billing is a button, not a link: it POSTs /api/billing/checkout and follows Stripe's URL, the same round trip the (staff-only) Billing card makes. Not clicked here — the environment's Stripe key is live-mode.

Asserted in the captured DOMBefore Clara goes live · Connect your shared leasing inbox · Connect a calendar for tours · Set up billing · Not set up.. The card, the two rows from part 1, and the new billing row with its state detail and its button label.

Company Settings, as the company admin — three rows now, billing last

2 · Phone width — the button wraps under the sentence, nothing clipped

The detail line is flex-wrap, so at 390px the button drops under "Not set up." rather than squeezing the status off the row.

Asserted in the captured DOMSet up billing · Not set up.

Phone width — the button wraps under the sentence, nothing clipped

What is not photographed, and why

The green state (an active subscription) — no stage company has one, and the Stripe key here is live-mode, so none was created for the picture. deriveBillingRow's ready / trialing / past-due / unknown states are pinned by 9 unit tests instead, and the button's POST-and-follow by 2 jsdom tests. The staff copy of the same row, and the turn-on dialog's warning, are on the companion page pr-9333-staff-evidence, captured under the staff identity.

PropFlow Docs