Every developer has that moment where a simple task turns into a 20-minute detour. You need to format some JSON, but the first site wants you to sign up. The second one is plastered with ads. The third uploads your data to god-knows-where. I got tired of that cycle, so I started building browser-based tools. One became ten. Ten became a hundred. Somehow I ended up with 548.
This is what I learned building FastTool — a free, static, zero-backend toolkit that runs entirely in your browser.
Why 548 Tools?
It didn't start as a "build 500 tools" project. It started with a JSON formatter I kept needing. Then a Base64 encoder. Then a regex tester. Every time I reached for an online tool and got a bad experience, I'd build a better one and add it to the collection.
The categories grew organically: Developer utilities, SEO checkers, writing aids, math calculators, design helpers, finance tools, health calculators, education resources, and more — 17 categories total. At some point I stopped counting and just kept shipping.
The Architecture: Aggressively Simple
The entire site is static HTML and JavaScript. No server. No database. No framework. Every tool page is pre-generated at build time, and the interactive functionality loads client-side.
Here's the core idea — a single 72,000-line JavaScript file (tool-page.js) contains a renderer function for each tool, mapped by slug:
const RENDERERS = {
"json-formatter": renderJsonFormatter,
"password-generator": renderPasswordTool,
"regex-tester": renderRegexTester,
"text-to-diagram": renderTextToDiagram,
// ... 544 more entries
};
const slug = document.body.dataset.tool;
const render = RENDERERS[slug];
if (render) render();
Each HTML page carries a data-tool="slug" attribute on the body tag. On load, the script looks up the matching renderer and builds the UI into a #toolWorkbench container. This pattern — one lookup table, one render function per tool — kept the architecture dead simple even at scale.
Build pipeline: A Python script reads the tool catalog (a JS array of 548 entries with metadata, SEO fields, and FAQ content), then generates static HTML for each page plus a sitemap. The generated pages include pre-rendered SEO content — intros, feature descriptions, FAQ sections, comparison tables — all deterministically varied using MD5-based hash selection so no two tool pages read the same.
# The full build
python3 scripts/generate_tool_pages.py # generates 548 HTML pages + sitemap
node -c app/js/tool-page.js # syntax validation (non-negotiable)
Hosting is Cloudflare Pages. Deploy is uploading the app/ folder. Monthly cost: zero.
Privacy as a Feature, Not a Checkbox
Here's the thing that surprised me most: privacy became the number one reason people stick around. Every tool runs client-side. Your JSON never leaves your browser. Your passwords are generated locally. Your images are processed in-memory.
There's no analytics tracking individual usage. No file uploads to remote servers. No accounts. No cookies beyond a language preference.
I didn't build it this way for marketing reasons — I built it this way because static hosting is free and servers cost money. But it turns out "we literally cannot see your data because there's no server to send it to" is a compelling trust signal.
21 Languages, One t() Function
The site supports 21 languages, including RTL layouts for Arabic and Urdu. The i18n system is minimal by design:
// In HTML: data-i18n="key" attributes get translated on page load
// In JS renderers:
const label = t("paste_json_here"); // UI chrome
const buttonText = tt("Format"); // Tool-specific output labels
Adding a language means adding one object to the translations file. The hardest part wasn't the code; it was getting accurate translations for 21 languages across hundreds of UI strings.
10 Tools I'm Most Proud Of
Out of 548, these are the ones that pushed the boundaries of what a static browser tool can do:
1. Text to Diagram Generator — Type A -> B -> C and get an SVG flowchart. Custom parser and SVG renderer.
2. Regex to English Translator — Paste a regex, get a plain-English explanation of every token.
3. Code Screenshot Generator — A Carbon alternative that runs entirely in-browser.
4. Interactive Periodic Table — Full 118-element table with a temperature slider that shows phase transitions.
5. Chord Progression Generator — Plays back chord progressions using Web Audio API.
6. Room Layout Planner — 2D drag-and-drop room designer. All canvas-based.
7. DNA/RNA Sequence Tools — Bioinformatics in a browser tab.
8. Decision Matrix — Weighted criteria scoring with radar chart visualization.
9. Conway's Game of Life — Interactive cellular automaton with 15 pre-loaded patterns.
10. Photo Filter Studio — 20 Instagram-style filters applied client-side using Canvas API.
5 Things I Learned the Hard Way
1. One giant file is fine, actually. A single file with a lookup table loads once, caches well, and is trivially debuggable.
2. Pre-rendering SEO content is a multiplier. A page with just a tool widget gets ignored by search engines. A page with 2,000 words of contextual content plus an interactive tool ranks.
3. Cache busting needs discipline. Every JS module import uses a version query string. Forget to bump it once and you've got users running stale code.
4. Tabular nums prevent layout shift. Any tool with a counter or timer needs font-variant-numeric: tabular-nums in CSS.
5. Ship the ugly version first. Many tools launched with minimal styling. The ones people actually used got improved.
What's Next
The catalog keeps growing. I'm working on better cross-tool linking, improved mobile layouts, and a Cmd+K command palette to tie everything together.
If you're building utility tools, my biggest advice is: keep the architecture boring. Static files, client-side rendering, no auth, no backend.
Try it at fasttool.app — all 548 tools, no signup, no tracking, no nonsense.I Built 548 Free Browser Tools — Here's What I Learned
Top comments (0)