Joël
Deffner.
CS master’s student in Trier. The last frame off the roll: a Quest 3 that finds the cables inside a real wall.
Open full CV →

The studies.
Reserved for a working-student role, or the first job after the M.Sc. The reel has room.
Get in touch →Behind the lens.
I pick up new AI tooling the week it ships and keep whatever survives contact with a real project. This site is the test bench: agents do a lot of the typing, I do the judging. Which is why the contact sheet grades nothing about me. Every frame says what you can check: source you can open, a result you can look at, or my word and nothing behind it. I’m an entry-level engineer, and that third tier is on the sheet because leaving it off would have been the dishonest part.
Four codebases: the CK3 toolkit's language server (721 tests across 59 files), ai-form-fill on npm, a rules engine shared unchanged by a socket server and a React client, and this page. The toolkit is GPL-3.0 and public, so don't take my word for the test count. Go and run it.
Selected work.
Speak a scene into VR
You describe a scene out loud and an agent edits a persistent VR world turn by turn instead of regenerating it. Nine scene operations and two session operations, one Anthropic tool each behind a strict JSON schema, carried over a WebSocket between a Python FastAPI service and Unity. The P0 scaffold runs end to end against a deterministic fake LLM, so routine tests never make a paid API call. Two-person thesis, 14 weeks, Trier.
- AI
- The wiring and the Meta XR audit after the scaffold landed.
- Me
- I wrote the P0 scaffold myself in one session, 49 files, and the twelve architecture decisions under it: Unity validates every layout the agent proposes and can reject it, and MCP never ships in the runtime.
Seeing Through Walls
You want to drill into a wall and you need to know what is behind it. In AR the app reveals the cables, studs and pipes inside the real wall within 25 cm of your hand; in VR you grab a copy of that same wall, scale it up and place the holes precisely; then the plan goes back onto the real surface. Manipulating the copy moves its root transform and never the data, so a pin placed on a wall blown up to twice its size still lands on the right millimetre of the real one. The structures are generated, not detected: only the sensor reading is simulated, and everything around it is real.
- AI
- All 10 runtime C# scripts, both editor tools, and the procedural cable and stud generation.
- Me
- Keying every plan to the wall's anchor UUID was my call, and so was killing the ArUco path once each iteration cost a 20-minute build. The ordering bug was mine to find on the headset: SetWall cleared the model, the clear fired a save, the empty plan cached, generation skipped.
CK3 Modding Toolkit
A VS Code extension and standalone language server for Paradox script. It derives every piece of its language knowledge from the game install and the game's own logs instead of hard-coding it, so a new DLC or patch never needs a data release from me. Deep validation goes to ck3-tiger rather than being reimplemented: annotate, never hide. 721 tests across 59 files. Public on the Marketplace since July 2026, currently v0.1.x.
Replaying real typing through VS Code’s own fuzzy-match scorer is what moved these. Corpus: about 6,000 real mod files; unknown scope over 807,000 trigger and effect sites.
- AI
- Most of the TypeScript, and every measurement harness behind the strip above.
- Me
- I install each build and use it on my own mod. A gap I report becomes a permanent script in scripts/, never a one-off fix, and rank quality gets measured before and after every ranking change.


FlightMeet
A community platform for paraglider pilots: find and join local flying meets, coordinate in groups, chat, and check the weather at the launch site. React 19 in front of a CodeIgniter 4 JSON API, about 30 endpoints behind one error contract. Wind is first class throughout, speed and gusts and direction and daily maxima, because wind is what decides whether a pilot flies. Chat polls every 3 s for anything newer than the last message id, since the university host cannot serve websockets.
- AI
- Backend and frontend were written concurrently by separate agent workstreams.
- Me
- That only worked because I froze the API contract in writing first. The rules are mine: CodeIgniter never renders HTML, every network call goes through one lib/api.ts, counts are derived at read time.
ai-form-fill
A zero-dependency TypeScript library that fills any HTML form from unstructured text or speech. It derives a JSON schema from the DOM, the exact option values included as enums, then hands that schema to the model, so the contract comes from the form and never from a config. Framework-agnostic through ids and data attributes, MIT, ESM and UMD, and 132 unit tests that map one to one onto the thesis' functional requirements. Local Ollama or any OpenAI-compatible endpoint.
- AI
- The July rework commits. The thesis and its requirements-to-tests mapping are my own academic work.
- Me
- I found three of my own claims false. Framework-agnostic was silently broken for React: element.value does not update a controlled component. The fix, a native prototype setter plus synthetic events, carries the whole library.

Kanban board
A full-stack web app from the Web Development course: CRUD through modals, drag and drop between columns, and role-based access for admins, users and guests. CodeIgniter, MySQL and plain JavaScript, built by the team in the year I was tutoring the same course.
- AI
- None. 2024, and it predates all of this.
- Me
- Typed by hand, as coursework, alongside tutoring the course it came from.
GazeFactory
A Unity/C# gaze-guiding system that leads a user through a safety-critical simulation. A state model detects operating errors and steers the gaze, through a full 360°, to the next correct step. My first Unity project, and the start of the line that frames 01 and 02 sit on.
- AI
- None. 2023, before any of this existed.
- Me
- One of four on the team. It is on the page for the trajectory, not for the code.
Teaching & involvement.
Web dev tutor
Ran exercise groups for the Web Development course: debugging student PHP, giving feedback on submissions, and explaining CodeIgniter’s router until it stuck.
Student government
Three elected mandates since 2023. Less politics than it sounds: mostly agendas, minutes, and defending the student angle in faculty meetings.

The other portfolio.
Travel, light, and the quiet in between, all through one fixed lens.
Get in touch.
No contact form, no scheduling link. Mail gets read, usually between a Quest 3 build and an exam.

One sheet, one frame. Hold the button to keep the enlarger on, let go when it looks right. The paper does not give any of it back.