Bonjour, je suis

Nicolas Rodriguez

Développeur PHP/Symfony

À propos de moi

Développeur PHP / Symfony autodidacte, je conçois des applications web métier sur mesure : back-offices, outils de gestion, e-commerce, formulaires métier et intégrations d'API.

J'ai commencé à coder par curiosité en 2020, puis je me suis formé sérieusement à partir de 2023. Aujourd'hui, je développe des projets complets en Symfony et j'élargis mon champ d'action vers l'automatisation avec n8n et l'intégration d'IA pour répondre à des problématiques métier complexes. Celles où un workflow intelligent fait gagner des heures, voire transforme un processus entier.

Je travaille en tant qu'entreprise individuelle sur des projets variés, et je suis également ouvert aux opportunités en CDI au sein d'une équipe partageant ce goût pour les solutions concrètes et bien construites.

Curieux, rigoureux et persévérant, j'aime comprendre ce que je fais, améliorer mes pratiques et construire des solutions simples pour des besoins réels.

Contactez-moi

Mes Compétences

Front-end
HTML CSS JavaScript Boostrap TWIG Tailwind Chart.js
Back-end
PHP Symfony MySQL Doctrine
Outils
Git GitHub Docker Claude Composer Gitlab VPS linux

Mes Projets

Portfolio

Portfolio

Application Symfony 8 pour présenter un portfolio développeur avec une vitrine publique, un formulaire de contact et une interface d'administration sécurisée. Présentation Ce projet permet de : Afficher une page portfolio : hero, à propos, compétences, projets, contact Gérer dynamiquement les projets et le profil depuis un back-office admin Envoyer les messages du formulaire de contact avec Symfony Mailer Stocker les données avec Doctrine, SQLite par défaut en local Fonctionnalités Côté public Page d'accueil unique avec les sections principales du portfolio Affichage des projets actifs, ordonnés et avec descriptions en Markdown Affichage du profil : texte, compétences, photo et CV Formulaire de contact serveur avec envoi d'email Côté administration Authentification admin via /admin/login Tableau de bord admin CRUD projets : création, édition, suppression Descriptions de projets en Markdown : titres, listes, liens, code, gras, italique Gestion du statut actif/inactif des projets Masquage automatique des projets inactifs sur le site public Section dédiée aux projets inactifs avec réactivation en un clic Réordonnancement des projets Upload, suppression et réorganisation des images projets Édition du profil : à propos, compétences frontend/backend/outils Upload ou remplacement de la photo de profil Upload ou remplacement du CV PDF Nettoyage automatique des anciens fichiers remplacés Commande console pour mettre à jour les credentials admin : email et mot de passe Sécurité Accès /admin réservé au rôle ROLE_ADMIN Protection CSRF sur la suppression des projets Protection CSRF sur la bascule actif/inactif Authentification avec Symfony Security

Gestion Trièves Connect

Gestion Trièves Connect

Application Symfony 7.1 de gestion d'inventaire et d'étiquetage pour la boutique Trièves Connect, avec lecture de codes-barres, génération d'étiquettes imprimables et export Excel. Présentation Ce projet permet de : Scanner les codes-barres des produits via une douchette pour enregistrer prix et quantité. Générer et imprimer des étiquettes produits. Réaliser un inventaire par scan des articles en stock. Exporter le catalogue complet au format Excel. Fonctionnalités Étiquetage Scan de codes-barres via douchette pour alimenter la liste d'étiquetage. Génération et impression des étiquettes produits. Inventaire Scan des produits enregistrés pour saisir les quantités en stock. Produits & Services Ajout, édition et listing des produits et services. Gestion des catégories de produits. Export du catalogue complet au format Excel. Clients & Crédits d'impression Gestion des clients : ajout, édition, suppression. Suivi du solde de crédits d'impression par client. Ajout ou débit de crédits depuis la fiche client. Impression d'une carte de crédits d'impression au format étiquette. Décompte automatique des crédits lors d'une impression. Authentification Accès sécurisé via Symfony Security. Sauvegarde temporaire en session des listes d'étiquetage et d'inventaire (effacées à la fermeture du navigateur).

Mykanban

Mykanban

Application kanban, pensée pour un usage individuel quotidien. Un seul board, colonnes configurables, tâches avec tags / importance / urgence automatique, drag & drop, et synchronisation persistante en base de données. Stack technique Backend : PHP 8.2+, Symfony 7.4, Doctrine ORM 3 API : API Platform 4 (JSON-LD / OpenAPI) exposée sous /api/v1 Base de données : MySQL 8.x (installation locale / VPS — pas de Docker) Frontend : Twig, AssetMapper + Importmap, Stimulus, Symfony UX Turbo, Tailwind CSS (via symfonycasts/tailwind-bundle, sans Node.js) Auth : Symfony Security (form_login + remember_me 15j, CSRF) + JWT pour l'API Tests : PHPUnit 13 Qualité : GrumPHP + PHP Parallel Lint Fonctionnalités Board & tâches 1 seul board, colonnes configurables (statuts personnalisables, réordonnables) Tâches avec tags obligatoires (multi-sélection, filtre AND), importance (1–5), urgence automatique selon le temps écoulé jusqu'à la deadline Définition de la deadline : durée (1–9) + unité (jour/mois) ou date/heure directe Tri : manuel (drag & drop) ou automatique (smart, urgence auto, importance, deadline) Drag & drop desktop sur le board ; sur mobile (< lg ou tactile < 1280px), boutons ← / → sur les cartes pour changer de colonne Sur mobile : une seule colonne affichée à la fois, navigation par swipe horizontal Cartes teintées par un dégradé basé sur la couleur de leur premier tag Badge Urgent affiché uniquement quand l'urgence automatique atteint 4 ou 5

