GDW Toolkit: Growing to 58 Free Tools Without the Codebase Falling Apart
Visit GDW Toolkit — The Ultimate Free Online Toolkit ↗GDW Toolkit is the product I've spent the most continuous months on — a free, no-signup collection of utility tools that's grown from a handful of pages to 58 individual tools spanning image editing, PDF handling, SEO utilities, converters, and more, deployed at goswamidigitalworld.com/toolkit behind a Cloudflare Worker subpath proxy. No account required, no paywall on the core tools — the whole point is that someone can land on a tool, use it, and leave without friction.
Fifty-eight tools is a scale where most solo-built codebases start to buckle — not because any single tool is hard, but because the seams between them multiply fast. The single decision that kept this manageable was a strict architectural pattern I refused to break: every tool lives in `features/<slug>/` with a matching `app/<slug>/page.tsx`, using the same gold/cream Tailwind palette, the same metadata pattern, the same FAQ structure. Tool #58 was built exactly the same way as tool #1. That consistency is genuinely boring to maintain day to day, and it's exactly why a single Python codemod can touch all 58 pages at once — rolling out JSON-LD, an FAQ section, a new metadata pattern — instead of me hand-editing each page and inevitably missing three of them.
The background remover is the tool I've rebuilt the most. It started as one API call to a single provider. Real usage exposed real edge cases — certain image types, certain lighting, certain backgrounds — that one provider handled badly. I ended up building a full server-side provider chain: remove.bg first, falling back to ClipDrop, then PhotoRoom, then Pixian.ai, with a client-side `@imgly` fallback if every server option failed. On top of that, I added a two-pass model — a fast pass for the instant preview, a full-precision pass for the final export — because users wanted to see a result immediately but wanted quality when they actually downloaded it.
The passport photo maker taught me a smaller but sharper lesson: defaults matter more than options. I'd built configurable crop settings, but most users just wanted a correct India-format passport photo without touching a single slider. Switching the default to sharp's `attention`-strategy smart crop, tuned specifically for India's photo requirements, did more for the tool's usefulness in one change than all the manual controls I'd spent far longer building.
Once the tool count passed 50, trust — not features — became the real bottleneck. Could someone tell if a tool was actually good before they used it? That question is what pushed me to build a full rating system from scratch: a reusable `ToolRating` component and `useToolRating` hook wired to all 58 pages, a Google Sheets backend via Apps Script, and a password-gated admin dashboard with HMAC-signed cookies, abuse flagging, and session-timeout logic — so ratings couldn't be trivially gamed by a handful of repeat clicks.
The takeaway I keep coming back to: at small scale, a rigid pattern feels like unnecessary discipline you could skip to move faster. At 58 tools, it's the only thing standing between 'one codebase' and 'fifty-eight slightly different codebases that happen to share a repo' — and the second one is a maintenance nightmare no solo developer survives for long.