[{"data":1,"prerenderedAt":421},["ShallowReactive",2],{"layout-sidebar-fr-sagec":3,"project-fr-sagec":269},{"id":4,"title":5,"body":6,"date":249,"description":250,"doc":251,"extension":252,"git":251,"image":253,"isExperimentation":254,"meta":255,"navigation":264,"path":265,"seo":266,"stem":267,"tags":251,"type":251,"updatedAt":251,"website":251,"__hash__":268},"projectsFr\u002Fprojects\u002Ffr\u002FSagec.md","Sagec - Gestion Comptable & Optimisation",{"type":7,"value":8,"toc":234},"minimark",[9,14,19,23,35,42,46,80,84,116,120,125,132,150,154,165,169,184,204,208,218,221,225,231],[10,11,13],"h1",{"id":12},"sagec-solution-de-gestion-comptable-outil-interne","Sagec - Solution de Gestion Comptable \u002F outil interne",[15,16,18],"h2",{"id":17},"contexte","📌 Contexte",[20,21,22],"p",{},"Le projet est né d'un besoin critique au sein d'un cabinet d'expertise comptable français : centraliser et optimiser la gestion des clients et des projets lors de la période fiscale intense (bilans annuels).",[20,24,25,26,30,31,34],{},"Le défi consistait à s'affranchir des solutions propriétaires coûteuses et souvent rigides, pour proposer un outil ",[27,28,29],"strong",{},"rapide, fiable et parfaitement adapté"," aux workflows spécifiques du cabinet. J'ai été missionné pour concevoir cette solution de bout en bout, en privilégiant une stack technique moderne et une infrastructure orientée ",[27,32,33],{},"SRE (Site Reliability Engineering)",".",[20,36,37,38,41],{},"L'objectif n'était pas seulement de répondre à un besoin immédiat, mais de bâtir une architecture ",[27,39,40],{},"pérenne et scalable"," via un cluster Kubernetes (K3S), permettant une évolution fluide du produit sans refonte technique majeure.",[15,43,45],{"id":44},"objectifs-clés","🎯 Objectifs Clés",[47,48,49,56,62,68,74],"ul",{},[50,51,52,55],"li",{},[27,53,54],{},"Centralisation"," : Enregistrement et gestion unifiée des entreprises, clients et projets.",[50,57,58,61],{},[27,59,60],{},"Interopérabilité"," : Importation de données depuis les outils métiers existants.",[50,63,64,67],{},[27,65,66],{},"Pilotage"," : Dashboard décisionnel offrant une vue d'ensemble sur les projets en cours.",[50,69,70,73],{},[27,71,72],{},"Sécurité"," : Gestion granulaire des accès via un système RBAC (Role-Based Access Control).",[50,75,76,79],{},[27,77,78],{},"Haute Disponibilité"," : Infrastructure auto-heal, auto-update et auto-deploy.",[15,81,83],{"id":82},"stack-technique","🛠 Stack Technique",[47,85,86,92,98,104,110],{},[50,87,88,91],{},[27,89,90],{},"Backend"," : NestJs (TypeScript) & Prisma ORM",[50,93,94,97],{},[27,95,96],{},"Base de données"," : PostgreSQL avec Row Level Security (RLS)",[50,99,100,103],{},[27,101,102],{},"Frontend"," : VueJs 3, ShadCnVue & TailwindCSS",[50,105,106,109],{},[27,107,108],{},"Infrastructure"," : K3S (Kubernetes), Traefik (Ingress), Let's Encrypt (TLS)",[50,111,112,115],{},[27,113,114],{},"DevOps & GitOps"," : GitLab CI, Docker, ArgoCD",[15,117,119],{"id":118},"architecture-développement","🏗 Architecture & Développement",[121,122,124],"h3",{"id":123},"backend-sécurité","Backend & Sécurité",[20,126,127,128,131],{},"L'architecture suit les principes de modularité de ",[27,129,130],{},"NestJs",", garantissant un code maintenable et testable. La sécurité est au cœur du système :",[47,133,134,140],{},[50,135,136,139],{},[27,137,138],{},"Authentification"," : Implémentation via JWT (JSON Web Tokens).",[50,141,142,145,146,149],{},[27,143,144],{},"Isolation des données"," : Utilisation des politiques ",[27,147,148],{},"Row Level Security (RLS)"," directement au niveau de PostgreSQL, garantissant que chaque utilisateur ne peut accéder qu'aux données qui lui sont explicitement autorisées.",[121,151,153],{"id":152},"frontend-expérience-utilisateur","Frontend & Expérience Utilisateur",[20,155,156,157,160,161,164],{},"Le frontend mise sur la réactivité de ",[27,158,159],{},"VueJs 3"," couplée à l'élégance de ",[27,162,163],{},"ShadCnVue",". Une attention particulière a été portée à la gestion des routes via des middlewares, assurant une navigation fluide et sécurisée.",[121,166,168],{"id":167},"infrastructure-gitops","Infrastructure & GitOps",[20,170,171,172,175,176,179,180,183],{},"Le déploiement repose sur un cluster ",[27,173,174],{},"K3S"," optimisé sur un VPS (8Go RAM, 4 vCPUs). L'approche ",[27,177,178],{},"GitOps"," avec ",[27,181,182],{},"ArgoCD"," permet une synchronisation en temps réel entre le dépôt de manifests et l'état du cluster :",[47,185,186,192,198],{},[50,187,188,191],{},[27,189,190],{},"Ingress Controller"," : Traefik configuré avec 3 réplicas pour la haute disponibilité.",[50,193,194,197],{},[27,195,196],{},"Certificats"," : Automatisation TLS via Let's Encrypt.",[50,199,200,203],{},[27,201,202],{},"Observabilité"," : Infrastructure supervisée pour garantir l'auto-healing.",[15,205,207],{"id":206},"déploiement-cicd","🚀 Déploiement & CI\u002FCD",[20,209,210,211,214,215,217],{},"Le workflow est entièrement automatisé. Chaque modification du code source déclenche un pipeline GitLab CI qui construit l'image Docker grace à ",[27,212,213],{},"Buildah"," qui permet de construire l'image dans la CI est ensuite la push dans Gitlab registry. ",[27,216,182],{}," détecte ensuite les changements de version dans le dépôt de configuration et déploie les modifications sans interruption de service.",[20,219,220],{},"La séparation stricte entre le code applicatif et les manifests Kubernetes assure une gestion propre et sécurisée des environnements.",[15,222,224],{"id":223},"retours-dexpérience","📈 Retours d'expérience",[20,226,227,228,230],{},"Ce projet m'a permis de valider la puissance et la légèreté de ",[27,229,174],{}," pour des environnements de production intermédiaires. L'adoption d'ArgoCD a radicalement transformé la gestion des déploiements, apportant une sérénité totale sur l'état de l'infrastructure.",[20,232,233],{},"J'ai pu approfondir les concepts avancés de sécurité (RBAC, RLS) et consolider mes compétences en architecture logicielle moderne, où le code et l'infrastructure ne font plus qu'un.",{"title":235,"searchDepth":236,"depth":236,"links":237},"",2,[238,239,240,241,247,248],{"id":17,"depth":236,"text":18},{"id":44,"depth":236,"text":45},{"id":82,"depth":236,"text":83},{"id":118,"depth":236,"text":119,"children":242},[243,245,246],{"id":123,"depth":244,"text":124},3,{"id":152,"depth":244,"text":153},{"id":167,"depth":244,"text":168},{"id":206,"depth":236,"text":207},{"id":223,"depth":236,"text":224},"2026-04-27","Application de gestion comptable interne et outil d'optimisation de projets pour cabinets d'expertise.",null,"md","\u002Fpictures\u002Fsagec.png",false,{"category":256,"stack":257},"fullstack",[130,258,259,163,260,261,262,182,174,263],"PostgreSQL","VueJs","TailwindCSS","Docker","GitLab","SRE",true,"\u002Fprojects\u002Ffr\u002Fsagec",{"title":5,"description":250},"projects\u002Ffr\u002FSagec","_jd4peJ9zsqDvqTtYNjIEkbGVgRy4Cc85lbSa_HTUFI",{"id":4,"title":5,"body":270,"date":249,"description":250,"doc":251,"extension":252,"git":251,"image":253,"isExperimentation":254,"meta":418,"navigation":264,"path":265,"seo":420,"stem":267,"tags":251,"type":251,"updatedAt":251,"website":251,"__hash__":268},{"type":7,"value":271,"toc":406},[272,274,276,278,284,288,290,312,314,336,338,340,344,356,358,364,366,374,388,390,396,398,400,404],[10,273,13],{"id":12},[15,275,18],{"id":17},[20,277,22],{},[20,279,25,280,30,282,34],{},[27,281,29],{},[27,283,33],{},[20,285,37,286,41],{},[27,287,40],{},[15,289,45],{"id":44},[47,291,292,296,300,304,308],{},[50,293,294,55],{},[27,295,54],{},[50,297,298,61],{},[27,299,60],{},[50,301,302,67],{},[27,303,66],{},[50,305,306,73],{},[27,307,72],{},[50,309,310,79],{},[27,311,78],{},[15,313,83],{"id":82},[47,315,316,320,324,328,332],{},[50,317,318,91],{},[27,319,90],{},[50,321,322,97],{},[27,323,96],{},[50,325,326,103],{},[27,327,102],{},[50,329,330,109],{},[27,331,108],{},[50,333,334,115],{},[27,335,114],{},[15,337,119],{"id":118},[121,339,124],{"id":123},[20,341,127,342,131],{},[27,343,130],{},[47,345,346,350],{},[50,347,348,139],{},[27,349,138],{},[50,351,352,145,354,149],{},[27,353,144],{},[27,355,148],{},[121,357,153],{"id":152},[20,359,156,360,160,362,164],{},[27,361,159],{},[27,363,163],{},[121,365,168],{"id":167},[20,367,171,368,175,370,179,372,183],{},[27,369,174],{},[27,371,178],{},[27,373,182],{},[47,375,376,380,384],{},[50,377,378,191],{},[27,379,190],{},[50,381,382,197],{},[27,383,196],{},[50,385,386,203],{},[27,387,202],{},[15,389,207],{"id":206},[20,391,210,392,214,394,217],{},[27,393,213],{},[27,395,182],{},[20,397,220],{},[15,399,224],{"id":223},[20,401,227,402,230],{},[27,403,174],{},[20,405,233],{},{"title":235,"searchDepth":236,"depth":236,"links":407},[408,409,410,411,416,417],{"id":17,"depth":236,"text":18},{"id":44,"depth":236,"text":45},{"id":82,"depth":236,"text":83},{"id":118,"depth":236,"text":119,"children":412},[413,414,415],{"id":123,"depth":244,"text":124},{"id":152,"depth":244,"text":153},{"id":167,"depth":244,"text":168},{"id":206,"depth":236,"text":207},{"id":223,"depth":236,"text":224},{"category":256,"stack":419},[130,258,259,163,260,261,262,182,174,263],{"title":5,"description":250},1777912143290]