Portfolio

Début: 15 Jan 2023

Introduction

Ce projet est une application web de portfolio, pas un simple site vitrine : tout le contenu (projets, compétences, articles...) se gère depuis une interface d'administration, sans toucher au code. L'objectif était de construire une base réutilisable, que n'importe quel développeur puisse reprendre et configurer pour son propre portfolio.

Le projet s'articule autour d'un back-office EasyAdmin, qui pilote l'ensemble du contenu, et d'un front-office Symfony/Twig qui l'affiche.

Fonctionnalités clés

1. Back-office (EasyAdmin)

  • Gestion CRUD complète : projets, articles de blog, compétences et technologies.
  • Champs et actions personnalisés : templates Twig sur mesure pour les aperçus d'icônes (Symfony UX Icons), niveaux de compétence sous forme d'étoiles, actions conditionnelles (empêcher la suppression d'une catégorie encore liée à des technologies).
  • Filtres et recherche avancés : filtres multi-critères pour naviguer facilement parmi les données.
  • Gestion des médias : upload d'images (photos de projet, images d'articles) via VichUploaderBundle.
  • Génération d'articles par IA : rédaction assistée depuis le back-office, avec support multiprovider (OpenRouter, NVIDIA, Gemini, Claude, OpenAI).

2. Front-office

  • Design responsive : Tailwind CSS et DaisyUI, thèmes clair et sombre.
  • Composants interactifs : Vue.js pour l'affichage des compétences, sans rechargement de page.
  • Animations : librairie AOS pour les animations au scroll.
  • Rendu serveur : Twig pour un chargement initial rapide.

3. Qualité et DevOps

  • Environnement conteneurisé avec Docker, cohérent entre développement et production.
  • Qualité de code automatisée : phpcs, phpcsfixer, phpstan, phpmd, twigcsfixer, eslint.
  • Makefile et scripts pour les tâches courantes (lancer le projet, vider le cache, exécuter les tests...).

Architecture

Le back-office EasyAdmin pilote la gestion CRUD des projets, articles, compétences et technologies via des champs et actions personnalisés, et communique avec la même base de données que le front-office. Le front-office Symfony/Twig consomme ces données pour le rendu public, avec des composants Vue.js utilisés ponctuellement côté client pour les éléments dynamiques (affichage des compétences), le reste du rendu restant côté serveur. VichUploaderBundle gère les médias (images de projets et d'articles) des deux côtés.

Stack technique

Frontend

  • Twig, Stimulus, Vue.js
  • Tailwind CSS, DaisyUI
  • Librairie AOS pour les animations au scroll

Backend

  • Symfony 7
  • MySQL avec Doctrine ORM
  • EasyAdmin 4 pour l'administration
  • VichUploaderBundle pour les uploads
  • Intégrations multiprovider pour la génération d'articles par IA : OpenRouter, NVIDIA, Gemini, Claude, OpenAI

Infrastructure & DevOps

  • Docker pour un environnement conteneurisé
  • Makefile pour les tâches courantes
  • GrumPHP en hook pre-commit : phpcs, phpcsfixer, phpstan, phpmd, twigcsfixer, eslint

Défis techniques relevés

  • Contenu entièrement administrable : concevoir un pattern générique dans EasyAdmin, applicable aussi bien aux projets qu'aux articles de blog, pour créer et modifier ce contenu sans jamais retoucher le code, y compris les champs personnalisés (icônes, niveaux de compétence en étoiles, actions conditionnelles).
  • Génération d'articles par IA multiprovider : intégrer plusieurs providers (OpenRouter, NVIDIA, Gemini, Claude, OpenAI) derrière une génération d'article unique depuis le back-office, sans lier l'outil à un seul fournisseur.

Conclusion

Ce projet combine Symfony pour le backend, EasyAdmin pour l'administration et Vue.js/Tailwind pour le frontend, avec un back-office pensé pour être repris et configuré par un autre développeur sans toucher au code.

Technologies Utilisées

Docker Docker MySQL MySQL Symfony Symfony Tailwind CSS Tailwind CSS Vue.js Vue.js