toolkitsapp.com
Formatters (JSON, SQL, CSS, HTML, YAML), converters (CSV to JSON, number bases, timestamps, units, timezones), generators (QR, UUID, passwords, cron expressions, favicons, meta tags), image tools (compress, resize, format convert, SVG to PNG), a JWT decoder, a regex tester, a handful of calculators. 59 in total. Each one is a single JS file that runs in the browser, so what you paste never leaves the page.
The backend is Flask + Jinja, and it exists mostly for i18n and SEO. Ten languages, so every tool has ten pages with their own title, description and UI strings, plus canonical and hreflang tags so the language versions don't fight each other in search. Strings live in one JSON file per language and templates pull them by dot-path key (tools.json-formatter.title). Small thing I'm happy with: the loader caches each file by mtime, so I can edit a translation and it shows on the next request without restarting anything.
Things I'd do differently: the image tools run on a plain canvas and toBlob, fine for normal photos, will crawl on huge files, they belong in a worker. And I'd write the tool registry once instead of keeping a template and a JS file in sync by hand for 59 tools.
Stack: Flask, Jinja2, Tailwind, vanilla JS, lucide icons, qrcode.js and chart.js as the only vendor scripts.
[link] [留言]