One shared API behind web and native
Adverta is a Nigeria-focused advertising and marketplace product: free listings, paid boosts, in-app chat, a campaign builder, and an agency white-label mode. Two clients, web and native, front all of that — and they speak to exactly one backend.
The monorepo is the contract
Adverta is a Turborepo with a web app, a native mobile app, and a shared HTTP API. Keeping all three in one repo makes the API contract a first-class, enforced boundary rather than a document that drifts. When the API changes, both clients change against it in the same commit; there is no "the mobile app is two versions behind the endpoint" class of bug.
Where the product gets interesting
The monetization surface is what separates this from a classifieds clone:
- Boosts and campaigns need a billing-aware model — a listing's visibility is a paid, time-bound thing.
- Agency white-label needs a genuine multi-tenant story, because agencies resell the platform under their own brand.
Keeping it isolated
Under the hood, a per-operation database/service and IAM model (the "Golden Bite arch") keeps capabilities separated, Redis backs the fast paths, and Prometheus supplies metrics. The shared-API discipline up top and the per-operation isolation down below are the same instinct pointed in two directions: one contract for clients, many small authorities for operations.