raphaelstäbler
DE

Raphael Stäbler · Frankfurt, Germany

I build things, from circuit boards to apps.

I've been writing software for more than 20 years, these days mostly web and mobile apps. Production Build is my company. This is the personal side: boards I designed, the drivers that run them, games, web tools, a blog and a book.

Walk up the stack Read the blog

  1. L5 Print 1 part
  2. L4 Web & tools 4 parts
  3. L3 Apps & games 2 parts
  4. L2 Firmware & drivers 2 parts
  5. L1 Silicon & boards 1 part
Fig. 1 — The stack, top to bottom. Not to scale.

Layer 1: Silicon & boards

Printed circuit boards and FPGA logic: the layer you can hold in your hand.

Blog PCB Design — A Hobbyist’s Perspective

Also touches this layer FT81x Arduino Driver FW1

Layer 2: Firmware & drivers

Code that runs on the hardware itself: a display driver and a Game Boy emulator on a microcontroller.

Blog How to Create an Automated Build Pipeline for Your Arduino Project

Breadboard prototype showing Tetris on a display, with the Teensy, audio output and button input wired up

FW2 L2 Started 2019

gb.teensy

A Game Boy emulator on a Teensy 4.1

Work in progress: it runs Tetris, passes Blargg's CPU instruction tests, has 4-channel audio, loads ROMs from SD card and draws to the FT81x display. With substantial contributions by @granthaack.

  • C++
  • Teensy
  • PlatformIO

Layer 3: Apps & games

Things you install on a phone: a puzzle game with a built-in AI and a fantasy sports manager.

Blog From Zero to MVP in 3 Months With Flutter

Three Google Play screenshots of Monster Wipe: normal play, the AI robot playing, and a power-up clearing a colour

A1 L3 Started 2022

Monster Wipe

A match-three game with an AI that plays for you

Built with Flutter and Flame. From level 6, a reinforcement-learning agent can take over, running on the phone as a TensorFlow Lite model. No ads, no in-app purchases, no tracking. On Android now, iOS coming soon.

  • Flutter
  • Dart
  • Flame
  • TensorFlow Lite
Three App Store screenshots of Matchday Manager with demo data: the squad on the pitch, live points, and the points per player

A2 L3 Started 2026

Matchday Manager

Unofficial fantasy soccer and ice hockey for Switzerland

Pick a squad under a salary cap, set your lineup and watch the points move while the matches are played. Both sports run on one codebase: a NestJS API with a replayable live-season engine, a Flutter app and an Eleventy website.

  • Flutter
  • Dart
  • TypeScript
  • NestJS
  • MongoDB
  • Kubernetes

Layer 4: Web & tools

Web products, small tools and data experiments that live in a browser or a terminal.

Analytodon dashboard with demo data: follower chart for the last 30 days and a table of top posts

W2 L4 Started 2023

Analytodon

Analytics for Mastodon accounts

Engagement and follower growth for your Mastodon account. Open source and self-hostable with prebuilt Docker images: a TypeScript monorepo with a NestJS API, a Remix frontend and a CLI worker.

  • TypeScript
  • NestJS
  • Remix
  • MongoDB
  • Docker
Radial plot of daily maximum temperatures in Frankfurt/Main, 1970s in blue against the 2020s in red

W3 L4 Started 2026

Temperature rings

About 90 years of daily Frankfurt temperatures, one ring per year

Daily temperatures from DWD station 1420 (Frankfurt/Main) and MeteoSwiss Zürich/Fluntern, drawn raw, without smoothing, as one closed ring per year. Step through the decades or compare two of them.

  • D3
  • JavaScript
  • Python
Blender render of a Game of Life simulation: glossy coloured cubes as live cells on a black grid

W4 L4 Started 2025

game-of-life-reverser

Conway's Game of Life, run backwards

A Python CLI that finds predecessor states with a SAT solver. For Garden-of-Eden patterns, which have no predecessor, it searches for the closest pattern that can be reversed. The picture is from a separate Game of Life simulation I rendered in Blender.

  • Python
  • SAT
  • Blender

The top of the stack is paper: a workbook generated from data and typeset by code.

Blog

Latest from the bench

  1. Web Development Replacing a Dynamic WordPress Site With a Static One
  2. Software Development Building a Live Sports App With No Live Sport
  3. Software Development What I Learned Building Software With AI Agents
  4. Machine Learning How I Trained an AI to Play My Mobile Game

All 11 posts