[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"content:profile":3,"content:experience":26,"content:legal-links":79,"content:projects":80,"project:\u002Fprojects\u002Fself-playing-pong":122},{"id":4,"cat":5,"email":10,"extension":11,"github":12,"languages":13,"linkedin":16,"meta":17,"name":18,"portrait":19,"role":22,"stem":23,"website":24,"__hash__":25},"profile\u002Fdata\u002Fprofile.yml",{"name":6,"image":7,"patch":8,"alt":9},"Baghira","\u002Fimages\u002Fbaghira.webp","\u002Fimages\u002Fbaghira-patch.webp","Baghira, meine Katze, döst auf der Fußzeile","contact@finnegan-berz.com","yml","https:\u002F\u002Fgithub.com\u002Ffinnbe",[14,15],"Deutsch (Muttersprache)","Englisch (B2)","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Ff-berz\u002F",{},"Finnegan Berz",{"src":20,"alt":21},"\u002Fimages\u002Ffinnegan-berz-portrait.jpg","Finnegan Berz im dunkelblauen Hemd, lächelnd, im Grünen","Frontend Developer","data\u002Fprofile","https:\u002F\u002Ffinnegan-berz.com","tEHWycycqWcX6vSJ0wmeIVNCmdZJFkHmOM46KTTD3Go",[27,45,65],{"id":28,"company":29,"endDate":30,"extension":11,"highlights":31,"meta":32,"position":22,"stack":33,"startDate":40,"stem":41,"summary":42,"url":43,"__hash__":44},"experience\u002Fdata\u002Fexperience\u002F2026-addmore.yml","addmore GmbH",null,[],{},[34,35,36,37,38,39],"Vue","TypeScript","JavaScript","PHP","HTML","CSS","2026-01-01","data\u002Fexperience\u002F2026-addmore","Frontend-Entwicklung in Kundenprojekten, von Vue-Komponenten bis zu klassischen PHP-Templates.","https:\u002F\u002Faddmore.de","llN7oj4D3cjQHBok8CgGPE9DWa1JaUidzZXPjP3lkSE",{"id":46,"company":47,"endDate":40,"extension":11,"highlights":48,"meta":53,"position":54,"stack":55,"startDate":61,"stem":62,"summary":63,"url":30,"__hash__":64},"experience\u002Fdata\u002Fexperience\u002F2025-javascript-developer.yml","cs webdevelopment e.K.",[49,50,51,52],"Anforderungen aufnehmen und in Architektur und Tickets übersetzen","REST- und GraphQL-APIs mit Fastify, inklusive Auth, Caching und Logging","Frontend-Module mit Vue und Nuxt, mit Fokus auf Performance und Barrierefreiheit","Infrastruktur als Code mit Terraform und CI\u002FCD für reproduzierbare Releases",{},"JavaScript Developer",[34,56,35,57,58,59,60],"Nuxt","Fastify","PostgreSQL","GraphQL","Terraform","2025-01-01","data\u002Fexperience\u002F2025-javascript-developer","Konzeption und Umsetzung von Web-Anwendungen, vom Datenmodell bis zum Deployment.","RDat_U6CkQvQ9jX-MV9RE0-03IPKko9f60o_77Fcp7k",{"id":66,"company":47,"endDate":61,"extension":11,"highlights":67,"meta":71,"position":72,"stack":73,"startDate":75,"stem":76,"summary":77,"url":30,"__hash__":78},"experience\u002Fdata\u002Fexperience\u002F2022-ausbildung.yml",[68,69,70],"Frontend- und Backend-Funktionen in laufenden Projekten umgesetzt","Testfälle aus User Stories abgeleitet und Unit-Tests geschrieben","Datenmodelle mitentwickelt und Query-Performance verbessert",{},"Ausbildung Fachinformatiker für Anwendungsentwicklung",[34,56,74,35,58],"Node.js","2022-01-01","data\u002Fexperience\u002F2022-ausbildung","Duale Ausbildung mit Mitarbeit an produktiven Web-Anwendungen.","Tpq1pPImJ-9BMvvYmHLb1fWQOpiFwIYKygjl0eIA6jM",[],[81,93,105,113],{"path":82,"title":83,"summary":84,"year":85,"role":86,"stack":87,"order":92},"\u002Fprojects\u002Fportfolio","Dieses Portfolio","Neuaufbau meiner Website als statischer One-Pager – mit Tests zuerst, eigenem Design-System und KI-Agenten, die Issues in getrennten Branches umsetzen.",2026,"Konzept, Design und Entwicklung",[56,34,35,88,89,90,91],"Nuxt Content","Vitest","Playwright","Cloudflare Workers",1,{"path":94,"title":95,"summary":96,"year":85,"role":97,"stack":98,"order":104},"\u002Fprojects\u002Fbring-liste","Bring-Liste","Web-App, mit der Gruppen planen, wer was mitbringt – ohne Login, serverlos auf AWS.","Konzept und Umsetzung",[99,35,100,101,102,103],"Vue 3","Vite","AWS Lambda","DynamoDB","Zod",2,{"path":106,"title":107,"summary":108,"year":85,"role":109,"stack":110,"order":112},"\u002Fprojects\u002Fself-playing-pong","Self-Playing Pong","Pong, das sich selbst spielt – zwei Bots im Stil eines alten Schwarzweiß-Röhrenfernsehers, ohne Framework im Browser.","Idee und Umsetzung",[36,111,38,39,91],"Canvas",3,{"path":114,"title":115,"summary":116,"year":117,"role":109,"stack":118,"order":121},"\u002Fprojects\u002Ftimer-to-event","timer-to-event","Discord-Bot, der Events per Slash-Command plant und vor dem Termin in festen Abständen erinnert.",2025,[35,74,119,120],"discord.js","SQLite",4,{"id":123,"title":107,"body":124,"description":171,"extension":176,"image":177,"links":180,"meta":182,"navigation":183,"order":112,"path":106,"role":109,"seo":184,"stack":185,"stem":186,"summary":108,"year":85,"__hash__":187},"projects\u002Fprojects\u002Fself-playing-pong.md",{"type":125,"value":126,"toc":170},"minimark",[127,132,136,140,163,167],[128,129,131],"h2",{"id":130},"ausgangslage","Ausgangslage",[133,134,135],"p",{},"Ein Abendprojekt: Ich wollte etwas Kleines bauen, das ohne Framework auskommt und einfach läuft, wenn man es öffnet.",[128,137,139],{"id":138},"umsetzung","Umsetzung",[141,142,143,151,157],"ul",{},[144,145,146,150],"li",{},[147,148,149],"strong",{},"Zwei Bots:"," Beide Schläger werden vom Rechner gesteuert. Sie berechnen, wo der Ball ankommen wird, und reagieren schneller, je näher er kommt.",[144,152,153,156],{},[147,154,155],{},"Röhrenfernseher-Look:"," Nur Graustufen, weil ein alter Schwarzweiß-Fernseher keine Farben kennt, und ein Rand, wie ihn das Bild eines Röhrengeräts abschneidet.",[144,158,159,162],{},[147,160,161],{},"Für schwache Geräte:"," Das Canvas rendert bewusst in CSS-Pixeln statt in voller Bildschirmauflösung, damit es auch auf älterer Hardware flüssig läuft.",[128,164,166],{"id":165},"ergebnis","Ergebnis",[133,168,169],{},"Läuft live im Browser – einfach öffnen und zuschauen.",{"title":171,"searchDepth":104,"depth":104,"links":172},"",[173,174,175],{"id":130,"depth":104,"text":131},{"id":138,"depth":104,"text":139},{"id":165,"depth":104,"text":166},"md",{"src":178,"alt":179},"\u002Fimages\u002Fprojects\u002Fself-playing-pong.webp","Self-Playing Pong im Browser: zwei weiße Schläger und ein Ball auf schwarzem Spielfeld mit gestrichelter Mittellinie, oben die Punktestände der Bots Volt und Orbit",{"live":181},"https:\u002F\u002Fself-playing-pong.berzfinn.workers.dev\u002F",{},true,{"title":107,"description":171},[36,111,38,39,91],"projects\u002Fself-playing-pong","LX9-OOhd55F-Pnv4u-t5AhnukBntjbbNo6b4YVvQJoc",1792098143830]