61 lines
3.6 KiB
Markdown
61 lines
3.6 KiB
Markdown
# GEMINI.md - Haumdaucher Project Handbook
|
|
|
|
## 🚨 Rules
|
|
**1. Infrastructure as Code is rule #1.** Manual creation of resources (e.g., via `gcloud` or Console) is forbidden. The use of Terraform/Tofu is mandatory.
|
|
|
|
**2. Agental Protocol (Git & Deployment):**
|
|
- Never perform `git add` or `./deploy.sh` before the user has formally accepted the **Walkthrough** artifact.
|
|
- Once accepted, the agent is responsible for committing changes and triggering the deployment script.
|
|
|
|
This document serves as the "Source of Truth" for the Haumdaucher website. It outlines the design principles, technical architecture, and specialized features to ensure consistent future development.
|
|
|
|
## 🦢 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 must feel like a completely different app.
|
|
- **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.
|
|
|
|
## ⚖️ 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.
|
|
- **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).
|
|
- **Localization**:
|
|
- Centralized in `src/locales/i18n.ts`.
|
|
- Language: `de` (Standard German) only.
|
|
|
|
## 🚢 Deployment & DevOps
|
|
Deployment is automated via the `./deploy.sh` script.
|
|
|
|
**Workflow Details:**
|
|
1. **Cloud Sync**: Script ensures the `haumdaucher` namespace exists in Kubernetes.
|
|
2. **Config Extraction**: Fetches Firebase credentials directly from Terraform outputs (`terraform output -json firebase_config`).
|
|
3. **Build Pipeline**: Docker build passes Firebase credentials as `--build-arg` (VITE_FIREBASE_*).
|
|
4. **Distribution**: Pushes the image to `registry.haumdaucher.de/haumdaucher-website:latest`.
|
|
5. **K8s Update**: Applies `k8s-manifests.yaml` and triggers a `kubectl rollout restart` to fetch the new image.
|
|
|
|
## 🕹 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.
|
|
|
|
## 📝 Ongoing Maintenance
|
|
- **Assets**: Static images should be placed in `public/images/`.
|
|
- **Style Overrides**: Mobile-first approach is mandatory. Always test with `max-width: 375px`.
|