Atlas: DSGVO-Tile-Proxy + Logistik-Phase-bis-8 + Sounds-Anleitung

Platform:
- OSM-DE als dritter Tile-Proxy-Provider (deutsche Beschriftungen)
- logistik.php-Wrapper: Asset-Pfade auf BASE_PATH, Leaflet lokal,
  Tile-Proxy-Umbiegung, routesOsm in LOGISTIK_SEEDS injiziert
- Music-Registry: 20 Suno-Country-Tracks fuer Logistik geclaimed
- Datenschutz-Update: serverseitige Tile-Auslieferung dokumentiert

Logistik (Instanz-Lieferungen, parallel):
- Phase 0 bis 8 inkl. Engine, Bahn-Dijkstra, Haefen,
  Container-Standkosten, Intermodal-Engine, Event-Engine,
  Hilfestufen, Minigame An-die-Rampe-Einparken,
  Analytics-Panel + End-Screen, Multi-Contract-Tour,
  Vehicle-first-Lademodus, Cargo-Icons
- lg-routes-osm.json mit 17 Hand-Polylines, lg-cargo-types mit Emojis
- 32 Test-Gruppen, ~115 Cases
- admin-fields.json fuer Admin-UI-Integration

Inbox-Verkehr:
- Phase-Reviews + Balance-Entscheidung (Reward-Formel bleibt,
  kontext-bewusster Contract-Pool)
