Everything that is running right now: why it exists and what it is built on. Work that finished its run is on the shelf below, dead ends included.
Running now
an AI CFO for SaaS founders
alive Describe your business in a chat and get a working financial model: revenue, burn, runway, what if scenarios. Minutes instead of weeks in a spreadsheet.
The design decision that defines the product: the AI never does the math. Agents interview the founder, fill the model, explain any number and run goal seek (“how do I triple my MRR?”), but every figure comes from a deterministic engine, tested to stay within 0.5% of the hand built Excel model it replaced.
I co-founded it and build it end to end: the agents, the engine and the interface the model lives in.
built with TypeScriptNode.jsReactPostgreSQLLLM agents
a browser toolbox that never uploads your files
alive 90+ small tools that live entirely in a browser tab: convert, compress, clean up, inspect. No servers, no accounts, no uploads: files never leave your machine.
It started as a private pile of scripts I kept rewriting from memory. Collecting them into one page is what made them worth keeping.
built with TypeScriptWebAssemblyWeb Workersstatic hosting
2026 — github.com/dimhold/whotop what is this process and which port is it holding?
alive A terminal tool that reads the process table and the socket table together, then reads what is actually in each command line. A screen full of identical node rows becomes an agent session and 2 dev servers told apart by the project they run in, plus the orphan that has been sitting on your port since you switched branches an hour ago.
It exists because I killed the wrong node. 6 of them, all mine, all called node and the list said nothing about which was which. Every fact I needed was already there: the command line, the working directory, the parent that had exited. The operating system just never puts them next to the pid.
It refuses to guess quietly: --explain names the rule behind every label and says what the platform flatly refused to disclose. Then it will kill by port or by pid, after showing you exactly what it resolved.
built with TypeScriptNode.jszero runtime dependencies
this workshop, in 3 languages
in progress The site you are reading. A static workshop in English, Russian and Belarusian, holding the essays, the toys and the experiments that belong nowhere else.
Built to stay fast and nearly free: no framework shipped to the page, images and clips prepared ahead of time, everything served as flat files.
built with AstroTypeScripthand written CSSGitHub Pages
The shelf
Older work, kept honest, including the parts that died.
Rando4.me 2014 – 2024
Co-founded; a mobile app that ran for a decade. It never became a business, the lessons stayed.
dead