40 companies on a single platform. Each one thinks it's the only one.
PesPro is a multi-tenant platform for professional services management. Forty different companies operate on the same technical base, with their own configurations, their own users, their own data — and none of them see the others. The challenge wasn't building one. It was building forty inside one.
PesPro needed a platform that scaled by client type, not by client count.
PesPro sells SaaS to professional services firms: accounting practices, marketing agencies, law offices, small consultancies. Each client brings their own quirks — approval flows, invoice formats, team hierarchies, integrations with their existing accounting.
The previous system assumed all clients worked roughly the same. Reality quickly showed that assumption was false: each client required specific hacks for the platform to be useful, and each hack was new technical debt.
What we found in discovery.
The central problem was architectural: the system was built as a monolithic application with many clients on top, rather than a true multi-tenant platform with per-tenant customization.
The technical difference looks subtle. The operational difference is enormous: each client added in the old model added permanent complexity to the code. In the correct model, each new client only adds configuration.
Final architecture.
Schema-per-tenant in PostgreSQL for strict data isolation. Migrations coordinated via internal tooling.
Feature flags system + granular workflow configuration. What's "approve twice before sending" for one client is "send directly if under $X" for another.
Clerk with optional per-tenant SSO for enterprise clients.
Stripe with per-tenant plan. Automated charges based on real usage.
Next.js with per-tenant customizable theme (logo, primary colors, custom domain).
Next.js, NestJS, PostgreSQL, Clerk, Stripe, Cloudflare.
Production metrics.
PROVISIONALReplace with verifiable real metrics before publishing.
“What matters isn't the code. It's that the code keeps working in 5 years. That's why we chose FastNet — they write so others can maintain.”