# AGENTS.md — Moritz Graf Personal Website (`moritzgrafde`) > [!NOTE] > **Domain**: Personal portfolio and homepage for Moritz Graf. > **Live Production URL**: `https://moritzgraf.de` > **Kubernetes Manifest**: `k8s/web/moritzgrafde.yaml` (Namespace: `web`) > **Container Image**: `registry.haumdaucher.de/moritzgrafde:latest` > **Source Location**: `projects/moritzgrafde/` (Migrated from standalone `moritzgraf` repo) --- ## 🏛️ Architecture & Build Pipeline 1. **Stack**: - Static site generated with [Hugo](https://gohugo.io/) using the `hugo-goa` theme. - Served via lightweight `nginx` container (`Dockerfile`). - The compiled static site is maintained in `public/`. 2. **Container Build & Architecture**: - The target Kubernetes node `haumdaucher` runs on **`linux/amd64`**. - Build command: ```bash docker build --platform linux/amd64 -t registry.haumdaucher.de/moritzgrafde:latest . docker push registry.haumdaucher.de/moritzgrafde:latest ``` 3. **Deployment**: - Deployed to the Kubernetes cluster in namespace `web`. - Ingress controller: Traefik, Let's Encrypt SSL via `cert-manager`. - Rollout restart: ```bash kubectl rollout restart deployment/moritzgrafde -n web kubectl rollout status deployment/moritzgrafde -n web ``` --- ## 📁 Repository Structure - `content/`: Hugo content markdown files. - `themes/hugo-goa/`: Hugo Goa theme layouts and partials. - `public/`: Pre-rendered production assets and HTML ready for the Nginx container. - `Dockerfile`: Minimal Nginx container copying `./public/` to `/usr/share/nginx/html/`. - `build.sh`: Convenience build, push, and redeploy script. - `config.toml`: Hugo site configuration.