## Purpose Expose a blog section on the site backed by cached WordPress content, including listing, detail pages, and category browsing. ## ADDED Requirements ### Requirement: Primary navigation entry The site MUST add a header navigation link to the blog index at `/blog` labeled "Blog". #### Scenario: Blog link in header - **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