Multi-tenant SaaS for independent insurance agents — client and policy management, a commission and income ledger, expenses, tax reporting, renewals, and license and continuing-education tracking, all on Stripe-billed subscriptions.
I co-founded Caxper with a US-based business partner and built the entire product — architecture, apps, API and infrastructure — as the sole engineer.

@nestjs/cqrs — thin controllers dispatching to Command/Query buses, event-driven side effects via EventBus.app.current_tenant_id GUC set per-request inside a transaction; a tenant-aware repository layer auto-stamps tenant IDs.Main agent-facing SPA (React Router 7, Vite).
Internal back-office SPA.
SSR marketing site (React Router 7 + @react-router/serve).
NestJS API.
BullMQ worker + React Email preview server.
VitePress developer documentation site (Vue 3).
Install → SDK generation → lint + test → tagged image build & push to a private registry → docker stack deploy → automated post-deploy health validation.
Postgres row-level security is the tenancy boundary, with an auto-injector that adds enable_rls() calls into generated migrations, so a new table cannot ship unscoped.
A rule-based automation engine generates commission and income entries against deduplication keys, so a replayed import cannot pay an agent twice.
Every plan × billing-interval transition is modelled explicitly, with Stripe proration and entitlement side effects hanging off the transition rather than the caller.
Pluggable PDF adapters normalize each carrier's export into the same wizard pipeline as CSV and XLSX, so a new carrier is an adapter rather than a new flow.
A three-table normalized translation model resolves copy at runtime, so adding a language requires no schema change and no deploy.
The residual-income forecast replays the same calculator as the ledger in read-only mode, so projections can never write a real commission row.

