About
I produce Techno, House and DnB and play it in dark rooms — ideally loud, ideally somewhere between a kick drum at 126 BPM and a terminal at 3 AM.
I studied Cognitive Science, so I know why you like the drop, and Cyber Security, so I know you reuse that password.
The rest of the time I build software, preferably the kind that runs on my own hardware and answers to nobody. Most of it is listed below, along with an honest account of where it breaks.
[ ↓ infrastructure ]Infrastructure
Things I host so I don't have to trust anyone. You're welcome to trust me instead.
-
Mumble
Low-latency voice chat. Fast enough that you can't blame the lag for what you just said.
mumble.ftb.uber.space -
Nextcloud
Files, calendars and contacts, kept in exactly one place, and it isn't a data broker.
cloud.ftb.uber.space -
Yopass
Tell me a secret. It self-destructs after one read, like most of my New Year's resolutions.
yopass.ftb2.uber.space
Projects
Mostly works in progress. Each one comes with a confession.
-
Solar Quote Generator
Every quote for a solar installation was assembled by hand: nudge the layout, type the numbers, export, repeat.
One script that turns structured order data into a finished, properly typeset quote PDF.
Python (PEP 723, single file) · Jinja2 · WeasyPrint · runs locally
Not in production yet. WeasyPrint reads CSS the way a lawyer reads a contract: technically correct, never what you meant. Next time I'd test the layout against WeasyPrint from day one, not against the browser.
-
Live Translation, Three Languages
German, Spanish and Arabic at one table, no interpreter, and someone quietly giving up on following along.
An offline system that listens, works out which language is being spoken, translates into the other two and puts both on a big screen. The microphone is an iPhone in a browser.
Python · faster-whisper · local LLM via LM Studio on an RTX 3060 12 GB · fullscreen frontend · iPhone PWA as mic · no cloud
In active development, no real conversations yet. Fast talkers currently outrun the subtitles. Lesson learned: latency is a requirement, not a finishing touch.
-
LAN Poker
For poker night, the options were apps that demand an account, or pebbles as chips.
Texas Hold'em for one to nine players on the home network, with bots, a cash table and a tournament mode with rising blinds and eliminations.
Stack undecided — so far it exists as a specification (July 2026)
No hands dealt yet. The spec covers everything except how good the bots should be, which happens to be the one thing that decides whether nine people have fun. Bots first, next time.
-
Lyrics Display
The music plays, the lyrics don't. At least not big, on a second monitor.
A tool that fetches the lyrics and scrolls them in time with playback on a screen of their own.
Python · own playback and sync logic, independent of the Deezer app · renderer undecided (August 2026)
In development. Lyrics exist only where Deezer has them, and whether the sync survives a nine-minute track is an open question. I'd measure the drift before polishing the fonts.
-
Voice Clone for Rap Demos
Hearing a verse idea as a demo costs a pile of takes and an evening in the booth.
A local three-script pipeline: record training data with level control, clean it up, and generate reading scripts that cover every sound of the language evenly.
Python (PEP 723) · RVC · faster-whisper · local LLM via LM Studio · no cloud TTS
Recording since August 2026, model not trained yet. Quality depends almost entirely on the dataset, so the mic setup gets fixed and documented before the first take. In theory.
-
DJ Toolchain
Prepping a set meant dragging the same files through several programs, then sorting by key and tempo by hand.
A command-line toolchain that analyses tracks, writes the results straight into the library, suggests harmonically matching next tracks and takes requests from download to playlist.
Python · pyrekordbox · SQLite (Mixxx database) · Mixxx · DDJ-200 with custom mapping (Components JS)
In daily use on my entire library. Breaks whenever Mixxx changes its database schema — we have an understanding. The grown-up fix: a layer that checks the schema version and refuses rather than corrupts.
-
Browser DJ Mixer
DJing in a browser without installing anything means choosing between toys and closed, paid tools.
A multi-deck mixer in the browser with automatic tempo and key detection and suggestions for harmonic transitions.
TypeScript · Vite · React · Web Audio API · no backend
The skeleton stands (July 2026). Browser audio latency makes headphone cueing tricky, and DJing without cueing is just pressing play with confidence. That latency gets measured first.
-
Local LLM Ecosystem
Searching my own notes or talking to a voice assistant meant handing everything to someone's cloud.
A family of tools that stay on my machine: search over my notes, a voice assistant that listens and answers, an Ableton bridge, web fetching for local models and a Discord export cleaner.
Python · LM Studio (RTX 3060) · LanceDB · SQLite · faster-whisper · Orpheus TTS with SNAC · opencode with OpenRouter
Several tools in daily use; my Obsidian vault and course materials are indexed. Everything depends on this exact machine and LM Studio, which is self-hosting in the most literal sense. Next step: put the model behind a swappable interface.