SaaS platforms that hold up for the first customer and the hundredth
A subscription product is not a business system with a recurring invoice attached. We build multi-tenant platforms where every company keeps its data separate, plans manage themselves, and signing a new customer does not mean adding manual work.
A SaaS platform is a web application sold on subscription and used by many customer companies on a single shared installation. Each customer, known as a tenant, sees only its own data thanks to isolation enforced at database and permission level. Updates, security and infrastructure stay with the provider.
The problem we solve
Selling software on subscription changes how it has to be built. An internal system serves one company: if something breaks, you tell the office and fix it. A SaaS platform hosts dozens of different companies on the same application, each with its own users, its own data and its own idea of what counts as urgent.
Isolation is the delicate part. A single query that forgets its tenant filter shows one customer the data of another, and that is the kind of incident a product does not recover from. So tenant ownership is never left to developer discipline: it is enforced in the database schema, in access policies and in automated tests.
Then there is everything that is not the product but without which the product cannot be sold: self-service signup, free trial, recurring payment, plan changes, invoices, team invitations, cancellation. These are the parts underestimated at quoting time, and they decide whether the service can grow without someone handling every customer by hand.
How we work
A SaaS platform is designed with the second customer in mind, not the first. Early decisions about data, permissions and billing are the ones nobody gets to revisit later.
Product model and plans
Before any code, you decide what is being sold: the pricing unit, the limits of each plan, whether there is a free trial, how off-price-list customers are handled. Half the architecture follows from those answers, because every limit has to be measured and enforced by the application.
Multi-tenant architecture
We define how data is kept apart: tenant identified row by row with access policies enforced in the database, or dedicated schemas when a customer requires it for compliance reasons. Alongside isolation we define roles, invitations and permissions, because each customer company has its own internal structure.
Subscriptions and billing
We connect plans to Stripe: subscriptions, prorated plan changes, failed payments, account suspension and reactivation. Webhooks keep subscription state up to date inside the application, so permissions always reflect what the customer has actually paid for.
Onboarding and first use
Signup, workspace creation, sample data, colleague invitations. This is what decides how many sign-ups become paying customers, and the one part worth rebuilding more than once by watching where people actually stall.
Release, monitoring and cost
Automated deployment, error monitoring, verified backups and control over infrastructure spend. In a subscription product the cost per customer has to be watched from the first month, because it is the difference between a margin and a loss discovered too late.
Technologies
A stack chosen to keep the running cost of each new customer low. These are the technologies we keep in production across the products listed below.
Interfaces
- React
- Next.js
- TypeScript
- Tailwind CSS
Data and isolation
- PostgreSQL
- Neon
- Convex
- Row Level Security
Subscriptions and access
- Stripe Billing
- Payment webhooks
- Authentication and roles
- Invitations and organisations
Infrastructure
- Netlify
- Serverless functions
- GitHub Actions
- Error monitoring
Delivered projects
Subscription products we build and maintain ourselves.
LeavePilot · HR management SaaS
Multi-tenant platform for holiday and leave management: interactive calendar, requests with approval workflow, remaining balances and reporting for the HR office. Available in Italian, English and Spanish. Built on Next.js 15, PostgreSQL on Neon and Netlify.
BYOURIT · Fast-turnaround SaaS
A service that collects user requests and returns personalised reports within twenty-four hours, with payments handled through Stripe and an interface in English, Italian and Spanish. Built with Next.js and Convex.
ADHD LifeSync · Web and mobile ecosystem
A product for the international market combining a website, a digital goods shop and a native app sharing the same codebase. Next.js on the web, React Native on mobile, monorepo managed with Turborepo.
Frequently asked questions
How much does it cost to build a SaaS platform?
Cost depends on subscriptions, roles and integrations far more than on the number of screens. A first sellable version, with signup, data isolation and recurring payment, starts in the low thousands of euros. We quote after a free analysis of the product model.
How soon can I have paying customers?
A first usable version usually takes four to eight weeks, billing included. It pays to open it to a handful of chosen customers before selling publicly: the requests that arrive in those weeks almost always reorder the development priorities, and reordering them at that stage costs far less.
What does multi-tenant mean and why does it matter to me?
It means every customer uses the same application while their data stays completely separate. It matters because you ship one update for everyone and the cost of each new customer stays low. Separation must be enforced in the database, not left to application code.
Who handles payments and subscriptions?
Payments run through Stripe, which handles cards, receipts and tax obligations. The platform receives the events and updates plan, limits and account status. The Stripe account belongs to the client, so revenue lands directly in their own bank account. We build the connection between the two.
What does the infrastructure cost to run?
With managed databases and serverless functions you start from modest figures and spend grows with real usage. We track cost per customer and work on queries and caching when it climbs. Budget for it alongside payment processing fees, and account for it in the pricing from day one.
Let us talk about your product
Thirty minutes to sharpen the subscription model, the scope of the first version and what it actually takes to open it to your first customers.