# Lernkompass auf dem iPhone

**Aktuelle Version ohne KI-API:** Siehe [kostenfreie Planung und Wissensstand-Übertragung](KOSTENFREI-UND-LERNUPDATE.md). Enthält automatische Umplanung, Lernzeit-Budgets, Planbefehle und Wissensstand pro Fach. Die unten erwähnte Server-Verbindung ist lediglich eine spätere Möglichkeit und wurde nicht eingerichtet.

## Was enthalten ist

Prüfungskalender mit Monatsansicht und nach Datum sortierter Agenda mit Countdown, bearbeitbare Prüfungstermine, Lernaufgaben mit Erledigt-Status, BMA-Thema / Notizen / nächster Schritt / Abgabe, Lerntimer, lokale Speicherung, JSON-Export und geprüfter Import, Manifest, Icons und Service Worker.

Die ursprüngliche Datei `/mnt/data/lernkompass_iphone.html` war in dieser Umgebung nicht verfügbar. Die referenzierte Unterhaltung lieferte keine lesbaren Antworten oder Anhänge mit Terminen. Diese Version startet daher ohne Prüfungen, Aufgaben oder BMA-Daten. Es wurden keine Termine erfunden. Sie ist eine eigenständige Neuimplementierung, keine geprüfte Migration der alten Datei. Alte HTML-Daten nicht blind importieren: bestätigte Inhalte zuerst in das unten beschriebene JSON-Format übertragen.

## Hosting und Installation

1. ZIP entpacken. Den gesamten Ordnerinhalt von `lernkompass` auf einen statischen Webhost mit HTTPS hochladen. `index.html` muss am Einstieg liegen. Auch `sw.js`, `manifest.webmanifest`, `style.css`, `app.js`, `calendar.js`, `planner.js`, `plan-ui.js`, `INSTALLATION.md` und der Ordner `icons` müssen unter derselben Adresse erreichbar sein. Ein Unterordner ist erlaubt; relative Pfade sind vorbereitet.
2. Den bereitgestellten HTTPS-Link auf dem iPhone in Safari öffnen. Eine Datei in der Dateien-App oder ein `file://`-Link ist keine installierbare Offline-PWA. Ein lokaler PC-Test über localhost ersetzt keinen HTTPS-Link für das iPhone. Dieses Download-Paket ist noch nicht gehostet.
3. Warten, bis im Kopfbereich „Offline bereit“ erscheint. Dann in Safari Teilen → Zum Home-Bildschirm → falls angeboten „Als Web-App öffnen“ aktivieren → Hinzufügen.
4. Lernkompass vom Home-Bildschirm öffnen. Einen bestätigten Termin hinzufügen. App schliessen, Flugmodus aktivieren und erneut vom Home-Bildschirm öffnen: Termin und App müssen verfügbar bleiben.
5. Falls Safari und Home-Screen-App getrennte Speicherstände zeigen, den JSON-Export in der Home-Screen-App importieren. Verwende danach immer diese App und dieselbe Webadresse.

Für den Host: JavaScript mit JavaScript-MIME-Type ausliefern, Manifest als `application/manifest+json` oder JSON, PNG als `image/png`. Keine Weiterleitung von Asset-Dateien auf eine Login-Seite. `sw.js` möglichst mit `Cache-Control: no-cache` ausliefern. Die PWA verwendet keine externen Bibliotheken, Schriften oder Trackingdienste. Auf einem öffentlichen Host sind App-Dateien öffentlich, deine lokal eingegebenen Lerndaten werden nicht hochgeladen. Der Webhost sieht jedoch gewöhnliche Seitenaufrufe.

## Offline und Updates

Nach dem ersten erfolgreichen HTTPS-Aufruf werden App-Dateien gecacht. Die Lerndaten werden separat im lokalen Browser-Speicher gespeichert. Countdown und Lernen funktionieren offline. Keine garantierten Push-Mitteilungen oder Hintergrundalarme. iOS kann Browser-Speicher entfernen; sichere regelmässig per Export. Bei einem Wechsel von Domain oder Unterordner vorab exportieren.

Für neue App-Versionen alle Dateien gemeinsam aktualisieren und in `sw.js` den Cache-Namen erhöhen. Der neue Worker wartet, bis alle alten App-Fenster geschlossen sind; danach die App neu öffnen. Browserdaten zum Aktualisieren nicht löschen, sonst gehen lokale Lerndaten verloren. Die App löscht nur eigene alte Caches.

