Case Studies

tools.joostvanderlaan.nl

180+ standalone HTML tools. Each one is a single page that does one job, with no framework and no build step.

Problem

I kept needing small utilities. A color converter, a text counter, a timestamp formatter. Every existing one was either buried in ads, required an account, or loaded a framework heavier than the tool itself. I wanted tools that load instantly, work offline, and do exactly one thing.

Approach

Each tool is a single self-contained HTML file. Markup, styles, and logic sit in one document. No bundler, no framework, no client-side build step. If one tool’s JavaScript breaks, the rest of the collection is unaffected.

The build is a Python script managed by uv. It generates the index and assembles the site. Playwright runs the tests. Each tool gets a basic smoke test that opens the page and checks that it renders without errors.

Stack

HTML, CSS, vanilla JavaScript, Python, uv, Playwright.

Outcome

The site hosts over 180 tools. The collection keeps growing because adding a tool is cheap. Write one HTML file, run the build, and it appears in the index. No dependency updates, no framework migrations, no breaking changes from upstream.

Keeping a tool boring is usually the fastest way to end up with something I actually keep using. A tool I wrote three years ago still works the way it did the day I built it.