DEV Community

Cover image for I just shipped my 50th free browser tool — here's what building alone at midnight looks like
Zihang Dong 董子航
Zihang Dong 董子航

Posted on

I just shipped my 50th free browser tool — here's what building alone at midnight looks like

It's 12:30 AM. The apartment is quiet. The only light is my monitor, and the terminal cursor blinks like a heartbeat.

Tonight, ToolKnit crossed 50 tools. Fifty-two, to be exact.

What is ToolKnit?
ToolKnit is a collection of free, browser-based tools — PDF converters, image editors, video compressors, text utilities, calculators, and more. Every tool runs entirely in your browser. No file uploads, no sign-ups, no server-side processing. Your files never leave your device.

The stack is deliberately simple: static HTML, Tailwind CSS, vanilla JavaScript. No React, no Next.js, no build step. Just files on a server.

What shipped tonight
Three new tools and a brand new category:

Unit Converter — 8 categories (length, weight, temperature, area, volume, speed, data, time), bidirectional conversion with real-time results
Percentage Calculator — three modes: "X% of Y", percentage change, and "X is what % of Y"
Markdown Editor — side-by-side live preview, export to .md, copy rendered HTML, word/char/line stats
These three, along with the existing Age Calculator, formed a new Calculator Tools category — the 8th category on the platform.

The unglamorous parts
Building solo means you're the developer, the designer, the QA team, the DevOps engineer, and the person who accidentally deploys the wrong file to production at 11 PM.

The Encoding Incident
I discovered that 46 out of 52 tool pages had garbled characters. Every em-dash had been corrupted into �? — the Unicode replacement character. Somewhere in a batch edit, UTF-8 encoding broke silently across nearly the entire site.

46 files. One silent bug. Encoding is the villain arc nobody warns you about.

The Homepage Incident
While deploying fixes, I accidentally SCP'd blog/index.html to the root directory — overwriting the entire homepage with the blog page. The main landing page, just gone.

Caught it within a minute. Fixed it in two. But that's the kind of mistake that makes your stomach drop when you're the only person between "working website" and "oops."

By the numbers
Metric Count
Total tools 52
Blog articles 51
Tool categories 8
Files with encoding bugs fixed tonight 46
Times I accidentally broke production 1
Time to fix it ~60 seconds
Why build this way?
I get asked why I don't use a framework. Why no React, no component library, no CMS.

The answer is simple: every tool is a single HTML file. No build step means no build failures. No dependencies means no supply chain risk. No server processing means no server costs beyond a basic VPS. A user opens a page, the tool works. That's it.

The trade-off is that updates require touching many files manually. Tonight I had to update the tool count in index.html, manifest.json, 404.html, changelog.html, service-worker.js, sitemap.xml, search.js, and the var tools array inside all 52 tool pages. That's the price of simplicity.

What's next
More tools. Same chair, same dark room, same quiet conviction that free tools should just work.

If you want to check it out: toolknit.com

If you're also building something alone at midnight — I see you.

— Zihang Dong, May 9, 2026

Top comments (0)