Files
mercadodevida/work/artifacts/F-141/architect.md
2026-08-21 22:02:01 +02:00

43 lines
2.1 KiB
Markdown

# F-141 — Arquitectura del fix de build Next.js
## Diagnóstico
Hay tres aplicaciones Next independientes en el monorepo:
- `project/apps/admin` — panel admin.
- `project/frontend` — customer frontend, con `/categories` como Server Component async.
- `project/storefront` — storefront SEO.
`project/frontend` no tenía `turbopack.root` ni `outputFileTracingRoot`. Además, `/categories` declara ISR (`revalidate = 3600`) y ejecuta `fetchCategories()` durante el prerender. Cuando `NEXT_PUBLIC_API_URL` apunta a `192.168.18.93:3000` y el backend no está levantado, el build falla con `ECONNREFUSED`.
El error posterior que intenta leer:
```text
project/frontend/.next/prerender-manifest.json
```
es una consecuencia de que el build del frontend aborta antes de generar su manifest, no un archivo que deba copiarse desde otra aplicación.
## Diseño
1. Fijar la raíz de Turbopack a cada aplicación:
- `project/frontend/next.config.ts`: `turbopack.root = frontendRoot`.
- Mantener la configuración equivalente ya aplicada en admin y storefront.
2. Fijar `outputFileTracingRoot` a la raíz de cada app para que Next no recorra el workspace ni confunda `.next` de otra aplicación.
3. Convertir `/categories` a renderizado dinámico (`dynamic = 'force-dynamic'`) porque sus datos dependen del API vivo. Así el build no hace llamadas de negocio al backend; el fetch sucede cuando se atiende la petición.
4. Mantener la fuente de verdad y el contrato API intactos. No introducir mocks, datos paralelos ni fallback de categorías vacío.
## No incluido
- No cambiar las URLs del API.
- No ocultar errores de runtime.
- No modificar `storefront` más allá de la configuración necesaria.
- No transformar todos los reportes o dashboards; eso pertenece a F-142.
## Verificación
- `cd project/frontend && rm -rf .next && NEXT_PUBLIC_API_URL=http://192.168.18.93:3000 npm run build` debe terminar aunque el backend no esté disponible.
- La salida no debe seleccionar `project/package-lock.json` ni mostrar el warning de lockfiles.
- `project/frontend/.next/prerender-manifest.json` debe existir después del build.
- Admin, backend y storefront no deben perder su build.