<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Martin Voldřich — Maker &amp; Leader</title>
    <subtitle>Engineering leader and open source maker. Tech Lead at Meiro. Building tools in Rust, Go, and Python.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://rbas.cz/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://rbas.cz"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-11T10:00:00+02:00</updated>
    <id>https://rbas.cz/atom.xml</id>
    <entry xml:lang="en">
        <title>Why I Started Building Fomkee</title>
        <published>2026-08-11T10:00:00+02:00</published>
        <updated>2026-08-11T10:00:00+02:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rbas.cz/blog/why-i-started-building-fomkee/"/>
        <id>https://rbas.cz/blog/why-i-started-building-fomkee/</id>
        
        <content type="html" xml:base="https://rbas.cz/blog/why-i-started-building-fomkee/">&lt;p&gt;I have tried to build monitoring tools several times during my career. Most started with an immediate need, solved part of it, and stopped there. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fomkee.dev&#x2F;&quot;&gt;Fomkee&lt;&#x2F;a&gt; began in much the same way—but it was far from my first attempt.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;before-fomkee&quot;&gt;Before Fomkee&lt;&#x2F;h2&gt;
&lt;p&gt;I have always enjoyed infrastructure. I used to be a co-owner of &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rosti.cz&#x2F;&quot;&gt;Roští.cz&lt;&#x2F;a&gt;, a Czech hosting company, and before Fomkee, I maintained servers for another company. That was where I built my first proper monitoring system.&lt;&#x2F;p&gt;
&lt;p&gt;I called it SIMO, short for Simple Monitoring. Its collector is &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pypi.org&#x2F;project&#x2F;simocollector&#x2F;&quot;&gt;still available on PyPI&lt;&#x2F;a&gt; under my username, &lt;code&gt;rbas&lt;&#x2F;code&gt;. It was a Python script that ran on monitored servers, collected data about load, disks, processes, and other system state, and sent everything to a central server.&lt;&#x2F;p&gt;
&lt;p&gt;The central component was a web application—built with Django. It displayed the collected data and managed notifications and escalation policies. You could configure what should happen when a particular condition was met.&lt;&#x2F;p&gt;
&lt;p&gt;That was around 2014. The software is ancient now, but the problem it tried to solve is still very familiar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;monitoring-the-monitoring&quot;&gt;Monitoring the Monitoring&lt;&#x2F;h2&gt;
&lt;p&gt;A few years ago—I honestly cannot remember exactly when—I built a home lab server. Since then, the number of things running around our house has steadily grown: services on the server, ESP devices doing various jobs, sensors submitting data, and small displays showing information we find useful.&lt;&#x2F;p&gt;
&lt;p&gt;I have built enough gadgets around the house that debugging our home sometimes feels like being on call for a small company—except the users know exactly where I sleep.&lt;&#x2F;p&gt;
&lt;p&gt;At first, my wife said many of these inventions were useless. Then she got used to them. Now, when one stops working, she immediately complains that it is broken. Apparently, a useless gadget becomes critical infrastructure the moment it goes offline.&lt;&#x2F;p&gt;
&lt;p&gt;That is not how monitoring should work.&lt;&#x2F;p&gt;
&lt;p&gt;Ideally, I should know first and fix the problem before anyone notices. At the very least, when my wife tells me something is broken, I want to say, “I already know,” with the calm confidence of someone who definitely was not about to discover it for the first time.&lt;&#x2F;p&gt;
&lt;p&gt;So I installed &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;uptime.kuma.pet&#x2F;&quot;&gt;Uptime Kuma&lt;&#x2F;a&gt;. It is a nice piece of software: ready to use, easy to configure, and good at its job.&lt;&#x2F;p&gt;
&lt;p&gt;There was just one obvious problem. It ran on the same home lab server as everything it monitored. If the entire server went down, the monitoring disappeared with it—and I knew nothing.&lt;&#x2F;p&gt;
&lt;p&gt;That led me to build &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rbas&#x2F;fluxa&quot;&gt;Fluxa&lt;&#x2F;a&gt;. Fluxa is intentionally small. It runs HTTP checks defined in a configuration file and sends me a push notification through Pushover when something goes wrong. In my setup, its main job is simply to check whether Uptime Kuma is still alive.&lt;&#x2F;p&gt;
&lt;p&gt;I had a lot of fun writing it. This was before AI-generated code became a normal part of development, so I wrote it by hand in Rust. I also tested it with more than a thousand monitored websites, checking each one every 30 to 60 seconds. Its memory footprint remained very low—even lower than Uptime Kuma’s—and I was genuinely happy with the result.&lt;&#x2F;p&gt;
&lt;p&gt;Fluxa did what I needed, but I kept thinking about how I could extend it. I never had enough time, so the idea stayed in the back of my mind. Eventually, it became a slightly different question:&lt;&#x2F;p&gt;
&lt;p&gt;What if I built a proper monitoring system in Rust?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-rust&quot;&gt;Why Rust&lt;&#x2F;h2&gt;
&lt;p&gt;Part of the motivation was simple: I like Rust.&lt;&#x2F;p&gt;
&lt;p&gt;I enjoy its strictness and the way it makes error handling explicit. Rust asks you to write more code up front and think about the unhappy paths, not just the happy one. It can feel verbose, but it also makes me trust the result more.&lt;&#x2F;p&gt;
&lt;p&gt;One thing I have learned during my career is that production code is mostly about what happens when things do not go according to plan. A network request fails. A service disappears. An input is not what you expected.&lt;&#x2F;p&gt;
&lt;p&gt;Rust makes it difficult to quietly ignore those cases, which makes it a great fit for monitoring software.&lt;&#x2F;p&gt;
&lt;p&gt;When I started designing Fomkee, I returned to the problem I had with Uptime Kuma: who monitors the monitoring?&lt;&#x2F;p&gt;
&lt;p&gt;A single monitoring server can disappear along with everything around it. So I designed Fomkee around multiple nodes. These nodes should be small enough to run on cheap hardware and lightweight enough to deploy in several locations without much effort.&lt;&#x2F;p&gt;
&lt;p&gt;The project kept growing from there. Fomkee can now run checks across multiple nodes with a relatively small footprint, and it is getting close to a public beta.&lt;&#x2F;p&gt;
&lt;p&gt;For HTTP checks, I also added the option to evaluate responses using JavaScript. I wanted an excuse to experiment with WebAssembly, so the JavaScript checks run inside WASM. It is a useful feature—but it was also fun to build, which remains an important reason why I work on the project.&lt;&#x2F;p&gt;
&lt;p&gt;That is more or less how Fomkee began. It grew from a real problem in my house, the enjoyment of building Fluxa, and my curiosity about what a monitoring system designed around Rust and small, distributed nodes could look like.&lt;&#x2F;p&gt;
&lt;p&gt;I think it could be useful to other people too. A few people around me have already tried it and told me it helps them, which gives me a good reason to continue.&lt;&#x2F;p&gt;
&lt;p&gt;For now, I am working toward the public beta and seeing where the project takes me.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I’m Starting This Blog</title>
        <published>2026-08-11T09:00:00+02:00</published>
        <updated>2026-08-11T09:00:00+02:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rbas.cz/blog/why-i-am-starting-this-blog/"/>
        <id>https://rbas.cz/blog/why-i-am-starting-this-blog/</id>
        
        <content type="html" xml:base="https://rbas.cz/blog/why-i-am-starting-this-blog/">&lt;p&gt;I’ve spent more than fifteen years building software, across startups and scale-ups and on teams spread from Prague to London to Singapore. In that time, my work has gradually shifted from writing every line myself to helping teams make good decisions and ship good software.&lt;&#x2F;p&gt;
&lt;p&gt;But I’ve never stopped building.&lt;&#x2F;p&gt;
&lt;p&gt;I still like turning a small frustration into a useful tool. That is how projects such as &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rbas&#x2F;roxy&quot;&gt;roxy&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rbas&#x2F;fluxa&quot;&gt;fluxa&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rbas&#x2F;jsonify&quot;&gt;jsonify&lt;&#x2F;a&gt; began. I want a place where I can write about what I am building, the decisions behind it, and the things I discover along the way.&lt;&#x2F;p&gt;
&lt;p&gt;Some of that will be about open source. Some of it will be about &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fomkee.dev&quot;&gt;Fomkee&lt;&#x2F;a&gt;, which I have been working on for quite some time now. I want to share not only what I build there, but also the thoughts, experiments, and technical decisions that shape it.&lt;&#x2F;p&gt;
&lt;p&gt;Mostly, though, this blog is somewhere to dump what is on my mind: problems I am thinking about, things I am trying, and lessons from work that might be interesting to other developers. It does not need a grand theme or a publishing schedule.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I will write only a few articles. Maybe I will keep going for years. I honestly do not know yet. For now, I just want to start writing and see where it goes.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
