From 36c3bcc98b548eab8a2e26438b27c75a0fd1ffa7 Mon Sep 17 00:00:00 2001 From: Moritz Graf Date: Tue, 6 Jan 2026 22:03:20 +0100 Subject: [PATCH] feat: Refine Header UI, inline Firestore rules, and fix mobile layout bugs --- .gitignore | 3 ++ GEMINI.md | 3 ++ deploy.sh | 4 +- index.html | 3 +- src/App.vue | 19 -------- src/components/layout/Header.vue | 84 ++++++++++++++++++++++++++++++-- terraform/.terraform.lock.hcl | 4 +- terraform/firebase.tf | 43 ++++++++++++++++ terraform/main.tf | 11 +++-- 9 files changed, 141 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index af29224..4112b91 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ dist-ssr *.njsproj *.sln *.sw? + +# Deprecated (Inlined in Terraform) +firestore.rules diff --git a/GEMINI.md b/GEMINI.md index ecfd509..adcfb14 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -1,5 +1,8 @@ # 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. + 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 diff --git a/deploy.sh b/deploy.sh index 6c09770..288c317 100755 --- a/deploy.sh +++ b/deploy.sh @@ -16,8 +16,8 @@ kubectl create namespace $NAMESPACE --dry-run=client -o yaml | kubectl apply -f echo "📦 Building Docker image..." # Try to fetch Firebase config from Terraform -if [ -d "terraform" ] && [ -f "terraform/terraform.tfstate" ]; then - echo "🔍 Detected Terraform state. Fetching Firebase config..." +if [ -d "terraform" ]; then + echo "🔍 Detected Terraform directory. Fetching Firebase config..." cd terraform TF_OUT=$(terraform output -json firebase_config 2>/dev/null) cd .. diff --git a/index.html b/index.html index da31d6a..f140c39 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,8 @@ Haumdaucher Regensburg - + + diff --git a/src/App.vue b/src/App.vue index 9b711ae..af2fa8d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -100,9 +100,6 @@ const t = (key: string) => {
-
- Do bist a haumdaucher 🫵 🍻 -
@@ -174,20 +171,4 @@ const t = (key: string) => { opacity: 0; } -.member-banner { - background: linear-gradient(90deg, #ff9a9e 0%, #fad0c4 99%, #fad0c4 100%); - color: #555; - text-align: center; - padding: 10px; - font-weight: bold; - font-size: 1.2rem; - animation: slide-down 0.5s ease-out; - margin-top: 60px; /* Offset for fixed header */ - border-bottom: 2px solid rgba(255,255,255,0.5); -} - -@keyframes slide-down { - from { transform: translateY(-20px); opacity: 0; } - to { transform: translateY(0); opacity: 1; } -} diff --git a/src/components/layout/Header.vue b/src/components/layout/Header.vue index 9a2cad1..9cd2750 100644 --- a/src/components/layout/Header.vue +++ b/src/components/layout/Header.vue @@ -11,8 +11,9 @@ const emit = defineEmits(['update:theme', 'update:lang', 'open:game']) const themes = ['classic', 'unicorn', 'luxury', 'win95', 'nat'] import { useAuth } from '../../composables/useAuth' -import { watch } from 'vue' +import { watch, ref } from 'vue' const { user, login, logout, error } = useAuth() +const showSettings = ref(false) watch(user, (u) => { console.log("👤 Header: User changed:", u ? u.email : "null") @@ -23,22 +24,37 @@ watch(user, (u) => {