Scaling to 235 tools: ⌘K palette, hub pages, tags, and a new homepage

Two months ago maratool had 79 tools and the old homepage was already getting crowded. After shipping the Health category, we crossed 235 tools — and the shell that worked at 8 simply stopped working at 235. This is what we rebuilt.

The brief was uncomfortable: maratool is supposed to become a huge compendium of browser-based tools. 1,000+ tools, eventually. But the homepage was per-category 3-card sections, the sidebar was a flat list of every tool, and the only thing that actually scaled was the topbar search. We needed a real information architecture.

The new maratool homepage, showing a hero search with query chips above a 'Browse by vertical' grid of 9 category cards: Health (131 tools), Developer (17), Image (16), Converter (14), Text (13), Color (9), PDF (8), Mockup (8), and Marketing (3). Sidebar lists all verticals.
The new homepage — a compendium index instead of per-category card sections.

The redesign borrows from MDCalc (faceted filters, A-Z jump), Linear and Raycast (the command palette), and Tiny Helpers (dense tool rows). Everything below is live now.


Press ⌘K from anywhere

The most useful change is the smallest. Press ⌘K (or Ctrl+K) on any page and a command palette opens — fuzzy search across all 235 tools, sectioned by vertical, with your recently used and pinned tools showing in the empty state. Arrow keys navigate, Enter opens. It's the fastest way to get anywhere on the site.

The topbar search trigger in the header now opens this palette too. On mobile the palette becomes a full-screen sheet.

The ⌘K command palette open as a centered modal over a dimmed Health hub. Input reads 'Search 235+ tools…' with hint text suggesting 'json', 'cha2ds2', or 'qr'. A footer shows the keyboard shortcuts: Navigate (↑↓), Open (↵), New tab (⌘↵), Close (esc).
The command palette — opens with ⌘K from anywhere, becomes a full-screen sheet on mobile.

Every vertical is now a real destination

Each category used to be a flat dump. Now /health, /developer, /image, /text, /converter, /color, /pdf, /marketing, and /mockup share a hub template with:

  • Scoped search — filters the list live as you type, only inside the current vertical.
  • Faceted filter pills — click a subcategory pill to narrow down. URL syncs via query params, so links are shareable.
  • Dense rows — name + description + subcategory badge + pin button per row. Designed to read at scale, not browse 3-up cards.
  • Pagination — 30 tools per page, with "1–30 of 145" counter and ellipsis page picker.
The Health hub page titled 'Medical calculators' with breadcrumb, scoped search, and two rows of facet pills (subcategory and specialty). Dense tool rows below show name, description, subcategory badge in green, and a pin star at the right.
The Health hub — dense rows, dual-axis facets (Subcategory and Specialty), and pagination at 30 per page.

Subcategory landing pages

Every subcategory now gets its own page — /health/cardiology, /developer/crypto, /image/convert, and so on. These are auto-generated from the tool registry and exist for one reason: people search for "cardiology calculators online", not for "maratool". The subcategory page is the destination Google sends them to.

New homepage: a compendium index

The homepage used to be 3-card sections per category — fine for 7 categories, broken at 9. The new homepage is a verticals grid: each vertical gets a card showing its name, tool count, and 3 popular tools. Health leads (145 tools), then Developer (17), Image (17), Converter (14), Text (13), Color (9), PDF (8), Mockup (8), Marketing (3).

Below the grid: "Popular this week", "New", "Recently used", and "Pinned" — only the sections that have content for you.

Popular tools, derived not hardcoded

"Popular this week" used to be whatever list I edited last. Now it's computed: a small manual boost for hand-picked tools, plus a signal from keyword count, category size, and recency in the registry. Determinístico — adding a new tool re-ranks everything, no list to maintain.


/all — alphabet jump index

/all lists every tool A-Z with a sticky alphabet jump at the top, MDCalc-style. If you know the name — "MELD", "Friedewald", "Pomodoro" — this is faster than scrolling categories. Letters with no tools are dimmed; tag pills above the list give cross-cutting entry points.

The /all page titled 'All tools' showing the A-Z alphabet jump row with letter '0-9' and 'J' dimmed (no tools). Below, a 'TAGS' row with pills: instant 213, no-upload 183, clinical 131, realtime 90, file-upload 36. Below that, tools sorted A-Z with vertical color dot and subcategory badge per row.
/all — alphabet jump for known-item retrieval, with tag pills as cross-cutting entry points.

Tags: a cross-cutting axis

Categories answer "what kind of thing is this?". Tags answer "how does it behave?". Five tags exist today and every tool is auto-tagged from its metadata:

  • instant — runs in your browser with zero round trips.
  • no-upload — never sends your data anywhere.
  • file-upload — works on local files you drop in.
  • realtime — updates as you type, no submit button.
  • clinical — medical calculators and clinical scores.

