Skip to main content

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

  1. A · Category breadcrumb (Home → Editorial → {category name})
  2. B · Category hero (name H1 + description + article count chip + last-updated chip + featured article from this category)
  3. C · Filter rail (topic multi-select, sort dropdown)
  4. D · Article feed (3-col grid, infinite scroll)
  5. E · Related categories (3 other categories the reader might explore)
  6. F · Newsletter block (preselects this category in interest filter)
  7. 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).