Add a row of category filter chips above the tool grid on the homepage. Clicking a chip narrows the grid to that category; All resets it. Each chip shows its count, so the size of each group is visible at a glance.
We now have 43 tools in a single flat grid. Search (Cmd+K) helps when you know the tool's name, but there's no way to browse by type. Categories fix that.
Why
- The grid is getting long — 43 cards with no grouping.
- Search only helps if you already know what you're looking for.
- Counts on each chip make the collection easier to understand.
Proposed categories (covers all 43 tools)
| Category |
Count |
Examples |
| Format |
5 |
JSON, SQL, XML formatters, Markdown & HTML preview |
| Convert |
10 |
Base64, URL, YAML↔JSON, curl→fetch, timestamp |
| CSS |
11 |
Grid, flexbox, gradient, clamp, box shadow, unit converter |
| Security |
6 |
Hash, bcrypt, JWT, password tools |
| Generate |
5 |
UUID, QR, cron, gitignore, lorem ipsum |
| Dev |
6 |
API tester, OpenAPI viewer, regex, diff, HTTP status |
Scope
- Add a required
category field to every entry in src/constants/tools.ts, plus an exported Category type and CATEGORIES list. Counts are derived from the array, not hardcoded.
- New filter-chip component in
src/ui/, built from the existing Button primitive so styling stays consistent.
- Filter state held in
src/components/ToolManager.tsx (the homepage island that renders the grid).
- Sync the active category to a query param (
/?category=css) so it's linkable and survives a refresh. Uses the browser URL API — no new dependencies.
Not included
No changes to any tool page, no card redesign, no new tools.

Add a row of category filter chips above the tool grid on the homepage. Clicking a chip narrows the grid to that category; All resets it. Each chip shows its count, so the size of each group is visible at a glance.
We now have 43 tools in a single flat grid. Search (Cmd+K) helps when you know the tool's name, but there's no way to browse by type. Categories fix that.
Why
Proposed categories (covers all 43 tools)
Scope
categoryfield to every entry insrc/constants/tools.ts, plus an exportedCategorytype andCATEGORIESlist. Counts are derived from the array, not hardcoded.src/ui/, built from the existingButtonprimitive so styling stays consistent.src/components/ToolManager.tsx(the homepage island that renders the grid)./?category=css) so it's linkable and survives a refresh. Uses the browser URL API — no new dependencies.Not included
No changes to any tool page, no card redesign, no new tools.