6.3 KiB
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 deployor./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-filterand 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
- Full Name:
- 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.vueusing standardrefhooks and composables (useAuth.ts). - Theming System:
- Driven by
data-themeattribute on:root. - Defined in
src/assets/styles/global.css. - Themes:
Classic(Light),Dark(Premium Charcoal/Gold),NAT(Boar Easter Egg),Win95,Unicorn,Luxury.
- Driven by
- Localization:
- Centralized in
src/locales/i18n.ts. - Language:
de(Standard German) only.
- Centralized in
🚢 Deployment & DevOps
Standard commands:
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:
- Cluster Sync: Ensures the
haumdauchernamespace exists in Kubernetes. - Config Extraction: Fetches Firebase credentials directly from Terraform outputs (
terraform output -json firebase_configinterraform/). - Build Pipeline: Docker multi-stage build (
node:lts-alpinebuilder →nginx:stable-alpineruntime) targetinglinux/amd64. - Distribution: Pushes the image to
registry.haumdaucher.de/haumdaucher-website:latest. - Kubernetes Rollout: Applies
k8s/haumdaucher/haumdaucher.yamland executeskubectl 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 modeinto the prompt.