Files
astro-website/openspec/changes/archive/2026-02-10-blogs-section/specs/blog-section-surface/spec.md
2026-02-10 01:20:58 -05:00

2.4 KiB

ADDED Requirements

Requirement: Primary navigation entry

The site MUST add a header navigation link to the blog index at /blog labeled "Blog".

  • WHEN a user views any page
  • THEN the header navigation includes a "Blog" link that navigates to /blog

Requirement: Blog index listing (posts)

The site MUST provide a blog index page at /blog that lists WordPress posts as cards containing:

  • featured image (when available)
  • title
  • excerpt/summary

The listing MUST be ordered by publish date descending (newest first).

Scenario: Blog index lists posts

  • WHEN the cached WordPress dataset contains posts
  • THEN /blog renders a list of post cards ordered by publish date descending

Requirement: Blog post detail

The site MUST provide a blog post detail page for each WordPress post that renders:

  • title
  • publish date
  • featured image (when available)
  • full post content

Scenario: Post detail renders

  • WHEN a user navigates to a blog post detail page
  • THEN the page renders the full post content from the cached WordPress dataset

Requirement: WordPress pages support

The blog section MUST support WordPress pages by rendering page detail routes that show:

  • title
  • featured image (when available)
  • full page content

Scenario: Page detail renders

  • WHEN a user navigates to a WordPress page detail route
  • THEN the page renders the full page content from the cached WordPress dataset

Requirement: Category-based secondary navigation

The blog section MUST render a secondary navigation under the header derived from the cached WordPress categories.

Selecting a category MUST navigate to a category listing page showing only posts in that category.

Scenario: Category nav present

  • WHEN the cached WordPress dataset contains categories
  • THEN the blog section shows a secondary navigation with those categories

Scenario: Category listing filters posts

  • WHEN a user navigates to a category listing page
  • THEN only posts assigned to that category are listed

Requirement: Graceful empty states

If there are no WordPress posts available, the blog index MUST render a non-broken empty state and MUST still render header/navigation.

Scenario: No posts available

  • WHEN the cached WordPress dataset contains no posts
  • THEN /blog renders a helpful empty state