
Replaces my standing desk's keypad with a touchscreen that moves the desk, and fills the rest of the screen with my room: lights, heating, my timetable and the planes overhead. Built in C++ on an M5Stack Tab5, with a Bluetooth board of my own.

How packet loss on the IEEE 802.11p control channel affects mmWave scheduling between vehicles. In a Python simulator, lost control messages delayed completion and caused conflicting reservations, cutting throughput by 3.8 to 14.1%.

ROS2 perception and control pipeline for a small robot that tracks a green ball in real time. OpenCV detection on Linux feeds a firm real-time controller on a Xenomai core, which drives the motors through an FPGA with safety limits on the PWM.

Command-line tool for restructuring and splitting large LaTeX projects. Intended for collaborative writing, sharing or reorganizing complex LaTeX documents.

Course project reproducing the SIGCOMM 2021 study on hypergiants' off-net infrastructure using our own Internet-wide measurements.

KOReader plugin that adds WireGuard VPN support to e-readers, letting me reach my home Calibre library from anywhere without exposing it to the internet.

Mechanical keyboard modified to house an extracted Apple Touch ID sensor. The original sensor and Lightning charging connector stay accessible, so it works without custom firmware.

Self-hosted ICS proxy that makes university calendar feeds usable in a normal calendar app, moving event details into the fields clients actually read and splitting lectures, exams and practicals into separate subscriptions. Built in ASP.NET Core, containerized with Docker and deployed with Ansible.

Fleet of personal servers running Dockerized services, deployed and managed from a single Ansible repository with Traefik for routing and Gatus for monitoring.

Full-stack application for looking up and displaying Dutch vehicle information by licence plate.

Custom programming language with multithreading, synchronization primitives and shared memory, compiled to machine instructions for the Sprockell processor, a simple educational CPU. The compiler covers parsing, type checking and code generation, then runs its output in the accompanying simulator.

Server-side rendered Angular site with project pages, English and Dutch versions and an on-demand Typst CV generator that shares its data with the site.

Cross-platform mobile app for real-time audio visualization, with a spectrogram, a scrolling waveform and tools for recording and playing back clips.

Python service that periodically downloads webcam images from Comune di Genova.

Reusable GitHub Actions workflows for building and pushing multi-architecture Docker images and triggering a Watchtower update afterwards.

Games running on a Raspberry Pi and played through a web app, with WebSocket updates and switching between games at runtime.

Web-based application for planning train routes and visualizing disruptions on a map, integrating real-time data from the NS API.

Docker Swarm infrastructure for deploying and managing containerized services, with monitoring, logging and authentication.