03 — 2021 — 2026

Probien CRM

Monorepo with NestJS API, Next.js web app and React Native mobile app for 40+ real estate agents.

Probien CRM
Client
Probien Bienes Exclusivos — internal use
My role
Architect + Full-stack
Year
2021 — 2026
Status
Live (internal system)

01 / Context

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.

02 / Metrics

90K+
Contacts migrated
12K+
Historical properties
18+
Integrated modules

03 / Technical decisions

01

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.

02

Granular RBAC with 100+ permissions

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.

03

Internal Drive on Cloudflare R2

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.

04

Timezone as an invariant

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.

04 / Stack

NestJSNext.jsReact Native (Expo)TypeScriptPrisma ORMPostgreSQLCloudflare R2MeilisearchWebSocketsFCM Push

Next project — 04

Bloom

Desktop app for personal productivity: kanban, gantt and multi-currency finance.