Trabajamos en un monorepo (Turborepo + npm workspaces): web, móvil y una sola API, compartiendo tipos y UI. TypeScript de punta a punta. Acá está el mapa — no necesitas dominarlo el día uno, pero sí saber dónde vive cada cosa.
01el stack en una mirada
Cuatro capas, un solo repo.
De arriba (lo que ve el usuario) a abajo (donde vive). Todo en el mismo monorepo.
regla → un cambio de tipo en la API se propaga a web y móvil sin copiar nada. Eso es el monorepo: una verdad, muchas caras.
02las apps
Web y móvil, misma base.
Siete apps en apps/. Las web con Next.js; las de almacén y cliente final con Expo. Comparten UI y tipos desde packages/.
▲
Next.js 15 · React 19 web
admin · agent · client · payments-portal. App Router, Tailwind 4, TanStack Query para datos. Server components donde rinde.
📱
Expo · React Native 0.81 móvil
almacen · mobile-client. Una base para iOS y Android. UI compartida desde mobile-ui.
03el backend
Una API para todas.
NestJS en apps/api: modular, tipada, documentada. Prisma habla con Postgres; Zod valida; Swagger documenta solo.
🪺
NestJS 11 apps/api
Módulos por dominio, guards de auth (JWT + Passport), throttling, tareas programadas (@nestjs/schedule).
◭
Prisma 6 + Postgres
El ORM. Esquema en schema.prisma, migraciones versionadas. La base es Postgres (vía Supabase).
✓
Zod
Validación de extremo a extremo. Los mismos esquemas validan en API y en el cliente.
🔌
Socket.io
Tiempo real donde hace falta: estados de envío, almacén, notificaciones en vivo.
04datos & servicios
Lo que conecta al mundo.
La plataforma sobre la que corre todo y los servicios externos que usamos.
⚡
Supabase
Auth, Postgres, realtime y storage. El login del onboarding y de las apps vive aquí (SSR).
✉️
Postmark
Email transaccional y de marketing. Plantillas versionadas (confirmaciones, notas de entrega, estados de envío).
💬
WhatsApp Cloud API
Notificaciones al cliente por WhatsApp: confirmaciones, tracking, plantillas aprobadas.
💳
Stripe
Pagos y cobros. Vive en payments-portal + webhooks en la API.
📊
PostHog
Analítica y observabilidad (web y server) desde packages/observability.
🗄️
DigitalOcean Spaces nyc3
Almacenamiento de archivos e imágenes (S3-compatible, vía @aws-sdk/client-s3): catálogos, notas, covers.
05cómo se despliega
De tu rama a producción.
Cada parte tiene su camino de despliegue. Tú abres un PR; al mergear, se despliega solo.
🚀
Render
Web y API. Cada servicio se reconstruye y despliega al mergear a su rama. Logs y variables de entorno ahí.
📦
EAS · Expo
Las apps móviles. Builds y entregas a las tiendas (y OTA updates) con Expo Application Services.
🌊
DigitalOcean Spaces
Donde viven los archivos públicos. CDN en nyc3.cdn.digitaloceanspaces.com.
⚙️
Turborepo
Orquesta builds y caché del monorepo. Un turbo build construye solo lo que cambió.
tu primer deploy → no toques producción el día uno. Levanta el repo en local (tarea “Configura el repo de tu cliente”), abre un PR pequeño, y míralo desplegar.
la idea
Un monorepo, TypeScript de punta a punta. Eso es el stack.
No memorices versiones. Recuerda la forma: apps (Next + Expo) hablan con una API (NestJS + Prisma) sobre Postgres/Supabase, con servicios (Postmark, WhatsApp, Stripe, PostHog) alrededor, y todo se despliega en Render, EAS y DigitalOcean. Cuando dudes, sigue el tipo: nace en la API y viaja a todo lo demás.