[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"content:profile":3,"content:experience":26,"content:legal-links":79,"content:projects":80,"project:\u002Fprojects\u002Fportfolio":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":83,"body":124,"description":195,"extension":201,"image":202,"links":30,"meta":205,"navigation":206,"order":92,"path":82,"role":86,"seo":207,"stack":208,"stem":209,"summary":84,"year":85,"__hash__":210},"projects\u002Fprojects\u002Fportfolio.md",{"type":125,"value":126,"toc":194},"minimark",[127,132,136,140,143,147,187,191],[128,129,131],"h2",{"id":130},"ausgangslage","Ausgangslage",[133,134,135],"p",{},"Meine alte Seite war eine Sammlung aus Karten, Kennzahlen und einem Baustellen-Hinweis, der beim Öffnen die ganze Seite verdeckte. Sie sagte wenig über mich und sah aus wie viele andere. Ich wollte eine ruhige Seite, die in einer halben Minute zeigt, wer ich bin und woran ich arbeite – und die ich ohne Angst ändern kann.",[128,137,139],{"id":138},"meine-rolle","Meine Rolle",[133,141,142],{},"Konzept, Gestaltung und Umsetzung. Größere Aufgaben habe ich als GitHub-Issues so ausführlich beschrieben, dass KI-Agenten (Claude Code) sie selbstständig in eigenen Branches umsetzen konnten. Jeden Pull Request habe ich vor dem Merge geprüft und freigegeben.",[128,144,146],{"id":145},"umsetzung","Umsetzung",[148,149,150,158,164,170,176],"ul",{},[151,152,153,157],"li",{},[154,155,156],"strong",{},"Inhalte als Daten:"," Texte, Werdegang und Stack liegen in Nuxt Content mit Zod-Schemas. Ungültige Inhalte brechen den Build ab.",[151,159,160,163],{},[154,161,162],{},"Komponenten statt Seiten:"," Die Startseite ist eine Folge von Sections, jede mit eigenem Test und eigener Doku.",[151,165,166,169],{},[154,167,168],{},"Tests zuerst:"," Vitest für Logik und Komponenten, Playwright für Abläufe, Barrierefreiheit (axe), Hydration-Fehler und Screenshots in hellem und dunklem Modus, mobil und am Desktop.",[151,171,172,175],{},[154,173,174],{},"Datenschutz als Test:"," Automatische Prüfungen stellen sicher, dass keine Ortsangaben und keine Bild-Metadaten veröffentlicht werden.",[151,177,178,181,182,186],{},[154,179,180],{},"Auslieferung:"," Statisch generiert und über Cloudflare Workers ausgeliefert. Jeder Merge auf ",[183,184,185],"code",{},"master"," geht automatisch live; die CI stellt den Cloudflare-Build vorher nach.",[128,188,190],{"id":189},"ergebnis","Ergebnis",[133,192,193],{},"Eine Seite ohne Template-Optik, die in der CI bei jedem Pull Request vollständig geprüft wird – und ein Arbeitsablauf, in dem ich Aufgaben beschreibe, prüfe und entscheide, während Routinearbeit automatisiert läuft.",{"title":195,"searchDepth":104,"depth":104,"links":196},"",[197,198,199,200],{"id":130,"depth":104,"text":131},{"id":138,"depth":104,"text":139},{"id":145,"depth":104,"text":146},{"id":189,"depth":104,"text":190},"md",{"src":203,"alt":204},"\u002Fimages\u002Fprojects\u002Fportfolio.webp","Startseite dieses Portfolios: links Name, Rolle, Einleitungssatz und Kontakt-Button, rechts mein Porträtfoto im Grünen",{},true,{"title":83,"description":195},[56,34,35,88,89,90,91],"projects\u002Fportfolio","j_Xs6bg02rdnXvCMmlZDxhZAY7LQtZdTwkQ5MxRgXp8",1792098143888]