Thirty Pocket Knives: Why I Keep Building a Toolshed Nobody Asked For
The /utilities page on this site is thirty browser-based tools that don't leave your machine. Here's what's in it, why I built it, and the rules I gave myself.
I have a folder on my laptop called *one_off/* that, until recently, contained 41 Python scripts whose only job was to convert one annoying thing into another less annoying thing. CSV to Markdown. Hex to RGB. A screenshot to a base64 string I could paste into a prompt. None of them deserved a name. All of them got used at least once a week.
At some point I noticed I was Googling the same five free converter sites every Tuesday, watching them load three seconds of ads to do six lines of arithmetic on data I didn't really want to send anywhere. So I started porting *one_off/* into the browser, one tool at a time, on a single page of this site. That page is now [/utilities](/utilities) and there are about thirty tools on it. This is a short note about what's there, why I made it, and the three rules I gave myself before the first one shipped.
Rule 1: Nothing leaves your machine
Every tool on the page runs entirely in your browser. There is no API. There is no upload. There is no "Sign in to save your work." If you paste a JSON blob into the formatter and then close the tab, the JSON blob is gone — there is no server-side copy because there is no server.
This sounds like a small thing until you start auditing what the rest of the internet does with your CSVs. The free "PDF to Word" sites mostly upload your file, run a converter, and email you a link to a file that lives on someone's S3 bucket for a month. The free "format my JSON" sites mostly send your JSON to a server that almost certainly logs it. If you've ever pasted production data into one to debug a bug at 11 p.m., you have leaked production data to a stranger.
The rule is not really about privacy theatre. It's about removing a tax I didn't know I was paying — the small, recurring decision of *is this thing I'm about to paste sensitive enough that I shouldn't paste it.* Client-side only means the answer is always no, which means I never have to think about it again.
Rule 2: The keyboard is the primary interface
The page assumes you're on a laptop, not a phone, and that you arrived because you have a thing you want to convert *right now*. So:
- `Cmd/Ctrl+K` focuses the search box from anywhere. - `?` opens a shortcut overlay listing every binding. - The grid is fully arrow-key navigable. Tab gets you in; arrows move you around; Enter opens. - Each individual tool also has its own shortcuts — copy, clear, swap input/output, toggle theme.
This is partly muscle-memory ergonomics and partly a constraint that forces the tools to be simple. If a tool can't be operated almost entirely from the keyboard, it's usually because it's trying to be too many things, and I make it two tools instead. The base64 encoder doesn't decode. The decoder is one tile to the right. They could be the same component with a tab switcher; they aren't, because the tab switcher would cost a keystroke I didn't want to spend.
Rule 3: A tool is a tool, not a feature surface
The thing I find genuinely depressing about most online utilities is that they're not utilities. They're funnels. The free converter is a marketing surface for a paid converter. The paid converter is a marketing surface for a SaaS subscription. The SaaS subscription is a marketing surface for an enterprise contract. By the time the actual converting happens, you have been asked for an email address three times and shown an upsell modal twice.
The rule I gave myself is that a utility on this page should do exactly one thing, do it on the first screen, and not ask for anything. No accounts. No "Pro version." No upsells. Favorites and recents are stored in `localStorage` because the alternative — a database — would require me to know who you are, which I have decided I would prefer not to. The most ambitious tool on the page is a JSON-to-TypeScript-types generator, and it does not have a settings page.
This is a much weaker form of the same instinct that produces good Unix tools. `cat` does not have a freemium tier. `grep` does not ask you to verify your email. The web has slowly forgotten that this used to be the default; the page is, in a small way, an attempt to remember it.
What's actually in there
Roughly: text and JSON tools (formatter, diff, case converter, Markdown table builder, JSON-to-TS-types), encoders (base64, URL, HTML entities, hashes), image and design helpers (SVG optimizer, color picker, contrast checker, aspect-ratio calculator, palette extractor), data converters (CSV, cron expressions, timestamps, regex tester), and a handful of one-offs that earned a permanent home — a UUID generator, a Lorem Ipsum generator that tries to be slightly funnier than the standard one, a character counter that knows the difference between a grapheme and a code point.
The categories are arranged by how often I personally use them, which is not necessarily how often *you* would use them. If a tool gets enough traffic that it deserves a spotlight, it gets a colored "NEW" badge for thirty days; after that, it joins the rest. Recents and favorites float to the top so the page slowly personalizes itself without asking you for permission to.
Why I keep adding to it
Honestly: because building a small tool well is one of the most satisfying things I know how to do. A good utility has a single argument and a single return value. You can fit the entire spec in a sentence. The reward loop is fast — write the function, write the test, drop it in the registry, watch it work. After a long week of writing essays whose ideas might not be true and shipping features whose value is hard to measure, an afternoon spent making a CSV-to-Markdown converter feel exactly right is a clean, finishable kind of satisfaction.
There's also a less wholesome reason. I think the modern web has gotten very good at making me feel like I am renting access to my own data, and the toolshed is a small, stubborn argument that some things should just be functions. Paste in. Get out. Close the tab. No relationship.
The page is going to keep growing. If there's a utility you want that isn't there, the issue tracker is open and I read it. The next batch I'm working on is a small set of audio tools — waveform viewer, simple spectrogram, file-format converter — because I keep finding myself opening Audacity for thirty-second tasks. They'll show up the same way the rest did: quietly, on a Tuesday, with no announcement and no upsell.