All worknestonexStart a project
SELECTED WORK/04/PLATFORM BUILD

AgencyOS

A white-label operating system that turns a service business into a product.

Project
Platform build
Year
2025–26
Our focus
Multi-tenant SaaSBackendPlatform

How do you turn a service business into a product other operators can run?

You productise the whole path, not just the software. AgencyOS gives an operator a branded business from lead to contract to payout, runs operator, admin and client portals off one API across 78 data models, and provisions each operator's marketing site from an embedded generator.

operator.agencyosLIVE
AgencyOS operator onboarding and checkout screen
AgencyOS · white-label agency platform

01 /Why run three frontends off one API?

Because operators, the platform admin and end clients are looking at the same objects from different angles. A lead, a contract and a payout do not change shape depending on who is reading them; only the permissions do.

Splitting the backend per audience would mean three copies of the same domain model drifting apart. One API with role-scoped access keeps a single source of truth, and the domain is large enough, 78 data models, that duplicating it would have been a serious liability.

02 /What is a transactional outbox and why use one here?

It solves a boring problem that ruins platforms quietly. When you write to the database and then publish an event, those two steps can disagree: the write lands and the event never fires, or the event fires and the write rolls back.

The outbox writes the event into the same database transaction as the change itself, then a separate process publishes it. Either both happen or neither does. On a platform that moves money from lead to payout, a silently dropped event is a missing invoice.

03 /Where do queues and realtime gateways fit?

Queues absorb the work that must not block a request: provisioning, generation, anything slow or failure-prone. Retries become ordinary rather than exceptional.

Realtime gateways handle the other direction, pushing live updates so operators and clients see the same state without refreshing. Collaboration on a shared record needs both halves.

04 /How does an operator get their own marketing site?

An embedded generator provisions it as part of onboarding. The operator is not handed a template to configure, they get a branded site as a product of signing up.

That is what separates a business-in-a-box from a SaaS subscription. The operator's customers should never encounter the platform underneath.

05 /How does the platform owner make money from it?

Centrally. The platform owner runs every operator from one admin surface and takes a cut of what flows through, so the model scales with operator success instead of with seat count.

That shape puts real weight on the payout path being correct, which is why the reliability patterns above are not decoration.

06 /What we delivered

  • Lead-to-payout operator platform
  • Operator, admin and client portals on one API
  • Transactional outbox and queue-backed workflows
  • Embedded marketing-site generator

07 /The outcome

A production multi-tenant platform spanning 78 data models and three apps, with real distributed-systems patterns under the hood.

08 /Build at a glance

ModelWhite-label, operator runs a branded business
AppsOperator, admin and client portals
BackendOne API, 78 data models
ReliabilityTransactional outbox for event consistency
Async workQueue-backed workflows with retries
Live updatesRealtime gateways
Operator siteEmbedded marketing-site generator
CoverageLead to contract to payout
COMMON QUESTIONS

Questions people actually ask

What is a transactional outbox pattern?

A way to keep a database write and the event announcing it in step. The event is written into the same transaction as the change, and a separate publisher sends it afterwards. Without it, a crash between the write and the publish leaves the system with a change nobody was told about.

Should three different portals share one backend API?

Usually yes, when they operate on the same domain objects. AgencyOS serves operator, admin and client portals from one API because they all read the same leads, contracts and payouts. Separate backends would mean maintaining three copies of a 78-model domain.

What does white-label mean for an agency platform?

The operator's customers see the operator's brand, not the platform's. In AgencyOS that extends past the app to a generated marketing site, so an operator signs up and comes away with a business that looks like theirs rather than a reseller account.

Why use queues instead of doing the work in the request?

Because provisioning, generation and payout steps are slow and can fail. Doing them inside a request makes the user wait and turns a transient failure into a visible error. A queue makes retrying normal and keeps the request fast.

THE WORK BEHIND IT

Services this project drew on

ANOTHER PERSPECTIVE / NEXT PROJECTKaizen Analytics

Proof of which crypto callers actually make money — and a place to backtest it.