Frontend: arquitectura tecnica
Resumen
El frontend es una SPA en React organizada por features. Combina:
- React Router para navegacion
- React Query para datos remotos
- Zustand para estado transversal
- Firebase para sesion e integraciones cliente
- Material UI para el sistema de componentes
Stack confirmado
| Area | Tecnologia |
|---|---|
| Framework UI | React 19 |
| Lenguaje | TypeScript 5 |
| Build | Vite 7 |
| Routing | React Router DOM 7 |
| UI kit | Material UI 7 |
| Fetch y cache | Axios + TanStack React Query |
| Estado global | Zustand |
| PWA | vite-plugin-pwa + Workbox |
Bootstrap de la app
La entrada parte en src/main.tsx y termina montando App.
El arbol de providers documentado hoy es:
QueryClientProviderThemeProviderThemePaletteVarsLocalizationProviderCssBaselineAuthProviderGlobalSnackbarProviderAppRouter
Organizacion del codigo
src/
app/
config/
features/
shared/
stores/
Significado practico
app/: entrada, rutas y tema globalconfig/: clientes, env y configuracion basefeatures/: dominios funcionalesshared/: utilidades y componentes reutilizablesstores/: estado transversal
Patron de capas
La ruta esperada del dato es:
page/component -> hook -> service -> apiClient -> backend
Que va en cada capa
| Capa | Responsabilidad |
|---|---|
| Page o component | UI, interaccion y composicion |
| Hook | Coordinacion asincrona y transformacion ligera |
| Service | HTTP o integracion externa |
apiClient | Configuracion de headers, interceptores y errores |
Estado global
Los stores principales son:
| Store | Uso |
|---|---|
useUserStore | Usuario autenticado |
useBusinessMembershipStore | Membresia activa y contexto del negocio |
useRoleStore | Cache de permisos por rol |
Datos remotos
La base de los hooks de datos es useCachedFetch.
Ese patron estandariza:
- lecturas cacheadas
- invalidacion
- refetch manual
- cambio de parametros
- reset de estado
Encima de eso viven hooks como:
useBookingsuseAppointmentsuseBusinessuseServicesuseMetrics
Autenticacion y permisos
Autenticacion
- Firebase Auth mantiene la sesion del navegador
AuthProviderescucha cambios de autenticacion- el token se usa para identificar el usuario ante el backend
Permisos
- la membresia activa aporta
roleId - el frontend consulta y cachea permisos del rol
- guards y helpers resuelven si una accion esta permitida
Tiempo real
El frontend usa listeners de Firestore para reaccionar a:
- cambios en la membresia activa
- cambios en permisos del rol activo
Con eso la UI puede corregirse sin depender de recarga manual.
PWA y notificaciones
El repo incluye soporte para:
- service worker
- cache de assets
- navegacion SPA
- eventos
push - click en notificaciones
Las push web se habilitan solo cuando se cumplen condiciones de soporte, permisos y configuracion.
Integraciones cliente importantes
- Firebase Auth
- Firestore
- Firebase Storage
- Firebase Messaging
- Google Maps
Limitaciones actuales
- no hay suite de tests automatizados configurada
- mucha integridad del dominio depende del backend
- la documentacion debe actualizarse cuando cambian rutas, permisos o flujos criticos