[{"data":1,"prerenderedAt":952},["ShallowReactive",2],{"projects-teaser":3,"biography-milestones":577,"biography-milestones-de":791},[4,50,79,123,155,188,216,254,286,316,350,385,421,448,484,517,545],{"id":5,"title":6,"accent":7,"body":8,"commits":15,"date":22,"de":23,"description":27,"emergent":28,"extension":29,"home":30,"langs":31,"meta":35,"navigation":36,"note":30,"path":37,"private":38,"pushed":39,"repo":40,"seo":41,"shared":38,"skin":28,"spark":42,"spec":46,"stars":43,"stem":47,"url":48,"__hash__":49},"projects/projects/100year-archive.md","A century of objects","#7fe7ff",{"type":9,"value":10,"toc":11},"minimark",[],{"title":12,"searchDepth":13,"depth":13,"links":14},"",2,[],[16,19],{"date":17,"message":18},"26 Feb","Refactor SimilarObjects to streamline token management",{"date":20,"message":21},"25 Feb","refactor: enhance authentication token management and the UI","2025-03-28",{"title":24,"description":25,"spec":26},"Ein Jahrhundert in Objekten","Ein Upload-Tool für ein Archiv zum hundertjährigen Jubiläum. Beitragende laden Objekte hoch, die App zeigt ähnliche, schon katalogisierte Objekte an, und das Token-Handling sorgt dafür, dass lange Katalogisierungs-Sessions nicht abbrechen.","Directus · Ähnlichkeitssuche für Objekte","An upload desk for a centenary archive. Contributors add objects, the app points out ones that look like something already catalogued, and the token handling keeps long cataloguing sessions from dropping.","archive","md",null,[32,33,34],"Vue","TypeScript","CSS",{},true,"/projects/100year-archive",false,"2026-02-26","johkirche/100year-object-upload-frontend",{"title":6,"description":27},[43,43,44,43,43,43,44,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,45,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43],0,1,3,"Directus · similar-object matching","projects/100year-archive","https://github.com/johkirche/100year-object-upload-frontend","14BEuFBGENaRqWzOElrgnq6WUbLThTMjVPKr72peg_4",{"id":51,"title":52,"accent":53,"body":54,"commits":58,"date":59,"de":60,"description":64,"emergent":65,"extension":29,"home":30,"langs":66,"meta":69,"navigation":36,"note":30,"path":70,"private":38,"pushed":71,"repo":72,"seo":73,"shared":38,"skin":65,"spark":74,"spec":75,"stars":13,"stem":76,"url":77,"__hash__":78},"projects/projects/angry-birds-gan.md","Angry Birds levels, generated","#ff6b6b",{"type":9,"value":55,"toc":56},[],{"title":12,"searchDepth":13,"depth":13,"links":57},[],[],"2023-07-29",{"title":61,"description":62,"spec":63},"Angry-Birds-Level, generiert","Die veröffentlichte Version: vortrainierte Modelle und der Decoding-Algorithmus, erschienen zusammen mit dem Paper „Utilizing GANs for Stable Structure Generation in Angry Birds“.","Paper · vortrainierte Modelle","The published version: pretrained models and the decoding algorithm, released with the paper “Utilizing GANs for Stable Structure Generation in Angry Birds”.","paper",[67,68],"Jupyter Notebook","Python",{},"/projects/angry-birds-gan","2025-02-18","Blaxzter/Utilizing-Generative-Adversarial-Networks-for-Stable-Structure-Generation-in-Angry-Birds",{"title":52,"description":64},[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43],"paper · pretrained models","projects/angry-birds-gan","https://github.com/Blaxzter/Utilizing-Generative-Adversarial-Networks-for-Stable-Structure-Generation-in-Angry-Birds","PnO2OMJe14DenUwC6FzIuyWNtcbGeNFpYuwhQvt_n7M",{"id":80,"title":81,"accent":82,"body":83,"commits":87,"date":94,"de":95,"description":98,"emergent":99,"extension":29,"home":100,"langs":101,"meta":103,"navigation":36,"note":30,"path":104,"private":38,"pushed":105,"repo":106,"seo":107,"shared":36,"skin":108,"spark":109,"spec":118,"stars":119,"stem":120,"url":121,"__hash__":122},"projects/projects/episko.md","Episko","#00ff9c",{"type":9,"value":84,"toc":85},[],{"title":12,"searchDepth":13,"depth":13,"links":86},[],[88,91],{"date":89,"message":90},"18 Sep","fleet: rebuilt to the design, and it is the screen the app opens on",{"date":92,"message":93},"17 Sep","dashboard: three columns, one ranked queue, and a thread you can read","2026-07-16",{"title":81,"description":96,"spec":97},"Eine native Desktop-App, um viele Coding-Agents gleichzeitig laufen zu lassen. Jede Session bekommt ein echtes Terminal, und Claude und Codex melden Phase, Kontextverbrauch, Kosten und Berechtigungsanfragen zurück. So behältst du ein Dutzend Agents so leicht im Blick wie einen einzelnen Chat.","Tauri + Rust · 198 von 617 Commits","A native desktop app for running many coding agents at once. Every session gets a real terminal, and Claude and Codex report their phase, context use, cost and permission prompts, so a dozen agents are as easy to keep track of as one chat.","sessions","https://episko.dev",[33,102,34],"Rust",{},"/projects/episko","2026-09-18","respeak-io/episko",{"title":81,"description":98},"cockpit",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,13,110,111,112,113,114,115,116,117,114],71,56,14,6,10,8,9,12,"Tauri + Rust · 198 of 617 commits",20,"projects/episko","https://github.com/respeak-io/episko","H6eAxo03Rr7cw3F4vz3KDSFO2lIG2jQdpNzbETeFuyU",{"id":124,"title":125,"accent":126,"body":127,"commits":131,"date":136,"de":137,"description":141,"emergent":142,"extension":29,"home":30,"langs":143,"meta":144,"navigation":36,"note":30,"path":145,"private":38,"pushed":105,"repo":146,"seo":147,"shared":38,"skin":142,"spark":148,"spec":151,"stars":43,"stem":152,"url":153,"__hash__":154},"projects/projects/fabraham.md","This website","#9ad1ff",{"type":9,"value":128,"toc":129},[],{"title":12,"searchDepth":13,"depth":13,"links":130},[],[132,134],{"date":89,"message":133},"fix(explore): stop the hidden cards eating the free camera’s drag",{"date":89,"message":135},"feat(outro): the coda gets planets, and the finale lets the cursor go","2025-05-31",{"title":138,"description":139,"spec":140},"Diese Website","Diese Seite. Nuxt und Nuxt Content, Lenis und GSAP und ein GLB-Kopf, gerendert durch einen ASCII-Post-Process. Kamera, Licht, Blickrichtung und Set-Pieces werden alle aus einem einzigen Scroll-Wert berechnet.","ein Scroll-Signal · acht Set-Pieces","This site. Nuxt and Nuxt Content, Lenis and GSAP, and a GLB head rendered through an ASCII post-process. Camera, lights, gaze and set-pieces are all derived from a single scroll value.","ascii",[32,33,34],{},"/projects/fabraham","Blaxzter/fabraham",{"title":125,"description":141},[43,13,43,43,44,44,43,13,43,43,43,43,43,43,149,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,149,112,43,44,43,43,43,44,44,43,43,43,43,43,43,150],4,16,"one scroll signal · eight set-pieces","projects/fabraham","https://github.com/Blaxzter/fabraham","bQK1rZM5Dsviu1oyQ2wlv3DXRsrQw3WzQUFOIed9hSY",{"id":156,"title":157,"accent":158,"body":159,"commits":163,"date":169,"de":170,"description":173,"emergent":174,"extension":29,"home":30,"langs":175,"meta":176,"navigation":36,"note":30,"path":177,"private":38,"pushed":178,"repo":179,"seo":180,"shared":38,"skin":181,"spark":182,"spec":184,"stars":43,"stem":185,"url":186,"__hash__":187},"projects/projects/free-fast-file-sync.md","Free Fast File Sync","#ff8a3d",{"type":9,"value":160,"toc":161},[],{"title":12,"searchDepth":13,"depth":13,"links":162},[],[164,167],{"date":165,"message":166},"24 Jul","fix(e2e-native): stop flaking on a slow msedgedriver startup (#4)",{"date":165,"message":168},"ci: make the Tier-2 native E2E actually run, and gate PRs with it (#3)","2026-06-25",{"title":157,"description":171,"spec":172},"Dateisynchronisation mit Rust-Kern und TypeScript-Oberfläche. Eine native End-to-End-Testsuite läuft bei jedem Pull Request, auch für den langsamen Treiberstart, der die Tests früher unzuverlässig gemacht hat.","Rust-Kern · TS-Oberfläche · Tier-2-E2E","File sync with a Rust core and a TypeScript shell. A native end-to-end suite runs on every pull request, including the slow-driver startup case that used to make it flaky.","files",[102,33,34],{},"/projects/free-fast-file-sync","2026-07-24","Blaxzter/Free-Fast-File-Sync",{"title":157,"description":173},"hatch",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,183,113,45,43,13,43,43,43,43,43,43,43,43],15,"Rust core · TS shell · Tier-2 E2E","projects/free-fast-file-sync","https://github.com/Blaxzter/Free-Fast-File-Sync","BJZifr1y79roimNRxq3Qar7-_qnYjPO9_z0heLqMPwI",{"id":189,"title":190,"accent":126,"body":191,"commits":195,"date":196,"de":197,"description":201,"emergent":202,"extension":29,"home":30,"langs":203,"meta":205,"navigation":36,"note":30,"path":206,"private":38,"pushed":207,"repo":208,"seo":209,"shared":38,"skin":210,"spark":211,"spec":212,"stars":43,"stem":213,"url":214,"__hash__":215},"projects/projects/gaenapi.md","Genetic algorithms for the JVM",{"type":9,"value":192,"toc":193},[],{"title":12,"searchDepth":13,"depth":13,"links":194},[],[],"2020-02-27",{"title":198,"description":199,"spec":200},"Genetische Algorithmen für die JVM","Generische Umgebungen für genetische Algorithmen auf der JVM, mit Hall of Fame, anpassbaren Selektionswahrscheinlichkeiten und automatischer Hyperparameter-Suche.","Hall of Fame · automatische Hyperparameter","Generic genetic-algorithm environments for the JVM, with a hall of fame, selection-probability shaping and automated hyper-parameter search.","dna",[204],"Java",{},"/projects/gaenapi","2025-12-19","Blaxzter/GaenAPI",{"title":190,"description":201},"genome",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43],"hall of fame · auto hyper-params","projects/gaenapi","https://github.com/Blaxzter/GaenAPI","M9ybr_IdWCG1865FFyxTADsBa3_xeRH5eXt1csbiZLs",{"id":217,"title":218,"accent":219,"body":220,"commits":224,"date":230,"de":231,"description":235,"emergent":236,"extension":29,"home":30,"langs":237,"meta":238,"navigation":36,"note":30,"path":239,"private":38,"pushed":240,"repo":241,"seo":242,"shared":38,"skin":243,"spark":244,"spec":250,"stars":43,"stem":251,"url":252,"__hash__":253},"projects/projects/gb-app-pwa.md","The hymnal app","#ffd479",{"type":9,"value":221,"toc":222},[],{"title":12,"searchDepth":13,"depth":13,"links":223},[],[225,228],{"date":226,"message":227},"15 Sep","fix(lied): sound the note that was tapped",{"date":226,"message":229},"fix(noten): scale every note into the words’ width","2025-12-27",{"title":232,"description":233,"spec":234},"Die Gesangbuch-App","Die App, aus der in der Gemeinde gesungen wird: gesetzte Noten, die sich an den Bildschirm anpassen und dabei Platz für den Text lassen, Noten, die beim Antippen erklingen, und Blättern entlang der Playlist oder des Gottesdienstablaufs.","gesetzte Noten · Note antippen und hören","The app people sing from in church: engraved sheet music that reflows to the screen while keeping room for the lyrics, notes you can tap to hear, and paging that follows the playlist or the order of service.","notes",[32,33,34],{},"/projects/gb-app-pwa","2026-09-19","johkirche/gb-app-pwa",{"title":218,"description":235},"staff",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,13,44,245,112,245,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,183,116,45,43,43,43,43,43,43,43,43,246,247,248,43,43,249],7,5,62,32,33,"engraved notation · tap a note to hear it","projects/gb-app-pwa","https://github.com/johkirche/gb-app-pwa","Wq5yuplG129jP5sSn8Wpil4GhPtayipMBtA51ubBQpM",{"id":255,"title":256,"accent":219,"body":257,"commits":261,"date":267,"de":268,"description":272,"emergent":236,"extension":29,"home":30,"langs":273,"meta":276,"navigation":36,"note":30,"path":277,"private":38,"pushed":240,"repo":278,"seo":279,"shared":38,"skin":280,"spark":281,"spec":271,"stars":44,"stem":283,"url":284,"__hash__":285},"projects/projects/gb-dashboard.md","The hymnal’s editor",{"type":9,"value":258,"toc":259},[],{"title":12,"searchDepth":13,"depth":13,"links":260},[],[262,265],{"date":263,"message":264},"4 Sep","refactor(inhaltsverzeichnis): Melodie-Spalte ohne 2000er-Liednummern",{"date":263,"message":266},"feat(noten): Choralbuchsatz im Notenbild-Karussell anzeigen","2024-02-15",{"title":269,"description":270,"spec":271},"Der Gesangbuch-Editor","Das Redaktions-Tool hinter dem Gesangbuch der Gemeinde: Inhaltsverzeichnis, ein Karussell mit gesetzten Noten und Änderungsnotizen.","Directus · Vue · Vuetify","The editing tool behind the church hymnal: table of contents, a carousel of engraved sheet music, and change notes.",[32,274,275],"JavaScript","SCSS",{},"/projects/gb-dashboard","Blaxzter/gb-dashboard",{"title":256,"description":272},"desk",[13,43,246,43,43,43,43,44,43,43,43,43,43,43,43,43,43,44,43,13,246,43,149,43,43,43,44,43,43,45,149,43,246,116,45,115,282,183,246,13,246,13,114,119,45,45,246,149,43,246,43,43],22,"projects/gb-dashboard","https://github.com/Blaxzter/gb-dashboard","MQN3Cf9KEu5_6dNPK8Fz8yZKRBDxYFoQdvAWS6woBdA",{"id":287,"title":288,"accent":219,"body":289,"commits":293,"date":298,"de":299,"description":303,"emergent":304,"extension":29,"home":30,"langs":305,"meta":306,"navigation":36,"note":30,"path":307,"private":38,"pushed":308,"repo":309,"seo":310,"shared":38,"skin":304,"spark":311,"spec":312,"stars":43,"stem":313,"url":314,"__hash__":315},"projects/projects/gb-pwa.md","The hymnal, offline",{"type":9,"value":290,"toc":291},[],{"title":12,"searchDepth":13,"depth":13,"links":292},[],[294,296],{"date":226,"message":295},"docs(testing): 887 tests across 27 files",{"date":226,"message":297},"fix(offline): honest download state, prompt-mode updates, install prompt","2025-06-06",{"title":300,"description":301,"spec":302},"Das Gesangbuch, offline","Der Offline-Teil des Gesangbuchs: ein Download-Status, der zeigt, was wirklich gespeichert ist, Dark Mode schon vor dem ersten Rendern und ein Gottesdienst-Stepper, der sich sperrt, solange ein Gottesdienst läuft.","887 Tests · 27 Dateien · offline-first","The offline part of the hymnal: a download state that reports what is really stored, dark mode applied before the first paint, and a service stepper that locks while a service is running.","tests",[33,32,274],{},"/projects/gb-pwa","2026-09-15","johkirche/gb-pwa",{"title":288,"description":303},[43,43,43,43,43,43,43,43,43,43,43,246,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,13,246,149,43,43,43,43,43,43,43,119,45,44,43,43,43,112],"887 tests · 27 files · offline-first","projects/gb-pwa","https://github.com/johkirche/gb-pwa","3QA48kKHw4VXWaJtKfMg7lNu6tWjC7tRQjMitAovbqM",{"id":317,"title":318,"accent":319,"body":320,"commits":324,"date":331,"de":332,"description":335,"emergent":336,"extension":29,"home":30,"langs":337,"meta":339,"navigation":36,"note":30,"path":340,"private":38,"pushed":341,"repo":342,"seo":343,"shared":38,"skin":344,"spark":345,"spec":346,"stars":45,"stem":347,"url":348,"__hash__":349},"projects/projects/instant-twitch-replay.md","Instant Twitch Replay","#c4a0ff",{"type":9,"value":321,"toc":322},[],{"title":12,"searchDepth":13,"depth":13,"links":323},[],[325,328],{"date":326,"message":327},"22 Jul","feat: configurable replay volume and redesigned settings popup",{"date":329,"message":330},"22 Feb","feat: update version to 2.0 in manifest.json","2024-11-28",{"title":318,"description":333,"spec":334},"Nimmt die letzten x Sekunden eines Twitch-Streams auf, damit du dir noch einmal ansehen kannst, was du gerade verpasst hast. Einstellbare Wiedergabelautstärke und ein überarbeitetes Einstellungs-Popup.","v2.0 · rollender 60-s-Puffer","Records the last x seconds of a Twitch stream so you can replay what you just missed. Configurable replay volume and a redesigned settings popup.","clips",[274,338],"HTML",{},"/projects/instant-twitch-replay","2026-07-22","Blaxzter/Instant-Twitch-Replay",{"title":318,"description":335},"scrub",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,149,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,13,43,43,43,43,43,43,43,43],"v2.0 · rolling 60s buffer","projects/instant-twitch-replay","https://github.com/Blaxzter/Instant-Twitch-Replay","9R-NSicRXVkTC8dYifEs5g51iV10iVXMXYz1oOm5MA4",{"id":351,"title":352,"accent":353,"body":354,"commits":358,"date":365,"de":366,"description":370,"emergent":371,"extension":29,"home":372,"langs":373,"meta":374,"navigation":36,"note":375,"path":376,"private":38,"pushed":377,"repo":378,"seo":379,"shared":36,"skin":371,"spark":380,"spec":381,"stars":13,"stem":382,"url":383,"__hash__":384},"projects/projects/kitawo.md","Johannischer Kirchentag","#ffb454",{"type":9,"value":355,"toc":356},[],{"title":12,"searchDepth":13,"depth":13,"links":357},[],[359,362],{"date":360,"message":361},"Apr 2025","feat: fix filtering on preview page",{"date":363,"message":364},"Mar 2025","chore: update docker-compose and Dockerfile configurations","2020-07-04",{"title":352,"description":367,"spec":368,"note":369},"Die Veranstaltungsseite des Johannischen Kirchentags: Programm, Termine und Anmeldung, als statische Seite auf Cloudflare. Fünf Jahre Arbeit mit Unterbrechungen, zusammen mit der Gemeinschaft; ich bin der zweitgrößte Contributor.","johannischer-kirchentag.de · 94 Commits","In diesem Zeitraum keine Commits von mir. Meine 94 Commits liegen zwischen Juni 2020 und April 2025; die Seite ist live und andere pflegen sie weiter.","The event site for the Johannischer Kirchentag: programme, dates and registration, deployed as a static site on Cloudflare. Five years of on-and-off work with the community; I'm its second-largest contributor.","event","https://johannischer-kirchentag.de",[32,274,33],{},"No commits from me in this window. My 94 commits run from Jun 2020 to Apr 2025; the site is live and others keep it going.","/projects/kitawo","2026-08-21","johkirche/KiTaWo-Frontend",{"title":352,"description":370},[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43],"johannischer-kirchentag.de · 94 commits","projects/kitawo","https://github.com/johkirche/KiTaWo-Frontend","_bmAiuW8ZAY5zI1hLU-JI2rdQZwz-fnZejXAFpL2ulM",{"id":386,"title":387,"accent":82,"body":388,"commits":392,"date":397,"de":398,"description":401,"emergent":402,"extension":29,"home":403,"langs":404,"meta":405,"navigation":36,"note":30,"path":406,"private":38,"pushed":240,"repo":407,"seo":408,"shared":38,"skin":409,"spark":410,"spec":417,"stars":43,"stem":418,"url":419,"__hash__":420},"projects/projects/logolab.md","LogoLab",{"type":9,"value":389,"toc":390},[],{"title":12,"searchDepth":13,"depth":13,"links":391},[],[393,395],{"date":89,"message":394},"feat(ui): ask what kind of report it is, then hand over a real GitHub form",{"date":89,"message":396},"fix(ui): a tooltip flips instead of landing on the control it describes","2026-06-09",{"title":387,"description":399,"spec":400},"Vorschau, Bereinigung, Vektorisierung und Export deines Logos, komplett im Browser. Keine Uploads, keine Anmeldung. Die Hintergrundentfernung läuft auf WebGPU.","WebGPU · transformers.js · kein Upload","Preview, clean up, vectorize and export your logo, entirely in your browser. No uploads, no sign-up. Background removal runs on WebGPU.","vectors","https://logolab.fabraham.dev",[33,338,34],{},"/projects/logolab","Blaxzter/LogoLab",{"title":387,"description":401},"alpha",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,117,411,183,149,246,412,413,115,414,415,116,183,13,416,413],43,21,17,23,13,52,"WebGPU · transformers.js · no upload","projects/logolab","https://github.com/Blaxzter/LogoLab","eIKCsVGcMxJh2oh4k4jv22EUU-z8N10aTqZWl2s7SGA",{"id":422,"title":423,"accent":319,"body":424,"commits":428,"date":429,"de":430,"description":434,"emergent":435,"extension":29,"home":30,"langs":436,"meta":437,"navigation":36,"note":30,"path":438,"private":38,"pushed":439,"repo":440,"seo":441,"shared":38,"skin":442,"spark":443,"spec":444,"stars":44,"stem":445,"url":446,"__hash__":447},"projects/projects/master-thesis.md","The master’s thesis",{"type":9,"value":425,"toc":426},[],{"title":12,"searchDepth":13,"depth":13,"links":427},[],[],"2022-04-04",{"title":431,"description":432,"spec":433},"Die Masterarbeit","Die Arbeit selbst: GANs, die Level für Science Birds generieren, bewertet danach, ob die entworfenen Strukturen tatsächlich stehen bleiben.","Science Birds · auf Spielbarkeit bewertet","The thesis itself: GANs trained to generate Science Birds levels, scored on whether the structures they design actually stay standing.","blocks",[67,68,204],{},"/projects/master-thesis","2022-12-10","Blaxzter/Master-Thesis_GAN-level-gen",{"title":423,"description":434},"lattice",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43],"Science Birds · playability-scored","projects/master-thesis","https://github.com/Blaxzter/Master-Thesis_GAN-level-gen","MJGKCJCebRQhXmTDP-MzDeW2BMuDd4LzkzVvzhRvwOw",{"id":449,"title":450,"accent":82,"body":451,"commits":455,"date":462,"de":463,"description":466,"emergent":467,"extension":29,"home":468,"langs":469,"meta":470,"navigation":36,"note":30,"path":471,"private":36,"pushed":472,"repo":473,"seo":474,"shared":38,"skin":475,"spark":476,"spec":481,"stars":43,"stem":482,"url":468,"__hash__":483},"projects/projects/puttyparty.md","Putty Party",{"type":9,"value":452,"toc":453},[],{"title":12,"searchDepth":13,"depth":13,"links":454},[],[456,459],{"date":457,"message":458},"1 Oct","feat(codes): Gutscheine — ein Code schaltet einen Tarif für n Monate frei",{"date":460,"message":461},"30 Sep","chore(dev): pnpm run dev:fixture — Wegwerf-DB mit Daten auf jeder /admin-Seite","2026-06-12",{"title":450,"description":464,"spec":465},"Der digitale Score-Block für Minigolf-Anlagen. Gäste scannen am Eingang einen QR-Code und spielen sich Bahn für Bahn am eigenen Handy durch, ohne App und ohne Konto, während ein großer Bildschirm die Live-Rangliste zeigt: Podium, Gleichstände und wer gerade aufgestiegen ist.","Workers · Durable Objects · Live-Rangliste","A digital scorecard for mini-golf courses. Guests scan a QR code at the entrance and play hole by hole on their own phone, with no app and no account, while a big screen keeps the live leaderboard: podium, ties and who just climbed.","golf","https://puttyparty.de",[33,34,274],{},"/projects/puttyparty","2026-10-02","Blaxzter/PuttyParty",{"title":450,"description":466},"green",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,117,113,113,43,413,477,245,150,478,477,44,116,479,113,413,411,480],19,65,18,63,"Workers · Durable Objects · live board","projects/puttyparty","9wuZ4LdMl7Fph10tSr64NffnWjhbxbxqd2UMh0f9V3U",{"id":485,"title":486,"accent":7,"body":487,"commits":491,"date":497,"de":498,"description":502,"emergent":503,"extension":29,"home":30,"langs":504,"meta":506,"navigation":36,"note":30,"path":507,"private":38,"pushed":508,"repo":509,"seo":510,"shared":38,"skin":511,"spark":512,"spec":513,"stars":246,"stem":514,"url":515,"__hash__":516},"projects/projects/room-booking-tool.md","Room booking, self-hosted",{"type":9,"value":488,"toc":489},[],{"title":12,"searchDepth":13,"depth":13,"links":490},[],[492,495],{"date":493,"message":494},"17 Jun","chore: bake static-page content in Dockerfile.frontend build",{"date":493,"message":496},"feat: pre-render static-page content at build time (hybrid)","2024-04-02",{"title":499,"description":500,"spec":501},"Raumbuchung, selbst gehostet","Raum- und Ressourcenbuchung zum Selbsthosten. Die statischen Seiten werden beim Build vorgerendert und direkt ins Frontend-Image eingebaut.","selbst gehostet · Repo mit den meisten Sternen","Self-hostable room and resource booking. The static pages are pre-rendered at build time and baked straight into the frontend image.","rooms",[32,33,505],"Liquid",{},"/projects/room-booking-tool","2026-06-17","Blaxzter/room-booking-tool",{"title":486,"description":502},"week",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,246,43,43,43,43,43,43,43,43,43,43,43,43,43],"self-hosted · most-starred repo","projects/room-booking-tool","https://github.com/Blaxzter/room-booking-tool","iuHOyNDCuDJKYs_vuCrNYm6UT2bKhrV5_jQfJb5mMMU",{"id":518,"title":519,"accent":82,"body":520,"commits":524,"date":377,"de":530,"description":533,"emergent":534,"extension":29,"home":535,"langs":536,"meta":537,"navigation":36,"note":30,"path":538,"private":38,"pushed":105,"repo":539,"seo":540,"shared":38,"skin":534,"spark":541,"spec":532,"stars":43,"stem":542,"url":543,"__hash__":544},"projects/projects/speeden-and-cuben.md","Speeden & Cuben",{"type":9,"value":521,"toc":522},[],{"title":12,"searchDepth":13,"depth":13,"links":523},[],[525,527],{"date":89,"message":526},"Ask the question the other way round",{"date":528,"message":529},"16 Sep","Open a case in a cube you can turn yourself",{"title":519,"description":531,"spec":532},"Eine CFOP-Referenz mit 3D-Wiedergabe. Jeder Algorithmus ist maschinell gegen ein echtes Würfelmodell geprüft, und jeder Fall lässt sich in einem Würfel öffnen, den du selbst drehen kannst.","41 F2L · 57 OLL · 21 PLL","A CFOP reference with 3D playback. Every algorithm is machine-checked against a real cube model, and every case opens in a cube you can turn yourself.","cubes","https://speeden-and-cuben.fabraham.dev",[33,338,68],{},"/projects/speeden-and-cuben","Blaxzter/speeden-and-cuben",{"title":519,"description":533},[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,245,245,43,246,149],"projects/speeden-and-cuben","https://github.com/Blaxzter/speeden-and-cuben","0C06LknWoN7Qhpwner_T8yNdHEJSzLJgwJUwx94Rlgg",{"id":546,"title":547,"accent":53,"body":548,"commits":552,"date":558,"de":559,"description":562,"emergent":563,"extension":29,"home":30,"langs":564,"meta":565,"navigation":36,"note":30,"path":566,"private":38,"pushed":567,"repo":568,"seo":569,"shared":38,"skin":570,"spark":571,"spec":573,"stars":43,"stem":574,"url":575,"__hash__":576},"projects/projects/wirksam.md","Wirksam",{"type":9,"value":549,"toc":550},[],{"title":12,"searchDepth":13,"depth":13,"links":551},[],[553,556],{"date":554,"message":555},"13 Sep","build(release): refuse to cut a release from the wrong branch",{"date":554,"message":557},"refactor(events): step through the copy wizard instead of stacking it","2026-03-03",{"title":547,"description":560,"spec":561},"Ein Veranstaltungs-Tool in Python und Vue. Eine README gibt es noch nicht; im Commit-Log sieht man einen Kopier-Assistenten, den man Schritt für Schritt durchgeht, und einen Release-Prozess, der sich weigert, vom falschen Branch aus zu veröffentlichen.","v0.20.1 · 306 Commits / 52 Wo.","An events tool in Python and Vue. It has no README yet; the commit log shows a step-by-step copy wizard and a release process that refuses to ship from the wrong branch.","tags",[68,32,33],{},"/projects/wirksam","2026-09-13","Blaxzter/wirksam",{"title":547,"description":562},"rail",[43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,149,44,246,45,245,183,150,248,414,149,572,413,413,116,117,43,43,43,43,43,43,43,43,43,43,43,119,412,115,44,411,245,45,116],29,"v0.20.1 · 306 commits / 52w","projects/wirksam","https://github.com/Blaxzter/wirksam","QdgYco9iJvigvsM_QSNoCf-bayjm9QRfNJPVi6vssPQ",[578,625,649,694,724,746],{"id":579,"title":580,"accent":126,"body":581,"description":12,"extension":29,"headDepth":30,"meta":617,"navigation":36,"offset":30,"order":114,"path":618,"period":588,"seo":619,"setPiece":620,"setPieceVariant":30,"side":622,"stem":623,"__hash__":624},"biography/biography/10-berlin.md","Berlin",{"type":9,"value":582,"toc":615},[583,590,601],[584,585],"bio-row",{"kind":586,"name":587,"when":588,"role":589},"study","TU Berlin","2016–2020","B.Sc. Computer Science, 1.8",[584,591,597],{"kind":592,"name":593,"when":594,"role":595,"href":596},"work","GT-ARC","2017–2020","Student developer","https://gt-arc.com",[598,599,600],"p",{},"Multi-agent applications on the JIAC V framework, and an Angular and Node\ndashboard for monitoring IoT devices.",[584,602,605],{"kind":586,"name":603,"when":604},"Bachelor's thesis","2020",[598,606,607,608,614],{},"A ",[609,610,613],"a",{"href":214,"rel":611},[612],"nofollow","runtime environment for genetic algorithms"," that compares how\ndifferent genetic operators perform on shop-scheduling problems.",{"title":12,"searchDepth":13,"depth":13,"links":616},[],{},"/biography/10-berlin",{"title":580,"description":12},[621],"berlinSkyline","auto","biography/10-berlin","Veq7Prk8u61h_oCCFPhkcn_g6qKbhe17F6vkN6Fi100",{"id":626,"title":627,"accent":219,"body":628,"description":641,"extension":29,"headDepth":30,"meta":642,"navigation":36,"offset":30,"order":119,"path":643,"period":604,"seo":644,"setPiece":645,"setPieceVariant":30,"side":622,"stem":647,"__hash__":648},"biography/biography/20-the-move.md","The move",{"type":9,"value":629,"toc":639},[630],[598,631,632,633,638],{},"Off to Maastricht for a master's in AI. GT-ARC works closely with TU Berlin's\n",[609,634,637],{"href":635,"rel":636},"https://dai-labor.de",[612],"DAI-Labor",", so most of my work there already touched AI,\nand I wanted to understand it properly. I also had a feeling it would matter a\nlot more in a few years.",{"title":12,"searchDepth":13,"depth":13,"links":640},[],"Off to Maastricht for a master's in AI. GT-ARC works closely with TU Berlin's\nDAI-Labor, so most of my work there already touched AI,\nand I wanted to understand it properly. I also had a feeling it would matter a\nlot more in a few years.",{},"/biography/20-the-move",{"title":627,"description":641},[646],"routeArc","biography/20-the-move","HQncd1Ye2bpoJ9U5zVPRsSWgmjabom45Nhu83vB6OCg",{"id":650,"title":651,"accent":319,"body":652,"description":12,"extension":29,"headDepth":685,"meta":686,"navigation":36,"offset":30,"order":687,"path":688,"period":657,"seo":689,"setPiece":690,"setPieceVariant":30,"side":622,"stem":692,"__hash__":693},"biography/biography/30-maastricht.md","Maastricht · Aachen",{"type":9,"value":653,"toc":683},[654,662,675],[584,655,659],{"kind":586,"name":656,"when":657,"role":658},"Maastricht University","2020–2022","M.Sc. Artificial Intelligence, 8.25",[598,660,661],{},"Team projects throughout; I focused on generative models.",[584,663,667],{"kind":586,"name":664,"when":665,"href":666},"Master's thesis","2022","/files/frederic-abraham-master-thesis-2022.pdf",[598,668,669,670,674],{},"GANs that generate stable structures for Angry Birds levels. The results became\na ",[609,671,673],{"href":77,"rel":672},[612],"paper at AIIDE 2023",".",[584,676,680],{"kind":592,"name":677,"when":657,"href":678,"role":679},"RWTH Aachen","https://www.rwth-aachen.de","Student assistant",[598,681,682],{},"Just across the border, so I kept this job throughout: identity management for\nabout 47,000 students and 9,000 staff. Plus an internship in 2021 on spotting\nsuspicious activity in file-server backups.",{"title":12,"searchDepth":13,"depth":13,"links":684},[],0.5,{},30,"/biography/30-maastricht",{"title":651,"description":12},[691],"structureGen","biography/30-maastricht","w7oyGpAejqHYx8LDy-5oPix4SNYvfHobwQmBqb3REks",{"id":695,"title":696,"accent":53,"body":697,"description":12,"extension":29,"headDepth":30,"meta":715,"navigation":36,"offset":30,"order":716,"path":717,"period":704,"seo":718,"setPiece":719,"setPieceVariant":721,"side":622,"stem":722,"__hash__":723},"biography/biography/40-tatort.md","Back in Berlin",{"type":9,"value":698,"toc":713},[699],[584,700,705],{"href":701,"kind":592,"name":702,"role":703,"when":704},"https://respeak.io","Respeak","The SWR Tatort game","2023",[598,706,707,708,712],{},"A chat game for ",[709,710,711],"em",{},"Tatort",", built for 100,000 concurrent players. I owned the\nscaling: Azure migration, sentence-embedding models on Azure ML, a leaner Flask\nbackend with caching, load balancing. 18,000 concurrent players at launch, team\nof five.",{"title":12,"searchDepth":13,"depth":13,"links":714},[],{},40,"/biography/40-tatort",{"title":696,"description":12},[442,720],"threadBoard","embeddings","biography/40-tatort","oCOJotSGQ0lKNfbYUjO9ZOq0D_oz_pQv-ThvmBGxbaw",{"id":725,"title":726,"accent":7,"body":727,"description":12,"extension":29,"headDepth":30,"meta":737,"navigation":36,"offset":30,"order":738,"path":739,"period":30,"seo":740,"setPiece":741,"setPieceVariant":743,"side":622,"stem":744,"__hash__":745},"biography/biography/50-experte.md","Experte",{"type":9,"value":728,"toc":735},[729],[584,730,732],{"href":701,"kind":592,"name":702,"role":731},"Tech lead",[598,733,734],{},"I built its core: a RAG platform for public administration that answers from an\norganisation's own documents and cites the page every answer came from.",{"title":12,"searchDepth":13,"depth":13,"links":736},[],{},50,"/biography/50-experte",{"title":726,"description":12},[442,742],"documentGrid","rag","biography/50-experte","OikbnR9eFLbtqhXNCcO_cdNbhxfVpgOJv4vYoWfcAdY",{"id":747,"title":748,"accent":219,"body":749,"description":12,"extension":29,"headDepth":30,"meta":783,"navigation":36,"offset":30,"order":784,"path":785,"period":756,"seo":786,"setPiece":787,"setPieceVariant":30,"side":622,"stem":789,"__hash__":790},"biography/biography/60-community.md","Johannische Kirche",{"type":9,"value":750,"toc":781},[751,760,773],[584,752,757],{"kind":753,"name":754,"role":755,"when":756},"volunteer","Kirchentagswoche","programme, live stream, Mediathek","since 2020",[598,758,759],{},"The site for the church's Kirchentag week, built end to end: the programme\npeople plan their days with, the live stream, and the Mediathek with the\nrecordings. Rebuilt for 2026 on Nuxt 4 and Cloudflare Workers.",[584,761,765],{"kind":753,"name":762,"role":763,"href":284,"when":764},"The new hymnal","editor, pipeline, app","since 2024",[598,766,767,768,772],{},"The church is putting together a new Gesangbuch, and I build the software\naround it: an editor where texts meet melodies and open tasks get tracked,\nscripts that prepare the sheet music, and the\n",[609,769,771],{"href":252,"rel":770},[612],"offline app"," the congregation sings\nfrom. Used every Sunday, so bugs get reported fast.",[584,774,778],{"kind":753,"name":775,"role":776,"href":777},"And around it","smaller sites, services, advice","https://www.johannische-kirche.org",[598,779,780],{},"The smaller websites and services the church needs along the way, and a hand\nin the technical planning when a new project starts.",{"title":12,"searchDepth":13,"depth":13,"links":782},[],{},60,"/biography/60-community",{"title":748,"description":12},[788],"churchApps","biography/60-community","-zyIRlxpM_wdlPGes6XLpE_GRiBTDnXmQgfVo1JUfCE",[792,823,843,876,897,914],{"id":793,"title":580,"body":794,"description":12,"extension":29,"meta":818,"navigation":36,"path":819,"period":588,"seo":820,"stem":821,"__hash__":822},"biography_de/de/biography/10-berlin.md",{"type":9,"value":795,"toc":816},[796,799,805],[584,797],{"kind":586,"name":587,"when":588,"role":798},"B.Sc. Informatik, 1,8",[584,800,802],{"kind":592,"name":593,"when":594,"role":801,"href":596},"Studentische Hilfskraft",[598,803,804],{},"Multi-Agenten-Anwendungen auf dem JIAC-V-Framework und ein Angular- und\nNode-Dashboard zur Überwachung von IoT-Geräten.",[584,806,808],{"kind":586,"name":807,"when":604},"Bachelorarbeit",[598,809,810,811,815],{},"Eine ",[609,812,814],{"href":214,"rel":813},[612],"Laufzeitumgebung für genetische Algorithmen",", die vergleicht, wie\ngut verschiedene genetische Operatoren Shop-Scheduling-Probleme lösen.",{"title":12,"searchDepth":13,"depth":13,"links":817},[],{},"/de/biography/10-berlin",{"title":580,"description":12},"de/biography/10-berlin","rlgyL6iJZ7cCkKpnRqSz2I56-wZpW-qCqEWxQsLIerA",{"id":824,"title":825,"body":826,"description":837,"extension":29,"meta":838,"navigation":36,"path":839,"period":604,"seo":840,"stem":841,"__hash__":842},"biography_de/de/biography/20-the-move.md","Der Umzug",{"type":9,"value":827,"toc":835},[828],[598,829,830,831,834],{},"Ab nach Maastricht, für einen Master in KI. GT-ARC arbeitet eng mit dem\n",[609,832,637],{"href":635,"rel":833},[612]," der TU Berlin zusammen, meine Arbeit dort hatte\nalso meist schon mit KI zu tun, und ich wollte sie richtig verstehen. Außerdem\nhatte ich das Gefühl, dass sie bald eine viel größere Rolle spielen würde.",{"title":12,"searchDepth":13,"depth":13,"links":836},[],"Ab nach Maastricht, für einen Master in KI. GT-ARC arbeitet eng mit dem\nDAI-Labor der TU Berlin zusammen, meine Arbeit dort hatte\nalso meist schon mit KI zu tun, und ich wollte sie richtig verstehen. Außerdem\nhatte ich das Gefühl, dass sie bald eine viel größere Rolle spielen würde.",{},"/de/biography/20-the-move",{"title":825,"description":837},"de/biography/20-the-move","oHlXdaOvX2UrzBu2O1KMClYcMUUuFToj4i29QVb947c",{"id":844,"title":651,"body":845,"description":12,"extension":29,"meta":871,"navigation":36,"path":872,"period":657,"seo":873,"stem":874,"__hash__":875},"biography_de/de/biography/30-maastricht.md",{"type":9,"value":846,"toc":869},[847,854,864],[584,848,851],{"kind":586,"name":849,"when":657,"role":850},"Universität Maastricht","M.Sc. Artificial Intelligence, 8,25",[598,852,853],{},"Durchgehend Teamprojekte, mein Schwerpunkt waren generative Modelle.",[584,855,857],{"kind":586,"name":856,"when":665,"href":666},"Masterarbeit",[598,858,859,860,674],{},"GANs, die stabile Strukturen für Angry-Birds-Level generieren. Aus den\nErgebnissen wurde ein ",[609,861,863],{"href":77,"rel":862},[612],"Paper auf der AIIDE 2023",[584,865,866],{"kind":592,"name":677,"when":657,"href":678,"role":801},[598,867,868],{},"Direkt hinter der Grenze, also blieb ich die ganze Zeit dabei: Identity\nManagement für rund 47.000 Studierende und 9.000 Beschäftigte. Dazu 2021 ein\nPraktikum zur Erkennung verdächtiger Aktivitäten in Fileserver-Backups.",{"title":12,"searchDepth":13,"depth":13,"links":870},[],{},"/de/biography/30-maastricht",{"title":651,"description":12},"de/biography/30-maastricht","2_4XoG8FtQ4yNHy0qlUUX4L9VE5URf5CQ47-Qtb_9xw",{"id":877,"title":878,"body":879,"description":12,"extension":29,"meta":892,"navigation":36,"path":893,"period":704,"seo":894,"stem":895,"__hash__":896},"biography_de/de/biography/40-tatort.md","Zurück in Berlin",{"type":9,"value":880,"toc":890},[881],[584,882,884],{"href":701,"kind":592,"name":702,"role":883,"when":704},"Das Tatort-Spiel des SWR",[598,885,886,887,889],{},"Ein Chat-Spiel zum ",[709,888,711],{},", ausgelegt auf 100.000 gleichzeitige Spieler. Die\nSkalierung lag bei mir: Migration nach Azure, Sentence-Embedding-Modelle auf\nAzure ML, ein schlankeres Flask-Backend mit Caching, Load Balancing. Zum Start\n18.000 gleichzeitige Spieler, Team aus fünf Leuten.",{"title":12,"searchDepth":13,"depth":13,"links":891},[],{},"/de/biography/40-tatort",{"title":878,"description":12},"de/biography/40-tatort","gi1pDJu3VFxpFHuCxkT7MSMFT9VmIOirFmx0ZX_b9Nw",{"id":898,"title":726,"body":899,"description":12,"extension":29,"meta":909,"navigation":36,"path":910,"period":30,"seo":911,"stem":912,"__hash__":913},"biography_de/de/biography/50-experte.md",{"type":9,"value":900,"toc":907},[901],[584,902,904],{"href":701,"kind":592,"name":702,"role":903},"Tech Lead",[598,905,906],{},"Den Kern habe ich gebaut: eine RAG-Plattform für die öffentliche Verwaltung, die\naus den eigenen Dokumenten einer Organisation antwortet und zu jeder Antwort die\nQuelle nennt.",{"title":12,"searchDepth":13,"depth":13,"links":908},[],{},"/de/biography/50-experte",{"title":726,"description":12},"de/biography/50-experte","lAG5eh_McoAVevTl0ijapp2akUxFm5m1wvkjf6JLZxU",{"id":915,"title":748,"body":916,"description":12,"extension":29,"meta":947,"navigation":36,"path":948,"period":921,"seo":949,"stem":950,"__hash__":951},"biography_de/de/biography/60-community.md",{"type":9,"value":917,"toc":945},[918,925,938],[584,919,922],{"kind":753,"name":754,"role":920,"when":921},"Programm, Livestream, Mediathek","seit 2020",[598,923,924],{},"Die Seite zur Kirchentagswoche der Gemeinde, von vorne bis hinten gebaut: das\nProgramm, mit dem man seine Tage plant, der Livestream und die Mediathek mit den\nAufzeichnungen. Für 2026 neu gebaut auf Nuxt 4 und Cloudflare Workers.",[584,926,930],{"kind":753,"name":927,"role":928,"href":284,"when":929},"Das neue Gesangbuch","Editor, Pipeline, App","seit 2024",[598,931,932,933,937],{},"Die Gemeinde stellt ein neues Gesangbuch zusammen, und ich baue die Software\ndrumherum: einen Editor, in dem Texte und Melodien zusammenfinden und offene\nAufgaben verfolgt werden, Skripte, die die Noten aufbereiten, und die\n",[609,934,936],{"href":252,"rel":935},[612],"Offline-App",", aus der die Gemeinde\nsingt. Sie wird jeden Sonntag benutzt, Bugs sprechen sich also schnell herum.",[584,939,942],{"kind":753,"name":940,"role":941,"href":777},"Und drumherum","kleinere Seiten, Dienste, Beratung",[598,943,944],{},"Die kleineren Webseiten und Dienste, die die Gemeinde unterwegs braucht, und\neine helfende Hand bei der technischen Planung, wenn ein neues Projekt startet.",{"title":12,"searchDepth":13,"depth":13,"links":946},[],{},"/de/biography/60-community",{"title":748,"description":12},"de/biography/60-community","2U0xS2o4Zb8at2mzgA53Pdt53iTozc5E54cQTjoknm0",1791366245851]