- Create English-only page at /SPH2025 for job application video
- Embed video with HTML5 player and native browser controls
- Add URL aliases for /SPH2025/ and /sph2025/ accessibility
- Move video to static/videos/ directory for proper Hugo serving
- Responsive layout using Bootstrap grid
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Moved homepage-recent-posts to archive with 2025-10-31 date
- Created new spec at specs/homepage-recent-posts/
- All validation checks pass
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add new blog post "Computer, ..." exploring how modern language models
enable Star Trek-like computer interactions. Includes a practical
experiment with dialog-based member management using MCP and GraphQL.
Features:
- German version at /de/blog/dialogbasierte-anwendungen/
- English version at /en/blog/dialog-based-applications/
- Translated URL slugs linked via translationKey
- Content sourced from Notion with natural English translation
- OpenSpec proposal with validation passing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add recent posts section to homepage after description
- Query and filter blog posts by language context
- Display post title as link and formatted publication date
- Implement multilingual section headings (Neueste Beiträge/Recent Posts)
- Maintain responsive design with Bootstrap styling
- Handle edge cases (0 posts, <3 posts)
- File size increase <1KB, no new HTTP requests
- Hugo build completes in 21ms without errors
Archive blog section proposal and update main specs.
Specs created:
- openspec/specs/blog-content/
- openspec/specs/blog-templates/
Archived to: openspec/changes/archive/2025-10-31-add-blog-section/
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add complete blog section with German and English support.
Includes first blog post "KI Generierte Website - ein Praxisbeispiel"
about building this site with AI-assisted development.
Features:
- Blog list and single post templates
- Multilingual content structure
- Navigation integration
- Responsive design with Bootstrap
- Semantic HTML and accessibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Translate "KI Generierte Website - ein Praxisbeispiel" to English as
"AI-Generated Website - A Practical Example". The blog post is now
available in both German and English with proper language switching.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add blog functionality to the Hugo site:
- Create blog content structure (content/blog/)
- Add blog list and single templates (layouts/blog/)
- Add blog navigation to menu
- Publish first article: "KI Generierte Website - ein Praxisbeispiel"
- Support multilingual structure (German/English)
- Add code block styling for blog posts
The blog section is now accessible at /de/blog/ and /en/blog/
with proper navigation, responsive design, and semantic HTML.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Change from .Section | relURL to "/blog/" | relLangURL to ensure
the back button properly includes the language prefix (/de/blog/ or
/en/blog/) instead of just /blog/.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add proposal, tasks, and specifications for implementing a blog section
with multilingual support. First article will be "KI Generierte Website -
ein Praxisbeispiel" from Notion.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added bullet point highlighting open source enthusiasm and support
for free and open source software to both English and German versions
of the homepage.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add specialized agent for deploying Hugo site to production.
The agent handles:
- Branch verification (main only)
- Hugo build execution
- Deployment via rsync to markusgraf.ch
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Rename the OpenSpec change from add-ftps-deployment to simple-deployment
to better reflect the current implementation using rsync over SSH.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace the FTPS-based deployment approach with rsync over SSH for more
reliable and efficient mirroring of the Hugo site. This change addresses
issues with the previous approach and provides true mirror behavior.
Key changes:
- Replace lftp with rsync for file synchronization
- Add --delete flag for true mirror behavior (removes stale remote files)
- Simplify authentication to use SSH keys only (no password needed)
- Update all documentation and OpenSpec artifacts
- Add .envrc to gitignore for direnv users
Environment variables:
- SSH_USER: SSH username (required)
- SSH_HOST: server hostname (required)
- SSH_PORT: SSH port (optional, defaults to 22)
- REMOTE_ROOT: remote directory path (optional, defaults to /httpsdocs)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Change mirror command to work better with existing target directories:
- Use cd/lcd to change to directories first
- Simplify mirror command to work from current directories
- Add mkdir fallback if target directory doesn't exist
- Fix SSL setting from ssl-allow to ssl-force for proper FTPS
This resolves issues when httpsdocs directory already exists on server.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add automated deployment script that uploads the Hugo-built site to
www.markusgraf.ch via FTPS. Implementation includes:
- scripts/deploy.sh: Deployment script with full functionality
- Prerequisite checks (public/, lftp, FTPS_PASSWORD)
- FTPS connection with SSL/TLS to www.markusgraf.ch
- Mirror upload from public/ to httpsdocs/ with parallel transfers
- Colored output with progress reporting
- Comprehensive error handling with actionable messages
- DEPLOYMENT.md: Complete deployment documentation
- Setup instructions and prerequisites
- Usage examples and workflow
- Security best practices
- Troubleshooting guide
- .gitignore: Add entries for .env files to prevent credential leaks
- tasks.md: Mark all implementation tasks as completed
All spec requirements satisfied:
- FTPS Deployment Script provided (scripts/deploy.sh:1)
- Secure Credential Management via environment variables
- Deployment Status Feedback with colored output
- Deployment Prerequisites verified before upload
Tested with missing prerequisites, all checks working correctly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create proposal for automated deployment script that uploads the Hugo site
to www.markusgraf.ch via FTPS. Includes:
- Deployment capability spec with 4 main requirements
- Implementation tasks for scripts/deploy.sh
- Secure credential management via environment variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement complete multilingual support using Hugo's multilingual mode with German (de) as default and English (en) as secondary language.
Changes:
- Configure Hugo multilingual mode with language-specific parameters
- Reorganize content using language suffix pattern (filename.de.md, filename.en.md)
- Translate all content to English (home page and CV page)
- Implement language switcher that maintains page context
- Add language-specific navigation menus
- Update templates to use language-aware URL functions (relLangURL)
- Fix navbar brand and Home links to respect current language
- Add translationKey to content frontmatter for explicit translation linking
URL Structure:
- German: /de/ (home), /de/cv/ (CV page)
- English: /en/ (home), /en/cv/ (CV page)
Key Implementation Details:
- Use filename.{lang}.md pattern instead of {lang}/filename.md subdirectories
- Always use relLangURL for internal navigation, never .Site.BaseURL
- Menu URLs must include language prefix when defaultContentLanguageInSubdir = true
- Added translationKey to frontmatter for proper translation discovery
Documented 5 critical bugs and their solutions in design.md for future reference.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add dedicated CV page for HR professionals and recruiters with secure Tresorit download link.
Changes:
- Add CV content page at /cv/ with German text
- Configure CV navigation menu item "Curriculum Vitae"
- Enhance navigation template with active state handling for menu items
- Add secure external link with target="_blank" and security attributes (noopener, noreferrer, nofollow)
- Include email verification notice and information about certificates/references availability
- Create OpenSpec proposal for content-management capability
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Complete migration of all content and images from live markusgraf.ch site to Hugo project.
This merge includes:
- OpenSpec proposal for content migration (proposal.md, design.md, tasks.md, specs)
- Complete homepage content with all sections and projects
- All images downloaded and organized in static/images/
- Verified content parity with live site
- All accessibility requirements met
All 13 tasks completed and verified successfully.
Complete content migration from live site to Hugo project including:
- Fetched HTML from live markusgraf.ch using curl
- Downloaded and organized all images (1 profile, 3 project images)
- Migrated complete homepage content with all sections
- Removed unnecessary about.md placeholder page
- Updated all image references to Hugo static paths
- Verified content parity with live site
- Added descriptive alt text to all images for accessibility
Images organized as:
- static/images/profile/markusgraf.jpg
- static/images/projects/laufbahndiagnostik.png
- static/images/projects/persoenlichkeitsdiagnostik.png
- static/images/projects/cpd.png
All 13 tasks completed and verified successfully.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create comprehensive proposal to migrate all content from live markusgraf.ch
to the Hugo project, including text content, images, and structure.
- Add proposal.md with rationale and impact analysis
- Add design.md with content extraction strategy and trade-offs
- Add tasks.md with 13 ordered, verifiable implementation tasks
- Add content-migration spec with 5 requirements and 11 scenarios
- Add image-assets spec with 5 requirements and 10 scenarios
Validated with: openspec validate migrate-site-content --strict
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Initialize minimal Hugo site structure with Bootstrap 5.3.2 integration for
markusgraf.ch conversion. Implements OpenSpec proposal add-minimal-hugo-site.
Features:
- Hugo project structure with standard directories
- Base layout template (baseof.html) with Bootstrap 5.3.2 via CDN
- Homepage (index.html) and single page (single.html) templates
- Reusable partials: header, footer, navigation
- Responsive Bootstrap grid layout
- Mobile-first design with semantic HTML5
- Valid HTML output with basic accessibility features
- Taxonomies disabled for minimal site (see docs/TAXONOMIES.md)
Documentation:
- IMPLEMENTATION_SUMMARY.md - Complete implementation guide
- docs/TAXONOMIES.md - Guide for re-enabling categories/tags
- static/README.md - Guide for placing static assets
Configuration:
- hugo.toml configured for markusgraf.ch
- .gitignore for Hugo build artifacts
All 24 tasks from OpenSpec proposal completed successfully.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>