Web corporativa de Elm St. (productora audiovisual), ya estabilizada en Netlify y mantenida con foco en calidad técnica.
- Estado: estabilizado en Netlify; mantenimiento por iteraciones técnicas puntuales.
- Hosting activo: Netlify.
- Dominio de operación:
elmst.ibaifernandez.com. - Git flow activo:
mainprotegida + ramas cortascodex/*con PR y merge manual. - Indexación externa: Google Search Console y Bing Webmaster Tools activos; sitemap productivo enviado el
2026-03-23.
- PRD
- Reglas IA
- Arquitectura
- Roadmap
- Backlog
- Guía de agentes
- Estrategia i18n
- Changelog
- Runbook de alertas
- Runbook de indexación
- QA Desktop CSV
- QA Mobile CSV
- Páginas ES:
index.html,nosotros.html,portafolio.html,contacto.html,dossier-tecnico.html,404.html. - Rutas EN:
en/index.html,en/about.html,en/portfolio.html,en/contact.html. - Dossier técnico:
dossier-tecnico.html,en/technical-dossier.html. - Navegación principal: incluye CTA visible a "Dossier" (ES/EN) con estilo diferenciado.
- Estilos:
css/ - Scripts:
js/,rs-plugin/ - Activos:
images/,fonts/,dist/ - Formulario: Netlify Function
/.netlify/functions/submit-contact(persistencia en logs de función, sin backend PHP) - Selector de idioma: boton flotante inferior izquierdo (ES/EN), con fallback en navegacion legacy.
- Documentación operativa:
docs/
netlify.toml_redirects_headersindex.html(entrada principal)404.html(fallback de Netlify)netlify/functions/runtime-config.js,netlify/functions/verify-turnstile.jsynetlify/functions/submit-contact.js(runtime config + captcha + submit serverless)performance-budgets.json+ scripts de budgets/reporte técnico por release
quality:ci: en verde.- Checks en verde: lint (HTML/JS/CSS), netlify config, links/mixed-content, E2E, a11y (axe), visual regression (ES), Lighthouse (ES+EN).
- Umbrales Lighthouse activos: Performance >= 90, Accessibility >= 95, SEO >= 95, Best Practices >= 95.
- Budgets por ruta: activos y validados por
npm run test:budgets. - Reporte técnico versionado más reciente:
docs/reports/releases/2026-03-12.md.
- Archivo canónico:
llms.txten la raíz del proyecto. - Compatibilidad:
LLM.txtse mantiene y redirige allms.txten Netlify.
El proyecto actual es estático y puede servirse localmente con un servidor HTTP simple.
Ejemplo:
python3 -m http.server 8080Luego abre http://localhost:8080.
Instalación:
nvm use
npm installRequisito de runtime:
- Node
20(ver.nvmrc; CI tambien usa Node 20).
Comandos principales:
npm run test:lint
npm run test:netlify
npm run test:links
npm run test:e2e
npm run test:a11y
npm run test:visual
npm run test:lighthouse
npm run test:budgets
npm run report:release
npm run quality:ciNotas:
test:visualrequiere snapshots base; para generarlos:npm run test:visual:update.- El workflow de CI está en
.github/workflows/quality-gate.yml, bloquea con fallo en cualquier check y admite disparo manual (workflow_dispatch). - Además corre semanalmente por
schedule(lunes 13:00 UTC) sobre la rama por defecto del repositorio (main). - Ejecución manual por CLI:
gh workflow run "Quality Gate" --ref <rama>. LHCI_GITHUB_APP_TOKENes opcional; si existe en GitHub Secrets, Lighthouse puede publicar anotaciones más completas en PRs.- El check de enlaces externos usa
scripts/external-link-ignore.jsonpara URLs legacy o dominios aún no publicados. - La suite axe en
test:a11yya no excluyecolor-contrast; los contrastes críticos se corrigen en CSS manteniendo freeze visual/copy. - La QA manual de marca/tono y de experiencia en desktop/mobile se registra en
docs/qa/qa-desktop.csvydocs/qa/qa-mobile.csv.
El formulario funciona con endpoint serverless propio + honeypot. Si activas captcha invisible:
- Define en Netlify:
TURNSTILE_SITE_KEYTURNSTILE_SECRET_KEY
- Redeploy del sitio.
Con ambas variables presentes:
- El frontend solicita el site key vía
/.netlify/functions/runtime-config. js/main.jsejecuta Turnstile invisible./.netlify/functions/submit-contactvalida token en servidor antes de aceptar el mensaje.
Persistencia/envío:
- Guarda el mensaje en logs de la Netlify Function (sin exponer secretos en frontend).
- Opcional: envío de email con Resend si defines
RESEND_API_KEYyCONTACT_TO_EMAIL(CONTACT_FROM_EMAILopcional).
Frontend error monitoring está integrado de forma opcional y sin cambio visual/copy.
- Define en Netlify:
SENTRY_DSNSENTRY_ENVIRONMENT(ejemplo:production)SENTRY_RELEASE(opcional)
- Redeploy del sitio.
Con variables presentes:
- El frontend solicita
sentryDsn,sentryEnvironment,sentryReleasevía/.netlify/functions/runtime-config. js/main.jscarga SDK de Sentry en runtime (js.sentry-cdn.com) y reporta errores JS.SENTRY_ENVIRONMENTse normaliza automáticamente a minúsculas en runtime para mantener filtros consistentes (production).- CSP en
_headerspermite dominios de carga/ingesta de Sentry.
Uptime externo:
- Monitor HTTP activo en UptimeRobot sobre
https://elmst.ibaifernandez.com.
Seguir el orden de prioridades definido en docs/BACKLOG.md, manteniendo main limpia y usando ramas cortas con PR para cualquier cambio futuro.