Arquitectura del Frontend
El frontend de Floutic está construido con Astro, React, Tailwind CSS y shadcn/ui, siguiendo una arquitectura moderna y escalable.
Stack Tecnológico
Framework Principal
- Astro: Framework SSR con Islands Architecture
- React: Para componentes interactivos
- TypeScript: Tipado estático completo
Estilos y UI
- Tailwind CSS: Framework de utilidades CSS
- shadcn/ui: Componentes accesibles y personalizables
- Framer Motion: Animaciones y transiciones
Gestión de Estado
- Zustand: Store global para autenticación y estado de la aplicación
- React Hooks: Hooks personalizados para lógica reutilizable
Cliente API
- Axios: Cliente HTTP con interceptores
- Detección automática de URL: Según hostname (localhost/IP local)
- Refresh automático de tokens: Renovación transparente de JWT
Estructura del Proyecto
frontend/
├── src/
│ ├── components/
│ │ ├── ui/ # Componentes shadcn/ui
│ │ ├── shared/ # Componentes reutilizables
│ │ ├── features/ # Componentes por funcionalidad
│ │ └── features/__tests__/ # Tests unitarios
│ ├── layouts/
│ │ └── Layout.astro # Layout principal
│ ├── pages/ # Rutas Astro (file-based routing)
│ ├── lib/
│ │ ├── api/ # Cliente API y endpoints
│ │ ├── stores/ # Zustand stores
│ │ ├── utils/ # Utilidades
│ │ ├── types/ # TypeScript types
│ │ ├── hooks/ # Hooks personalizados
│ │ └── auth/ # Autenticación segura
│ ├── styles/
│ │ └── global.css # Estilos globales
│ └── middleware/ # Middleware de autenticación
├── tests/ # Tests E2E con Playwright
├── playwright.config.ts # Configuración Playwright
└── vitest.config.ts # Configuración Vitest
Arquitectura de Componentes
Componentes Base (src/components/shared/)
- Header: Navegación principal con autenticación
- Footer: Enlaces legales e información
- Layout: Estructura base de páginas
- CookieBanner: Banner de cookies RGPD
- EmptyState: Estados vacíos con mensajes
- ErrorBoundary: Manejo de errores React
- Loading: Indicadores de carga
- Toast: Notificaciones toast
- NotificationCenter: Centro de notificaciones en tiempo real
Componentes de UI (src/components/ui/)
Componentes de shadcn/ui personalizados:
- Button, Input, Card, Badge, Select, Textarea, Label, Avatar, Dialog, DropdownMenu, etc.
Componentes de Features (src/components/features/)
Organizados por funcionalidad:
- Autenticación: LoginForm, RegisterForm, LoginFormSecure
- Proyectos: ProjectForm, ProjectDetail, MilestoneManager
- Expertos: ExpertCardSEO, ExpertSearch, ExpertPublicProfileSEO
- Dashboards: DashboardEmpresa, DashboardExperto, DashboardAdmin
- Perfiles: ProfileFormExperto, ProfileFormEmpresa, FiscalDataModal
- Chat: ChatBox, ProjectChat
- Reseñas: ReviewForm, ReviewCard, ReviewsList
Sistema de Rutas
Astro utiliza file-based routing:
/- Landing page/login- Iniciar sesión/registro- Registro de usuarios/marketplace- Marketplace de proyectos/expertos- Búsqueda de expertos/dashboard/empresa- Dashboard empresa/dashboard/experto- Dashboard experto/dashboard/admin- Panel administración/proyecto/[id]- Detalle de proyecto/perfil/experto/[id]- Perfil público experto/perfil/empresa/[id]- Perfil público empresa
Cliente API
Configuración Base (src/lib/api/client.ts)
- Detección automática de URL del backend
- Interceptores para autenticación JWT
- Refresh automático de tokens
- Retry logic para requests fallidos
- Manejo global de errores
Módulos API Específicos
auth.ts- Autenticación y autorizaciónchat.ts- Servicio de chatexperts.ts- Gestión de expertosprofiles.ts- Gestión de perfilesprojects.ts- Gestión de proyectosreviews.ts- Gestión de reseñasmilestones.ts- Gestión de hitosadmin.ts- Funciones administrativasnotifications.ts- Sistema de notificaciones
Autenticación Segura
Sistema de Autenticación (src/lib/auth/secureAuth.ts)
- HttpOnly cookies: Tokens almacenados de forma segura
- CSRF protection: Tokens CSRF en cookies
- Session ID único: Por ventana para aislar sesiones
- Refresh automático: Renovación transparente de tokens
- Logout por inactividad: Configurable por rol
Hooks de Autenticación
useSecureAuth: Hook principal para autenticación segurauseIdleTimeout: Hook para timeout por inactividad
Gestión de Estado
Zustand Stores (src/lib/stores/)
auth.ts: Estado de autenticación global- Usuario actual
- Estado de autenticación
- Métodos de login/logout
Middleware
Middleware de Astro (src/middleware.ts)
- Verificación de autenticación
- Redirección según roles
- Protección de rutas privadas
Testing
Tests E2E (Playwright)
- 8 suites críticas pasando
- Tests de autenticación, navegación, formularios
- Tests de seguridad (31 tests, 100% pasando)
Tests Unitarios (Vitest)
- 507 tests pasando (100%)
- Cobertura completa de componentes críticos
- Tests de hooks y utilidades
Optimizaciones
Performance
- SSR + Islands: Astro renderiza en servidor, React solo donde es necesario
- Code splitting: Carga diferida de componentes
- Lazy loading: Imágenes y componentes pesados
SEO
- Meta tags dinámicos
- Schema.org markup
- Perfiles públicos optimizados
- Sitemap y robots.txt
Accesibilidad
- WCAG AA compliance
- Navegación por teclado
- Screen readers support
- Contraste adecuado
Más Información
- Componentes - Componentes principales
- Dashboards - Dashboards de usuario
- Autenticación - Sistema de autenticación
- Testing - Guía de testing