All projects
completeLaravelInertia.jsReactTailwind CSS

SBMS

A subscription billing platform with Stripe checkout, tax rules, dunning and role-based workspaces.

SBMS

About the project

SBMS — subscription billing, invoicing and payment recovery

A complete subscription and billing platform — plan catalogue, Stripe checkout, region-aware tax, recurring invoices, dunning retries, refunds and revenue reporting — where each of four roles gets its own workspace and customers get a self-service portal. The whole system is live and open to browse; the demo logins are listed alongside.

What was built

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.

Result

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.

By the numbers

  • 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

Try the demo

Every role is open to try at sbms.texion.tech/login with password password: admin@sbms.test, finance@sbms.test, support@sbms.test or customer@sbms.test. Stripe runs in test mode, so card 4242 4242 4242 4242 completes a checkout without a real charge.

Links

Key features

  • Plan catalogue where pricing, intervals, trials and features are data rather than code
  • Stripe Elements checkout, so card details never reach the server
  • Tax rules by country, region and postal pattern, with priorities to settle overlaps
  • Recurring invoices, with dunning retries at 3, 5 and 7 days before a subscription cancels
  • Refunds, credit balances, and CSV or JSON exports of invoices, payments and refunds
  • Admin, finance, support and customer workspaces, with 19 permissions granted per role
  • Customer portal with TOTP two-factor and a GDPR panel to export or anonymise an account
  • Activity log for every state-changing action, and a marketing site edited from the admin

Challenges & solutions

  • 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.