From f46e4178d2011b1918e889c5b5e547ab216f3d2a Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Tue, 25 Nov 2025 23:38:20 +0100 Subject: [PATCH] chore: archive completed OpenSpec change homepage-recent-posts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Moved homepage-recent-posts to archive with 2025-10-31 date - Created new spec at specs/homepage-recent-posts/ - All validation checks pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../proposal.md | 0 .../specs/homepage-recent-posts/spec.md | 0 .../tasks.md | 0 .../proposal.md | 0 .../spec.md | 0 .../tasks.md | 0 openspec/specs/homepage-recent-posts/spec.md | 89 +++++++++++++++++++ 7 files changed, 89 insertions(+) rename openspec/changes/{homepage-recent-posts => archive/2025-10-31-homepage-recent-posts}/proposal.md (100%) rename openspec/changes/{homepage-recent-posts => archive/2025-10-31-homepage-recent-posts}/specs/homepage-recent-posts/spec.md (100%) rename openspec/changes/{homepage-recent-posts => archive/2025-10-31-homepage-recent-posts}/tasks.md (100%) rename openspec/changes/archive/{add-dialogbasierte-anwendungen-post => 2025-11-25-add-dialogbasierte-anwendungen-post}/proposal.md (100%) rename openspec/changes/archive/{add-dialogbasierte-anwendungen-post => 2025-11-25-add-dialogbasierte-anwendungen-post}/specs/blog-post-dialogbasierte-anwendungen/spec.md (100%) rename openspec/changes/archive/{add-dialogbasierte-anwendungen-post => 2025-11-25-add-dialogbasierte-anwendungen-post}/tasks.md (100%) create mode 100644 openspec/specs/homepage-recent-posts/spec.md diff --git a/openspec/changes/homepage-recent-posts/proposal.md b/openspec/changes/archive/2025-10-31-homepage-recent-posts/proposal.md similarity index 100% rename from openspec/changes/homepage-recent-posts/proposal.md rename to openspec/changes/archive/2025-10-31-homepage-recent-posts/proposal.md diff --git a/openspec/changes/homepage-recent-posts/specs/homepage-recent-posts/spec.md b/openspec/changes/archive/2025-10-31-homepage-recent-posts/specs/homepage-recent-posts/spec.md similarity index 100% rename from openspec/changes/homepage-recent-posts/specs/homepage-recent-posts/spec.md rename to openspec/changes/archive/2025-10-31-homepage-recent-posts/specs/homepage-recent-posts/spec.md diff --git a/openspec/changes/homepage-recent-posts/tasks.md b/openspec/changes/archive/2025-10-31-homepage-recent-posts/tasks.md similarity index 100% rename from openspec/changes/homepage-recent-posts/tasks.md rename to openspec/changes/archive/2025-10-31-homepage-recent-posts/tasks.md diff --git a/openspec/changes/archive/add-dialogbasierte-anwendungen-post/proposal.md b/openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/proposal.md similarity index 100% rename from openspec/changes/archive/add-dialogbasierte-anwendungen-post/proposal.md rename to openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/proposal.md diff --git a/openspec/changes/archive/add-dialogbasierte-anwendungen-post/specs/blog-post-dialogbasierte-anwendungen/spec.md b/openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/specs/blog-post-dialogbasierte-anwendungen/spec.md similarity index 100% rename from openspec/changes/archive/add-dialogbasierte-anwendungen-post/specs/blog-post-dialogbasierte-anwendungen/spec.md rename to openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/specs/blog-post-dialogbasierte-anwendungen/spec.md diff --git a/openspec/changes/archive/add-dialogbasierte-anwendungen-post/tasks.md b/openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/tasks.md similarity index 100% rename from openspec/changes/archive/add-dialogbasierte-anwendungen-post/tasks.md rename to openspec/changes/archive/2025-11-25-add-dialogbasierte-anwendungen-post/tasks.md diff --git a/openspec/specs/homepage-recent-posts/spec.md b/openspec/specs/homepage-recent-posts/spec.md new file mode 100644 index 0000000..5c295df --- /dev/null +++ b/openspec/specs/homepage-recent-posts/spec.md @@ -0,0 +1,89 @@ +# homepage-recent-posts Specification + +## Purpose +TBD - created by archiving change homepage-recent-posts. Update Purpose after archive. +## Requirements +### Requirement: Display Recent Blog Posts on Homepage +The homepage MUST display the 3 most recent blog posts immediately after the user's description content section. + +#### Scenario: Three most recent posts are displayed +**Given** the blog section contains 5 published posts +**When** a visitor accesses the homepage +**Then** exactly 3 most recent posts are displayed +**And** posts are ordered by publication date (newest first) + +#### Scenario: Fewer than three posts exist +**Given** the blog section contains only 2 published posts +**When** a visitor accesses the homepage +**Then** all 2 posts are displayed +**And** no error or empty slots are shown + +#### Scenario: No blog posts exist +**Given** the blog section contains no published posts +**When** a visitor accesses the homepage +**Then** the recent posts section is not displayed +**And** the homepage layout remains intact + +### Requirement: Post Display Format +Each displayed blog post MUST show the post title as a clickable link and the publication date. + +#### Scenario: Post title is clickable +**Given** a blog post is displayed on the homepage +**When** a visitor clicks the post title +**Then** they are navigated to the full blog post page +**And** the language context is preserved (German homepage → German post, English homepage → English post) + +#### Scenario: Publication date is formatted correctly +**Given** a blog post with date "2025-10-30" is displayed +**When** viewing the German homepage +**Then** the date is formatted as "30. October 2025" +**When** viewing the English homepage +**Then** the date is formatted as "October 30, 2025" + +### Requirement: Multilingual Support +The recent posts section MUST respect the site's multilingual configuration and display language-appropriate content. + +#### Scenario: German homepage shows German posts +**Given** the visitor accesses the German homepage (/de/) +**When** the recent posts section is rendered +**Then** only German blog posts are displayed +**And** the section heading is in German (e.g., "Neueste Beiträge") + +#### Scenario: English homepage shows English posts +**Given** the visitor accesses the English homepage (/en/) +**When** the recent posts section is rendered +**Then** only English blog posts are displayed +**And** the section heading is in English (e.g., "Recent Posts") + +### Requirement: Visual Design and Layout +The recent posts section MUST maintain consistency with the existing site design and remain responsive. + +#### Scenario: Section styling matches site design +**Given** the recent posts section is displayed +**Then** it uses Bootstrap classes consistent with the rest of the site +**And** spacing and typography match existing content sections +**And** the section is visually distinct from the description section above + +#### Scenario: Responsive layout on mobile devices +**Given** the homepage is viewed on a mobile device (< 768px width) +**When** the recent posts section is displayed +**Then** the layout remains readable and properly formatted +**And** no horizontal scrolling is required +**And** links are easily tappable + +### Requirement: Performance and Build +The implementation MUST not negatively impact Hugo build performance or site load times. + +#### Scenario: Hugo build completes successfully +**Given** the homepage template includes recent posts query +**When** running `hugo build` +**Then** the build completes without errors or warnings +**And** the homepage HTML is generated correctly for both languages + +#### Scenario: Site performance remains optimal +**Given** the homepage includes recent posts section +**When** measuring page load performance +**Then** Lighthouse performance score remains >90 +**And** no additional HTTP requests are made +**And** HTML file size increase is minimal (< 2KB) +