# markusgraf.ch Source code for [markusgraf.ch](https://markusgraf.ch) — personal website of Markus Graf, built with [Hugo](https://gohugo.io/). ## About Markus Graf is a developer, BSc Psychology graduate, and consultant based in Switzerland. The site serves as his personal blog and digital CV. Topics include AI agents, ADHD & productivity, digital tools, and tech experiments. ## Tech Stack - **Static site generator**: [Hugo](https://gohugo.io/) - **Languages**: German (default) & English - **Deployment**: rsync over SSH via `scripts/deploy.sh` - **Hosted at**: markusgraf.ch ## Site Structure ``` content/ ├── blog/ # Blog posts (bilingual, DE + EN) ├── cv.de.md # Lebenslauf (DE) └── cv.en.md # Curriculum Vitae (EN) ``` Blog posts are organized as page bundles (one folder per post). Each post has a `translationKey` to link its language variants. ## Local Development ```bash hugo server -D ``` The site is served at `http://localhost:1313`. Draft posts (`-D`) are included. ## Deployment The site is deployed via rsync. See [DEPLOYMENT.md](DEPLOYMENT.md) for the full guide. ```bash hugo build export SSH_USER='user' export SSH_HOST='server.com' ./scripts/deploy.sh ``` ## Workflow All changes go through feature branches. See [AGENTS.md](AGENTS.md) for the full Git workflow and OpenSpec conventions. ```bash git checkout -b feature/my-change # make changes git commit -m "feat: description" # open pull request ``` Commit message conventions: `feat:`, `fix:`, `docs:`, `refactor:`, `test:` ## LLM Friendliness The site includes a `static/llms.txt` file following the [llms.txt specification](https://llmstxt.org/), listing key pages for LLM discovery. When adding content, keep `static/llms.txt` up to date. AI assistants working in this project should read [AGENTS.md](AGENTS.md) and [CLAUDE.md](CLAUDE.md) for project-specific instructions.