↓ Skip to main content

Software, AI, consulting

Ordinary solutions to strange problems.

I'm Marcin Klimek, and I write software for technical companies and R&D teams: C++ and CUDA when the code has to be fast, language-model pipelines when the input is a mess.

Email me see work

Results from my projects

over 2×
faster CT reconstruction, end to end
up to 99.8%
less data sent to the GPU
about 12×
faster scientific charts after a port to .NET 9

How the CT numbers were measured

What I do

  1. Custom software

    I write programs in C++, CUDA, C# and C. Two of them have pages here. At my day job I spent a year on a GPU reconstruction engine for industrial CT and made it more than twice as fast. The other one is upmux, my own command-line tool that takes broadcast MPEG transport streams apart and muxes them again with correct timing.

  2. AI integration

    I connect language models to the documents, databases and tools you already use. Siedzieje is one of mine, a pipeline of agents that reads web pages, social media posts, posters and even audio recordings, then builds a calendar of local events out of what it finds.

  3. Consulting

    I sit down with your engineers to look at code that's slow or keeps breaking, and before anyone changes a line we measure where the time actually goes. In 2013 and 2014 I also ran three-day courses in Kraków on C++ concurrency and on real-time programming for Linux.

Selected projects

  1. Faster CT reconstruction

    At my day job I spent a year making the GPU reconstruction engine for industrial X-ray CT faster. Whole runs are now more than twice as fast, and the volumes haven't changed by a single bit.

  2. Backdoor

    Backdoor runs the front desk of a climbing gym from a computer in the building. Every RFID card tap at the gate gets checked against passes, benefit cards and the gym's own rules.

  3. A touch panel for the gym gate

    The panel at the gym gate is an ESP32-P4 board with a 7-inch screen and an RFID reader, and I wrote its firmware in Rust. It decides nothing itself, it just shows what Backdoor sends back.

  4. Translating a help system

    I built a Python tool to translate a client's product help into many languages with OpenAI models. Most of the work went into checks that stop the run when markup, numbers or identifiers change on the way.

  5. KABE

    In KABE a pose-detection model finds climbers in the camera picture and a projector draws a game around them on the wall. The games are Lua scripts.

  6. A control panel for a fiber network

    Operators at an internet provider had managed their GPON network with one Python 2 and Flask tool since 2014. I rebuilt it as an async FastAPI and Vue 3 system with a queue and a circuit breaker for each OLT, so the slow hardware doesn't get overloaded.

  7. A programme guide generator

    Set-top boxes get their programme guide from DVB tables inside the broadcast signal, and this service builds those tables from a cable network's TV schedule. The current version has run in one network for several years, and the next one, which I'm moving to Rust, will be much lighter on resources.

  8. Climbing competitions

    For competitions Backdoor got a judge console in the browser, brackets and a projector view, and the timer moved to one ESP32 master for both speed lanes. All of it ran at a climbing competition at the end of October 2026.

  9. claude-workflow-kit

    The rules, agents, hooks and GitHub board server that all my repositories plug into, so Claude Code agents work the same way in each of them. It's private for now, but most of the ideas are easy to copy.

  10. iDotMatrix panels and an ESP32 bridge

    iDotMatrix LED panels are meant to be run from a phone app over Bluetooth. I reworked a community Python library to drive them from a computer, for example as a clock or a timer, and an ESP32 with my Rust firmware puts them on Wi-Fi.

How I work

  1. Conversation

    You describe the problem by email or on a call. I keep asking questions until we both know which result counts as finished.

  2. Scope and quote

    I write down the scope, the stages and a quote. Anything that isn't on that list stays outside the job until we agree to add it.

  3. Work in stages

    Every stage ends with working code and benchmarks taken before and after the change.

Write to me

Write a few lines about the problem and what you've already tried. If the button doesn't open your mail program, copy the address next to it.

Email me form@klimek.link