I fork large codebases by myself. A Telegram desktop client, an exam-proctoring platform, a small constellation of single-purpose tools — most of them look like five-person company output. They're not. They're one person from Almaty who got bored of waiting for the upstream to do it right.
This page is intentionally plain. If you cared about how it looked, you wouldn't have read this far.
I think most software is built by committees and shows it — the rounded corners, the "are you sure?" dialogs, the slow march toward an enterprise default that nobody asked for. I build things small enough to fit in my head. When a project outgrows that, it's a signal that something is wrong, not that it's time to hire.
I work alone, in Almaty, mostly at night. The time zone is +5: my mornings overlap with European afternoons, my late evenings with the US west coast. The ambient noise is low. Nobody here assumes you'll work in Java.
Working alone means code review consists of waiting until tomorrow morning and re-reading what I wrote. The bug rate is roughly what you'd expect.
Currently writing: Rust where it has to be fast, C++ where it has to talk to Qt, Python where it has to talk to a model, TypeScript where it has to render. PHP shows up more often than I'd publicly admit; it's the language I reach for when "ship by Friday" is a real constraint and not a metaphor.
A power-user fork of Telegram Desktop. The upstream client is competent but defensive
— every interesting control has been rounded off to the nearest enterprise
default. I restored them: thirty-something features in seven categories
(Ghost Mode, Local Archive with offline search, regex keyword filters, cross-account
broadcast, inline LLM, stealth screenshots, a developer REPL). About 7,700 lines of
fork-only C++ on top of upstream tdesktop. macOS builds clean from a one-shot
prepare/mac.sh; Linux and Windows are a slower yes. Full case study at
fextagram.farkhad.me. The name is
FextaGram, which has aged about as well as you'd expect for something I
picked at 2 AM and was too lazy to rename.
An online exam-proctoring platform aimed at Kazakhstan universities. The proctor is the easy part: a LiveKit room watched by a Playwright worker, plus some FastAPI glue. The hard part was Kaspi. Kaspi is a bank app, not a payment processor. Making it feel like a checkout — correct recipient, autofilled amount, a real launch code (KZSTART990) that actually unlocks — took longer than the AI ever did. Solo build. The Playwright worker and I are roughly equally articulate at 3 AM.
Finishing the macOS build of FextaGram. prepare/mac.sh is one shell script
away from "actually clean," which is the longest "almost done" anyone has ever
experienced. Pushing UniMate's next billing iteration; Kaspi has edge cases that only
surface on Wednesdays for reasons I haven't yet identified. Refining the page you're
reading: this is version three, possibly final, probably not.
I think the value of "AI engineer" as a job title decays as the tools get better. The interesting bottleneck moves to taste and to operations, both of which are unflattering to talk about on a CV. I use Claude for review, never for first drafts; my first drafts are already bad enough without giving an LLM the chance to wallpaper over them.
I think Kazakhstan is a good place to write software in 2026. The fixed costs are low, the timezone is forgiving, the local market needs work nobody else wants to do (Kaspi integrations, ru-language UX), and the global market doesn't care where you sit as long as the diffs land.
I think most personal homepages are advertisements written by people who would rather not be selling. This one is at least honest about the genre, even if "honest about being weird" is also a kind of selling.
I used to run about forty single-purpose sites under frkhd.com and its
Almaty mirror: a commit-message generator, a thousand-line raytracer, a 200-line
language model, an ML-KEM TLS demo, a typing test that refused to hide the WPM, a
paste-once messenger. Most had under fifty visitors a month. Most of those visitors
were me, checking they still resolved after a config change.
Last week I deleted the entire farkhad.me side of it — ~40 subdomains, two stacks of containers, a multi-language blog — and put this single page in its place. Six months of accreted infrastructure, deleted in roughly six minutes. Either I'm a minimalist or I have impulse-control issues. Probably both. The canonical versions still live at frkhd.com if you want the museum tour. I kept the page you're reading because deletion is the most underrated feature in software, and I wanted the receipts.
Email is the only channel that works: hi@farkhad.me. I reply to technical questions, contract work that's actually scoped, and bug reports against any of the above. I don't reply to anything that opens with "quick call?" or contains the word "synergy" above the signature. I also reply in roughly the order I find emails interesting, which is unrelated to the order they arrived in. Sorry.
Also reachable on Telegram and GitHub. PGP key on request — if you don't know why you'd want one, you don't.