Arquitectura del proyecto
Estructura del repositorio
wearlab/
├── frontend/ ← SPA React + Vite + TypeScript
│ ├── Dockerfile ← multi-stage: dev / build / prod
│ ├── public/
│ └── src/
│ ├── components/ ← componentes UI reutilizables
│ ├── features/ ← módulos por funcionalidad de negocio
│ ├── hooks/ ← hooks globales
│ ├── lib/ ← cliente HTTP, utilidades
│ ├── pages/ ← componentes de nivel de ruta
│ ├── router/ ← configuración de React Router
│ ├── store/ ← estado global UI
│ ├── styles/ ← CSS global
│ └── types/ ← tipos TypeScript compartidos
│
├── backend/ ← API REST Symfony 7 + PHP 8.4
│ ├── Dockerfile ← multi-stage: dev / prod
│ ├── bin/console
│ ├── config/
│ │ └── packages/
│ ├── migrations/
│ ├── public/index.php
│ └── src/
│ ├── Controller/
│ ├── Application/
│ ├── Domain/
│ ├── Infrastructure/
│ └── Shared/
│
├── docker/
│ └── nginx/
│ ├── nginx.dev.conf ← proxy dev: /api → php-fpm, /* → Vite HMR
│ └── nginx.prod.conf ← producción: HTTPS, SPA fallback
│
├── docs/
│ └── ARCHITECTURE.md
│
├── docker-compose.yml ← desarrollo local
├── .env
├── .gitignore
└── README.md
Cómo fluye una petición HTTP
En desarrollo
Browser
→ http://localhost:8080 (Nginx puerto 80)
├── /api/* → FastCGI → backend:9000 (PHP-FPM) → PostgreSQL / Redis
└── /* → proxy → frontend:5173 (Vite HMR con WebSocket)
En producción
Browser
→ https://tudominio.com (Nginx puerto 443, TLS)
├── /api/* → FastCGI → backend:9000 (PHP-FPM) → PostgreSQL / Redis
└── /* → archivos estáticos compilados por Vite (/dist)
Servicios Docker
| Servicio |
Imagen / Build |
Puerto host |
Descripción |
| frontend |
./frontend (target: dev) |
5173 |
Vite dev server con HMR |
| backend |
./backend (target: dev) |
— |
PHP-FPM Symfony |
| nginx |
nginx:1.27-alpine |
8080 |
Reverse proxy |
| postgres |
postgres:16-alpine |
5432 |
Base de datos |
| redis |
redis:7-alpine |
6379 |
Caché y sesiones |
Secretos y variables de entorno
| Dónde |
Qué contiene |
¿Se commitea? |
.env (repo raíz) |
PostgreSQL, Redis |
Sí |
backend/.env |
Symfony, DATABASE_URL, REDIS_URL |
Sí (valores dev) |
.env.local |
Override local del desarrollador |
No (.gitignore) |
Branches (recomendado)
main ── producción ── protegido ── requiere PR + CI verde
develop ── staging ── protegido ── requiere PR + CI verde
feature/* ── desde develop, merged via PR
fix/* ── desde develop, merged via PR
hotfix/* ── desde main, merged a main + develop