🏗️ Arquitectura del Sistema
Visión General
PuntoHack sigue una arquitectura modular en capas que separa claramente las responsabilidades y facilita el mantenimiento y escalabilidad.
Diagrama de Arquitectura Completo
Capas de la Arquitectura
1. Capa de Presentación (Frontend)
Tecnología: React 19, Next.js 16 App Router
Componentes:
- Server Components: Renderizado en servidor, sin JavaScript
- Client Components: Interactivos, con estado y efectos
- Shared Components: Reutilizables entre páginas
Características:
- ✅ Server Components por defecto
- ✅ Client Components solo cuando es necesario
- ✅ Optimistic updates para mejor UX
- ✅ Supabase Realtime para actualizaciones instantáneas
2. Capa de Aplicación (App Router)
Tecnología: Next.js Server Actions, API Routes
Responsabilidades:
- Server Actions: Mutaciones de datos (INSERT, UPDATE, DELETE)
- API Routes: Endpoints REST para casos especiales (cron jobs, webhooks)
- Route Handlers: Manejo de rutas y redirecciones
Características:
- ✅ Type-safe con TypeScript
- ✅ Validación automática con Zod
- ✅ RBAC integrado
- ✅ Manejo de errores centralizado
3. Capa Core (Infraestructura)
Componentes:
Auth (src/core/auth.ts)
- Integración con Clerk
- Helpers para obtener usuario actual
- Verificación de autenticación
RBAC (src/core/rbac.ts)
- Sistema de roles y permisos
- Funciones
hasRoleyrequireRole - Validación de permisos
DB (src/core/db.ts)
- Singleton de Prisma Client
- Configuración de conexión
- Helpers de transacciones
Errors (src/core/errors.ts)
- Integración con Sentry
- Captura de errores con contexto
- Logging estructurado
Validations (src/core/validations.ts)
- Validaciones de negocio reutilizables
- Validación de fechas de hackathons
- Validación de extensiones de fechas
4. Capa de Módulos (Dominio)
Estructura: Un módulo por entidad de negocio
Patrón:
modules/[domain]/
├── queries.ts # Lectura
├── actions.ts # Escritura
├── validations.ts # Validación
└── types.ts # Tipos
Módulos:
users/- Gestión de usuarioshackathons/- CRUD de hackathonsteams/- Formación de equipossubmissions/- Envío de proyectosevaluation/- Sistema de evaluaciónsponsors/- Gestión de sponsors
5. Capa de Datos (Data Layer)
Tecnología: Supabase PostgreSQL + Prisma ORM
Características:
- ✅ Type-safe con Prisma
- ✅ Migraciones automáticas
- ✅ Row Level Security (RLS)
- ✅ Realtime con WebSockets
Flujo de Datos
Lectura (Query)
Escritura (Action)
Patrones Arquitectónicos
1. Modular Architecture
Principio: Separar código por dominio de negocio
Ventajas:
- ✅ Código organizado y mantenible
- ✅ Fácil de testear
- ✅ Reutilizable
- ✅ Escalable
2. Layered Architecture
Principio: Separar responsabilidades en capas
Ventajas:
- ✅ Separación clara de concerns
- ✅ Fácil de entender
- ✅ Fácil de modificar
3. Server Actions Pattern
Principio: Mutaciones directamente desde componentes
Ventajas:
- ✅ Menos código boilerplate
- ✅ Type-safe end-to-end
- ✅ Mejor performance
- ✅ Mejor UX
4. RBAC Pattern
Principio: Control de acceso basado en roles
Ventajas:
- ✅ Seguridad centralizada
- ✅ Fácil de auditar
- ✅ Escalable
Integraciones
Clerk Authentication
Ubicación: src/core/auth.ts
Uso:
import { getCurrentUser } from '@/core/auth';
const user = await getCurrentUser();
if (!user) throw new Error('Unauthorized');
Supabase Realtime
Ubicación: src/lib/realtime/
Uso:
import { useHackathonsRealtime } from '@/lib/realtime/hooks/use-hackathons-realtime';
const hackathons = useHackathonsRealtime();
Sentry Monitoring
Ubicación: src/core/errors.ts
Uso:
import { captureError } from '@/core/errors';
try {
// código
} catch (error) {
captureError(error, { context: 'functionName' });
}
Seguridad
Autenticación
- ✅ Clerk maneja autenticación
- ✅ Verificación en cada Server Action
- ✅ Middleware para rutas protegidas
Autorización
- ✅ RBAC en cada acción crítica
- ✅ Verificación de propiedad cuando aplica
- ✅ Row Level Security en Supabase
Validación
- ✅ Zod schemas en cada input
- ✅ Validación de tipos
- ✅ Validación de negocio
Performance
Optimizaciones
- ✅ Server Components por defecto
- ✅ Realtime en lugar de polling
- ✅ Revalidación selectiva de cache
- ✅ Índices en base de datos
Caching
- ✅ Next.js cache automático
- ✅ Revalidación con
revalidatePath - ✅ Cache de queries con Prisma
Escalabilidad
Horizontal Scaling
- ✅ Stateless Server Actions
- ✅ Base de datos externa (Supabase)
- ✅ Servicios externos (Clerk, Sentry)
Vertical Scaling
- ✅ Optimizaciones de queries
- ✅ Índices en base de datos
- ✅ Caching estratégico
Próximos Pasos
- Module Structure - Estructura detallada de módulos
- Design Patterns - Patrones utilizados
- Database Schema - Modelo de datos
Siguiente: Module Structure