Extant 2000 is my umbrella for a family of products: hosting, HR, CRM, systems engineering, e-signatures, accounting, a helpdesk, and more. Building that breadth solo sounds absurd. Here's how it's possible.
Share the foundation
Every product sits on the same foundation: a common auth and data layer, a shared component library, one deployment pipeline. A new product is a new app on rails that already exist, not a new stack.
Concretely, that means one identity provider issuing tokens every app trusts, so there is exactly one implementation of sign-in, password reset, session expiry and multi-factor to get right and to keep patched. It means one Postgres, with each product's tables carrying its own prefix and its own database role, rather than nine databases with nine backup schedules. And it means the design system ships as a versioned package: when the button component changes, every product picks it up on its next build instead of drifting into nine slightly different buttons.
One box, many fronts
They all run as containers on the same infrastructure, each routed by hostname. Adding a product is a compose service and a subdomain, not a new server. The CI pipeline is a single template each repository includes and parameterizes, so build, test, image push and deploy are one definition maintained in one place.
Boring on purpose
The only way to hold this much surface area solo is to be ruthless about consistency, the same patterns and libraries and conventions everywhere, so switching between products is cheap. The interesting work goes into the products; the plumbing is deliberately uniform.
The discipline that makes this work is refusing to special-case. The moment one product gets its own auth flow because it needed something slightly different, you no longer have a platform, you have nine codebases wearing a trench coat. It is nearly always cheaper to extend the shared layer than to fork it, even when extending is the slower option that week.
The cost is real and worth naming: a bug in the shared layer is a bug in all of them at once, and a breaking change to the component library is a coordinated release. Shared foundations turn "ten products" into "one platform with ten faces", and they also turn one mistake into ten.




