SKIP TO CONTENT
Monospace

SERVICE / 01

Web Platforms

The unglamorous middle of most products: accounts, permissions, tenancy, billing, and the dashboards that sit on top of them. Built once, properly, so the surface you show customers and the surface your team operates on are the same system rather than two that drift apart.

Most start as a 1–3 month build; platform work then continues as an embed.

A web platform is the multi-tenant application underneath a software business — not a marketing site with a login. It owns identity, isolation between customers, the permission model, usage metering, and the operator tooling that keeps all three honest. Getting it wrong is expensive because every one of those reaches into every query.

SHIPPED
3 platforms
TYPICAL BUILD
1–3 months
FROM
10,000
TENANCY
MULTI

HOW IT RUNS

WEEK 1 WEEK 9–12
  1. WEEK 1

    Isolation model

    The schema, the tenant boundary, and the permission matrix — written down and reviewed before a single screen exists.

  2. WEEK 2–4

    The spine

    Auth, roles, and one end-to-end path through the product, deployed to a real environment the first day it runs.

  3. WEEK 5–8

    Both surfaces

    The customer product and the operator console, built from the same data layer rather than as two systems that will drift.

  4. WEEK 9–12

    Metering and handover

    Usage attribution, billing where the model needs it, and documentation written for the engineer who joins next.

HOW IT IS BUILT

Multi-tenant from the first commit
Tenancy is not a feature you add later — it reaches into every query, every permission check, and every background job. Isolation is designed in at the schema level so a second customer does not become a rewrite.
Type-safe end to end
TypeScript from the database row to the rendered component. The type system is the cheapest test suite available, and it catches the class of bug that reaches production silently rather than loudly.
Metering and billing as first-class concerns
Usage attribution designed in rather than bolted on. Saldo and Resolo both meter per organization, which only works because the data model knew about organizations before the billing page existed.
Observable by default
Instrumentation is part of the build, not a retrofit. When a customer asks why a number looks wrong, the answer should be a query, not an investigation.

WHAT YOU GET

  • A running multi-tenant application, deployed, with environments and CI
  • Schema, migrations, and a documented isolation model
  • Authentication, roles, and permissions wired through to the data layer
  • Operator/admin surface for the people who run it day to day
  • Usage metering and billing integration where the model needs it
  • Handover documentation written for the engineer who joins next
BUILT WITH
  • TypeScript
  • Next.js
  • Postgres
  • Redis
  • Prisma
  • tRPC
  • Vercel

THE ARTIFACT

db/policy/tenancy.sqlDELIVERABLE
-- every table that holds customer dataalter table invoice enable row level security; create policy tenant_isolation on invoice using (org_id = current_setting('app.org')::uuid); grant select, insert, update on invoice to app_user;migration 0042_tenancy.sqlapplies to every tenant-scoped tableisolation asserted in CI on every commit
Isolation written once, at the database, rather than re-implemented in every query by every developer who joins later.

IS THIS THE RIGHT FIT

YES, IF
  • You are selling the same software to more than one organization
  • Your team needs an operator surface as much as customers need a product
  • Usage has to be attributed, metered, or billed per account
PROBABLY NOT, IF
  • A brochure site or a landing page — that is a smaller, cheaper job
  • A single-tenant internal app where isolation is not a concern

QUESTIONS

  • How long does a web platform build take?

    Most run one to three months for a first production version at €10,000 – €50,000, then continue as an embed. The variable is rarely the interface — it is how many distinct roles and permission rules the business actually has.

  • Do you work with an existing platform or only greenfield?

    Both, though the shape differs. Greenfield starts with the isolation model. Existing systems start with an audit, because retrofitting tenancy into a single-tenant schema is the most common and most expensive problem we get called about.

  • Which database and hosting do you default to?

    Postgres with Redis for queues and caching, deployed on Vercel, with pgvector added when the product needs retrieval. Shipped that way in Saldo, Resolo, and Checkmarked.

Got something in this shape?

A scoped sprint starts at €5,000 and runs two to four weeks. Every engagement is priced before work starts.