---
title: "Work"
description: "Software and firmware I built for clients, and the projects I build for myself."
url: https://klimek.link/projects/
author: "Marcin Klimek"
source: https://klimek.link/projects/
---

# Work

Software and firmware I built for clients, and the projects I build for myself.

- [Firmware for an industrial air purifier and a humidifier](https://klimek.link/projects/air-handling-firmware/) · 2026-11-05 · PIC24 firmware that reads the sensors, runs the fans and shows a menu on a two-line display, written for two industrial air-handling units.
- [Translating a help system without breaking it](https://klimek.link/projects/help-translator/) · 2026-11-05 · A command-line tool that translates product help pages into several languages with OpenAI models and fails loudly when markup, numbers or identifiers change on the way.
- [A programme guide generator for cable TV](https://klimek.link/projects/epg-generator/) · 2026-11-05 · A Python and Rust service that turns a TV schedule from a database into DVB tables and multicast streams, so set-top boxes can show the guide, and it follows the clock change by itself.
- [A touch panel for the gym gate, in Rust](https://klimek.link/projects/gate-panel-firmware/) · 2026-11-05 · Firmware for an ESP32-P4 touch panel that reads an RFID card at a climbing gym's gate and shows the verdict that the desk software sends back.
- [Climbing competitions: a judge console and a timing master](https://klimek.link/projects/climbing-competitions/) · 2026-11-05 · A competition module for a climbing gym's desk software, with a browser judge console, brackets, a projector view and an ESP32 master that times two speed lanes.
- [A home dashboard on an old Samsung TV](https://klimek.link/projects/tv-dashboard/) · 2026-10-16 · A Tizen app that turns the living room TV into a calm home dashboard with eight screens, four seasonal themes and, as planned, a remote that can water the garden.
- [Bruce Lee: a browser port of a 1984 platformer](https://klimek.link/projects/bruce-lee/) · 2026-10-01 · My TypeScript port of the 1984 platformer Bruce Lee, with 20 chambers, on a 320x176 canvas. Not playable on this site.
- [Tropical climate zone: an interactive geography lesson](https://klimek.link/projects/strefa-zwrotnikowa/) · 2026-10-01 · A 13-chapter interactive geography lesson on tropical climates, with a 3D globe, climate charts and small simulations. In Polish, runs in the browser.
- [comments-tool: finding Japanese comments in C/C++](https://klimek.link/projects/comments-tool/) · 2026-10-01 · A small Python script that collects the Japanese comments from a C/C++ code base into a JSON file, ready for translation.
- [Work for clients](https://klimek.link/projects/client-work/) · 2026-09-28 · A short list of the commercial software and firmware I built for companies. Details stay with the clients.
- [Dancing with Friends and Enemies: millions of dancers on the GPU](https://klimek.link/projects/dancing-with-friends/) · 2026-08-12 · A swarm simulation on WebGPU where every dancer follows one friend and avoids one enemy, up to four million dancers in the browser.
- [Casa de Lgin: a game concept](https://klimek.link/projects/casa-de-lgin/) · 2026-07-26 · A concept for a cozy management game in which an AI model reads every order through the character's personality before the character decides what to do.
- [A kysz! A joke page that turns into a game](https://klimek.link/projects/a-kysz/) · 2026-06-06 · A joke countdown page with a ticker of Polish news headlines. Press Space and the headlines become targets in a shooter and an Arkanoid.
- [iDotMatrix client and ESP32 bridge](https://klimek.link/projects/idotmatrix/) · 2026-05-19 · A Python library and ESP32 firmware that drive iDotMatrix LED pixel panels from a computer, also over Wi-Fi.
- [BoulderTimer: a countdown clock for bouldering](https://klimek.link/projects/bouldertimer/) · 2026-04-24 · A Raspberry Pi shows a fullscreen countdown on a TV, with beeps and a spoken warning, and you control it from a phone.
- [Watch Your Six: people tracking for LED totems](https://klimek.link/projects/watch-your-six/) · 2026-04-22 · Several cameras and a pose-detection model turn people walking around an LED installation into OSC events that drive visuals in Resolume.
- [AI_Devs 4: course solutions and the Dave agent](https://klimek.link/projects/aidevs4/) · 2026-03-11 · My solutions from the AI_Devs 4 course on building LLM applications, and Dave, an agent I wrote to solve the course's capture-the-flag tasks.
- [A new control panel for a fiber network](https://klimek.link/projects/gpon-monitoring/) · 2026-02-03 · I rebuilt an internet provider's GPON operations tool from a blocking Python 2 app into an async FastAPI and Vue 3 system that protects the network hardware.
- [Siedzieje: finding local events with a pipeline of agents](https://klimek.link/projects/siedzieje/) · 2026-01-31 · A pipeline of agents that reads web pages, social media posts, posters and audio and turns them into a structured calendar of local events.
- [MetroBlocks: a block-based metronome](https://klimek.link/projects/metroblocks/) · 2026-01-26 · A browser metronome that describes a song as blocks with their own tempo and time signature, played live or exported as a WAV click track.
- [Lantern River: a game with nothing to win](https://klimek.link/projects/lantern-river/) · 2026-01-14 · A browser game with nothing to win: click to release paper lanterns onto a night river and watch them drift toward the horizon.
- [KABE: an interactive climbing wall](https://klimek.link/projects/kabe/) · 2025-12-30 · An interactive climbing wall: a camera finds the climbers with a pose-detection model, and a projector turns the wall into a game written in Lua. This page follows one frame through the code.
- [Faster CT reconstruction: GPU performance engineering](https://klimek.link/projects/ct-reconstruction/) · 2025-12-23 · Performance work on an industrial X-ray CT reconstruction engine: more than 2× faster end to end, up to 99.8% less data sent to the GPU, huge volumes now routine, and output unchanged bit for bit.
- [River Raid: many attempts at an endless river](https://klimek.link/projects/river-raid/) · 2025-05-13 · Experiments with an endless, generated river for a River Raid-style shooter: how the 1982 original did it, a first and a second wave function collapse try in TypeScript, and a path-and-rules generator in Python and Godot.
- [Personas Chat: talk to a local LLM as an uncle or an aunt](https://klimek.link/projects/personas-chat/) · 2025-04-17 · A web chat where a local language model answers in Polish in the voice of a persona such as an uncle or an aunt.
- [Garden of Eden: ESPHome garden automation](https://klimek.link/projects/garden-automation/) · 2024-10-14 · Five ESP32 boards that water the garden, watch the rain barrel and the greenhouse, and report to Home Assistant.
- [lvJanus: a CAEN FERS readout board in LabVIEW](https://klimek.link/projects/lv-janus/) · 2024-06-14 · A Windows DLL that lets LabVIEW drive a CAEN FERS-5200 data-acquisition board through CAEN's open-source Janus software.
- [Delta-Void: a game design document](https://klimek.link/projects/delta-void/) · 2024-02-07 · A concept for a top-down action-adventure and survival game in a dark abyss, with a design document, a story, concept art and a small Godot prototype.
- [Workout Timer with a phone remote](https://klimek.link/projects/workout-timer/) · 2023-03-04 · A round timer for workouts with sound cues and a built-in web server, so it can be started from a phone.
- [Pchords](https://klimek.link/projects/pchord/) · 2022-05-08 · A tool for practising piano chords: it shows a random chord, listens to a MIDI keyboard and checks what you played.
- [Following-of-following monitor](https://klimek.link/projects/twitter-follow-diff/) · 2021-12-31 · A Python script that takes daily snapshots of whom the accounts I follow are following, and reports what changed.
- [A coin-operated liquid dispenser on a Raspberry Pi](https://klimek.link/projects/vending-dispenser/) · 2021-08-26 · Controller software for a self-service windscreen-fluid dispenser with coins, a card terminal, a flow meter, two pumps and a touchscreen.
- [milInterface: a Matrox frame grabber in LabVIEW](https://klimek.link/projects/milinterface/) · 2021-05-24 · A small C++ DLL that lets LabVIEW grab image sequences from a camera through a Matrox frame grabber.
- [midiHost: a Raspberry Pi MIDI router](https://klimek.link/projects/midihost/) · 2019-09-09 · A Raspberry Pi with a small screen that lets a MIDI keyboard play a Novation Circuit or a Korg Kaossilator without a computer.
- [Timeotron 3000: a speed-climbing timer](https://klimek.link/projects/timeotron3000/) · 2019-02-24 · A start/stop timer for speed climbing with a large LED matrix display.
- [Backdoor: reception software for climbing gyms](https://klimek.link/projects/backdoor/) · 2019-02-24 · Landing page for Backdoor, software that runs the front desk of a climbing gym locally: RFID at the gate and a real-time reception panel.
- [luaBox2D: Box2D physics for Lua](https://klimek.link/projects/luabox2d/) · 2018-04-05 · Lua bindings for the Box2D physics engine, so games can be scripted in Lua with real physics.
- [Parents: can children inherit knowledge?](https://klimek.link/projects/parents/) · 2017-04-21 · A small genetic-algorithm experiment: what happens to a population when children inherit their parents' knowledge?
- [Peg solitaire solver](https://klimek.link/projects/peg-solitaire/) · 2017-04-08 · A brute-force Python solver for peg solitaire on a triangular board, written to impress my daughter.
- [Cinder](https://klimek.link/cinder/) · 2016-03-24 · A look at the Cinder creative-coding library, which gave the climbing-wall project its name (in Polish).
- [Processing](https://klimek.link/processing/) · 2016-03-17 · First steps in Processing for the climbing-wall project: setup(), draw() and the first sketches (in Polish).
- [Cinder Climb](https://klimek.link/projects/cc/) · 2016-03-11 · Games on a climbing wall: a Kinect depth camera finds the climbers and a projector draws Lua-scripted activities around them.
- [Wybór technologii](https://klimek.link/wybor-technologii/) · 2016-03-10 · Choosing the technology for Cinder Climb: Processing, Wiring and augmented reality on a wall (in Polish).
- [Cinder climb](https://klimek.link/cinder-climb/) · 2016-03-06 · The start of Cinder Climb: catching points projected on a climbing wall, against the clock (in Polish).
- [upmux: an MPEG-TS re-multiplexer](https://klimek.link/projects/upmux/) · 2015-05-08 · A C tool built on the Upipe framework that takes apart broadcast MPEG transport streams, optionally re-encodes them, and muxes them again with correct clock timing.
- [Pogodynka: reading a wireless weather station](https://klimek.link/projects/pogodynka/) · 2015-03-01 · An Arduino that receives and decodes the 433 MHz radio packets of an Auriol weather-station sensor.
- [avr_flow: a new brain for a liquid vending machine](https://klimek.link/projects/avr-flow/) · 2015-03-01 · An ATmega328 controller that replaced the limited PLC of a coin-operated liquid dispenser, with a flow meter, a pump and a 4-digit display.
- [C++ concurrency and real-time Linux training](https://klimek.link/projects/cpp-concurrency-training/) · 2013-11-26 · Three-day C++ courses I ran in Kraków in 2013 and 2014 on threads and synchronisation and on real-time programming on Linux.
- [Messaging experiments: Redis and ZeroMQ](https://klimek.link/projects/zeromq-redis-2012/) · 2012-07-13 · Two small 2012 experiments with message queues: a threaded Redis consumer in C++ and a ZeroMQ request-reply link between C++ and Python.
- [urJTAG – uruchomienie pod ubuntu](https://klimek.link/urjtag-uruchomienie-pod-ubuntu/) · 2012-05-21 · Notes on building urJTAG with libftdi on Ubuntu and connecting to a JTAG interface (in Polish).
- [JTAG in the SC2105, which means by stupidity I have more work to do](https://klimek.link/projects/2011-09-30-jtag-w-sc2105/) · 2011-09-29 · Taking control of the processor in an SC2105 board over JTAG with OpenOCD, urJTAG and an FT2232-based adapter.

Source: https://klimek.link/projects/
