Files

152 lines
5.8 KiB
Markdown
Raw Permalink Normal View History

# 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