Volver al Caso de Estudio

Cleany — Tech Deep Dive

Plataforma SaaS Multi-Tenant para Negocios de Limpieza

Stack Tecnológico

ReactFastifyPostgreSQLPrismaStripeVite
Arquitectura: Monorepo (3 Apps)

Arquitectura

Landing PageNext.js + Sanity CMScleany.proAdmin DashboardReact SPA + Zustandapp.cleany.proWorker PWAOffline-First + QR AuthService Worker + IndexedDBAxios + JWTSync QueueFastify REST APIJWT Auth + JSON Schema Validation16 Routes · 17 ServicesMulti-Tenant IsolationPrisma ORMPostgreSQL22 Models · Multi-TenantJobs, Customers, Workers, InvoicesStripeSaaS Billing +Customer PaymentsWebhooksNotificationsResend (Email)Twilio (SMS)Fire & ForgetSchedule EngineRecurring JobsWeekly/Biweekly/MonthlyPayroll + InvoicingPDF GenerationPayment TrackingCheckoutMulti-tenant SaaS platform: 3 apps (Landing + Admin SPA + Worker PWA) communicating via Fastify REST APIData FlowExternal ServiceCore ServiceIntegration

Flujo de Datos

  1. 1

    El admin gestiona clientes, trabajadores y servicios a través del dashboard React SPA

  2. 2

    El SPA React se comunica con la API REST Fastify via Axios con autenticación JWT

  3. 3

    Las rutas Fastify validan peticiones con schemas JSON y delegan a la capa de servicios

  4. 4

    Prisma ORM consulta PostgreSQL con aislamiento de tenant en cada operación

  5. 5

    El motor de programación recurrente auto-genera órdenes de trabajo basadas en patrones configurables

  6. 6

    Los trabajadores reciben trabajos via PWA offline-first con caché IndexedDB y cola de sincronización

  7. 7

    Los webhooks de Stripe procesan suscripciones SaaS y confirmaciones de pago de clientes

  8. 8

    Resend y Twilio envían notificaciones fire-and-forget para facturas y alertas de trabajos

Patrones de Código

Aislamiento Multi-Tenant

Cada consulta API filtra por tenant_id extraído del JWT. El middleware de Prisma aplica aislamiento a nivel de fila, y los serializadores de respuesta eliminan campos sensibles — asegurando cero fuga de datos entre cuentas de negocio.

Motor de Sincronización Offline-First

Los Service Workers cachean datos de trabajos con TTL de 24 horas y límite de 50 elementos. Una cola de escritura IndexedDB captura mutaciones offline, reintentando con backoff exponencial (3 intentos) cuando regresa la conectividad via el evento online.

Autenticación QR + PIN para Trabajadores

Los trabajadores escanean un token QR único que los identifica, luego establecen un PIN en el primer inicio de sesión. La rotación de refresh tokens con detección de reuso previene secuestro de sesión, y el bloqueo de cuenta se activa después de 5 intentos fallidos.

Métricas del Sistema

22
Modelos Prisma
16
Rutas API
41
Páginas Frontend
17
Archivos de Servicio

Próxima Evolución

El siguiente hito se enfoca en funciones de comprobación de trabajo: captura de evidencia fotográfica (fotos antes/después por trabajo), verificación de ubicación GPS para confirmar que los trabajadores están en sitio, y notificaciones push para que los trabajadores reciban alertas de trabajos en tiempo real sin sondear la app.

Un portal para clientes permitirá a los clientes finales ver su horario de limpieza, aceptar cotizaciones, solicitar reprogramaciones y pagar facturas — cerrando el ciclo entre negocios de limpieza y sus clientes.

La plataforma también añadirá un embudo de captura de leads en la página de aterrizaje con seguimiento analítico, convirtiendo el sitio de marketing de informativo a generador de ingresos.

Desarrollo Activo — Sigue el Proceso

¿Quieres resultados similares para tu proyecto?