System
apps/system/docs/architecture
Arquitectura de system
Capas
app/route
-> module component
-> module hook / Zustand
-> @repo/app-services
-> @repo/firebase-client-adapter
-> Firebase
Para operaciones que requieren privilegios elevados, la app debe invocar una callable function. La
lógica server-side vive en apps/functions y/o @repo/app-function-services, no en componentes de
system.
App Router
app/page.tsx: entrada raíz.app/(auth): layouts y páginas de autenticación.app/(dashboard): shell protegido de la aplicación.- Los nombres entre paréntesis son route groups y no forman parte de la URL.
- Los
[id]representan rutas dinámicas.
Layouts
app/layout.tsxcarga estilos, fonts, sesión raíz y estado de preparación global.app/(auth)/layout.tsxagrega elToasterpara los flujos de auth.app/(dashboard)/layout.tsxinicializa auth, sidebar, navbar, navegación y toaster.
No mover inicialización de sesión a cada página. Los componentes de página deben consumir el estado preparado por los hooks del módulo.
Módulos
Cada módulo mantiene cerca entre sí sus componentes, hooks, tipos, constantes y mocks. La lógica que
se reutiliza entre apps debe extraerse a packages/, siguiendo packages/README.md.
Los módulos no deben importar desde otro módulo mediante rutas internas si existe una utilidad común apropiada. Las dependencias entre dominios deben ser pequeñas y explícitas.
Server y client components
En Next.js los componentes son Server Components por defecto. En system, las áreas que dependen de
hooks, Zustand, localStorage, Firebase client o eventos del navegador deben declarar 'use client'.
No convertir layouts o páginas completas en Client Components sin una necesidad concreta.