# AGENTS.md β€” Haumdaucher Official Website (`haumdaucherde`) > [!NOTE] > **Domain**: Official website and community platform for Haumdaucher Regensburg (`HAUMDAUCHER Wurst und SpezialitΓ€ten n.e.V.`). > **Live Production URL**: `https://haumdaucher.de` > **Kubernetes Manifest**: `k8s/haumdaucher/haumdaucher.yaml` (Namespace: `haumdaucher`) > **Container Image**: `registry.haumdaucher.de/haumdaucher-website:latest` > **Source Location**: `projects/haumdaucherde/` --- ## 🚨 Rules & Principles **1. Infrastructure as Code is rule #1.** Manual creation of cloud resources (e.g., via `gcloud` or Console) is forbidden. Use Terraform/OpenTofu located in `terraform/`. **2. Agental Protocol (Git & Deployment):** - Never deploy to production before changes are verified with tests (`npm test -- --run`) and static build (`npm run build`). - Standard deployment is driven via `make deploy` or `./deploy.sh`. --- ## 🦒 Project Essence **Haumdaucher** is a community project from Regensburg, Germany. The website represents the "HAUMDAUCHER Wurst und SpezialitΓ€ten n.e.V." (nicht eingetragener Verein). It is designed to be humorous, culturally rich, and technically "surprising." --- ## 🎨 Design Principles - **Vibrant Aesthetics**: Each theme feels like a distinct experience. - **Glassmorphism**: Use `backdrop-filter` and semi-transparent backgrounds for a premium feel. - **Micro-interactions**: Subtle entrance animations and consistent hover states. - **Accessibility**: Mobile-first design with safe-area support for PWA usage on iOS/Android (`max-width: 375px`). --- ## βš–οΈ Legal & Compliance (n.e.V.) Maintaining the legal section is critical for German compliance (Β§ 5 DDG). - **Entity Type**: The club is a **nicht eingetragener Verein (n.e.V.)**. Do NOT add Registry data (Registergericht/Nummer). - **Mandatory Impressum Fields**: - Full Name: `HAUMDAUCHER Wurst und SpezialitΓ€ten n.e.V.` - Vertretungsberechtigter: `Moritz Graf (1. Vorstand)` - LadungsfΓ€hige Anschrift: `Grabengasse 7, 93059 Regensburg` - Kontakt: `Telefon: 094183065717, E-Mail: info@haumdaucher.de` - **Privacy (DSGVO)**: The website uses **Google Firebase Authentication**. The privacy policy must disclose the data processing by Google Ireland Limited and the US data transfer details. --- ## πŸ› οΈ Technical Specifications - **Framework**: Vue 3 (Composition API) + Vite + TypeScript. - **State Management**: Centralized in `App.vue` using standard `ref` hooks and composables (`useAuth.ts`). - **Theming System**: - Driven by `data-theme` attribute on `:root`. - Defined in `src/assets/styles/global.css`. - Themes: `Classic` (Light), `Dark` (Premium Charcoal/Gold), `NAT` (Boar Easter Egg), `Win95`, `Unicorn`, `Luxury`. - **Localization**: - Centralized in `src/locales/i18n.ts`. - Language: `de` (Standard German) only. --- ## 🚒 Deployment & DevOps Standard commands: ```bash cd projects/haumdaucherde make test # Run Vitest unit tests (npm test -- --run) make compile # Static build to dist/ (npm run build) make build # Docker build using ./deploy.sh (extracts Firebase config from terraform) make deploy # Apply k8s/haumdaucher/haumdaucher.yaml and rollout restart ``` **Workflow Details:** 1. **Cluster Sync**: Ensures the `haumdaucher` namespace exists in Kubernetes. 2. **Config Extraction**: Fetches Firebase credentials directly from Terraform outputs (`terraform output -json firebase_config` in `terraform/`). 3. **Build Pipeline**: Docker multi-stage build (`node:lts-alpine` builder → `nginx:stable-alpine` runtime) targeting `linux/amd64`. 4. **Distribution**: Pushes the image to `registry.haumdaucher.de/haumdaucher-website:latest`. 5. **Kubernetes Rollout**: Applies `k8s/haumdaucher/haumdaucher.yaml` and executes `kubectl rollout restart deployment/haumdaucher-website -n haumdaucher`. --- ## πŸ“ Repository Structure ``` projects/haumdaucherde/ β”œβ”€β”€ Dockerfile # Multi-stage container build (Node builder -> Nginx runtime) β”œβ”€β”€ Makefile # Standard make targets (compile, dev, test, build, deploy) β”œβ”€β”€ deploy.sh # Deployment script with Terraform config extraction β”œβ”€β”€ package.json # Dependencies and scripts (Vue 3, Vite, Vitest, VueFire) β”œβ”€β”€ vite.config.ts # Vite configuration with PWA plugin β”œβ”€β”€ tsconfig.json # TypeScript base configuration β”œβ”€β”€ index.html # HTML entrypoint β”œβ”€β”€ k8s-manifests.yaml # Local copy of Deployment, Service & Ingress manifests β”œβ”€β”€ public/ # Static assets (PWA icons, theme logos in images/) β”œβ”€β”€ src/ # Vue 3 source code β”‚ β”œβ”€β”€ App.vue # Top-level shell and theme state β”‚ β”œβ”€β”€ firebase.ts # Firebase client SDK initialization β”‚ β”œβ”€β”€ main.ts # Vue entrypoint β”‚ β”œβ”€β”€ components/ # Reusable UI components & sections β”‚ β”œβ”€β”€ composables/ # useAuth authentication composable β”‚ β”œβ”€β”€ locales/ # Centralized i18n German translations β”‚ └── assets/ # Styles (global.css) and logos β”œβ”€β”€ terraform/ # Terraform IaC for Firebase project & auth config β”œβ”€β”€ user_creation/ # Declarative Google Apps Script for user provisioning β”œβ”€β”€ mail_forwarding/ # Google Apps Script for haumdaucher.de email routing └── scripts/ # Helper scripts (setup-local-env.sh, manage_secrets.py) ``` --- ## πŸ€– Sub-module Documentation Certain independent sub-modules contain their own highly specific operational guidelines. Always consult them when working in those directories: - **`user_creation/AGENTS.md`**: Contains critical safeguards and architectural details for the declarative Google Apps Script that provisions Firebase users from Google Sheets. - **`mail_forwarding/AGENTS.md`**: Outlines mail forwarding rules and clasp deployment. --- ## πŸ•ΉοΈ The Haumdaucher Game - **Engine**: HTML5 Canvas rendering. Game style changes dynamically based on the site's active theme. - **Unlocking NAT Mode**: - **Natural**: Reach Level 10. - **Backdoor**: Single 1x1 pixel in the bottom-left corner. Type `nat mode` into the prompt.