Kdos-Graphie

Kdos-Graphie

Boutique e-commerce Symfony 8 dédiée aux créations graphiques personnalisées, avec une vitrine publique, un panier, un tunnel de commande, et une interface d'administration complète pour gérer le catalogue et les commandes. Présentation Ce projet permet de : Afficher un catalogue de produits organisés par catégories avec images. Gérer un panier d'achat en session avec gestion des personnalisations. Traiter les commandes via un formulaire de commande avec emails transactionnels. Envoyer les messages du formulaire de contact via Symfony Mailer, protégé par reCAPTCHA v3. Gérer les comptes utilisateurs : inscription, connexion, récupération de mot de passe. Piloter tout le contenu depuis un back-office admin sécurisé. Fonctionnalités Côté boutique Page d'accueil avec mise en avant des produits. Catalogue produits filtré par catégorie. Panier d'achat en session avec fichiers de personnalisation. Tunnel de commande : formulaire client, récapitulatif, email de confirmation. Formulaire de contact avec envoi d'email et protection reCAPTCHA v3. Inscription, connexion et récupération de mot de passe par email. Côté administration Authentification admin : /admin/login. Tableau de bord admin. CRUD produits : création, édition, suppression, upload d'images. CRUD catégories : création, édition, suppression, réordonnancement. Gestion des commandes : suivi du statut, envoi de rappel de paiement, lien de paiement, archivage. Notification admin asynchrone à la réception d'une commande payée. Paramètres du site (SiteSetting). Commande console pour initialiser le compte administrateur. Sécurité Accès /admin réservé au rôle ROLE_ADMIN. Protection CSRF sur les actions sensibles. reCAPTCHA v3 sur le formulaire de contact. Authentification Symfony Security. Récupération de mot de passe via token signé (symfonycasts/reset-password-bundle).

StoryMaker

StoryMaker

Application Symfony 7.2 de génération d'histoires personnalisées pour enfants. L'utilisateur remplit un formulaire (âge, prénom, contexte, longueur, style de narration, langue) ; StoryMaker génère le texte puis la version audio via OpenAI, et expose un téléchargement ZIP regroupant les deux fichiers. Présentation Ce projet permet de : Saisir les paramètres d'une histoire via un formulaire (âge, prénom, contexte, longueur, style, langue). Générer une histoire en texte via OpenAI (modèle gpt-4-turbo par défaut). Générer la version audio TTS via OpenAI (modèle tts-1 par défaut). Exécuter ces appels en arrière-plan via Symfony Messenger pour ne pas bloquer le navigateur. Suivre le statut de génération sans recharger la page (Turbo + endpoint dédié). Télécharger l'histoire finalisée (texte + audio) sous forme de ZIP. Nettoyer automatiquement les anciennes histoires et fichiers audio générés. Fonctionnalités Côté utilisateur Page d'accueil unique avec le formulaire de génération d'histoire. Validation des paramètres (âge positif ≤ 18, longueur du nom, contexte, choix de style, langue). Soumission qui place un StoryMessage en file Messenger. Mise à jour automatique de l'UI quand l'histoire passe à isDone = true. Téléchargement de l'histoire complète au format ZIP : story.txt + audio.mp3. Support multilingue : français et anglais. Trois styles de narration : journal intime, troisième personne, lettre. Trois longueurs : courte, moyenne, longue. Côté technique Flux principal : Controller → Service → Repository/Entity. Pipeline de génération asynchrone : StoryMessage dispatché par HomeController. StoryMessageHandler orchestre TextGenerationService puis AudioGenerationService. Statut de la Story mis à jour à chaque étape (status, isDone). ApiCallLock + ApiCallLockRepository : verrou applicatif pour limiter les appels concurrents à OpenAI. StoryCleanupService : nettoyage périodique des anciennes histoires et fichiers audio. ZipService : assemblage texte + audio pour le téléchargement. Sécurité Pas d'authentification utilisateur active à ce stade (symfony/security-bundle installé mais non utilisé). La clé API OpenAI doit rester dans .env.local, jamais commitée. Les fichiers audio générés (public/var/audio/) sont publics : penser à la confidentialité si le projet est exposé publiquement.

On en discute autour d'un Café ?

Contact

Stack technique