Each tag has its own page — for example, /tag/clinical shows all 145 medical tools regardless of specialty, grouped by area.

The /tag/clinical page titled 'Clinical tools' with breadcrumb 'Home / All tools / Clinical tools'. Description: 'Medical calculators, scores, and scales for healthcare professionals. 131 tools across 1 category.' Below, a Health section header with green dot and tool count, then dense tool rows with subcategory badges in green on the right.
Tag pages — group tools by behavior (clinical, instant, no-upload, file-upload, realtime) across verticals.

Pin your favorites

Every tool page now has a ★ Pin button next to the title. Pinned tools show up at the top of the sidebar, in the ⌘K palette empty state, and on the homepage. Stored in localStorage — nothing sent to a server. It complements the automatic "recently used" list rather than replacing it.

The CHA2DS2-VASc Score Calculator tool page. Top right of the title shows a ★ Pin button and a </> Embed button. Sidebar on the left shows 'Recently used' at the top with this tool, then 'In Score' section listing sibling tools like Pack-Year, Candida, CHADS2, NYHA, GELF, DAS-28, ABCD2, AIMS65, APACHE II. The tool itself shows the form fields and a 0/9 score result.
Tool page with the ★ Pin button next to the title and the contextual sidebar showing sibling tools in the same subcategory.

The sidebar is contextual now

Showing all 235 tools in the sidebar was never going to scale. The sidebar now adapts to where you are:

  • Home — lists the 9 verticals with counts.
  • Hub (e.g. /developer) — lists subcategories of that vertical.
  • Subcategory (e.g. /health/cardiology) — lists sibling tools.
  • Tool page — lists other tools in the same subcategory.

Always relevant, never overwhelming.


A small thing for clinicians: dual-axis filter on Health

Health is 62% of the site and has its own discovery problem. A cardiologist doesn't think "Score" vs "Calculator" — they think "I need a cardiology score". So /health gets a second axis: a Specialty dropdown layered on top of the subcategory facet. /health/?specialty=cardiology pulls MAP, QTc, Friedewald, CHA2DS2-VASc, NYHA, HAS-BLED, Killip, and the rest — across whatever subcategory bucket they happened to land in.

The specialty is inferred from each tool's keywords, so it stays accurate as tools are added.

Pagination that doesn't break SEO

The Health hub has 145 tools. Showing all of them in one DOM blob is bad UX; splitting them into ?page=2, ?page=3 server-side fragments the internal link graph that Google uses to discover tools. The compromise: render every tool in the HTML, hide all but the current page with CSS. The full link graph is there for crawlers, the page feels light for humans.


Mobile pass

The whole redesign got a mobile audit, copying patterns from MDCalc's mobile site:

  • Horizontal-scroll facets with a fade mask on the right edge — facet pills never wrap, never collapse into a dropdown, never hide.
  • Full-screen palette — ⌘K becomes a full-height sheet under 640px.
  • iOS-safe inputs — every input is at least 16px to prevent the auto-zoom on focus.
  • Touch targets — pills 32px tall, pin button 36px, per Apple HIG.
  • No hamburger — mobile users search, they don't browse top-nav. Nav lives in the footer.
The maratool homepage on mobile (390px wide). Compact topbar with logo and search trigger only, no nav. Hero h1 'Free online tools' above a search input with placeholder hint, query chips wrapping into 3 rows. Below, a 'Pick up where you left off' section with the last-used tool, then 'Browse by vertical' as a single-column stacked grid showing Health and Developer cards.
Mobile homepage — dense single column, query chips wrap, no hamburger.
The Health hub on mobile (390px wide). Breadcrumb 'Home / Health' above the 'Medical calculators' title and intro. Search input full-width. Below, a SUBCATEGORY row with horizontal-scrolling pills (All 131, Anthropometric 3, Cardiology 26 visible, fade on right edge) and a SPECIALTY row with the same pattern (All, Cardiology 26, General 13, Pediatric partially visible). Dense rows below with subcategory badge top-right and pin star bottom-right.
Mobile Health hub — facets scroll horizontally with a fade-mask on the edge.

What didn't change

The stack is still the same. Astro, plain CSS with variables, vanilla JS, no framework inside tool logic. Static output to Cloudflare Pages. The whole IA layer is roughly 4 new Astro components, one CSS file, and a few derived fields in the tool registry. Build is 286 pages and ~7 seconds.

The aesthetic stayed the same too: warm beige (#f5f4f1), Instrument Serif italic for display, Inter for body, a single terracotta accent. Health didn't get its own visual treatment — one shell, one feel. Differentiation comes from the dual-axis filter and the colored purpose badges, not from a different color story.