Developer Page Specifications
Category Page
/:lang/categories/{slug} — scoped listing reusing the Industry chassis with topic filter + sort. 404 on unknown slug.
Complete
Route: /:lang/editorial/categories/{categorySlug}. Scoped listing showing all articles within one editorial category. Same EditorialListingPage component as listing but with scope=category and an additional category-specific hero.
Page sections
- A · Category breadcrumb (Home → Editorial → {category name})
- B · Category hero (name H1 + description + article count chip + last-updated chip + featured article from this category)
- C · Filter rail (topic multi-select, sort dropdown)
- D · Article feed (3-col grid, infinite scroll)
- E · Related categories (3 other categories the reader might explore)
- F · Newsletter block (preselects this category in interest filter)
- G · Footer
C · Filter contract
- topic (multi-select)
- Source: SELECT DISTINCT topic FROM EditorialArticle WHERE categorySlug = :categorySlug. Query param: topic=csv.
- sort (single-select)
- Values: latest (default, publishedAt DESC) | most-read (viewCount DESC) | editor-picks (isEditorPick DESC, publishedAt DESC) | long-reads (readingTimeMinutes DESC) | short-reads (readingTimeMinutes ASC).
