168 lines
6.4 KiB
Markdown
168 lines
6.4 KiB
Markdown
# Spec: Blog Post - Dialogbasierte Anwendungen
|
|||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Specification for the bilingual blog post "Computer, ..." about dialog-based applications using language models. 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/dialogbasierte-anwendungen/` must exist for German
|
||
|
|
**And** a directory `content/blog/dialog-based-applications/` 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: "dialogbasierte-anwendungen-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/Computer-2b5c4dc46de08053954ff3a14b171b47
|
||
|
|
**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 external links must be preserved
|
||
|
|
**And** the TL;DR section must be included
|
||
|
|
**And** the Codeberg repository link must be included
|
||
|
|
|
||
|
|
#### 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: "Computer, …"`
|
||
|
|
**And** must include `date: 2025-11-25`
|
||
|
|
**And** must include `translationKey: "dialogbasierte-anwendungen-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
|
||
|
|
**And** must preserve the same structure (sections, lists)
|
||
|
|
**And** Star Trek references must be preserved (universally known)
|
||
|
|
|
||
|
|
#### 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: 2025-11-25` (same as German)
|
||
|
|
**And** must include `translationKey: "dialogbasierte-anwendungen-post"`
|
||
|
|
**And** must include a `description` field with English summary
|
||
|
|
**And** must be valid YAML syntax
|
||
|
|
|
||
|
|
#### Scenario: External links are adapted appropriately
|
||
|
|
|
||
|
|
**Given** external reference links in the German version
|
||
|
|
**When** creating the English translation
|
||
|
|
**Then** Wikipedia links should point to English Wikipedia versions where applicable
|
||
|
|
**And** code repository links (Codeberg) must remain unchanged
|
||
|
|
**And** all links must be functional
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Requirement: Content formatting and structure
|
||
|
|
|
||
|
|
Both versions MUST use proper markdown formatting consistent with Hugo blog posts.
|
||
|
|
|
||
|
|
**Rationale**: Ensure consistent rendering and readability across the blog.
|
||
|
|
|
||
|
|
#### Scenario: Markdown structure is correct
|
||
|
|
|
||
|
|
**Given** the blog post content
|
||
|
|
**When** creating the blog post files
|
||
|
|
**Then** headings must use proper markdown hierarchy (##, ###)
|
||
|
|
**And** lists must use proper markdown syntax
|
||
|
|
**And** links must use markdown link syntax `[text](url)`
|
||
|
|
**And** emphasis must use proper markdown (*italic*, **bold**)
|
||
|
|
**And** code references must use inline code backticks where appropriate
|
||
|
|
|
||
|
|
#### Scenario: Special characters are handled correctly
|
||
|
|
|
||
|
|
**Given** the blog post contains German umlauts and special characters
|
||
|
|
**When** creating the blog post files
|
||
|
|
**Then** files must be saved with UTF-8 encoding
|
||
|
|
**And** all special characters must render correctly (ä, ö, ü, ß, …)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 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/dialogbasierte-anwendungen/`
|
||
|
|
**And** the English version must be accessible at `/en/blog/dialog-based-applications/`
|
||
|
|
|
||
|
|
#### 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/dialog-based-applications/`
|
||
|
|
**And** switching from English to German must navigate to `/de/blog/dialogbasierte-anwendungen/`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 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-dialogbasierte-anwendungen-post --strict`
|
||
|
|
**Then** validation must pass with no errors
|
||
|
|
**And** no warnings should be generated
|