Portfolio
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
MySQL
Tailwind CSS
Vue.js