Documentación del Frontend
Este documento describe la arquitectura, las rutas, los estados, los hooks y los componentes principales del frontend React + TypeScript ubicado en frontend/.
1. Visión general
El frontend está construido con:
- React 19
- TypeScript
- Vite
- React Router DOM
- Zustand para estado global
- @tanstack/react-query para consultas asíncronas
- Tailwind CSS para estilos
- Arquitectura basada en características (
features)
La carpeta principal de la aplicación es frontend/src.
2. Estructura de carpetas clave
src/main.tsx- punto de entrada, configuración de router y React Querysrc/App.tsx- rutas principales de la aplicaciónsrc/store- estado global con Zustandsrc/api- cliente y funciones de API centralizadassrc/hooks- hooks reutilizables del frontendsrc/features- features organizadas por dominiosrc/utils- utilidades compartidassrc/types.ts- tipos globales de la aplicación
3. Rutas principales
src/App.tsx define las rutas:
/→RoomSetup/visualizer→RoomVisualizer/settings→SettingsPage*→ redirección a/
4. Estado global (Zustand)
src/store/useAppStore.ts almacena:
previewImage- URL de la imagen cargadauploadMessage- estado de mensaje de subidaopenProductId- producto seleccionado enRoomVisualizerviewMode- vista actual de productos en el visualizador (gridolist)
Funciones disponibles:
setPreviewImagesetUploadMessagesetOpenProductIdsetViewModereset
5. Cliente API centralizado
src/api/client.ts incluye:
DEV_API_BASEyAPI_BASEpara la URL del backendgetApiBase/buildApiUrlpara construir endpointsfetchClientConfigpara obtener configuración de clienteuploadRoomImagepara subir imágenes al servidorstartSessionpara iniciar una sesión remota
Esta capa permite mantener la URL del backend en un solo lugar y soportar un token de desarrollo automático.
6. Hooks compartidos
src/hooks/useUploadImage.ts
- Maneja la subida de imágenes al backend
- Controla
isUploadingyuploadError - Envuelve
uploadRoomImagedel cliente API
7. Tipos globales
src/types.ts declara tipos comunes como:
ClientDataRouteItemProduct
El tipo Product se usa en el visualizador para productos de catálogo.
8. Feature: Room Setup
Archivos
src/features/roomSetup/RoomSetup.tsxsrc/features/roomSetup/roomSetupHooks.tssrc/features/roomSetup/RoomSetupComponents.tsxsrc/data/roomSetupData.ts
Comportamiento
RoomSetup es la página principal donde el usuario puede:
- subir una imagen arrastrando o seleccionando archivo
- ver una vista previa de la imagen
- iniciar la navegación hacia el visualizador
- ver habitaciones de demostración filtrables
useRoomSetup
Este hook abstrae toda la lógica de:
- drag & drop
- selección de archivos
- subida de imagen
- gestión de estados de carga
- navegación con
useNavigate
Componentes auxiliares
FilterButton- botón de filtrado por categoríaRoomCard- tarjeta de habitación de demostración
9. Feature: Room Visualizer
Archivos
src/features/roomVisualizer/RoomVisualizer.tsxsrc/features/roomVisualizer/roomVisualizerHooks.tssrc/features/roomVisualizer/roomVisualizerData.tssrc/features/roomVisualizer/ProductCards.tsx
Comportamiento
RoomVisualizer muestra:
- la imagen subida por el usuario
- controles de zoom y arrastre de la imagen
- lista / grid de productos para aplicar en la habitación
- selección de producto y detalles asociados
useRoomVisualizer
Extrae la lógica de visualización de productos:
- modo de vista (
grid/list) - búsqueda y filtros básicos
- producto seleccionado
- manejo de selección de producto
- agrupación en chunks para renderizar grillas
Datos de productos
roomVisualizerData.tscontiene el catálogo de productos estáticos usados en la vista.
Componentes
ProductGroupCard- renderiza un grupo de 3 productos en gridIndividualProductCard- renderiza un producto en modo lista
10. Feature: Settings
Archivo
src/features/settings/SettingsPage.tsx
Comportamiento
La página de configuración permite al usuario:
- definir la URL base de la API
- activar / desactivar la lista de rutas en el viewer
- definir token de desarrollo automático
Soporte de almacenamiento
src/utils/settings.ts gestiona:
- carga de
localStorage - guardado de configuración
- valores por defecto
11. Componentes comunes
src/components/ui/LoadingScreen.tsx- pantalla de carga reutilizable
12. Flujo principal de la app
- Usuario entra en
/ - Sube una imagen en
RoomSetup - Se crea una vista previa y se almacena en Zustand
- Se navega a
/visualizer RoomVisualizerusa la imagen y muestra productos- El usuario filtra, busca y selecciona productos
SettingsPagepermite ajustar la API y opciones de la app
13. Cómo ejecutar el frontend
Desde frontend/:
npm install
npm run dev
Construcción de producción:
npm run build
14. Posibles mejoras futuras
- mover
roomVisualizerProductsa una API real o servicio de datos - extraer más componentes presentacionales del visualizador
- usar React Query para cargar configuración del cliente en lugar de gestión manual
- añadir tests unitarios para hooks y componentes
- normalizar rutas y nombres de features
15. Observaciones adicionales
- La base API se controla desde
VITE_API_BASE_URLoDEV_API_BASEen desarrollo. - La aplicación usa
queryClientde React Query, aunque hoy solo se usa para potenciales fetches futuros. - El estado global es ligero y se usa principalmente para compartir imagen previa, modo de vista y selección de producto.