Des frontières claires et une évolution progressive
Flux d’une requête
Nginx sert les assets publics et transmet uniquement index.php à PHP-FPM. Laravel applique la langue, la politique d’indexation et les analytics avant d’appeler des contrôleurs légers. Des repositories et services isolent contenus, médias, documentation et agrégations.
Décisions principales
Le rendu serveur comme base
Blade produit un contenu complet sans JavaScript. Les onglets asynchrones, l’audio et les démonstrations sont des améliorations progressives : une erreur côté client ne supprime ni le contenu essentiel ni la navigation.
Des données structurées sans duplication
Projets, compétences, centres d’intérêt et CV restent dans la base de données. Le contenu narratif est versionné et les références sont résolues par des slugs autorisés.
Des opérations réversibles
Les uploads et modifications utilisent des transactions. Les médias orphelins passent par une quarantaine avec manifeste avant suppression. Les déploiements et migrations incluent smoke tests et rollback.
Confidentialité et sécurité par défaut
Les analytics stockent des agrégats, pas des événements personnels. Les routes admin utilisent rôles et policies ; les documents publics reposent sur une allowlist et un Markdown sans HTML brut ni liens dangereux.
Exemple de configuration imposée par le renderer :
new Environment([
'html_input' => 'strip',
'allow_unsafe_links' => false,
]);
Consultez les Études de cas pour voir ces choix en pratique.