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:
@@ -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
|
||||
@@ -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 m10–m25 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`.
|
||||
|
||||
Reference in New Issue
Block a user