Arquitectura de Cierro
Visión General
Cierro es una aplicación SaaS construida con una arquitectura moderna de cliente-servidor, utilizando React en el frontend y Supabase como Backend-as-a-Service (BaaS).
Diagrama de Arquitectura
┌─────────────────────────────────────────────────────────────────┐
│ CLIENTE │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ React │ │ TipTap │ │ Liveblocks │ │
│ │ + Vite │ │ Editor │ │ (Colaboración Real) │ │
│ └──────┬──────┘ └──────┬──────┘ └────────────┬────────────┘ │
│ │ │ │ │
│ └────────────────┼───────────────────────┘ │
│ │ │
└──────────────────────────┼───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ AUTENTICACIÓN │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Clerk │ │
│ │ • Login/Registro • OAuth • JWT • Session Management │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SUPABASE │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ PostgreSQL │ │ Storage │ │ Edge Functions │ │
│ │ + RLS │ │ Buckets │ │ (Deno Runtime) │ │
│ └──────┬──────┘ └──────┬──────┘ └────────────┬────────────┘ │
│ │ │ │ │
│ └────────────────┼───────────────────────┘ │
└──────────────────────────┼───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SERVICIOS EXTERNOS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌───────┐ │
│ │ Resend │ │ Gemini │ │ HubSpot │ │Pipedream│ │Reveniu│ │
│ │ (Email) │ │ (IA) │ │ (CRM) │ │ (iPaaS) │ │(Pagos)│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └───────┘ │
└─────────────────────────────────────────────────────────────────┘Componentes Principales
Frontend (React)
Estructura de Componentes
Librerías Principales
React 18
UI Framework
TipTap
Editor WYSIWYG
Liveblocks + Yjs
Colaboración en tiempo real
React Query
Cache y estado del servidor
shadcn/ui
Componentes UI
Tailwind CSS
Estilos
Recharts
Gráficos
Backend (Supabase)
PostgreSQL + RLS
La base de datos utiliza Row Level Security para control de acceso granular:
Edge Functions
Funciones serverless en Deno para lógica de negocio:
Procesamiento de pagos
Envío de emails
Integraciones externas
IA para generación de contenido
Storage
Buckets para almacenamiento de archivos:
company-logos
✅
Logos de empresas
budget-images
✅
Imágenes en presupuestos
knowledge-files
❌
Archivos de conocimiento
Flujo de Datos
Creación de Presupuesto
Generación con IA
Autenticación
Patrones de Diseño
Component Composition
Custom Hooks
Context Providers
Seguridad
Capas de Seguridad
Clerk: Autenticación y gestión de sesiones
JWT Validation: Verificación en cada request
RLS Policies: Control de acceso a nivel de fila
Edge Functions: Validación de permisos en backend
Flujo de Autorización
Performance
Optimizaciones Frontend
Code Splitting: Lazy loading de rutas
React Query: Cache inteligente
Debounce: Reducción de requests
Virtual Lists: Para listas largas
Optimizaciones Backend
Connection Pooling: Supabase Pooler
Indexes: En columnas frecuentes
Edge Functions: Cold start optimization
CDN: Para assets estáticos
Escalabilidad
Horizontal
Supabase escala automáticamente
Edge Functions son serverless
Liveblocks maneja concurrencia
Vertical
Upgrade de plan Supabase
Conexiones de database
Storage limits
Monitoreo
Logs
Supabase Dashboard: Logs de DB y Auth
Edge Function Logs: Errores y performance
Browser Console: Errores de cliente
Métricas
Request latency
Error rates
Active users
Storage usage
Última actualización