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>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Proposal: Add Ubuntu for Kids Blog Post
|
||||
|
||||
## Context
|
||||
|
||||
Create a new bilingual blog post based on Notion content about setting up a child's first computer with Ubuntu and Pi-hole. The post reflects on digital media literacy, open source philosophy, and finding the balance between protection and freedom in the digital age.
|
||||
|
||||
## Motivation
|
||||
|
||||
This blog post:
|
||||
- Shares a practical approach to introducing children to computers with Linux
|
||||
- Explores the philosophical aspects of open source vs. proprietary software
|
||||
- Addresses real parenting challenges around digital media literacy
|
||||
- Discusses cyberbullying, doom-scrolling, AI content verification, and other modern challenges
|
||||
- Provides both German and English versions for broader reach
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
- Create new blog post page bundle with German directory `content/blog/ubuntu-fuer-kinder/`
|
||||
- Create new blog post page bundle with English directory `content/blog/ubuntu-for-kids/`
|
||||
- German version (original from Notion)
|
||||
- English version (translated)
|
||||
- Proper frontmatter with title, date, description, translationKey
|
||||
- All formatting and structure preserved
|
||||
- Validation that post renders correctly in Hugo
|
||||
|
||||
### Out of Scope
|
||||
- No changes to existing blog posts
|
||||
- No template or layout modifications
|
||||
- No Hugo configuration changes
|
||||
- No new images or assets
|
||||
|
||||
## Dependencies
|
||||
|
||||
None. This is a new content addition that doesn't affect existing functionality.
|
||||
|
||||
## Risks
|
||||
|
||||
Low risk. Adding new content only, no structural changes.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- Blog post exists in both German and English with translated URL slugs
|
||||
- Content accurately reflects Notion source
|
||||
- English translation is natural and maintains meaning
|
||||
- Hugo builds successfully
|
||||
- Post displays correctly in both languages
|
||||
- Language switcher works between versions
|
||||
- OpenSpec validation passes
|
||||
|
||||
## Related Changes
|
||||
|
||||
Similar to 2025-11-25-add-dialogbasierte-anwendungen-post.
|
||||
@@ -0,0 +1,151 @@
|
||||
# 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
|
||||
@@ -0,0 +1,38 @@
|
||||
# Tasks: Add Ubuntu for Kids Blog Post
|
||||
|
||||
## Implementation Tasks
|
||||
|
||||
1. **Create blog post directory structure**
|
||||
- Create `content/blog/ubuntu-fuer-kinder/` directory for German
|
||||
- Create `content/blog/ubuntu-for-kids/` directory for English
|
||||
- Set up page bundles for bilingual content with translationKey linking
|
||||
|
||||
2. **Create German blog post**
|
||||
- Create `content/blog/ubuntu-fuer-kinder/index.de.md`
|
||||
- Add YAML frontmatter with title, date, description, translationKey
|
||||
- Transfer content from Notion source
|
||||
- Preserve all formatting, structure, and sections
|
||||
- Verify markdown rendering
|
||||
|
||||
3. **Create English blog post**
|
||||
- Create `content/blog/ubuntu-for-kids/index.en.md`
|
||||
- Add YAML frontmatter with translated title, date, description, translationKey
|
||||
- Create natural English translation maintaining technical accuracy
|
||||
- Adapt terminology appropriately for English readers
|
||||
- Verify markdown rendering
|
||||
|
||||
4. **Validate implementation**
|
||||
- Run `openspec validate add-ubuntu-kids-article --strict`
|
||||
- Resolve any validation issues
|
||||
|
||||
5. **Test Hugo build**
|
||||
- Run `hugo server`
|
||||
- Verify no build errors
|
||||
- Check both German and English versions render correctly
|
||||
- Verify language switcher works between versions
|
||||
- Test responsive layout
|
||||
|
||||
6. **Review and commit**
|
||||
- Review generated content
|
||||
- Create git commit with conventional commit message
|
||||
- Ready for user review before merging to main
|
||||
Reference in New Issue
Block a user