Projects

Everything I've built.

Client work, a bachelor thesis that went live in a factory, and the tools I build for myself. Pick one to read the detail.

Work
Own builds
← Back to all projects
Projekt 01

Atlassian AI Ecosystem

Rovo · Forge

What I did

  • Built and deployed 20+ Rovo Agents across IT, support, and operations teams
  • Cut the audit process from hours to minutes
  • 2 live-coding talks at ACE events, 55+ practitioners incl. C-level
Rovo Forge Atlassian Cloud
← Back to all projects
Projekt 02

Intelligent Process Automation

Bachelor Thesis · Live Company Study @Uhlmann Pac-Systeme · Submitted Jun 2026

What I did

  • Change-request classification and incident pattern recognition, both live in production
  • Usability scores of 87.5 and 96.25 out of 100
  • 14 use cases evaluated. 2 shipped. Impact measured.
Rovo Process Automation Uhlmann
← Back to all projects
Projekt 03

Built with Claude

Claude Code · Codex · MCP Stack · Local Models

What I did

  • An agent loop on a Mac mini that spawns workers and reviews its own output
  • WhisperFlow: native macOS dictation on local Whisper large-v3-turbo
  • Pose-Coach: cycling posture analysis from video, 33 pose keypoints
MCPs Local LLMs Computer Vision
← Back to all projects
Projekt 04

WhisperFlow

macOS menubar app · whisper.cpp · Ollama · in daily use since July 2026

I was paying for a dictation subscription that sent my voice to someone else's server. So I built my own. Hold the right option key, speak, release, and the text lands at the cursor in whatever app is in front of me.

How it works

  • Transcription runs on whisper.cpp with large-v3-turbo, kept warm in RAM on my Mac mini and reached over Tailscale. Nothing leaves the network.
  • A local Ollama model cleans up the raw transcript. If Ollama is down it falls back to Claude, and if that fails it returns the raw text. It degrades, it never crashes.
  • A vocabulary file handles the words Whisper keeps getting wrong: technical terms go into the prompt, hard replacements run after the cleanup so the model cannot undo them.
  • Warm and cold toggles per model in the menubar, because 16 GB of RAM means speed and memory are a real tradeoff.

What I took away

The first version took 11 seconds per dictation. It now takes under 4, measured end to end. Almost none of that came from faster inference. Both bottlenecks were startup costs: the transcription CLI reloaded a 1.5 GB model on every single dictation, and the cleanup step spent five seconds just booting a Node runtime. Measuring before optimising saved me from tuning the wrong thing entirely.

Python whisper.cpp Ollama Tailscale macOS
← Back to all projects
Projekt 05

Pose-Coach

Computer vision · MediaPipe Pose · FastAPI backend, React PWA · in progress

A professional bike fit costs a few hundred euros and the systems behind it cost thirty thousand. I wanted to know how far you get with a phone camera and open source pose estimation. Upload a video of yourself riding and the app measures your position against bike fit target ranges.

How it works

  • MediaPipe Pose reads 33 joint keypoints per frame. No object detection, just the skeleton of one person.
  • Ankle height over time gives the top and bottom dead centre of the pedal stroke. At those points it measures knee, hip, elbow and torso angles and averages them across several crank revolutions.
  • Out comes a traffic light per angle plus a saddle height recommendation in centimetres, derived from leg measurements and knee angle, verified against a real video.
  • Videos never go to a cloud. Processing runs on my own Mac mini, the phone reaches it over Tailscale.
Analysis report showing knee, hip, elbow and ankle angles against their target ranges, plus a saddle height recommendation
Each angle gets its target range, the spread across crank revolutions and the measurement uncertainty. Where the uncertainty is larger than the deviation, the app says so instead of giving advice.

What I took away

MediaPipe hands you 3D world coordinates, which look like the obvious thing to use. They are not. I measured two real 4K phone videos across all three model sizes: in 3D the knee angle moved by 19 degrees depending only on which model I picked, while the plain 2D pixel angles stayed within 2 degrees. The z axis carries the error, and 3D angles use all three. For a target window 10 degrees wide, the model choice alone would have decided the diagnosis.

Computer Vision MediaPipe FastAPI React PWA