SBMS — subscription billing, invoicing and payment recovery
Selected screens

A tour of the build.

Swipe or click through the screens.

19
permissions, granted or revoked per role
4
roles, each signing in to its own workspace
3, 5, 7
dunning retry days before a subscription cancels
7 yr
invoice retention when an account is erased

Recurring revenue only looks simple from the outside.

Recurring revenue only looks simple from the outside. Behind one monthly charge sit trial periods, plan changes, region-specific tax, failed cards, retry windows, refunds, credit balances and a paper trail that has to survive an audit — and most teams run that on spreadsheets and manual transfers, where a missed renewal is silent and a wrong invoice gets found by the customer. The brief was to build the whole cycle as one system against a written SRS, with role-based access, idempotent billing operations and audit logging designed in from the first module rather than bolted on at the end.

What we did

Everything hangs off a plan catalogue: amount in minor units, currency, interval and interval count, trial days, a feature list and public-or-archived visibility, so pricing is data rather than code. Checkout runs on Stripe Elements, so card details never reach the server, and the billing address resolves a tax rule by country, region and postal pattern with a priority field to settle overlaps — California's 7.25% sales tax sits above the national defaults, while UK VAT at 20%, German VAT at 19% and Bangladesh VAT at 15% apply country-wide. Invoices take a configurable number prefix and due window, currently INV and seven days, and when a charge fails the dunning schedule retries three, five and seven days past due before cancelling the subscription. Refunds and credit balances close the loop, finance can pull invoices, payments and refunds out as CSV or JSON over any date range, and every state-changing action lands in an activity log with its causer, channel and subject.

What changed after

Access is a permission model, not a set of hidden buttons: nineteen granular permissions are granted or revoked per role from a matrix in the admin, and each of the four roles signs in to its own workspace. Admin gets the catalogue, coupons, users and settings; finance gets invoices, payments, refunds, tax rules and data exports; support gets customer search, internal notes, invoice resend and password-reset triggers but no refund button; customers get a portal with their subscription, invoices, saved cards, TOTP two-factor with recovery codes, and a GDPR panel that exports everything held about them or anonymises the account while keeping invoices for the statutory seven years. Even the public marketing site — theme, accent colour, copy and legal pages — is edited from the same admin, so the front door ships without a redeploy. Every role is open to try: the four demo logins are listed at the top of this page, and Stripe runs in test mode, so card 4242 4242 4242 4242 completes a real checkout without a real charge.

Ready when you are.

One business day to first reply. Always.