Fast, private developer utilities. Every page is pre-rendered HTML, every tool runs entirely in the browser, nothing is uploaded.
- Static-site generator written in plain Node.js
- Eta for templates
- Tailwind CSS v4 for styling
- esbuild to bundle per-tool ES modules
- Tool libraries:
sql-formatter,prettier,js-yaml,js-beautify,diff
No framework runtime ships to the browser.
builder/ # build script, templates, asset sources
content/ # site.json, tools.json, patch-notes.json, pages/*.json
tools/src/ # one ES module per tool, bundled by esbuild
site/ # build output (gitignored)
legacy/ # the previous Angular app, kept for reference
| Command | What it does |
|---|---|
npm run build |
Build the static site into site/ |
npm run preview |
Serve site/ on http://localhost:4000 |
npm run clean |
Remove the site/ directory |
- Add an entry in the relevant category in
content/tools.json. Theentryfield names the JS module. - Add the per-tool body template at
builder/templates/tool-bodies/<entry>.eta.- For most formatters you can copy an existing one (e.g.
format-json.eta).
- For most formatters you can copy an existing one (e.g.
- Add
tools/src/<entry>.js— the module that wires up the tool's UI. - Bump the version and add a patch-notes entry.
npm run build. Sitemap, RSS, and JSON-LD are all generated automatically.
- Each page emits
<canonical>, OpenGraph, Twitter, and JSON-LD structured data. - Tool pages emit
SoftwareApplicationJSON-LD; the home page emits aWebSite+ItemListgraph. sitemap.xmllists every page.rss.xmlis a feed of patch-note entries.robots.txtallows everything and points at the sitemap.
Light by default, dark via prefers-color-scheme or the toggle in the header. The choice is persisted in localStorage and applied before paint by an inlined script in the layout to avoid a flash.