## Synchronisierung aus Lernunterhaltungen

1. Im Bereich Sync „JSON exportieren“ wählen. Export in der passenden ChatGPT-Lernunterhaltung anhängen oder einfügen. Nur Daten teilen, die ChatGPT für diese Lernrunde benötigt.
2. Den Auftrag aus dem Sync-Bereich kopieren und nach der Lernrunde senden. ChatGPT soll nur bestätigte Termine übernehmen und vorhandene IDs behalten.
3. Das zurückgegebene reine JSON in die App einfügen oder als JSON-Datei auswählen. „Import prüfen“ wählen, Vorher/Nachher insbesondere bei Terminen und erledigten Aufgaben lesen und „Diese Änderungen übernehmen“ wählen.
4. Bei einem Fehler „Letzte Datenänderung rückgängig“ verwenden. Vor grösseren Imports zusätzlich exportieren.

Das ist eine bewusst von dir ausgelöste Synchronisierung. Es gibt keinen automatischen Zugriff auf persönliche ChatGPT-Chats oder Memory und keine laufende Hintergrundverbindung. HTML, ChatGPT-Exporte mit anderem Format und Markdown-Codeblöcke werden nicht als Lernupdate importiert. Unbekannte Felder werden ignoriert. Grössenlimit: 1 MB, maximal 1000 Einträge pro Liste.

Format (leerer gültiger Export, keine Beispieldaten mit erfundenen Terminen):

```json
{"schemaVersion":1,"exams":[],"tasks":[],"bma":{"title":"","notes":"","next":"","date":""}}
```

Prüfung: `id` (eindeutiger Text), `title`, `date` im Format YYYY-MM-DD. Aufgabe: `id`, `title`, `date` (YYYY-MM-DD oder leer), `done` (true/false). BMA: `title`, `notes`, `next`, `date` (optional leer). IDs verbinden Änderungen mit vorhandenen Einträgen; ein neuer Titel mit anderer ID wird ein zusätzlicher Eintrag. Gleiche IDs ersetzen den jeweiligen Eintrag nach Prüfung. Listen dürfen ausgelassen werden; leere Listen löschen nichts. BMA-Felder dürfen einzeln geändert werden. Löschen geschieht in der App. Ein alter Export kann neuere Werte überschreiben: es gibt keine automatische Konfliktauflösung. Der Export ist eine Sicherung aller Einträge; Import führt ihn mit dem bestehenden Stand zusammen und entfernt zusätzliche Einträge nicht.

Später wäre eine eigene, authentifizierte Server-Schnittstelle mit Datenbank und ausdrücklich ausgelösten Schreibaktionen aus einer angebundenen Lernumgebung möglich. Dafür braucht es eine getrennte Implementierung mit Login, Einwilligung, Änderungsprotokoll und Konfliktprüfung. Die OpenAI Conversations API verwaltet explizit angelegte API-Unterhaltungen; sie ist kein automatischer Import deiner persönlichen ChatGPT-Historie. Ein API-Schlüssel gehört niemals in diese PWA oder in den Browser.

## Lerntimer und App-Sperren

Eine PWA kann andere iPhone-Apps nicht sperren. Der Timer speichert seinen Endzeitpunkt und berechnet beim Zurückkehren die verbleibende Zeit neu; im Hintergrund oder bei gesperrtem Gerät ist kein Alarm garantiert. Konfiguriere iOS Bildschirmzeit / Auszeit und die gewünschten erlaubten Apps separat. Eine verbindliche, durch die App gesteuerte Sperre würde eine native iOS-App mit den entsprechenden Apple-Berechtigungen erfordern; sie ist nicht Bestandteil dieser PWA.

## Prüfung und Grenzen

Siehe `PRUEFBERICHT.md`. Die tatsächliche Installation, Offline-Nutzung und Dateiauswahl auf deinem iPhone müssen nach dem Hosting mit den oben genannten Schritten geprüft werden.

## Quellen

- Apple: https://support.apple.com/de-ch/guide/iphone/iphea86e5236/ios
- Service Worker / HTTPS: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
- OpenAI API-Unterhaltungen: https://developers.openai.com/api/docs/guides/conversation-state
