Portal corporativo bilingüe con seguridad y accesibilidad medidas
Reconstruí desde cero el portal de una generadora de energía, con 134 páginas en español e inglés sobre WordPress a medida, despliegue con reversión automática y un ethical hacking externo que cerró con 3 hallazgos de severidad baja.
Ficha del proyecto
- Rol
- Desarrollador full-stack y responsable técnico, de la extracción del diseño al paso a producción
- Periodo
- jul de 2026 a sept de 2026
- Enlaces públicos
- Portal en línea(se abre en otra pestaña)
134
páginas publicadas, 67 en español y 67 en inglés generadas desde una sola fuenteFuente: Acta de paso a producción, septiembre de 2026 3 bajos
hallazgos del ethical hacking externo, sin críticos, altos ni mediosFuente: Informe de la firma auditora externa, septiembre de 2026 96 de 99
controles de endurecimiento del servidor en verde; los 3 restantes dependían de tercerosFuente: Arnés de endurecimiento del proyecto, 2026 2.211
commits del portal en unas 8 semanas de trabajoFuente: Historial de git, julio a septiembre de 2026
El problema
El portal anterior eran cuatro instalaciones de WordPress independientes, una por idioma y dominio, alojadas en un tercero. El contenido estaba desactualizado, la versión en inglés no se mantenía y el sitio no cubría las obligaciones colombianas de transparencia (Ley 1712 de 2014) ni de accesibilidad (Resolución 1519 de 2020).
Mi rol
- Extraje el diseño de Figma y el contenido del sitio anterior con herramientas propias, y lo repliqué página por página.
- Construí el tema de bloques, dos plugins y el motor que genera las páginas en inglés.
- Escribí la provisión del servidor, el despliegue y el arnés de endurecimiento, y coordiné con infraestructura los certificados, el DNS y el firewall de aplicaciones.
- Llevé una auditoría de seguridad interna con más de 100 hallazgos hasta su cierre y acompañé el ethical hacking externo.
- Preparé el acta de paso a producción, con 9 casos de prueba y 35 evidencias, generada por código.
Restricciones
- El equipo de Comunicaciones edita el contenido sin un desarrollador y sin poder romper el diseño.
- Cumplimiento obligatorio de transparencia y de accesibilidad WCAG 2.2 AA para un sitio público.
- Infraestructura propia de la empresa, detrás de un firewall de aplicaciones corporativo.
- Fuentes y recursos autoalojados, sin servicios de terceros que recojan datos de los visitantes.
- Cero enlaces rotos en la migración, porque las direcciones antiguas tenían que seguir funcionando.
Decisiones
- 01
Git como única fuente de verdad
El administrador de WordPress solo edita contenido. La estructura de los bloques está bloqueada, y el menú y la tabla de rutas viven en el repositorio y se siembran con scripts idempotentes.
Descartado
- Configurar el sitio desde el panel de administración
- 02
Motor propio para la versión en inglés
Las 67 páginas en inglés se generan desde las españolas con un catálogo de traducción por página, así la estructura es idéntica y una guarda impide publicar una traducción a medias.
Descartado
- Un plugin de multilenguaje con páginas duplicadas a mano
- 03
Despliegue reproducible con reversión automática
Cada despliegue empaqueta un commit exacto con su checksum, corre validaciones, respalda la base de datos, cambia de versión de forma atómica y revierte solo si falla la verificación. Revirtió 4 veces en producción sin caída del servicio.
Descartado
- Subir archivos por FTP o editar en el servidor
- 04
Política de seguridad de contenido medida con navegador
La CSP se construyó recorriendo 137 rutas en dos anchos con un navegador real hasta llegar a cero violaciones, en lugar de adivinar qué recursos usa cada página.
Descartado
- Copiar una CSP genérica y relajarla cada vez que algo fallara
Arquitectura
Fuentes
- Diseño en FigmaExtraído por API, frame por frame
- Repositorio gitTema, plugins, rutas y menú
- Equipo de ComunicacionesEdita solo contenido
Entrega
- Despliegue verificadoChecksum, validaciones, respaldo y reversión
Servidor
- WordPress con tema de bloques propioPHP, 67 páginas por idioma
- Motor de inglésGenera las páginas en inglés
- MariaDBAccesible solo desde el servidor
Servicios
- CMS headlessTablas de comercialización, consultadas en el servidor
- Almacén de documentosCompatible con S3
Visitantes
- Público del portalEspañol e inglés, WCAG 2.2 AA
Cómo se mueven los datos
- Diseño en FigmahaciaRepositorio gitDiseño y tokens replicados
- Repositorio githaciaDespliegue verificadoCommit exacto
- Despliegue verificadohaciaWordPress con tema de bloques propioCambio atómico de versión
- Equipo de ComunicacioneshaciaWordPress con tema de bloques propioContenido
- WordPress con tema de bloques propiohaciaMariaDBContenido y configuración
- CMS headlesshaciaWordPress con tema de bloques propioDatos con caché y respaldo
- WordPress con tema de bloques propiohaciaMotor de inglésHTML en español
- Motor de ingléshaciaPúblico del portalPáginas en inglés
- WordPress con tema de bloques propiohaciaPúblico del portalPáginas en español
- Almacén de documentoshaciaPúblico del portalDocumentos normativos
Resultados
- El portal pasó a producción con acta firmada por las áreas funcionales y de tecnología, después de 9 casos de prueba ejecutados contra producción.
- Las 76 direcciones heredadas redirigen con 301 y no quedó ningún enlace roto.
- Comunicaciones publica y actualiza contenido sin depender de un desarrollador.
- El sitio se verificó en 27 anchos de pantalla, de 360 a 1.920 px, y los incumplimientos de accesibilidad quedaron en un registro con mediciones y su corrección.
Qué haría distinto
- Montaría el arnés de seguridad y la medición de la CSP desde la primera semana; buena parte del trabajo de cierre salió de controles que se podían automatizar antes.
- Pediría desde el inicio un entorno de pruebas con la misma red y el mismo firewall que producción, para no descubrir esas diferencias en la recta final.
Tecnologías
- WordPress
- PHP
- Python
- Bash
- MariaDB
- Directus
- WCAG 2.2
- Playwright
- nginx
- Linux