RSSAmplifier

Blog

Igor Kulman

Recent content on Igor Kulman

blog.kulman.skRSS feed ↗15 posts

Latest posts

Running Umami analytics for free on Vercel and Supabase

I have never used Google Analytics on my personal websites. It always felt far too invasive and complicated for what I actually wanted to know: whether anyone reads my articles, which pages people visit, and where they came from. For a while I used Simple Analytics. It was privacy-friendly and did exactly what I needed, but it was still somebody else’s analytics service. I wanted to try…

Adding IndieWeb support to my static Hugo blog

I recently read Andros Fenollosa’s article I joined the IndieWeb, here’s what I learned and immediately went down the same rabbit hole. I had seen the term IndieWeb before, but I always assumed it meant a vague preference for personal websites over social networks. Something nostalgic, maybe a little idealistic, but not necessarily technical. It turns out there is a very practical side…

I do not feel like a programmer anymore

About six months ago I wrote that I no longer enjoyed software development. At the time I blamed meetings, Jira tickets, endless processes and everything surrounding programming. Looking back at that post today, I do not think I was completely right. Those things are all still there, but they are no longer what bothers me the most. Over the last few months AI has become part of my daily work. Not…

I wanted async/await but I got a concurrency model

I remember the moment Swift announced async/await. I was genuinely relieved. Finally, there was going to be a way out of completion handler pyramids, delegate chains, and the special kind of cognitive overhead that comes from reading code that executes in a completely different order than it is written. I had worked with C# async/await years earlier, and my mental model came from there. In a UI…

Running a Local LLM Coding Server on MacBook Pro M5 Pro 48 GB

I recently set up a local coding AI on my MacBook Pro M5 Pro with 48 GB of unified memory — no cloud, no external API, nothing leaving the machine unless I explicitly route it there. Here is an honest account of what I tried, what crashed, and what finally worked. The goal I wanted to run a capable coding model locally — no cloud, no API costs, no code leaving my network.

Why I still build apps for myself

I wrote recently that I do not enjoy software development the way I used to. That is still true. Most of the joy is gone. Too much of modern development feels like meetings, process, alignment, and maintenance of systems nobody really likes but everyone has agreed to keep alive. And yet over the last few months I built three iOS apps: Yomu, Aira, and Ledgee. All three started the same way: I…

Why I built my own expense tracker

I have tried quite a few expense tracking apps over the years. The pattern was usually the same: I installed one, entered transactions for a week or two and looked through all the charts and reports. Then I gradually stopped using it. This was not necessarily a problem with those apps. Many of them were well made and offered much more than I needed. The problem was that I do not enjoy managing my…

Beating App Store review: lessons from shipping a minimal indie game

Shipping a small, focused app on the App Store sounds straightforward: build the app, make sure it works, submit it, done. That was my assumption when I finished my first iOS game — a minimal, offline, pixel‑art push‑box puzzle inspired by classic warehouse logic games. What followed instead was a multi‑week back‑and‑forth with App Store Review, several rejections, and a slow realization that…

Building Aira: a calm anime tracker for myself

Tracking anime has been part of my routine for years. I used MyAnimeList, updated it after every episode and never thought much about whether there might be a better way to do it. It worked well enough for the way I watched anime at the time. When I first got into anime, I always had a backlog. There were older classics I wanted to see, highly rated shows I had missed and a long list of things I…

Building Yomu: Safari, furigana, and why “plain text” often isn’t plain

This is the third part of a short series about building Yomu, an iOS app for reading Japanese text with adaptive furigana. In the previous post, I described how the app tokenizes text, renders furigana, and works with an offline dictionary. This post focuses on a much lower-level problem: getting usable input text in the first place. It turned out to be one of the most frustrating parts of the…

Building Yomu: furigana, tokenization, and offline dictionaries on iOS

This is the second part of a short series about building Yomu, an iOS app for reading Japanese text with adaptive furigana. In the first post, I described the reading problem that motivated the project. This one focuses on the technical core: how the app actually processes and renders Japanese text. I am intentionally skipping large parts of the app here — UI, persistence, OCR, monetization. They…

The Japanese reading problem that finally made me build my own app

I’ve been learning Japanese for several years now. Not intensively, not full‑time, but consistently — textbooks, classes, homework, and a lot of reading that never quite felt as productive as it should. In December I took the JLPT N4. While preparing for it, I spent a lot of time reading Japanese texts that were supposed to be appropriate for my level. And that’s where I kept running into the same…

Still using Firefox — but not because of its vision

For years I have been using Firefox as my primary browser. Not out of ideology or nostalgia, but because it did the job well enough and stayed out of the way. Lately, however, I have been increasingly uncomfortable with where Firefox is heading — and yet I am still using it. This post is about why. Firefox’s new direction In December 2025, Mozilla made it clear that Firefox is entering an “AI…

Advent of Code 2025: Modern C++ and Zed

At a client I currently work for, we started a small code club a few months ago. The idea was simple: regularly try something outside our day-to-day stack. I began doing the challenges with Erlang, then moved to Elixir. For December, instead of making up a new monthly challenge, we decided to just do Advent of Code. It fits well: small problems, no long-term commitment, and plenty of room to…

Apple will not let me join the Developer Program — and will not say why

I’ve been building apps for a long time. More than a decade ago I shipped several apps on the Windows Phone Store — and back then, publishing as an indie was empowering. Even though dealing with Microsoft was often frustrating, at least I could publish my apps under my own name. Ever since switching fully to iOS professionally, I’ve been waiting for a good personal project idea. Something small…