← all workcase

webplatform

A multi-tenant SaaS platform for small-business websites: one .NET 10 modular monolith of ~30 independent modules, each a Vertical Slice with its own schema, wired by a transactional outbox — plus admin, tenant-web and mobile frontends.

.NET 10C#Vertical SlicePostgresNext.jsReactStripeDocker

Architecture

Caddy · per-tenant hosts→Next.js tenant web→admin SPA · React 19→.NET 10 modular monolith→transactional outbox→Postgres · schema per module

What it is

A platform that gives a small business a real website with content editing, news, contact flows and billing — without an agency. Every tenant gets its own host; one codebase serves them all.

How it's built

Each of the ~30 modules owns its Postgres schema and talks to the others only through contracts and a transactional outbox, so module boundaries stay honest and independently testable. Tenancy is first-class: per-tenant hosts, tenant isolation proven by DB-level tests.

Content as data

A site starts life from a reviewed seed bundle — JSON content + images per business, readable in a pull request — not from C# string literals. Changing a sentence needs no rebuild.

Run like a product

Stripe and GoPay behind a deliberately fail-closed production gate: the API refuses to boot with stub payment clients rather than run with unverifiable webhooks. Own CI, containerized deploys, and repeated multi-hundred-finding adversarial audits driven to remediation.

Sites on the platform

Ortica pizza — Brnofirst tenant · onboarding
Pre-launch — tenant sites go live behind their own domains as onboarding finishes.

By the numbers

~30
modules · vertical slices
3
frontends
2
payment providers
500+
audit findings fixed