[{"data":1,"prerenderedAt":115},["ShallowReactive",2],{"navigation":3,"project-truemain":26},[4],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Blog","/blog","blog",[9,13,17,21],{"title":10,"path":11,"stem":12},"From Mockup to Market: My End-to-End Product Design Process","/blog/from-mockup-to-market","blog/from-mockup-to-market",{"title":14,"path":15,"stem":16},"How I Built My Design System from Scratch","/blog/how-i-built-my-own-design-system-from-scratch","blog/how-i-built-my-own-design-system-from-scratch",{"title":18,"path":19,"stem":20},"The Psychology of Color in UI Design","/blog/psychology-of-color-in-ui-design","blog/psychology-of-color-in-ui-design",{"title":22,"path":23,"stem":24},"The Case for Slow Design in a Fast-Paced Digital World","/blog/slow-design-in-fast-paced-digital-world","blog/slow-design-in-fast-paced-digital-world",false,{"id":27,"title":28,"date":29,"description":30,"extension":31,"gallery":32,"highlights":33,"image":37,"imageCaption":38,"links":39,"meta":46,"sections":98,"slug":49,"stack":111,"stem":112,"tags":113,"url":47,"__hash__":114},"projects/projects/truemain.yml","TrueMain","2026-02-01T00:00:00.000Z","Projet personnel autour de League of Legends : agréger et fiabiliser les statistiques de champions des meilleurs joueurs (top OTP, mains uniques) afin de proposer des recommandations de builds basées sur les vraies pratiques pro/high-elo plutôt que sur des moyennes globales. Développé en solo depuis février 2026, c'est l'occasion de monter une stack moderne complète : .NET 10, ASP.NET Core, un Worker Service pour ingérer en continu l'API Riot Games, PostgreSQL via Entity Framework Core, et un front Nuxt 4. Le tout conteneurisé avec Docker pour un déploiement simple.","yml",null,[34,35,36],"Architecture découpée : API ASP.NET Core (REST), Worker Service pour l'ingestion asynchrone et front Nuxt 4 pour la consultation.","Persistance PostgreSQL pilotée par Entity Framework Core (migrations, requêtes typées, indexation des matchs et builds).","Conteneurisation Docker (API, Worker, base) pour un environnement reproductible en dev comme en déploiement.","/images/projects/truemain/architecture.svg","Schéma d'architecture TrueMain : services externes (Riot API, DDragon CDN), bloc Docker Compose orchestrant le Worker .NET avec ses 7 processus, l'API ASP.NET Core en port 8080 (libs Core et Data partagées), PostgreSQL 17.2 et PgAdmin (dev/QA), et le frontend Nuxt 4 en port 3000 qui consomme l'API.",[40],{"label":41,"to":42,"icon":43,"target":44,"color":45},"Code source","https://github.com/ilyanfraimbault/TrueMain","i-lucide-github","_blank","neutral",{"path":47,"body":48},"/projects/truemain",{"slug":49,"title":28,"description":30,"image":37,"imageCaption":38,"url":47,"tags":50,"date":58,"stack":59,"links":62,"highlights":64,"sections":65},"truemain",[51,52,53,54,55,56,57],"League of Legends",".NET 10","ASP.NET Core","Worker Service","Nuxt 4","PostgreSQL","Docker","2026-02-01",[52,53,54,60,56,55,61,57],"Entity Framework Core","TypeScript",[63],{"label":41,"to":42,"icon":43,"target":44,"color":45},[34,35,36],[66,71,76,81,86,92],{"title":67,"items":68},"Backend ASP.NET Core",[69,70],"API REST pour exposer joueurs, champions, builds et statistiques agrégées.","Authentification et limites d'usage gérées proprement, documentation Swagger.",{"title":72,"items":73},"Worker Service d'ingestion",[74,75],"Consommation continue de l'API Riot Games avec respect des quotas (rate limiting).","Pipeline de mise à jour incrémentale des matchs et de calcul des statistiques par champion.",{"title":77,"items":78},"Front Nuxt 4",[79,80],"Pages de recherche de joueurs et de comparaison de builds par champion.","Composants typés en TypeScript, SSR pour le SEO.",{"title":82,"items":83},"Infrastructure",[84,85],"docker-compose pour orchestrer API + Worker + PostgreSQL.","Migrations EF Core versionnées et reproductibles.",{"title":87,"items":88},"Performance & rate limiting",[89,90,91],"Anticipation des quotas Riot Games (app rate limit + method rate limit) : mutualisation des appels, file d'attente, back-off exponentiel.","Estimation de la montée en charge sur l'ingestion : nombre de matchs / minute, taille moyenne du payload, capacité visée de la base.","Tableau de suivi des métriques d'ingestion (matchs traités/min, latence p95) pour piloter les ajustements.",{"title":93,"items":94},"Profilage & optimisation",[95,96,97],"Profilage des requêtes EF Core : analyse du SQL généré, ajout d'index ciblés (matchs par joueur, builds par champion).","Mise en cache mémoire des appels lecture les plus chauds pour absorber les pics de trafic front.","Justification documentée des choix d'optimisation dans le README technique.",[99,101,103,105,107,109],{"title":67,"items":100},[69,70],{"title":72,"items":102},[74,75],{"title":77,"items":104},[79,80],{"title":82,"items":106},[84,85],{"title":87,"items":108},[89,90,91],{"title":93,"items":110},[95,96,97],[52,53,54,60,56,55,61,57],"projects/truemain",[51,52,53,54,55,56,57],"pa3Jhjals00BO-jihONycY76P5Pn3MKPd2_DJ1X0NBU",1777818882830]