Groups the rev-189 fifty-three named verticals into ten industry categories (retail/professional services/healthcare/trades/hospitality/creative/property/finance/education/manufacturing) so the public templates surface gains a second retrieval axis next to the rev-189 keyword search — the two filters compose via intersection so a visitor can narrow to 'Healthcare' then keyword-filter to 'named-therapist' without scrolling 9 cards. Pairs each per-template detail page with a 'More in {category}' thematic-cluster section (mirrors rev-106 blog related-posts at the templates axis on the category dimension) so visitors landing from search snippets can binge through same-category verticals without bouncing back to the index. Closes the third v1 read shape on the templates cluster (full listing rev 172 + per-template detail rev 189 + per-category drill-down rev 190) with a new GET /api/v1/onboarding-templates/by-category/{category} endpoint plus category projection on the existing rev-172 listing + rev-189 detail endpoints — MCP hosts rendering 'browse Loop Desk's healthcare templates' need only one bearer-less GET. The OpenAPI 3.1 spec types the new endpoint + the new category fields with full schemas in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 99th unbroken rev (rev 190)
Industry category model — 10 buckets covering all 53 verticalsNew TemplateCategory type + TEMPLATE_CATEGORY_BY_KEY map assigns every browsable template to one of 10 industry buckets: retail-ecommerce (2 verticals — ecommerce + indie-bookstore), professional-services (9 — consulting/agency/legal/accounting/B2B-services/independent-CPA/architecture-studio/B2B-SaaS-consultancy/boutique-consultancy), healthcare-wellness (9 — healthcare/fitness/dental/veterinary/veterinary-specialist/specialty-fitness-coach/occupational-speech-therapy/specialty-pharmacy/funeral-home), trades-field-services (9 — field-services/home-services/small-construction/home-inspection/commercial-cleaning/landscape-contractor/specialty-trade/auto-repair/marine-aviation), hospitality-food (6 — restaurant/craft-distillery/direct-trade-food/artisan-bakery/franchise-restaurant/outdoor-recreation), creative-media (3 — creator/creator-infra/museum-cultural-institution), property-realestate (4 — real-estate/property-management/commercial-RE-broker/residential-property-manager), finance-insurance (3 — financial-advisor/insurance-broker/financial-planner), education-membership (4 — education/nonprofit/dance-studio/gym-martial-arts), and manufacturing-specialty (4 — saas/small-manufacturing/specialty-manufacturing/franchise). Sibling Record next to TEMPLATE_LAUNCH (zero schema cost) keyed by template key. Shipped as the load-bearing primitive that backs the rev-190 dashboard chip filter + per-template thematic-cluster section + v1 by-category endpoint + OpenAPI typed schemas — one canonical categorisation, four surfaces.
Category filter chip row on /templates indexNew chip row above the rev-189 search input groups the 53 cards into 10 industry buckets. Each chip shows the per-category count (e.g. 'Healthcare & wellness 9') so visitors see the inventory before tapping. Active chip wears the brand-color teal palette + white text; inactive chips wear the neutral border palette with a soft brand-color hover lift. Both filters compose via intersection — a card has to match keyword AND category for it to surface — so an operator typing 'named-therapist' inside the Healthcare scope sees only the 4 healthcare cards that mention it, instead of every match across 9 verticals. The 'All (53)' chip is always available as the reset; clicking the active chip again is also a clearance gesture. Pure client-side DOM mutation snapshot — the SSR'd grid + JSON-LD ItemList stay intact for crawlers. New 'Reset' inline button surfaces in the count line when either filter is active so an operator who narrowed too far has a one-tap escape from any state. Closes the named rev-189 next-sprint candidate (browse-by-industry primitive) on the public marketing surface.
'More in {category}' thematic-cluster section on /templates/[key]Every per-template detail page now carries a brand-tinted 'More in {Healthcare & wellness}' section above the existing 'Browse other verticals' fallback that surfaces up to 6 same-category templates. Each card shows the vertical's name + the rev-169 keyword-hint chip + a hover-affordance arrow that translates 2px on hover so the row reads as tactile. Mirrors the rev-106 blog related-posts pattern (tag overlap) at the templates axis on the category dimension. Pairs with the rev-189 chronological prev/next nav as the second axis (chronological + thematic) — a visitor reading the dental-clinic page can binge through the rest of healthcare/wellness (veterinary, fitness, occupational therapy, specialty pharmacy, etc.) without scrolling /templates. Header gains a new 'Industry {Healthcare & wellness}' meta line so the category is visible at first glance, and the FAQPage JSON-LD context inherits the category placement implicitly. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 190's polish is load-bearing because the templates cluster has accumulated 53 verticals where same-category browsing is now a real motion.
GET /api/v1/onboarding-templates/by-category/{category} — third v1 read shapeNew bearer-less GET endpoint mirrors the rev-105 /blog/by-author + rev-108 /blog/by-tag patterns at the templates axis on the category dimension. Returns every template in the requested category with the source category's metadata (label + description) plus a flat list of category members (key + name + description + memoryCount + signalCount + url + launchRev + launchDate). Returns 404 with typed { error: 'category_not_found', category, validCategories[] } when the slug is unknown so callers can distinguish from the empty-category case. Closes the third v1 read shape on the templates cluster: full listing (rev 172) + per-template detail (rev 189) + per-category drill-down (rev 190). Plus the rev-172 listing endpoint now projects `category` on every row and includes a `categories` summary block with per-category template counts so MCP hosts rendering 'browse by industry' get the categorisation in one call. Plus the rev-189 detail endpoint now projects `category` on the source template + includes a `relatedByCategory` block with up to 6 same-category templates so MCP hosts can build thematic-cluster navigation alongside the chronological neighbour navigation without re-fetching the listing endpoint. The OpenAPI 3.1 spec types the new endpoint + extends the rev-172 + rev-189 schemas with the new fields in lockstep — the cadence pattern from rev 78 onward (every dashboard primitive gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 99th unbroken rev. Cache-control public, max-age=300, s-maxage=1800.
Visual polish — category chip palette + thematic-cluster card gridNew `.ld-template-filter-categories` chip row uses the brand-color teal active-state + neutral hover-lift palette so the active category reads at a glance without screaming. Per-category count pills wear `font-variant-numeric: tabular-nums` so multi-digit counts stay vertically aligned across chips. New `.ld-template-related` thematic-cluster section uses a soft brand→amber gradient background to distinguish it from the rev-189 chronological prev/next nav (neutral) so the two axes (chronological + thematic) read as siblings without competing visually. Per-card hover lift (1px translateY + brand-color border + 6px box-shadow + arrow translateX 2px) gives the same tactile click affordance as every other public-marketing card on the dashboard's design language thread. Per-card hint clamps to 2 lines via `-webkit-line-clamp` so cards stay scannable across 3-9 same-category templates. New `.ld-template-filter-reset` chip surfaces in the rev-190 count line when either filter is active so an operator who narrowed too far has a one-tap escape; the chip uses the rev-22+ design language ghost-button vocabulary at chip-row scale. Cumulative micro-polish — every rev 22+ has carried at least one — and rev 190's polish is load-bearing because the rev-190 chip row + thematic section both ship simultaneously and need consistent visual story.
Start free — there are no metered credits to run out.