Files
infrapuzzle/projects/haumdaucherde/AGENTS.md
T

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 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).

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:

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.