[{"data":1,"prerenderedAt":307},["ShallowReactive",2],{"portfolio-files":3},[4,17,25,36,44,54,62,72,79,91,101,111,121,128,139,149,156,167,176,183,194,204,212,222,229,239,246,256,265,272,282,289,299],{"id":5,"title":6,"description":7,"extension":8,"filename":9,"lang":10,"locale":11,"meta":12,"order":13,"path":14,"stem":15,"__hash__":16},"portfolio\u002Fportfolio\u002Freadme.en.yaml","","Python developer, strictly typed and test-oriented. Backend systems, LLM evals, and electronic music as Antres 808.","yaml","hello-world.html","html","en",{},1,"\u002Fportfolio\u002Fen\u002Fhello-world.html","portfolio\u002Freadme.en","z_hrTTM7O6WeTj2uQa_xvMatZpg8HWcsNIq6op1icTo",{"id":18,"title":6,"description":19,"extension":8,"filename":9,"lang":10,"locale":20,"meta":21,"order":13,"path":22,"stem":23,"__hash__":24},"portfolio\u002Fportfolio\u002Freadme.fr.yaml","Développeur Python, typage strict et orienté tests. Systèmes backend, évals LLM, et musique électronique sous le nom Antres 808.","fr",{},"\u002Fportfolio\u002Ffr\u002Fhello-world.html","portfolio\u002Freadme.fr","kU3ckADmUHtp0-eyEdP2g7PlPPc7fItH1I4Hdkdb5SM",{"id":26,"title":27,"description":28,"extension":8,"filename":29,"lang":30,"locale":11,"meta":31,"order":32,"path":33,"stem":34,"__hash__":35},"portfolio\u002Fportfolio\u002Fdev\u002Fskills.en.yaml","Skills","Python in strict mode, testing and LLM evals, FastAPI and Celery backends, Kubernetes, and a beginner level in Rust.","dev\u002Fskills.md","md",{},2,"\u002Fportfolio\u002Fen\u002Fdev\u002Fskills.md","portfolio\u002Fdev\u002Fskills.en","jIt0XHaQGKVtfYH2rq1PTszefXCl4coqvEKcl_j-XaM",{"id":37,"title":38,"description":39,"extension":8,"filename":29,"lang":30,"locale":20,"meta":40,"order":32,"path":41,"stem":42,"__hash__":43},"portfolio\u002Fportfolio\u002Fdev\u002Fskills.fr.yaml","Compétences","Python en mode strict, tests et évals LLM, backends FastAPI et Celery, Kubernetes, et un niveau débutant en Rust.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Fskills.md","portfolio\u002Fdev\u002Fskills.fr","v-_ohaWGzi_JXJW7Uh0IKx4EXpeTJOs0V7elgSoGR2E",{"id":45,"title":46,"description":47,"extension":8,"filename":48,"lang":30,"locale":11,"meta":49,"order":50,"path":51,"stem":52,"__hash__":53},"portfolio\u002Fportfolio\u002Fdev\u002Fexperience.en.yaml","Experience","Python backend at Araiko on an AI knowledge platform: analytics, Celery and Kubernetes tuning, media pipeline, LLM eval framework.","dev\u002Fexperience.md",{},3,"\u002Fportfolio\u002Fen\u002Fdev\u002Fexperience.md","portfolio\u002Fdev\u002Fexperience.en","z41hsu-FQ7_8hCFueDWQrqL3O5aGMwQpADVpUFL3lpA",{"id":55,"title":56,"description":57,"extension":8,"filename":48,"lang":30,"locale":20,"meta":58,"order":50,"path":59,"stem":60,"__hash__":61},"portfolio\u002Fportfolio\u002Fdev\u002Fexperience.fr.yaml","Expérience","Backend Python chez Araiko sur une plateforme de connaissances augmentée par IA : analytics, tuning Celery et Kubernetes, pipeline média, évals LLM.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Fexperience.md","portfolio\u002Fdev\u002Fexperience.fr","MOWHpnxGmFDuBGY9O42tdC-2mnhpXg_yxkXmNYl2pHI",{"id":63,"title":64,"description":65,"extension":8,"filename":66,"lang":30,"locale":11,"meta":67,"order":68,"path":69,"stem":70,"__hash__":71},"portfolio\u002Fportfolio\u002Faudio\u002Freadme.en.yaml","Antres 808","Electronic music under the name Antres 808: bass music mostly, with some dub and ambient. Three EPs, streamable here.","audio\u002FREADME.md",{},4,"\u002Fportfolio\u002Fen\u002Faudio\u002FREADME.md","portfolio\u002Faudio\u002Freadme.en","kADF2PL4jQ9EEzU-qVr_NkFFXk9o_pmnZ6rLgRBBE9E",{"id":73,"title":64,"description":74,"extension":8,"filename":66,"lang":30,"locale":20,"meta":75,"order":68,"path":76,"stem":77,"__hash__":78},"portfolio\u002Fportfolio\u002Faudio\u002Freadme.fr.yaml","Musique électronique sous le nom Antres 808 : surtout du bass music, avec du dub et de l'ambient. Trois EP, écoutables ici.",{},"\u002Fportfolio\u002Ffr\u002Faudio\u002FREADME.md","portfolio\u002Faudio\u002Freadme.fr","I3kuf5i6boV8BFPNg4If-5o1MwlSrBXP7WgokiNBPek",{"id":80,"title":81,"description":82,"extension":8,"filename":83,"lang":84,"locale":85,"meta":86,"order":87,"path":88,"stem":89,"__hash__":90},"portfolio\u002Fportfolio\u002Faudio\u002Freterraform.yaml","Reterraform","Reterraform, a two-track EP by Antres 808, 2025. Streamable here.","audio\u002Freterraform.antres","audio","*",{},5,"\u002Fportfolio\u002Faudio\u002Freterraform.antres","portfolio\u002Faudio\u002Freterraform","t3u36qn7JErb9p-wHiGpP2jHyrnDRMua9CVnUriBD8Y",{"id":92,"title":93,"description":94,"extension":8,"filename":95,"lang":84,"locale":85,"meta":96,"order":97,"path":98,"stem":99,"__hash__":100},"portfolio\u002Fportfolio\u002Faudio\u002Fspace_dust.yaml","Space Dust","Space Dust, a six-track EP by Antres 808, 2024. Streamable here.","audio\u002Fspace_dust.antres",{},6,"\u002Fportfolio\u002Faudio\u002Fspace_dust.antres","portfolio\u002Faudio\u002Fspace_dust","bE74QuKmaNXPKeRKS8ws0kbt9AxwKs5yS_57lei9--Y",{"id":102,"title":103,"description":104,"extension":8,"filename":105,"lang":84,"locale":85,"meta":106,"order":107,"path":108,"stem":109,"__hash__":110},"portfolio\u002Fportfolio\u002Faudio\u002Fjunkyard.yaml","The Junkyard of the Jettisoned","The Junkyard of the Jettisoned, a three-track EP by Antres 808, 2024. Streamable here.","audio\u002Fthe_junkyard_of_the_jettisoned.antres",{},7,"\u002Fportfolio\u002Faudio\u002Fthe_junkyard_of_the_jettisoned.antres","portfolio\u002Faudio\u002Fjunkyard","M-20FBaa31QoPLf6rWK80w3Ne9iH5bSys-Ybq7Eq5XA",{"id":112,"title":113,"description":114,"extension":8,"filename":115,"lang":30,"locale":11,"meta":116,"order":117,"path":118,"stem":119,"__hash__":120},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fapte\u002Freadme.en.yaml","apte","Tests and LLM evals in one async-first framework for Python 3.10+. Explicit DI, native concurrency, smart scoping. Formerly ProTest.","dev\u002Fprojects\u002Fapte\u002FREADME.md",{},8,"\u002Fportfolio\u002Fen\u002Fdev\u002Fprojects\u002Fapte\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fapte\u002Freadme.en","F0BS9_BIAi0sv-WEFZ5p91zYTEYpU4i-TXq7E3_TfdY",{"id":122,"title":113,"description":123,"extension":8,"filename":115,"lang":30,"locale":20,"meta":124,"order":117,"path":125,"stem":126,"__hash__":127},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fapte\u002Freadme.fr.yaml","Tests et évals LLM dans un seul framework async-first pour Python 3.10+. DI explicite, concurrence native, scoping malin. Anciennement ProTest.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Fprojects\u002Fapte\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fapte\u002Freadme.fr","kmbtVoQbjheNoiOvYuDR0J0BwCvfBi2obXLSB9QJboI",{"id":129,"title":130,"description":131,"extension":8,"filename":132,"lang":133,"locale":85,"meta":134,"order":135,"path":136,"stem":137,"__hash__":138},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fapte\u002Fexample.yaml","apte, example.py","A short apte test file: async tests, fixtures and an LLM eval running in the same engine.","dev\u002Fprojects\u002Fapte\u002Fexample.py","py",{},9,"\u002Fportfolio\u002Fdev\u002Fprojects\u002Fapte\u002Fexample.py","portfolio\u002Fdev\u002Fprojects\u002Fapte\u002Fexample","Zm3yTDbZuqhwfklGyF-a9SRZHw2v9v1hWbuAyAFzpdM",{"id":140,"title":141,"description":142,"extension":8,"filename":143,"lang":30,"locale":11,"meta":144,"order":145,"path":146,"stem":147,"__hash__":148},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Freadme.en.yaml","Anatole","Spaced-repetition flashcards, live at app-anatole.fr. FSRS scheduling, Capacitor shell with local notifications. Formerly jeveuxmonbrevet.","dev\u002Fprojects\u002Fanatole\u002FREADME.md",{},11,"\u002Fportfolio\u002Fen\u002Fdev\u002Fprojects\u002Fanatole\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Freadme.en","OHuarCwo5LRd6GeAJhPwEscjlRvC2M0lF_RuXQSJvAI",{"id":150,"title":141,"description":151,"extension":8,"filename":143,"lang":30,"locale":20,"meta":152,"order":145,"path":153,"stem":154,"__hash__":155},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Freadme.fr.yaml","Flashcards à répétition espacée, en ligne sur app-anatole.fr. Planification FSRS, coque Capacitor avec notifications locales. Anciennement jeveuxmonbrevet.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Fprojects\u002Fanatole\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Freadme.fr","f2kvB1KRg9Sqi2k-tQFk5hK3yKQN_R5Gy90uCm0YHhM",{"id":157,"title":158,"description":159,"extension":8,"filename":160,"lang":161,"locale":85,"meta":162,"order":163,"path":164,"stem":165,"__hash__":166},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fscreenshot.yaml","Anatole, dashboard","Dashboard screenshot from Anatole, the spaced-repetition flashcard app.","dev\u002Fprojects\u002Fanatole\u002F.dashboard_screenshot.webp","img",{},13,"\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fdashboard_screenshot.webp","portfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fscreenshot","mN9ZE0XxQuzPZiDBHCtJskOTjlwFdMuyVQIaiTUPhO4",{"id":168,"title":169,"description":170,"extension":8,"filename":171,"lang":30,"locale":11,"meta":172,"order":163,"path":173,"stem":174,"__hash__":175},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fyti\u002Freadme.en.yaml","Yorkshire Technologies Incorporated","Retro showcase site, a 2004 web mockup and proud of it. Zero framework, zero rendering dependency. A two-person project.","dev\u002Fprojects\u002Fyti\u002FREADME.md",{},"\u002Fportfolio\u002Fen\u002Fdev\u002Fprojects\u002Fyti\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fyti\u002Freadme.en","p0TuzCwL4Q9p7TTsSjp1ArINgPso_01XOiqT1Z3xl7E",{"id":177,"title":169,"description":178,"extension":8,"filename":171,"lang":30,"locale":20,"meta":179,"order":163,"path":180,"stem":181,"__hash__":182},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fyti\u002Freadme.fr.yaml","Site vitrine rétro, maquette web de 2004 assumée. Zéro framework, zéro dépendance de rendu. Un projet à deux.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Fprojects\u002Fyti\u002FREADME.md","portfolio\u002Fdev\u002Fprojects\u002Fyti\u002Freadme.fr","sI47wiZp5R2yEDeWnEsvqqfZzsV0q_jAYviaX-Hmej8",{"id":184,"title":185,"description":186,"extension":8,"filename":187,"lang":188,"locale":85,"meta":189,"order":190,"path":191,"stem":192,"__hash__":193},"portfolio\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fcard.yaml","Anatole, card animation","Animated card from Anatole, the spaced-repetition flashcard app.","dev\u002Fprojects\u002Fanatole\u002F.card.webm","video",{},14,"\u002Fportfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fcard.webm","portfolio\u002Fdev\u002Fprojects\u002Fanatole\u002Fcard","yxDYa8CxsQBjXdeWmFdIYGTE6_XAhS62WfhdmrbjyVc",{"id":195,"title":196,"description":197,"extension":8,"filename":198,"lang":30,"locale":11,"meta":199,"order":200,"path":201,"stem":202,"__hash__":203},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Freadme.en.yaml","The lab","Unfinished explorations: emergent simulations, hex grids, graphs and agents. Nothing in here is done.","dev\u002Flab\u002FREADME.md",{},15,"\u002Fportfolio\u002Fen\u002Fdev\u002Flab\u002FREADME.md","portfolio\u002Fdev\u002Flab\u002Freadme.en","Gpr8kS3pu7jEmmI1s5Im4vDbzLkgXIFXiyymPAMuWLk",{"id":205,"title":206,"description":207,"extension":8,"filename":198,"lang":30,"locale":20,"meta":208,"order":200,"path":209,"stem":210,"__hash__":211},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Freadme.fr.yaml","Le laboratoire","Explorations non finies : simulations émergentes, grilles hexagonales, graphes et agents. Rien ici n'est fini.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Flab\u002FREADME.md","portfolio\u002Fdev\u002Flab\u002Freadme.fr","3irBCLzO2nOVoR8Way3aXU2ujq-bOPOmpky_TDF3e3E",{"id":213,"title":214,"description":215,"extension":8,"filename":216,"lang":30,"locale":11,"meta":217,"order":218,"path":219,"stem":220,"__hash__":221},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Fthalweg.en.yaml","thalweg","An emergent geophysical world on a hex grid, in Rust. Local rules over a cell and its six neighbours, and rivers, lakes and seasons that emerge.","dev\u002Flab\u002Fthalweg.md",{},16,"\u002Fportfolio\u002Fen\u002Fdev\u002Flab\u002Fthalweg.md","portfolio\u002Fdev\u002Flab\u002Fthalweg.en","sQd30UPX-PFJo3JpBwtRRV8hVLKFu4jlgdxCqEk2iJY",{"id":223,"title":214,"description":224,"extension":8,"filename":216,"lang":30,"locale":20,"meta":225,"order":218,"path":226,"stem":227,"__hash__":228},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Fthalweg.fr.yaml","Monde géophysique émergent sur grille hexagonale, en Rust. Des règles locales sur une cellule et ses six voisines, et des rivières et des lacs qui émergent.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Flab\u002Fthalweg.md","portfolio\u002Fdev\u002Flab\u002Fthalweg.fr","DgNnEVu2T1C6OC9koXmaqugSmiwYhMXFa3Vus8OkZkI",{"id":230,"title":231,"description":232,"extension":8,"filename":233,"lang":30,"locale":11,"meta":234,"order":235,"path":236,"stem":237,"__hash__":238},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Flightfall.en.yaml","Lightfall","Full-emergent space simulation, 2D pixel art, slow. No player: machines that mine, refine and build, and a spectator.","dev\u002Flab\u002Flightfall.md",{},17,"\u002Fportfolio\u002Fen\u002Fdev\u002Flab\u002Flightfall.md","portfolio\u002Fdev\u002Flab\u002Flightfall.en","PBitf90cuSyz_ksxmmeunAE1bFAQaDwJOJxhc9XLc6k",{"id":240,"title":231,"description":241,"extension":8,"filename":233,"lang":30,"locale":20,"meta":242,"order":235,"path":243,"stem":244,"__hash__":245},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Flightfall.fr.yaml","Simulation spatiale full-émergente, 2D pixel art, lente. Pas de joueur : des machines qui minent, raffinent et construisent, et un spectateur.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Flab\u002Flightfall.md","portfolio\u002Fdev\u002Flab\u002Flightfall.fr","0PsgCsowRlr2fHh3RDpHGjdswGuToXoasxdcXraGlGI",{"id":247,"title":248,"description":249,"extension":8,"filename":250,"lang":30,"locale":85,"meta":251,"order":252,"path":253,"stem":254,"__hash__":255},"portfolio\u002Fportfolio\u002Fblog\u002Fapte.yaml","An eval is just a test that returns a value","apte is an async-first test framework for Python where unit tests and LLM evals run in the same engine, sharing the same fixtures.","blog\u002Fapte.md",{},18,"\u002Fportfolio\u002Fblog\u002Fapte.md","portfolio\u002Fblog\u002Fapte","YGLDdSrMk8GETlSozqnZSb3Z0CWPnJNB9Z8b67VJwM8",{"id":257,"title":258,"description":259,"extension":8,"filename":260,"lang":30,"locale":11,"meta":261,"order":252,"path":262,"stem":263,"__hash__":264},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Ffelix.en.yaml","Felix","AI-powered continuity assistant for screenwriters working on complex, multi-era narratives. Neo4j knowledge graph, paused.","dev\u002Flab\u002Ffelix.md",{},"\u002Fportfolio\u002Fen\u002Fdev\u002Flab\u002Ffelix.md","portfolio\u002Fdev\u002Flab\u002Ffelix.en","EE940d6Ay62bTsGFGXDkKwIW9vcqlHtaUhFagv3RymU",{"id":266,"title":258,"description":267,"extension":8,"filename":260,"lang":30,"locale":20,"meta":268,"order":252,"path":269,"stem":270,"__hash__":271},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Ffelix.fr.yaml","Assistant de continuité IA pour scénaristes qui travaillent sur des récits complexes, multi-époques. Graphe de connaissances Neo4j, en pause.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Flab\u002Ffelix.md","portfolio\u002Fdev\u002Flab\u002Ffelix.fr","ZKCR7RE81bm_nUd3g2Z_Uvv8Clc3TMFV-FbpZjwpG3g",{"id":273,"title":274,"description":275,"extension":8,"filename":276,"lang":30,"locale":11,"meta":277,"order":278,"path":279,"stem":280,"__hash__":281},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Fthe-commons-arena.en.yaml","The Commons Arena","Game theory simulator: AI agents compete in a public goods game with dynamic economics.","dev\u002Flab\u002Fthe-commons-arena.md",{},19,"\u002Fportfolio\u002Fen\u002Fdev\u002Flab\u002Fthe-commons-arena.md","portfolio\u002Fdev\u002Flab\u002Fthe-commons-arena.en","lhUKq73M7-cvdFwAnT0TtaDeQor6UZ_N5_uQ-zR4TNg",{"id":283,"title":274,"description":284,"extension":8,"filename":276,"lang":30,"locale":20,"meta":285,"order":278,"path":286,"stem":287,"__hash__":288},"portfolio\u002Fportfolio\u002Fdev\u002Flab\u002Fthe-commons-arena.fr.yaml","Simulateur de théorie des jeux : des agents IA s'affrontent dans un jeu de biens publics à économie dynamique.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002Flab\u002Fthe-commons-arena.md","portfolio\u002Fdev\u002Flab\u002Fthe-commons-arena.fr","ddz-Ib0tyt1yPKn3o_lhOEUR86fgqBTNepgDdZgKZlg",{"id":290,"title":291,"description":292,"extension":8,"filename":293,"lang":30,"locale":11,"meta":294,"order":295,"path":296,"stem":297,"__hash__":298},"portfolio\u002Fportfolio\u002Fdev\u002F42-school.en.yaml","42 School, C and C++ projects","Low-level projects from 42 Lyon: a malloc implementation, Corewar, an abstract VM, ft_ls, Lem-in and Snow Crash.","dev\u002F42-school.md",{},20,"\u002Fportfolio\u002Fen\u002Fdev\u002F42-school.md","portfolio\u002Fdev\u002F42-school.en","XYKWJGV0-8xoXZQFZmCXF4QCyb0L_nN_NkuLGPpHOuA",{"id":300,"title":301,"description":302,"extension":8,"filename":293,"lang":30,"locale":20,"meta":303,"order":295,"path":304,"stem":305,"__hash__":306},"portfolio\u002Fportfolio\u002Fdev\u002F42-school.fr.yaml","42 School, projets C et C++","Du bas niveau à 42 Lyon : réimplémentation de malloc, Corewar, une VM abstraite, ft_ls, Lem-in et Snow Crash.",{},"\u002Fportfolio\u002Ffr\u002Fdev\u002F42-school.md","portfolio\u002Fdev\u002F42-school.fr","PnHrpjWbKiNEnCjA2hAznMfNAel6FVwW6Zr9lawmHFQ",1790059331114]