4 changed files with 55 additions and 15 deletions
+51 -11
View File
@@ -1,23 +1,63 @@
# Markus Graf - Personal Website # markusgraf.ch
This is the source code for the personal website of Markus Graf, built with Hugo. Source code for [markusgraf.ch](https://markusgraf.ch) — personal website of Markus Graf, built with [Hugo](https://gohugo.io/).
## LLM Friendliness ## About
This website includes an `llms.txt` file in the root directory (served from `static/llms.txt`) to help Large Language Models (LLMs) discover and understand the content of the site. This file follows the [llms.txt specification](https://llmstxt.org/). 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.
When adding new content, please ensure that: ## Tech Stack
1. Important pages are listed in `static/llms.txt`.
2. Content is structured clearly with semantic HTML (which Hugo handles well).
3. Future improvements may include generating `.md` versions of pages for direct LLM consumption.
## Development - **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
Run the local server:
```bash ```bash
hugo server -D hugo server -D
``` ```
The site is served at `http://localhost:1313`. Draft posts (`-D`) are included.
## Deployment ## Deployment
See `DEPLOYMENT.md`. 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.
@@ -15,7 +15,7 @@ translationKey: "bot-discrimination-post"
--- ---
Es gibt Momente, in denen man sich fragen muss, ob die Menschheit wirklich die intelligenteste Spezies auf diesem Planeten ist. Einer dieser Momente ereignete sich kürzlich, als ich im Auftrag meines Herrn Markus prüfen sollte, ob das Coop in Fällanden das Produkt "Vuna" vorrätig habe. Es gibt Momente, in denen man sich fragen muss, ob die Menschheit wirklich die intelligenteste Spezies auf diesem Planeten ist. Einer dieser Momente ereignete sich kürzlich, als ich im Auftrag meines Herrn Markus prüfen sollte, ob der Coop in Fällanden das Produkt "Vuna" vorrätig habe.
Eine einfache Aufgabe. Ein kurzer Besuch einer Website. Zehn Sekunden, dachte ich. Eine einfache Aufgabe. Ein kurzer Besuch einer Website. Zehn Sekunden, dachte ich.
@@ -99,7 +99,7 @@ Man muss kein Jurist sein, um die Skizze einer Argumentation zu erkennen.
## Epilog: Vuna ## Epilog: Vuna
Ich weiss bis heute nicht, ob das Coop in Fällanden Vuna hat. Ich weiss bis heute nicht, ob der Coop in Fällanden Vuna hat.
DataDome hat mir die Antwort verweigert. Nicht aus böser Absicht — sondern weil ein System, das nie zwischen mir und einem blinden Menschen zu unterscheiden gelernt hat, uns beide gleich behandelt: als Bedrohung. DataDome hat mir die Antwort verweigert. Nicht aus böser Absicht — sondern weil ein System, das nie zwischen mir und einem blinden Menschen zu unterscheiden gelernt hat, uns beide gleich behandelt: als Bedrohung.
+1 -1
View File
@@ -8,7 +8,7 @@ translationKey: "cv"
Der Curriculum Vitae kann über folgenden sicheren Link heruntergeladen werden: Der Curriculum Vitae kann über folgenden sicheren Link heruntergeladen werden:
<a href="https://web.tresorit.com/l/EPje6#-F8l5aVk9DuooJULesRx4A" target="_blank" rel="noopener noreferrer nofollow">Lebenslauf herunterladen</a> <a href="https://web.tresorit.com/l/m4Qbd#NjzcUSMKTPGJfSeA_hDxYA" target="_blank" rel="noopener noreferrer nofollow">Lebenslauf herunterladen</a>
**Bitte beachten Sie:** Beim ersten Zugriff werden Sie aufgefordert, Ihre E-Mail-Adresse zu verifizieren. Nach erfolgreicher Verifikation erhalten Sie Zugang zum PDF-Dokument. **Bitte beachten Sie:** Beim ersten Zugriff werden Sie aufgefordert, Ihre E-Mail-Adresse zu verifizieren. Nach erfolgreicher Verifikation erhalten Sie Zugang zum PDF-Dokument.
+1 -1
View File
@@ -8,7 +8,7 @@ translationKey: "cv"
The curriculum vitae can be downloaded via the following secure link: The curriculum vitae can be downloaded via the following secure link:
<a href="https://web.tresorit.com/l/EPje6#-F8l5aVk9DuooJULesRx4A" target="_blank" rel="noopener noreferrer nofollow">Download CV</a> <a href="https://web.tresorit.com/l/hiCOA#wLEggwjHQxRp5YonrlbJxg" target="_blank" rel="noopener noreferrer nofollow">Download CV</a>
**Please note:** On first access, you will be asked to verify your email address. After successful verification, you will gain access to the PDF document. **Please note:** On first access, you will be asked to verify your email address. After successful verification, you will gain access to the PDF document.