Monorepo with shared SDK
Three apps (API, web, mobile) share one `api-client` package: HTTP services, React Query hooks and TypeScript types. Single source of truth — change an endpoint once and all three clients pick it up.
Monorepo with NestJS API, Next.js web app and React Native mobile app for 40+ real estate agents.
Probien adopted Salesforce back in 2015 and ran on it for years using mostly four objects: contacts, accounts, opportunities and activities. On that foundation they accumulated 90,000+ contacts, 12,000+ properties and a massive volume of deals. Rising license costs and the friction of modeling real estate-specific flows in a generic CRM led to the decision to build an in-house CRM from scratch — tailored to how agents and admins actually work in Tijuana, without paying for features no one used.
Three apps (API, web, mobile) share one `api-client` package: HTTP services, React Query hooks and TypeScript types. Single source of truth — change an endpoint once and all three clients pick it up.
Permissions per resource × action (`account:read:own`, `client:update`, etc.). The seeder syncs permissions to roles on every deploy — adding a new permission only takes `npm run seed`, no data migration.
Google Drive-style folders with ACL per user/role/division, multipart uploads, integrated into every property and opportunity. R2 is S3-compatible and dramatically cheaper at this volume.
The whole system lives in `America/Tijuana`. A global interceptor turns UTC dates from the DB into local time on every response; `TijuanaDateUtils` centralizes math. Zero offset bugs in production.
Desktop app for personal productivity: kanban, gantt and multi-currency finance.