← Tous les projets // étude de cas · 2025

Portfolio développeur Symfony

Symfony PHP PostgreSQL Doctrine ORM Docker Git PHPUnit Bootstrap Twig PHPStan PHP-CS-Fixer Railway
Capture de Portfolio développeur Symfony

01Le besoin

Un portfolio qui parle à deux publics à la fois : les recruteurs, qui veulent voir des projets et du raisonnement, et les commerçants, qui cherchent un site et un prix clair.

Et une contrainte personnelle : pouvoir tout mettre à jour (projets, études de cas, offres, profil) sans toucher au code ni redéployer.

02Mes choix techniques

  • Symfony 7.3 / PHP 8.4, PostgreSQL et Twig : des pages rendues côté serveur, rapides et bien référencées.
  • Un back-office développé à la main plutôt qu'un générateur : profil, compétences, projets avec étude de cas et galerie, diplômes, offres de services, messages reçus et statistiques de visites.
  • Formulaire de contact enregistré en base et notifié par e-mail, avec « répondre à » sur l'adresse du visiteur. Envoi synchrone : aucun worker à faire tourner sur l'hébergement.
  • Statistiques de visites sans cookie ni adresse IP stockée : pas de bandeau de consentement.
  • SEO : sitemap généré depuis la base (les pages projet s'y ajoutent seules), robots.txt, URL canonique, image de partage.

03La difficulté

Faire évoluer le site sans écraser ce que j'ai déjà saisi en production. Le contenu vit en base et je le modifie depuis l'admin ; mais quand je change un texte par défaut dans le code, il faut aussi le mettre à jour en ligne. Une migration qui remplace tout effacerait mes retouches.

J'ai donc écrit des migrations qui ne modifient un texte que s'il est encore identique à sa version d'origine : un contenu retouché dans l'admin n'est jamais écrasé.

En relisant la sécurité, j'ai aussi trouvé que l'anti-spam du formulaire de contact ne servait à rien : le champ piège et le délai minimal existaient, mais rien ne les vérifiait. Ils bloquent maintenant les robots, et la page de connexion limite les tentatives pour empêcher la force brute.

04Le résultat

  • En ligne sur damienchauveau-dev.fr, indexé dans Google Search Console.
  • CI GitHub Actions à chaque pull request : PHPStan, php-cs-fixer et tests PHPUnit (unitaires, intégration, fonctionnels).

Projet suivant

AltaPro 65 →

Poste, mission ou site à créer : parlons-en.