Límites claros y evolución incremental
Flujo de una petición
Nginx sirve los assets públicos y envía únicamente index.php a PHP-FPM. Laravel aplica idioma, política de indexación y analytics antes de invocar controladores ligeros. Repositorios y servicios aíslan contenidos, medios, documentación y agregaciones.
Decisiones principales
Renderizado en servidor como base
Blade produce contenido completo sin JavaScript. Las pestañas asíncronas, el audio y las demos son mejoras progresivas: un error del cliente no elimina contenido ni navegación esenciales.
Datos estructurados sin duplicación
Proyectos, competencias, intereses y CV permanecen en la base de datos. El contenido narrativo está versionado y las referencias se resuelven mediante slugs permitidos.
Operaciones reversibles
Las cargas y modificaciones utilizan transacciones. Los medios huérfanos pasan por cuarentena con manifiesto antes de borrarse. Los despliegues y migraciones incluyen smoke tests y rollback.
Privacidad y seguridad por defecto
Los analytics guardan agregados, no eventos personales. Las rutas admin utilizan roles y policies; los documentos públicos usan una allowlist y Markdown sin HTML sin procesar ni enlaces inseguros.
Ejemplo de la configuración aplicada por el renderer:
new Environment([
'html_input' => 'strip',
'allow_unsafe_links' => false,
]);
Consulta los Casos de estudio para ver estas decisiones aplicadas.