diff --git a/docs/plan-interfaz-web.md b/docs/plan-interfaz-web.md index c5b4f70..76cd43b 100644 --- a/docs/plan-interfaz-web.md +++ b/docs/plan-interfaz-web.md @@ -2,6 +2,17 @@ Este documento define el plan para añadir una interfaz web al sistema, manteniendo el bot/webhook existente como proceso independiente y compartiendo la misma base de datos SQLite (WAL). El objetivo es proporcionar al usuario un acceso seguro, rápido y cómodo a sus tareas, configuración y feeds de calendario, con especial atención a la seguridad y a la mínima fricción. +## Estado actual (2025-10-13) +- PR 1 (fundaciones de UI) integrado: tokens.css, base.css, AppShell, layout de /app y gating coherente a /login. +- Problema abierto en producción: los estilos globales no aparecen y el cliente muestra un error al cargar módulos de /_app. + - start.*.js responde 200, pero el fallo puede estar en chunks secundarios (/_app/immutable/chunks/*.js) o en caché desincronizada. +- Acciones inmediatas: + 1) Verificar desde fuera: GET /_app/version.json, /_app/immutable/entry/start*.js y, especialmente, los /_app/immutable/chunks/*.js referenciados por start.*.js (deben devolver 200 y Content-Type application/javascript, no HTML). + 2) Asegurar despliegue del build completo de SvelteKit (apps/web/build/index.js y apps/web/build/client) y que el proceso web arranca con cwd correcto. + 3) Proxy: enrutar y no interceptar /_app/*; evitar catch-all que devuelva HTML; respetar Content-Type; no cachear el HTML de la app (o purgar tras deploy). + 4) Mantener imports CSS globales en apps/web/src/routes/+layout.svelte (ya aplicado). +- Seguimiento: cuando /_app/* sirva correctamente los chunks, los estilos deberían aparecer sin cambios adicionales de código. + ## 1) Decisiones fijadas - Arquitectura: dos procesos (apps/bot y apps/web) ejecutándose en la misma app de CapRover, con un proxy interno en Bun (puerto 3000) que enruta /webhook y /metrics al bot (3007) y el resto a la web (3008). SvelteKit para la web (SSR, rutas de API, cookies). @@ -169,6 +180,10 @@ Notas: - Un solo contenedor con proxy interno en Bun: - /webhook y /metrics → bot (puerto interno 3007). - Resto de rutas → web (puerto interno 3008, SvelteKit adapter-node). + - Passthrough explícito de /_app/* hacia la web (sin reescrituras ni catch-all que devuelva HTML). + - Asegurar Content-Type correcto para /_app/**/*.js (application/javascript) y /_app/**/*.css (text/css); no añadir nosniff en assets externos al HTML. + - El build de SvelteKit debe desplegarse completo (build/index.js + build/client) y mantenerse coherente con el HTML servido para evitar hashes huérfanos. + - Evitar cachear el HTML de la app en el proxy/CDN (o purgar tras cada deploy); los assets /_app/immutable pueden cachearse largo con immutable. - CapRover debe exponer el puerto 3000 del contenedor (PORT). - WEBHOOK_URL debe apuntar a https:///webhook (mismo dominio). - Schedulers: