Skip to content

feat(registry): per-family component landing pages#464

Open
bntvllnt wants to merge 4 commits into
mainfrom
feat/family-homepage
Open

feat(registry): per-family component landing pages#464
bntvllnt wants to merge 4 commits into
mainfrom
feat/family-homepage

Conversation

@bntvllnt

Copy link
Copy Markdown
Collaborator

Adds a landing page per component family at /families/[category]. Validate on the preview link below.

What

  • /families/[category] — hero (family name + description + count) and a card grid of that family's components. Generated from the existing category enum (11 families). ai is excluded — it keeps its curated /ai landing (via a new familyPath helper).
  • Internal linking — the /components family headings and the component-page family breadcrumb crumb (added in feat: component sidebar drill-down navigation #461) now link to the family page.
  • SEO / agent-surface — 11 family routes added to sitemap.ts; new collectionPageLd JSON-LD (CollectionPage + ItemList) + BreadcrumbList.
  • e2e — family landing renders + grid links, unknown family 404s, component breadcrumb crumb navigates to the family page.

Notes

  • No @vllnt/ui changes → no registry regeneration needed.
  • Data-driven: a new categorized component appears on its family page automatically.

How to validate

  1. Preview → /families/form (or /components → click a family heading) → family grid + breadcrumb.
  2. Open a component (e.g. /components/form) → click the Form crumb → lands on /families/form.
  3. ai family heading still routes to the curated /ai.

Closes #463

https://claude.ai/code/session_01KB2yTDBo7Knydqvz1VvFdF

Add a landing page per component family at /families/[category] — hero,
description, component count, and a card grid — generated from the existing
`category` enum (11 families; `ai` keeps its curated /ai landing via a new
`familyPath` helper). Wires internal links + SEO:

- /components family headings and the component-page family breadcrumb crumb
  now link to the family page.
- sitemap: 11 family routes (× locales).
- JSON-LD: new `collectionPageLd` (CollectionPage + ItemList) + BreadcrumbList.
- e2e: family landing renders, unknown family 404s, breadcrumb crumb navigates.

Closes #463

Claude-Session: https://claude.ai/code/session_01KB2yTDBo7Knydqvz1VvFdF
@vllnt-pilot

vllnt-pilot Bot commented Jun 27, 2026

Copy link
Copy Markdown

ntk preview

App Status Preview
ui-registry Ready https://pr-464-ui-registry.preview.vllnt.ai
storybook Ready https://pr-464-storybook.preview.vllnt.ai

Built from d179b530 · public + no-index (ADR-082) · torn down on close

The ntk preview check failed at the infra layer (deploy unrouted; all paths
404 including pre-existing routes) — not the diff. Empty commit to retry the
preview; all GitHub Actions checks were green.

Claude-Session: https://claude.ai/code/session_01KB2yTDBo7Knydqvz1VvFdF
Clicking a family in the sidebar now navigates to its landing page instead
of only drilling in place. Family sections carry an optional `href`
(SidebarSection.href): FamilyList renders a link when present (button-drill
kept as a no-href fallback), the drilled family header links there too, and
auto-drill now matches the family route — so landing on /families/[category]
(or /ai) opens the sidebar straight into that family.

- @vllnt/ui Sidebar: SidebarSection.href + link rendering + family-route
  auto-drill (non-family sidebars unchanged).
- registry: getSidebarSections stamps each family's href via familyPath.
- e2e: family row navigates to the homepage and drills the sidebar.
- regenerate sidebar registry artifacts.

Claude-Session: https://claude.ai/code/session_01KB2yTDBo7Knydqvz1VvFdF
The gallery ComponentPreview switch only covered 142 components; the other
167 (all of data-display, ai, billing, educational + most of the rest) fell
through to the text PlaceholderPreview — so family pages like /families/data-display
showed no real previews. Add a bespoke inline preview per component (same
pattern as the existing 142), authored against each component's real API.

- 307 components now render a live inline preview; 2 (scroll-progress,
  heat-overlay) use the existing SimplePreview fallback (viewport-fixed /
  TS children-typing quirk). 0 placeholders remain.
- Deterministic demo data only (no Math.random / Date.now / argless Date).
- App-internal component — no registry regeneration.

Claude-Session: https://claude.ai/code/session_01KB2yTDBo7Knydqvz1VvFdF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: per-family component landing pages

1 participant