Files
markusgraf_ch/openspec/changes/add-ubuntu-kids-article/specs/blog-content/spec.md
T
gurixandClaude Opus 4.5 803bd79dc8 feat: add bilingual blog post about digital media literacy for children
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>
2026-01-19 16:43:58 +01:00

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