[{"id":1,"slug":"devdoc","name":" DevDoc \u2014 plateforme de cours et agents IA","stack":"symfony \/ vuejs","summary":"\u003Cp\u003EUne plateforme de cours o\u00f9 la r\u00e9daction et la r\u00e9vision sont assist\u00e9es par des agents IA, sans jamais contourner les r\u00e8gles de la plateforme : les agents passent par des API authentifi\u00e9es, jamais directement par la base. Plus de 15 technologies couvertes, en cours structur\u00e9s, QCM et exercices. Symfony et MySQL comme source de v\u00e9rit\u00e9, interface Vue.js, recherche augment\u00e9e par un service Python et pgvector.\u003C\/p\u003E","bulletin":"\u003Cp\u003ELe projet DevDoc a r\u00e9cemment int\u00e9gr\u00e9 une architecture hybride hexagonale, facilitant la cr\u00e9ation de cours directement via les endpoints Symfony. Les derni\u00e8res mises \u00e0 jour ont \u00e9galement permis d\u2019optimiser les assets de construction et d\u2019am\u00e9liorer le template de base. Ces avanc\u00e9es renforcent la robustesse de la plateforme et enrichissent l\u2019exp\u00e9rience d\u2019apprentissage pour les utilisateurs.\u003C\/p\u003E","siteUrl":"https:\/\/devdoc.varascundo.com\/spa\/","repoUrl":"https:\/\/github.com\/cundovar\/vue-symfony","imageUrl":"\/uploads\/projects\/project_1_6a0aee1ac95df.png","duration":"8 mois","status":"published","clientProblem":"\u003Cp\u003ELa cr\u00e9ation et la maintenance de parcours p\u00e9dagogiques demandaient beaucoup de travail manuel : structuration des menus, r\u00e9daction des cours, revue du contenu et mise \u00e0 jour technique. Les agents externes devaient aussi pouvoir acc\u00e9der aux cours sans contourner les r\u00e8gles m\u00e9tier de la plateforme.\u003C\/p\u003E","mission":"\u003Cp\u003EConcevoir une architecture durable o\u00f9 Symfony et MySQL restent la source de v\u00e9rit\u00e9, tout en assistant la cr\u00e9ation et la r\u00e9vision des cours avec des agents MCP. La mission incluait aussi la mise \u00e0 disposition d\u2019une recherche augment\u00e9e sans exposer directement la base m\u00e9tier.\u003C\/p\u003E","solution":"\u003Cp\u003EDevDoc centralise les cours dans Symfony\/MySQL et expose une interface Vue.js. Les agents Node utilisent des API authentifi\u00e9es, tandis qu\u2019un service Python avec PostgreSQL\/pgvector synchronise les contenus via une outbox idempotente. Cette s\u00e9paration rend la g\u00e9n\u00e9ration, la publication et la recherche plus s\u00fbres et plus faciles \u00e0 maintenir.\u003C\/p\u003E","outcomes":[],"serviceTags":[],"featured":true,"sortOrder":1},{"id":8,"slug":"chant-d-orties-maison-d-edition","name":"chant d\u0027orties maison d\u0027\u00e9dition ","stack":"python php html js css","summary":"Refonte du site des \u00c9ditions Chant d\u0027orties, maison d\u0027\u00e9dition ind\u00e9pendante : un site rapide et adapt\u00e9 au mobile, que l\u0027\u00e9ditrice met \u00e0 jour seule depuis une administration simple, h\u00e9berg\u00e9 gratuitement chez Free.","bulletin":"\u003Cp\u003E1. Audit de l\u0027ancien site : inventaire des pages, des images et des adresses \u00e0 conserver.\u003C\/p\u003E\u003Cp\u003E2. Migration des contenus vers des donn\u00e9es structur\u00e9es (livres, personnes, collections, pages).\u003C\/p\u003E\u003Cp\u003E3. G\u00e9n\u00e9rateur du site : gabarits, CSS en composants, images optimis\u00e9es en WebP, plan du site.\u003C\/p\u003E\u003Cp\u003E4. Administration Decap CMS : sch\u00e9ma des contenus, aper\u00e7us en direct, validation \u00e9ditoriale.\u003C\/p\u003E\u003Cp\u003E5. Authentification s\u00e9curis\u00e9e : relais OAuth GitHub en PHP, protections contre le vol de jeton et les attaques par rejeu.\u003C\/p\u003E\u003Cp\u003E6. Personnalisation encadr\u00e9e : th\u00e8me de couleurs et de polices r\u00e9glable, avec un contrat de validation.\u003C\/p\u003E\u003Cp\u003E7. Aper\u00e7u client sur un h\u00e9bergement de test, puis retours et ajustements de l\u0027ergonomie.\u003C\/p\u003E\u003Cp\u003E8. Mise en ligne chez Free : HTTPS, redirections des anciennes adresses, tests en conditions r\u00e9elles avant la bascule.\u003C\/p\u003E\u003Cp\u003E9. Automatisation : int\u00e9gration et publication continues avec GitHub Actions, et documentation de passation.\u003C\/p\u003E","siteUrl":"https:\/\/chantdorties.pages-perso.free.fr","repoUrl":"https:\/\/github.com\/chantdorties\/site","imageUrl":"\/uploads\/projects\/project_8_a61f07836e46.png","duration":"5 mois","status":"published","clientProblem":"\u003Cp\u003ELe site existait depuis 2008 sous forme de pages HTML \u00e9crites \u00e0 la main : pr\u00e8s de 200 fichiers, des dossiers d\u0027images en vrac et un ancien WordPress abandonn\u00e9.\u003C\/p\u003E\u003Cp\u003E- Aucune autonomie : chaque nouveau livre ou actualit\u00e9 demandait de modifier du code et de l\u0027envoyer par FTP.\u003C\/p\u003E\u003Cp\u003E- Un site vieillissant : pas adapt\u00e9 au mobile, navigation confuse, contenus en double (plusieurs versions de l\u0027accueil, pages \u00ab mod\u00e8le \u00bb oubli\u00e9es).\u003C\/p\u003E\u003Cp\u003E- Un h\u00e9bergement tr\u00e8s limit\u00e9, \u00e0 garder : les pages perso de Free n\u0027ont pas de HTTPS sur l\u0027adresse historique et ne permettent ni base de donn\u00e9es, ni r\u00e9\u00e9criture d\u0027adresses, ni connexion sortante en PHP.\u003C\/p\u003E\u003Cp\u003E- Un r\u00e9f\u00e9rencement \u00e0 pr\u00e9server : des centaines d\u0027anciennes adresses \u00e9taient d\u00e9j\u00e0 connues de Google et de lecteurs.\u003C\/p\u003E","mission":"\u003Cp\u003EConcevoir un nouveau site et un outil d\u0027\u00e9dition simple, sans changer d\u0027h\u00e9bergeur ni cr\u00e9er de co\u00fbt r\u00e9current :\u003C\/p\u003E\u003Cp\u003E- reprendre tout le catalogue : pr\u00e8s de 80 livres, 80 auteurs et illustrateurs, collections, actualit\u00e9s ;\u003C\/p\u003E\u003Cp\u003E- donner \u00e0 l\u0027\u00e9ditrice une interface pour publier livres, pages et actualit\u00e9s, et r\u00e9gler les couleurs et polices du site, sans risque de casser la mise en page ;\u003C\/p\u003E\u003Cp\u003E- garantir une connexion s\u00e9curis\u00e9e \u00e0 l\u0027administration malgr\u00e9 les limites de Free ;\u003C\/p\u003E\u003Cp\u003E- ne perdre aucune ancienne adresse ni aucun visiteur.\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E","solution":"\u003Cp\u003EUn site statique g\u00e9n\u00e9r\u00e9 en Python\u003C\/p\u003E\u003Cp\u003ELes contenus sont stock\u00e9s en JSON et Markdown, puis transform\u00e9s en pages HTML l\u00e9g\u00e8res. Tout est valid\u00e9 avant chaque publication : liens entre livres et auteurs, ISBN, prix, images. Plus de 140 tests automatis\u00e9s prot\u00e8gent le site contre les r\u00e9gressions.\u003C\/p\u003E\u003Cp\u003EUne administration avec Decap CMS\u003C\/p\u003E\u003Cp\u003E- Formulaires en fran\u00e7ais, avec un aper\u00e7u en direct pour chaque type de contenu.\u003C\/p\u003E\u003Cp\u003E- R\u00e9ordonnancement des menus par glisser-d\u00e9poser.\u003C\/p\u003E\u003Cp\u003E- Circuit de validation (brouillon, relecture, publication).\u003C\/p\u003E\u003Cp\u003E- Th\u00e8me personnalisable mais encadr\u00e9 : 9 couleurs et 2 polices, avec une validation stricte c\u00f4t\u00e9 serveur. Aucun CSS libre possible.\u003C\/p\u003E\u003Cp\u003EContourner les limites de Free\u003C\/p\u003E\u003Cp\u003E- Administration : elle est servie chez Free en HTTPS. Seul un petit relais d\u0027authentification GitHub en PHP tourne sur un autre h\u00e9bergeur, car Free bloque toute connexion sortante.\u003C\/p\u003E\u003Cp\u003E- S\u00e9curit\u00e9 : faute de pouvoir r\u00e9gler les en-t\u00eates chez Free, la politique de s\u00e9curit\u00e9 est int\u00e9gr\u00e9e directement dans la page.\u003C\/p\u003E\u003Cp\u003E- HTTPS : un script en t\u00eate de chaque page renvoie vers l\u0027adresse HTTPS.\u003C\/p\u003E\u003Cp\u003E- Anciennes adresses : 88 redirections 301 vers les nouvelles pages, ce qui pr\u00e9serve le r\u00e9f\u00e9rencement.\u003C\/p\u003E\u003Cp\u003EPublication automatique\u003C\/p\u003E\u003Cp\u003EGitHub Actions construit, teste et publie le site sur Free par FTP \u00e0 chaque validation. Le transfert est incr\u00e9mental (seuls les fichiers modifi\u00e9s partent) et ne supprime jamais un fichier qu\u0027il n\u0027a pas lui-m\u00eame publi\u00e9.\u003C\/p\u003E","outcomes":[],"serviceTags":[],"featured":true,"sortOrder":4},{"id":4,"slug":"wp-site-builder-pipeline-ia-wordpress","name":"WP Site Builder - Pipeline IA pour WordPress","stack":"React, Node.js\/ Fastify, MongoDB,","summary":"\u003Cp\u003EUn brief client entre, un site WordPress fonctionnel en sort. Huit \u00e9tapes explicites \u2014 cadrage, architecture, design, contenu, int\u00e9gration, contr\u00f4le, pr\u00e9paration, mise en ligne \u2014 chacune valid\u00e9e avant de passer \u00e0 la suivante, et reprenable en cas d\u2019\u00e9chec. Les agents IA n\u2019\u00e9crivent pas dans le vide : ils passent par des actions pr\u00e9cises, contr\u00f4l\u00e9es \u00e0 chaque \u00e9tape. React\/Vite, Fastify\/Mongoose, validation JSON Schema, agents reli\u00e9s \u00e0 n8n via MCP.\u003C\/p\u003E","bulletin":"","siteUrl":"https:\/\/frontmagi.varascundo.com\/","repoUrl":null,"imageUrl":"\/uploads\/projects\/project_4_6a6873f6430f0.png","duration":null,"status":"published","clientProblem":"\u003Cp\u003ELa cr\u00e9ation de sites WordPress r\u00e9p\u00e9tait les m\u00eames \u00e9tapes manuelles : recueil du brief, choix de structure, maquette, r\u00e9daction, configuration et contr\u00f4le qualit\u00e9. Cette r\u00e9p\u00e9tition ralentissait la production et rendait les r\u00e9sultats d\u00e9pendants du temps disponible, tandis que les contenus g\u00e9n\u00e9r\u00e9s par IA devaient \u00eatre encadr\u00e9s pour rester exploitables.\u003C\/p\u003E","mission":"\u003Cp\u003EConstruire un pipeline capable de transformer un brief valid\u00e9 en site WordPress fonctionnel, en d\u00e9coupant la production en \u00e9tapes explicites et en faisant collaborer des agents IA avec des workflows n8n contr\u00f4l\u00e9s.\u003C\/p\u003E","solution":"\u003Cp\u003EUne interface React\/Vite pilote le pipeline, tandis qu\u2019une API Fastify\/Mongoose orchestre huit \u00e9tapes valid\u00e9es : discovery, architecture, design, contenu, int\u00e9gration, contr\u00f4le, pr\u00e9paration et d\u00e9ploiement. Les \u00e9changes sont valid\u00e9s par JSON Schema et communiquent via MCP entre les agents et n8n, ce qui rend chaque \u00e9tape tra\u00e7able et reprise en cas d\u2019\u00e9chec.\u003C\/p\u003E","outcomes":[],"serviceTags":[],"featured":true,"sortOrder":40},{"id":6,"slug":"la-magicieuse","name":"La magicieuse","stack":"Wordpress headless \/ react\/scss\/typeScripte","summary":"\u003Cp\u003E\u003Cstrong\u003ELa Magicieuse \u2014 Site e-commerce pour une maison d\u2019\u00e9dition\u003C\/strong\u003E\u003C\/p\u003E\u003Cp\u003EConception et d\u00e9veloppement complet d\u2019une boutique en ligne headless : WordPress g\u00e8re le contenu et les commandes en back-office, React affiche tout c\u00f4t\u00e9 client sans aucun rendu PHP.\u003C\/p\u003E\u003Cp\u003ETechnologies : React, TypeScript, WordPress, WooCommerce, API REST, SCSS\u003C\/p\u003E\u003Cp\u003ECe que j\u2019ai fait :\u003C\/p\u003E\u003Cp\u003E- D\u00e9veloppement du frontend React (boutique, fiches produit, panier, contact)\u003C\/p\u003E\u003Cp\u003E- Cr\u00e9ation d\u2019un plugin WordPress sur-mesure pour exposer les donn\u00e9es via API\u003C\/p\u003E\u003Cp\u003E- Int\u00e9gration du feed Instagram\u003C\/p\u003E\u003Cp\u003E- Syst\u00e8me de th\u00e8mes CSS multi-ambiance\u003C\/p\u003E","bulletin":"","siteUrl":"https:\/\/www.la-magicieuse.org\/","repoUrl":"https:\/\/github.com\/cundovar\/front-magicieuse-wp","imageUrl":"\/uploads\/projects\/project_6_6a437022cc124.png","duration":"3 mois","status":"published","clientProblem":"\u003Cp\u003ELa maison d\u2019\u00e9dition avait besoin d\u2019une boutique capable de porter son univers \u00e9ditorial, sans \u00eatre limit\u00e9e par un th\u00e8me WooCommerce standard. Il fallait conserver une administration simple pour les contenus et les commandes, tout en offrant une exp\u00e9rience client rapide, sur mesure et coh\u00e9rente avec l\u2019identit\u00e9 de la marque.\u003C\/p\u003E","mission":"\u003Cp\u003EConcevoir et d\u00e9velopper un e-commerce headless o\u00f9 WordPress et WooCommerce restent le back-office, tandis que le front-end propose une boutique React enti\u00e8rement personnalis\u00e9e.\u003C\/p\u003E","solution":"\u003Cp\u003EWordPress expose contenus, produits et commandes via un plugin et une API REST sur mesure. Le front React\/TypeScript g\u00e8re la boutique, les fiches produit, le panier et le contact ; SCSS porte les th\u00e8mes multi-ambiance et l\u2019int\u00e9gration Instagram relie la boutique \u00e0 la vie \u00e9ditoriale de la marque.\u003C\/p\u003E","outcomes":[],"serviceTags":[],"featured":true,"sortOrder":60},{"id":2,"slug":"project-2","name":"massage d\u0027helene ","stack":"nextjs \/ symfony  mini CMS","summary":"\u003Ch2\u003E\u003Cstrong\u003EMassage d\u0027H\u00e9l\u00e8ne \u2014 Site vitrine + mini CMS\u003C\/strong\u003E\u003C\/h2\u003E\u003Cp\u003ED\u00e9veloppement d\u0027un site vitrine en Next.js coupl\u00e9 \u00e0 un mini CMS sur mesure en Symfony, permettant \u00e0 la praticienne de g\u00e9rer ses contenus de mani\u00e8re autonome.\u003C\/p\u003E","bulletin":"\u003Cp\u003EBulletin d\u0027activit\u00e9 : Dans le cadre du projet \u0022Massage d\u0027H\u00e9l\u00e8ne\u0022, le d\u00e9veloppement du mini CMS sous Symfony se poursuit avec l\u0027int\u00e9gration de fonctionnalit\u00e9s essentielles. Bien que les derniers commits soient absents, des am\u00e9liorations techniques sont en cours, notamment l\u0027optimisation des performances et la structuration du code pour faciliter les futures \u00e9volutions. La prochaine \u00e9tape consistera \u00e0 finaliser l\u0027interface utilisateur avec\u2026\u003C\/p\u003E","siteUrl":"https:\/\/massagesdhelene.com\/","repoUrl":"https:\/\/github.com\/cundovar\/massage-front","imageUrl":"\/uploads\/projects\/project_2_699efc58edeba.png","duration":"1 mois ","status":"in_progress","clientProblem":null,"mission":null,"solution":null,"outcomes":[],"serviceTags":[],"featured":false,"sortOrder":20},{"id":3,"slug":"project-3","name":"la butinerie","stack":"WORDPRESS","summary":"\u003Ch2\u003E\u003Cstrong\u003ETuteur de projet \u2014 Refonte La Butinerie\u003C\/strong\u003E\u003C\/h2\u003E\u003Cp\u003EEncadrement de deux stagiaires sur la refonte compl\u00e8te du site La Butinerie, sur une p\u00e9riode de deux mois. Suivi technique, orientation des choix d\u0027int\u00e9gration et transmission des bonnes pratiques en contexte r\u00e9el.\u003C\/p\u003E\u003Cp\u003EProduction d\u0027une documentation de passation structur\u00e9e pour assurer la continuit\u00e9 du projet entre tuteurs successifs.\u003C\/p\u003E\u003Cp\u003E\u003Ca target=\u0022_blank\u0022 rel=\u0022noopener noreferrer\u0022 class=\u0022underline underline underline-offset-2 decoration-1 decoration-current\/40 hover:decoration-current focus:decoration-current\u0022 href=\u0022https:\/\/doc.varascundo.com\/\u0022\u003EAcc\u00e9der \u00e0 la documentation \u2192\u003C\/a\u003E\u003C\/p\u003E","bulletin":"","siteUrl":"https:\/\/butinerie.com\/","repoUrl":null,"imageUrl":"\/uploads\/projects\/project_3_699effd090931.png","duration":"2 mois","status":"in_progress","clientProblem":null,"mission":null,"solution":null,"outcomes":[],"serviceTags":[],"featured":false,"sortOrder":30},{"id":5,"slug":"project-5","name":"site vitrine d\u0027art ","stack":"react\/symfony Mysql","summary":"\u003Cp\u003EPetit site vitrine, CRUD simple en react \/ symfony \u003C\/p\u003E","bulletin":"","siteUrl":"https:\/\/nat.varascundo.com\/","repoUrl":"https:\/\/github.com\/cundovar\/bback-peinture","imageUrl":"\/uploads\/projects\/project_5_6a0c47dbec041.png","duration":" 5 mois ","status":"in_progress","clientProblem":null,"mission":null,"solution":null,"outcomes":[],"serviceTags":[],"featured":false,"sortOrder":50},{"id":7,"slug":"project-7","name":"Guide de vacances","stack":"react","summary":"\u003Cp\u003EPetit projet personnel r\u00e9alis\u00e9 \u003Cem\u003Epour le fun\u003C\/em\u003E, mais surtout pour pr\u00e9parer au mieux mes vacances en famille autour d\u2019Arles. Cette application web mobile-first r\u00e9unit sur une seule carte tout ce qu\u2019il y a \u00e0 d\u00e9couvrir dans la r\u00e9gion : villages des Alpilles, baignades dans le Gardon, plages de Camargue, sites romains, mus\u00e9es, \u00e9v\u00e9nements, mais aussi informations sur l\u2019h\u00e9bergement, commerces de proximit\u00e9 et m\u00e9t\u00e9o locale.\u003C\/p\u003E\u003Cp\u003EL\u2019objectif \u00e9tait de cr\u00e9er un v\u00e9ritable guide sur mesure, accessible hors ligne depuis un t\u00e9l\u00e9phone. L\u2019ensemble du contenu est enti\u00e8rement aliment\u00e9 par des fichiers JSON, sans aucun texte cod\u00e9 en dur. L\u2019application propose une carte interactive Leaflet avec des filtres th\u00e9matiques, des fiches d\u00e9taill\u00e9es pour chaque lieu et une installation en PWA.\u003C\/p\u003E\u003Cp\u003EC\u00f4t\u00e9 technique, le projet repose sur React, Vite, React Router, SCSS et Leaflet. Il adopte une architecture fond\u00e9e sur des composants r\u00e9utilisables ainsi qu\u2019un adaptateur commun permettant de normaliser des jeux de donn\u00e9es h\u00e9t\u00e9rog\u00e8nes. Une attention particuli\u00e8re a \u00e9galement \u00e9t\u00e9 port\u00e9e au responsive mobile-first, \u00e0 l\u2019accessibilit\u00e9 et aux tests avec Vitest.\u003C\/p\u003E\u003Cpre\u003E\u003Ccode class=\u0022language-markdown\u0022\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cp\u003E\u003C\/p\u003E","bulletin":"\u003Cp\u003EDans le cadre de mon projet \u0022Guide de vacances\u0022, j\u0027ai d\u00e9velopp\u00e9 une application web mobile-first en utilisant React et Vite. J\u0027ai int\u00e9gr\u00e9 une carte interactive Leaflet et mis en place une architecture de composants r\u00e9utilisables. L\u0027application est enti\u00e8rement aliment\u00e9e par des fichiers JSON, garantissant une consultation hors-ligne et une exp\u00e9rience utilisateur optimis\u00e9e gr\u00e2ce \u00e0 un design responsive et accessible.\u003C\/p\u003E","siteUrl":"https:\/\/vacances.varascundo.com\/","repoUrl":"https:\/\/github.com\/cundovar\/vacances","imageUrl":"\/uploads\/projects\/project_7_6a6f5e9d5f0bc.png","duration":"2 jours","status":"in_progress","clientProblem":null,"mission":null,"solution":null,"outcomes":[],"serviceTags":[],"featured":false,"sortOrder":70}]