Add new blog post "Ein alter Laptop, Linux und Pi-hole: Digitale Medienkompetenz für Kinder" in German and English, covering setting up a child's first computer with Ubuntu and Pi-hole, open source philosophy, and the balance between protection and freedom. Also adds i18n support for localized month names in date formatting across blog templates. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.8 KiB
Spec: Blog Post - Ubuntu for Kids
Overview
Specification for the bilingual blog post about setting up a child's first computer with Ubuntu and Pi-hole. Uses translated URL slugs with separate directories linked via translationKey.
ADDED Requirements
Requirement: Blog post directory structure with translated slugs
The blog post MUST exist in separate directories for German and English with appropriate URL slugs.
Rationale: Using translated slugs provides better SEO and user experience, with language-appropriate URLs.
Scenario: Directories created with translated slugs
Given the Hugo content directory structure
When creating the new blog post
Then a directory content/blog/ubuntu-fuer-kinder/ must exist for German
And a directory content/blog/ubuntu-for-kids/ must exist for English
And German directory must contain index.de.md
And English directory must contain index.en.md
And both files must include translationKey: "ubuntu-fuer-kinder-post" in frontmatter
Requirement: German blog post content
The German version MUST accurately represent the Notion source content.
Rationale: Preserve the original German text exactly as written by the author.
Scenario: German content matches Notion source
Given the Notion page content at https://www.notion.so/a46ea17cfebb45f6bb0c1d4d516a5d66 When creating the German blog post file Then the content must match the Notion source text And all formatting (headings, lists, emphasis) must be preserved And all sections must be included (TL;DR, technical solution, Linux philosophy, etc.)
Scenario: German frontmatter is correct
Given the blog post requirements
When creating the German blog post
Then the frontmatter must use YAML format (three dashes)
And must include title: "Ein alter Laptop, Linux und Pi-hole: Digitale Medienkompetenz fuer Kinder"
And must include date: 2026-01-19
And must include translationKey: "ubuntu-fuer-kinder-post"
And must include a description field with appropriate summary text
And must be valid YAML syntax
Requirement: English blog post translation
The English version MUST be a natural, accurate translation of the German content.
Rationale: Make the content accessible to English-speaking readers while maintaining technical accuracy and readability.
Scenario: English translation is natural and accurate
Given the German blog post content When creating the English translation Then the translation must convey the same meaning as the German original And must use natural English phrasing and idioms And must maintain technical accuracy for all concepts (Ubuntu, Pi-hole, DNS) And must preserve the same structure (sections, lists)
Scenario: English frontmatter is correct
Given the blog post requirements
When creating the English blog post
Then the frontmatter must use YAML format (three dashes)
And must include title with natural English translation
And must include date: 2026-01-19 (same as German)
And must include translationKey: "ubuntu-fuer-kinder-post"
And must include a description field with English summary
And must be valid YAML syntax
Requirement: Content sections
Both versions MUST include all main content sections from the source.
Rationale: Preserve the complete narrative and arguments of the original post.
Scenario: All sections are present
Given the blog post content When creating the blog post files Then must include a TL;DR summary section And must include "Die technische Loesung" / "The Technical Solution" section And must include "Warum Linux?" / "Why Linux?" section And must include "Das Dilemma" / "The Dilemma" section And must include "Die groesseren Fragen" / "The Bigger Questions" section And must include "Mein Ansatz" / "My Approach" section And must include "Offene Fragen" / "Open Questions" section
Requirement: Hugo build compatibility
The blog posts MUST build successfully with Hugo and render correctly.
Rationale: Ensure the content integrates properly with the existing Hugo site.
Scenario: Hugo builds successfully
Given the new blog post files
When running hugo build
Then the build must complete without errors
And no warnings related to the new blog post must be generated
Scenario: Blog posts are accessible at correct translated URLs
Given a successful Hugo build
When viewing the site
Then the German version must be accessible at /de/blog/ubuntu-fuer-kinder/
And the English version must be accessible at /en/blog/ubuntu-for-kids/
Scenario: Blog posts appear in blog listings
Given a successful Hugo build
When viewing the blog index pages
Then the new post must appear in the German blog listing at /de/blog/
And the new post must appear in the English blog listing at /en/blog/
And the post must display with correct title and description
Scenario: Language switcher works correctly
Given both language versions with matching translationKey
When viewing either version of the blog post
Then the language switcher must link to the corresponding translation
And switching from German to English must navigate to /en/blog/ubuntu-for-kids/
And switching from English to German must navigate to /de/blog/ubuntu-fuer-kinder/
Requirement: Content validation
The implementation MUST pass OpenSpec validation.
Rationale: Ensure compliance with project standards and specification requirements.
Scenario: OpenSpec validation passes
Given the completed implementation
When running openspec validate add-ubuntu-kids-article --strict
Then validation must pass with no errors
And no warnings should be generated