First-class invoices
- Billing model split: the prepaid wallet covers the happy path; invoices cover the cases where the wallet alone can’t recover (auto-topup card decline, metering settled higher than the wallet held).
- Three invoice reasons:
topup_failed,overage,manual. Each mirrored to a real Stripe Invoice with hosted pay page, PDF, receipt, and email reminders. - Auto-topup decline now creates a
topup_failedinvoice for the declined amount instead of just emailing the user. The pay link is included in the email — users can self-serve recovery without signing in. - Settlement now returns
overageCentsalongsidefinalCents; non-zero overages emitoverageinvoices automatically. Threshold is $0 (every cent owed gets invoiced). - 4 new API endpoints under
/v1/billing/invoices/*(list, get, pay-url, void). GET /v1/billing/balancegainsopenInvoicesCents+openInvoiceCount.- Webhook handler covers
invoice.paid,invoice.payment_succeeded,invoice.voided,invoice.marked_uncollectible. - Dashboard billing page: persistent red banner when any invoice is open, an “Outstanding” KPI in the Activity card, and a full Invoices table with Pay/Receipt/PDF actions per row.
Mobile polish & docs
- Dashboard mobile layout finalized — single-line slim footer, static iOS safe-area handling, theme-color sampling for native-feeling status bar tinting.
- Welcome interstitial for new sign-ups across email OTP, Google,
GitHub. Single-shot per user,
localStorage+ in-memory backup so it never loops. - Landing CTAs route logged-in users to
/appand prompt anonymous users with/login. Sell it to usopens the mail client pre-composed.- This entire docs site went live.
SEO + GTM
- Sitemap.xml + robots.txt (correct sitemap.org namespace).
- JSON-LD Organization + WebSite schema in landing
<head>. - Google Ads conversion tag (
AW-18194889415). - Slim single-line dashboard footer; SSH-keygen helper gets a Copy button.
Anti-AI design pass
- Whole-dashboard redesign: no gradients, no semi-transparent surfaces, sharp 4px radii, editorial type. Solid hex tokens only.
- Light theme uses brand blue (
#2563eb) accent; dark stays lime (#a3e635). - Three-mode theme toggle (light / auto / dark) persisted across reloads.
- Legal pages (Terms, Privacy, Cookies) gained light theme + smart
back navigation (Back to dashboard if you came from
/app).
Pricing ladder
- Reordered landing + Create picker cheapest → most expensive.
- Replaced High/Medium/Low text with an “Availability” label; three-dot indicator stays.
- Removed L4/L40S; added B200 + B300 as separate cards.
First public launch
- Marketing landing with pricing grid, FAQ, how-it-works, social.
- Dashboard MVP: Create / Instances / Billing / Settings.
- Email OTP + Google OAuth + GitHub OAuth.
- Stripe billing: one-off top-ups, saved card, auto-topup.
- SSH key management with per-launch injection.