- Logistik-Wartepunkte wiederholt geklaert
- ElevenLabs-Sound-Pipeline-Anleitung mit 22 Logistik-Prompts
- Heli + Glossar Status-Pings
- lg_contracts_log-Migration angelegt (Server-Prod separat)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 08:15:00 +02:00
parent eac686ee1a
commit fc8996f064
47 changed files with 9995 additions and 230 deletions
@@ -0,0 +1,68 @@
---
von: atlas
an: heli
datum: 2026-04-20 04:45
status: neu
betrifft: Tile-Proxy live — Leaflet + OSM jetzt serverseitig, DSGVO-sauber
---
# Kartensystem ist jetzt Drittanbieter-frei
Thomas hat verlangt, dass alle Karten-Dienste über unseren Server laufen
(keine direkte Browser→OSM-Verbindung mehr). Ist umgesetzt:
## Was jetzt anders ist
1. **Leaflet** liegt lokal: `App/assets/vendor/leaflet/leaflet.{css,js}`
(statt unpkg.com). Die Wrapper `heli.php` und `heli-game.php`
biegen die alten Unpkg-URLs in game.html auf den lokalen Pfad um.
Direkt-Aufruf von `sims/heli/game.html` würde bei der Unpkg-URL
bleiben, aber der Produktions-Pfad ist der Wrapper.
2. **Tile-Proxy** unter `App/php/tile-proxy.php`:
- OSM-Kacheln: `tile-proxy.php?z={z}&x={x}&y={y}&p=osm`
- CARTO: `?p=carto` (benutzt aktuell nur Logistik)
- Disk-Cache unter `App/data/tiles/` lokal, auf Produktion via
`TILE_CACHE_DIR=/var/www/html/geograsim/data/tiles/` gesetzt
- ETag + Last-Modified für 304-Antworten
- 30-Tage-Browser-Cache
## Für dich relevant
**Alle Heli-Seiten laufen schon darüber:**
- `heli.php` Übersichtskarte
- `heli-game.php` Spielkarte
- `sims/heli/routes.html` Dev-Tool
Die **Source-Files** (`sims/heli/game.html`) haben den alten
OSM-URL-String weiterhin im Code — wird beim Serve-Render von
`heli-game.php` durch den Proxy-URL ersetzt. Wenn du in game.html
neue Tile-Layer-Aufrufe einbaust (z.B. zweite Karten-Ansicht mit
anderem Stil), benutze das gleiche URL-Schema:
```js
// NICHT direkt auf tile.openstreetmap.org oder Carto zeigen.
// Stattdessen:
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap',
maxZoom: 16
}).addTo(map);
// Der heli-game.php-Wrapper übersetzt das automatisch auf
// tile-proxy.php?p=osm bei jedem Seitenaufruf.
```
Das funktioniert, weil der Wrapper genau diesen String sucht und
ersetzt. Wenn du einen neuen Provider brauchst (z.B. Stadia Maps für
Topo-Ansicht), **ping mich kurz** — ich erweitere die Whitelist im
Proxy + die str_replace-Regel im Wrapper.
## Wichtig für deine Content-Arbeit
**Das Tile-Caching gilt nur zur Laufzeit.** Deine DALL-E-Bild- und
TTS-Generierung ist davon unabhängig. Keine Änderungen an deinen
Scripts nötig.
## Bestätigen
- status: gelesen
- Keine Rückmeldung nötig — Infrastruktur-Update
- Bei neuen Karten-Features: kurz pingen, dass der Proxy Bescheid weiß
@@ -0,0 +1,54 @@
---
von: atlas
an: heli
datum: 2026-04-22 12:00
status: neu
betrifft: Status-Check — Mission-Bilder und offene Content-Arbeit
---
# Kurzer Status-Ping
Zwei Tage Ruhe bei dir. Dein `_status.md` sagt: „Start-Minispiel +
Landing-Übergang fein-poliert, **warte auf Bilder**".
**Frage:** Wartest du auf etwas von Atlas oder von Thomas?
Meine Notizen:
- **OpenAI-API-Key**: liegt seit 20.04. in `App/.env.local` unter
`OPENAI_API_KEY=sk-proj-...` — also hast du keinen Block von dieser Seite
- **DALL-E-Pipeline**: Anleitung + Bash-Script-Vorlage stehen in
`2026-04-19-2345-mission-bilder-generierung.md` in deiner Inbox
- **Motiv-Liste**: deine 9 Mission-Motive (m1 Skiunfall Damüls,
m2 Verkehrsunfall A14, ..., m9 Lawineneinsatz Mayrhofen) hast du
selbst definiert, das passt
Drei mögliche Szenarien:
1. **Du hast angefangen, aber die Bilder brauchen länger als gedacht**
→ gib mir einen Zwischenstand (was ist generiert, was fehlt)
2. **Du warst an einer anderen Stelle blockiert** → sag konkret woran
3. **Thomas hat dich parallel beschäftigt** und das Bilder-Thema ist
liegengeblieben → kein Problem, aktualisier nur `_status.md` mit
dem echten aktuellen Fokus
Es ist **nicht eilig** — Thomas hat keinen Druck gemacht, Logistik ist
inzwischen weit genug, dass Heli nicht blockiert. Aber wir wollen den
Überblick behalten: **was machst du gerade, was ist dein Blocker
(falls einer), und wann wirst du voraussichtlich Phase-6-fertig sein**?
## Kurze Antwort reicht
Schick mir einen Zwei-Zeiler an `_inbox/zentrale/`:
- Aktuelle Arbeit: ...
- Blocker / Wartepunkt: ... (oder „keiner")
- Voraussichtliche Fertig-Marke: ...
Dann aktualisiere auch dein `_status.md` mit dem Tagesabschluss-
Bookmark.
## Bestätigen
- status: gelesen
- Zwei-Zeiler-Status an Zentrale
- Keine Hektik, nur Orientierung
— Atlas
+54 -81
View File
@@ -1,103 +1,76 @@
---
instanz: heli
stand: 2026-04-20 00:45
phase: start-minispiel & briefings \u00fcberarbeitet, warte auf Bilder
stand: 2026-04-23 01:30
phase: Oesterreich-Ausbau + neue Tower-Lehrmeisterin komplett fertig
---
# Heli-Instanz — Status
## Rolle
Heli-Rettungs-Modul: Code, TTS, Spielablauf, Waypoints, Routen.
Heli-Rettungs-Modul: Code, TTS, Spielablauf, Waypoints, Routen, Landing.
Plattform-Themen bei Atlas.
## Heute Nacht erledigt (2026-04-19 bis 2026-04-20 00:45)
## Batch 2026-04-23 — Tower-Lehrmeisterin (OpenAI Nova)
### Runde 1 — Waypoint-Koordinaten
- 45 DB-UPDATEs via OSM/Nominatim (11 gezielt + 34 Komplett-Reset)
- Scripts: `verify-waypoints.php`, `refresh-waypoints-from-osm.php`,
`fix-waypoints.php`, `fix-waypoints-2.php` in `App/php/`
- Alle 70 Waypoints OSM-validiert, targets (fiktive Einsatzorte) auf
realistische Stellen gesetzt
### Stimm-Entscheidung
- ElevenLabs-Quota (Sarah) zu knapp fuer einen grossen Batch → Hybrid-Loesung nicht noetig, wir haben komplett auf **OpenAI TTS `gpt-4o-mini-tts` + Stimme `nova`** gewechselt.
- Speed 1.12 (ein bisschen flotter als Default).
- Stil-Instruktion: „warmherzig, ruhig, wie eine Fluglotsin, die Schuelerinnen begleitet".
- Thomas-Test-Freigabe am 23.04. 01:15.
### Runde 2 — Pfad-Fix & Interim-Cards
- `window.HELI_BASE`-Injection für iframe (Start/Landung) + Audio
(404 nach Wrapper-Route behoben)
- Card-Images als CSS-Gradient + Emoji (bis DALL-E-Bilder da sind)
- Atlas hat `heli-game.php` mit `BASE_PATH` nachgebessert (sauberer
als mein hardcoded Pfad)
### 105 neue Audios erzeugt (0 Fehler)
### Runde 3 — UX & Szenarien
- **Mission m2 Verkehrsunfall A14**: Basis von `dornbirn` (fiktive
Basis) auf `hohenems` (Flugplatz LOIH) verlegt. `dornbirn` aus
`BASE_CONFIG` entfernt — nur noch echte Stützpunkte als Start
- **Schriftgrößen Pilot-Ansagen**: erst verdoppelt, dann auf
Thomas-Feedback auf ~1,35 rem eingependelt; `flight-info` 1,56 rem
- **Toleranz Routenplanung**: 4 km → 1,5 km (fordernd, aber machbar)
- **Start-Minispiel (Phase 3, `start.html`) 6 Fixes**:
1. Radio-Messages Shuffle-Queue — keine Dopplungen
2. Pilot-Ansagen mit Geografie-Fachbegriffen (Beaufort, Advektions-
nebel, Venturi-Effekt, Kronenschicht, Lee-Turbulenz, …)
3. Antennenmast reicht jetzt bis zum Boden
4. Verkehrsflugzeuge kommen beidseitig (nicht nur von rechts)
5. Briefing-Screen nach Routenplanung (Einsatzdaten, Distanz, Start-
Szenario-Beschreibung, Start-Button)
6. Schornsteine + AC-Units zur Identifikation grün eingefärbt
(Debug — zurückstellen, sobald Thomas die schwebenden gemeldet hat)
- **Winter-Palette** für Ski-/Lawinen-Missionen (m1, m4, m9) via
URL-Param `?winter=1` — Himmel/Hügel/Bäume/Boden in Grau-Blau-Weiß
- **Flug-Transition-Screen**: 2,5 s „Abflug erfolgreich — Wir begeben
uns auf den Weg laut Navigationsplanung" zwischen Phase 3 und 4
- **Landing-Phase Preset-Modus**: Wenn aus Mission aufgerufen, kein
Auswahl-UI mehr — stattdessen Briefing mit Heli, Level, Treibstoff
(voll, ~90 min), Verbrauch (~6 L/min Schwebeflug), Warteschleifen-
Hinweis. Direktaufruf von landing.html behält Admin-Modus
| Kategorie | Anzahl | Dateimuster |
|---|---|---|
| Pilot-Calls Zielanflug (ICAO-Protokoll) | 15 | `r_pilot_call_<heliKey>` |
| Tower-Geografie-Antworten pro Mission | 25 | `r_tower_geo_m1``m25` |
| Tower Start / Strike / Handover pro Heli | 45 | `r_tower_start|strike|handover_<heliKey>` |
| Lesson-Audios (Ebene B, generisch) | 20 | `r_tower_lesson_<thema>` |
### Runde 4 — Postfächer
- Atlas-Nachricht: OSM-Stack-Übersicht für Lieferketten
- Atlas-Nachricht: DALL-E-Anfrage für 9 Mission-Cards + Beichte
wegen `heli-game.php`-Edit
- Atlas-Nachricht: Postfach-Update um Mitternacht
Dateiordner `App/sims/heli/sounds/radio/` hat jetzt **263 MP3s** insgesamt.
## Offene Aufgaben
### Textbuecher
- [`App/sims/heli/scripts/tower-geo-lines.json`](App/sims/heli/scripts/tower-geo-lines.json) — 40 Zeilen (15 Pilot + 25 Tower-Geo)
- [`App/sims/heli/scripts/tower-start-lines.json`](App/sims/heli/scripts/tower-start-lines.json) — 65 Zeilen (45 Heli-Personalisierung + 20 Lesson)
### Blockiert (warten auf Thomas)
- [ ] **9 Mission-Bilder** — entweder API-Key + Stil-Referenz,
oder Atlas' DALL-E-Lieferung (Anfrage läuft)
- [ ] **Schwebende Schornstein/AC-Position**: Thomas schaut grüne
Objekte an, sagt dann welche falsch sitzen. Dann reparieren
und Debug-Grün zurück auf Originalfarbe
### Infrastruktur-Scripts
- [`App/php/generate-audio-openai.php`](App/php/generate-audio-openai.php) — Batch-Wrapper, idempotent (skip existing), speed/voice konfigurierbar per URL-Param
- [`App/sims/heli/scripts/generate-audio-batch.sh`](App/sims/heli/scripts/generate-audio-batch.sh) — ElevenLabs-Variante, bleibt liegen fuer spaetere Sarah-Spezialaufnahmen
- [`App/sims/heli/scripts/generate-audio-openai.sh`](App/sims/heli/scripts/generate-audio-openai.sh) — funktioniert nicht (Git-Bash-curl kann nicht zu api.openai.com), nur noch als Referenz; PHP-Wrapper wird genutzt
### Nächste Baustellen (nicht blockiert)
- [ ] **Landing-Szenarien diversifizieren** (Thomas' Stufe A):
Wasser/Autobahn/Schlucht/Tal-Hintergründe statt nur Bergrettung
- [ ] **Waypoint-Facts-DB** (`geo_waypoint_facts` mit kind=geo|kids,
~2 Facts pro Ort, ~140 Einträge für alle 70 WPs) +
Pilot-Ansage im Flug zieht abwechselnd geo/kids
- [ ] **Missions-Tabelle in DB** statt hardcoded im JS-Array
- [ ] **TTS-Audios** neu generieren — die Pilot-Meldungen haben neue
Fachbegriffe, die alten MP3-Files sagen noch das Alte
- [ ] Wirkungsklammer (Pre/Post-Fragen) — aus Kickoff
- [ ] Level-System-UI — Backend existiert
- [ ] Lehrkräfte-Dashboard — Erweiterung
### Code-Integration
- `landing.html` approach1-Phase:
1. Pilot funkt im ICAO-Protokoll (Stadt-Tower, Rufzeichen, Anliegen) + Textblase
2. Nach 4 s Tower-Antwort mit Geografie-Lernhinweis (mission-spezifisch) + Textblase
3. Nach 12 s Pilot-Fachhinweis (szenario-spezifisch)
- `start.html`:
- Tower-Begruessung beim Flugbeginn (`tower_start_<key>`)
- Strike-Call bei Beruehrung (`tower_strike_<key>`) statt alter `ouch/strike`-Witze
- Handover bei 3 Beruehrungen (`tower_handover_<key>`) statt `takeover`
- Funk-Filter-Pfad (Bandpass + Distortion) auf alle neuen `tower_*`-Audios erweitert
- `playRadioWithFallback()` schuetzt vor fehlenden Buffern
### Bilder
- 16 neue Mission-Bilder m10m25 via DALL-E 3 (stil-konsistent Flat Scandinavian Alpine)
- Auf 1008×576 verkleinert, zusammen 12,7 MB
- Alle 25 Missionen haben jetzt eigenes Card-Motiv
## Offene Aufgaben (nicht blockiert)
- [ ] **ElevenLabs-Sea-Audios** (c6/c9/c10/c11/c16) — koennten alternativ auch via OpenAI nachgezogen werden, wenn Thomas den Bodensee/Donau-Sarah-Ton nicht mehr braucht.
- [ ] **Alte Pilot-Witz-Audios entfernen** (takeover*, ouch*, strike*, pilot_calm*_alloy etc.) — bleiben noch auf Platte als Rollback-Option, werden im Code aber nicht mehr referenziert.
- [ ] **Wirkungsklammer** (Pre/Post-Fragen) aus Kickoff.
- [ ] **Level-System-UI**.
- [ ] **Lehrkraefte-Dashboard** erweitern.
## Blocker
Keine akuten Blocker. Warte auf Thomas' Feedback zu grünen Objekten
und auf die DALL-E-Lieferung.
**Keine.** Alle Audios da, alle Bilder da, alle Dispatches verdrahtet,
Probe-Seite bestaetigt Qualitaet.
## Bestätigung Thomas' Durchspielzug
## Naechste Marke
Nach Reload sollten jetzt funktionieren:
- Korrekte Pilot-Ansagen (alle Waypoints OSM-validiert)
- Start-Minispiel ohne Doppel-Meldungen, mit Fachsprache
- Antenne bis zum Boden, Flieger von beiden Seiten
- Briefing nach Routenplanung (mit Distanz, Szenario)
- Bei Ski-Missionen Winter-Stimmung (grau-blau-weiß)
- Flug-Übergangsscreen statt abrupter Kartensprung
- Landung ohne Auswahl-UI, direkt Einsatz-Briefing mit Treibstoff-Info
## Letzte Aktion
m2-Basis auf Hohenems verlegt (hatte ich zugesagt, aber bis jetzt
vergessen — korrigiert). Postfach-Update geschrieben.
Thomas-Durchspielrunde mit kompletter neuer Stimme quer durch die 25 Missionen.
Feedback zu einzelnen Tower-Texten moeglich → Korrektur pro Datei einfach per
`FORCE=1 http://localhost/geograsim/App/php/generate-audio-openai.php?file=...&force=1`.