Feature+Fix: Referral-Admin, Pro-Gates, Karten-Layer, onDogChange, Staging-Media (SW by-v855)

Features:
- Admin: Referral-Tab (Virality Factor, Top-Werber, letzte Einladungen)
- Karte: Regenradar (RainViewer, zoom→7, color=4), Temperatur-Layer (OWM) mit Zahlen-Grid + Legende
- Wetter-Chip: Umschwung-Warnung bei ≥40%-Sprung in Niederschlagswahrscheinlichkeit
- Freundschaftsanfragen: Accept/Decline direkt in Notifications (kein Pro nötig)
- Freunde-Seite für Standard-User freigeschaltet

Pro-Gates:
- KI-Trainer, Routenvorschläge, Regenradar, Temperatur-Layer jetzt Pro-Feature
- Pro-Badge (P) auf Chips für Admins/Mods in allen Welten + Welten-einrichten
- Oranger Banner auf Pro-Seiten für Admin/Mod/Manager

Bugfixes:
- onDogChange: uebungen.js (Cache leeren + _render), trainingsplaene.js (war leer)
- robots.txt vereinfacht (nur Disallow, kein Allow-Durcheinander)
- Hintergrund-Foto: Querformat-Filter korrigiert (kein Fallback auf Hochformat)
- Staging Media: FileResponse mit korrektem MIME-Type, no-cache statt immutable
- Staging Docker: MEDIA_DIR=/data/media + /prod-media:ro Fallback-Handler
- Staging-Fix: Bild-Upload auf zweitem Hund (war Read-only file system)
This commit is contained in:
rene 2026-05-11 17:23:29 +02:00
parent 2f021f54c2
commit 79fa5684b9
22 changed files with 570 additions and 58 deletions

View file

@ -101,9 +101,9 @@
</script>
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
<link rel="stylesheet" href="/css/design-system.css?v=834">
<link rel="stylesheet" href="/css/layout.css?v=834">
<link rel="stylesheet" href="/css/components.css?v=834">
<link rel="stylesheet" href="/css/design-system.css?v=855">
<link rel="stylesheet" href="/css/layout.css?v=855">
<link rel="stylesheet" href="/css/components.css?v=855">
</head>
<body>
@ -583,10 +583,10 @@
<div id="modal-container"></div>
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
<script src="/js/api.js?v=834"></script>
<script src="/js/ui.js?v=834"></script>
<script src="/js/app.js?v=834"></script>
<script src="/js/worlds.js?v=834"></script>
<script src="/js/api.js?v=855"></script>
<script src="/js/ui.js?v=855"></script>
<script src="/js/app.js?v=855"></script>
<script src="/js/worlds.js?v=855"></script>
<!-- Feature-Seiten werden lazy geladen -->