TripCheat · KI-Reiseplanungsassistent (trip-cheat-sheet)
Wandelt verstreute Flug-, Hotel-, Konferenzagenden-, Ticket- und Reisetipp-Screenshots sowie Chatverläufe in eine mobile Webseite um: Reisezeitlinie (wann heute wohin), Checklisten (was nicht vergessen), Handbuch (wie fortbewegen/bezahlen/wen im Notfall kontaktieren). Öffnet sich sofort auf dem Handy, unterstützt zwei Zeitzonen, dunkles Design, Schriftgrößenanpassung, Karten-Tiefenlinks, QR-Ticketseiten und kann auf jedem statischen Hosting bereitgestellt werden.
Die Seite wird von dem integrierten Generator aus einer trip.json erstellt: Datenvertrag siehe references/trip-schema.md, Schreibregeln siehe references/content-guide.md, Deployment siehe references/deploy.md.
Wann verwenden
Auslöseszenarien
- „Erstelle mir eine Reiseroute“, „Fasse Flüge, Hotels und Konferenzagenda auf einer Seite zusammen“, „Vorbereitung für Dienstreise/Konferenz“
- „Reisetipps“, „Mobiler Spickzettel“, „Reisehandbuch“, „Reisecheckliste“, „Was ist heute wann zu tun“
- Benutzer gibt mehrere Screenshots/PDFs/E-Mails/Links/Chatverläufe – müssen strukturiert + mit Recherche ergänzt + als ansichtbare Seite ausgegeben werden
- Bereits vorhandene
trip.json: Seite neu generieren, Design ändern, Passwortschutz hinzufügen, bereitstellen oder Ticketseiten teilen
Nicht geeignet
- Reine Suche nach Sehenswürdigkeiten, Wetter, Buchung: direkt suchen/antworten, keine Seite nötig
- Echtzeitbestände, Buchungen, Zahlungen, Check-in: dieser Skill ruft keine Buchungs-APIs auf, sondern organisiert nur Informationen und Links
- Reine Routennavigation: Kartenwerkzeuge verwenden, keine Reiseplanseite nötig
Ausgabe
| Modus | Befehl | Ergebnis |
|---|---|---|
| Einzeldatei (Standard) | node scripts/build.mjs trip.json --out dist | dist/index.html (CSS/JS/Daten/PWA-Manifest vollständig eingebettet) + ggf. kopierte Ticketbilder |
| Multi-Page-Site | node scripts/build.mjs trip.json --multi --out dist | dist/index.html, dist/ticket-<id>.html, dist/assets/style.css, dist/assets/app.js, dist/manifest.json, kopierte Ticketressourcen |
Seitenfunktionen: Drei Ansichten – Reisezeitlinie / Checklisten / Handbuch; Hervorhebung „Aktuelles/Nächstes Ereignis“; Doppelzeitzonenuhr und Zeitumrechnung; Designs (paper/slate/night) und Schriftgrößenwechsel; Google/Gaode/Apple Maps Tiefenlinks (Google Routenlink mit Verkehrsmittelparameter); Checkboxen in Checklisten (lokaler localStorage); Ticketseite mit QR-Code; optionaler Passwortschutz (clientseitige SHA-256-Prüfung); kann zum Startbildschirm hinzugefügt werden (PWA, --no-pwa deaktiviert).
Arbeitsablauf (6 Schritte)
Schritt 1: Datensammlung (Fragebogen + Dateien/Screenshots/Links)
Zuerst max. 6 Fragen stellen, um Nachfragen zu vermeiden; für unbeantwortete Fragen Standardannahmen verwenden und explizit mit „Annahme“ kennzeichnen.
- Wer reist, wie viele, Verhältnis (Begleitpersonen benötigen ältere Menschen/Kinder/barrierefreie Unterbringung?)
- Abfahrtsort, Daten (inkl. Übernacht-/Nachtflüge), Ziel(e) (Mehrere Städte/Zwischenstopp?)
- Was ist bereits gebucht, was muss noch gebucht werden (Flüge, Hotels, Konferenzregistrierung, Tickets, Restaurants)
- Wichtige Zeiten von Konferenzen/Veranstaltungen (Registrierung, Eröffnung, eigener Vortrag/Poster-Session, Abendessen)
- Präferenzen und rote Linien (Budget, Essenseinschränkungen/Allergien, Reisepensum, was kann gestrichen werden)
- Datenschutzanforderungen (öffentlich teilen, Passwortschutz nötig, welche Informationen nicht online stellen?)
Material sammeln: Screenshots, PDFs, E-Mails, Chatverläufe, Links – alles möglich. Erst eine Faktenliste erstellen, dann die JSON schreiben, nicht während der Sammlung raten.
Schritt 2: Tiefenrecherche (Online, Trennung von „Bestätigt“ und „Zu überprüfen“)
Recherche nach Priorität durchführen, Quellenlinks und Prüfdatum notieren:
| Priorität | Rechercheinhalt |
|---|---|
| P0 | Visum/Reisepassgültigkeit, Flug-/Zugverbindungen, Unterkunft, Konferenzregistrierung/Tickets, Versicherung |
| P1 | Flughafen ↔ Stadtzentrum (letzte Bahn, Terminal), Stadtverkehrstickets, zeitgebundene Ticketreservierungen, Restaurantreservierungen |
| P2 | Sehenswürdigkeiten, Shopping, Alternativpläne, Wetter |
- Bevorzugt offizielle Quellen: Fluggesellschaft/Flughafen/Bahn, Hotel, Konferenzwebsite, Museum/Sehenswürdigkeitswebsite, Botschaft, Verkehrsbetreiber.
- Jede Schlüsselinformation in vier Kategorien formulieren: Bestätigt / Zu überprüfen / Unbestimmt / Beispiel (Regeln siehe
references/content-guide.md§6). - Keine Preise, Fahrpläne, Öffnungszeiten, Buchungsstatus erfinden; falls nicht auffindbar, mit „Zu überprüfen“ und einem Hinweis auf die offizielle Quelle absichern.
- Häufige Fallstricke (Flughafentransport, Ticketreservierung, WLAN, Zahlung, Notrufnummern, Zeitzone/Sommerzeit) einzeln prüfen und im Handbuch oder in Ereignisbeschreibungen vermerken.
Schritt 3: trip.json schreiben
Strikt nach references/trip-schema.md schreiben; direktes Beispiel siehe
examples/tokyo-conference/trip.json.
meta: Titel, Untertitel, Heimatzeit (home), Start-/Enddatum, Design, Kartenanbieter, Footer (Datenstand notieren).destinations: Jedes Ziel eineid+ IANA-Zeitzone (z. B.Asia/Tokyo).days[].events: Jedes Ereignis mindestens mittime/title/short/detail/kind; bei Ortlocation+map; bei offiziellen Linkslinks; bei verknüpfter ChecklistecheckId.checklists: Nach Phasen gruppieren (Vor Abreise / Nach Ankunft / Während der Reise / Vor Rückreise),idglobal eindeutig.handbook: Kapitel zu Verkehr, Internet, Zahlung, Sicherheit, Konferenzteilnahme, Essen, Packen usw. (kombinieren/ergänzen, Themen nicht auslassen).tickets: Pro Person ein Ticket,qrverweist auf Platzhalter oder benutzereigene Bilder (keine echten Ticketdaten hochladen).
Doppelzeitzonen-Regeln (fehleranfällig)
time/endTimesind Ereigniszeit vor Ort; wenntzfehlt, wird die Zeitzone des Ziels an diesem Tag übernommen.- Bei Flügen über Zeitzonen hinweg gibt
tzdie Abfahrtszeit-Zeitzone an, undendTimewird ebenfalls in diesertzinterpretiert. Bei Zusammenfassung mehrerer Flüge zu einem Ereignis mussendTimeden „Ankunftszeit in die Abflugzeitzone umgerechneten“ Wert erhalten, und imdetailmuss „Ankunftszeit vor Ort HH:MM“ stehen; einfacher ist es, Abflug und Ankunft als zwei separate Ereignisse mit jeweils eigener lokaler Zeitzone zu erfassen. - Übernachtankünfte in den nächsten
days[]verschieben, mit Hinweis „+1 Tag“ / „Nächster Tag“; bei Ereignissen, die Mitternacht überschreiten, wirdendTimekleiner alstimeals nächster Tag behandelt, aber Textbeschreibung empfohlen. - Tagfüllende Termine ohne Uhrzeit mit
skipTimezone: truekennzeichnen; Zeitzonen immer im IANA-Namen angeben, nichtUTC+9,JST. - Die Seite rechnet automatisch in die Heimatzeit um, die Umrechnung nicht manuell im Text wiederholen, es sei denn, es handelt sich um Aktionen, die vor Abreise in der Heimatzeit durchgeführt werden müssen (z. B. Check-in-Fenster, Remote-Meeting).
Schritt 4: Build
Im Skill-Stammverzeichnis (enthält scripts/, templates/) ausführen; Skripte lösen Pfade relativ zum aktuellen Arbeitsverzeichnis auf, können aber auch mit vollständigen Pfaden von beliebigen Verzeichnissen ausgeführt werden.
node scripts/build.mjs <trip.json> --out dist
Häufige Parameter:
# Multi-Page-Site (erzeugt separat teilbare ticket-<id>.html)
node scripts/build.mjs trip.json --multi --out dist
# Design überschreiben / Passwortschutz hinzufügen / PWA deaktivieren / Nichtleeres Ausgabeverzeichnis überschreiben / Leise-Modus
node scripts/build.mjs trip.json --theme night --gate-password "your-password" --out dist
node scripts/build.mjs trip.json --no-pwa --out dist
node scripts/build.mjs trip.json --force --quiet --out dist
- Standardausgabe:
dist/index.html;--outstandardmäßigdist. buildführt intern zuerst die gleiche Datenvalidierung durch, bei Fehlern Exit-Code 1, kein halbfertiges Produkt; Warnungen werden ausgegeben, blockieren aber nicht.- Existiert das Ausgabeverzeichnis bereits und ist nicht leer, muss
--forceverwendet werden (Verzeichnis wird dann zuerst geleert). --helpzeigt alle Parameter.
Schritt 5: Validierung
node scripts/verify.mjs <trip.json> # Standard: Fehler führen zu Abbruch (Exit-Code 1), Warnungen nur Hinweis
node scripts/verify.mjs <trip.json> --strict # Warnungen gelten ebenfalls als Fehler (vor Veröffentlichung empfohlen)
node scripts/verify.mjs <trip.json> --quiet # Nur Fehlerzusammenfassung ausgeben
Validierung umfasst: meta-Pflichtfelder und gültige Zeitzonen/Daten, destinations-Referenzen, Zeitformat und tz-Gültigkeit für days/events, Link-Protokolle, handbook-HTML-Whitelist, Existenz von tickets.qr-Dateien sowie Datenschutz-Scan (vermutete Telefonnummern/lange Ziffernfolgen geben Warnungen). Warnungen entweder beheben oder nachvollziehbar begründen.
Schritt 6: Vorschau und Deployment
- Lokale Vorschau:
dist/index.htmldirekt im Browser öffnen (Einzeldatei doppelklickbar); bei Multi-Page-Site lokalen Server empfehlenswert:npx serve dist # oder python -m http.server --directory dist - Deployment: Siehe
references/deploy.md(GitHub Pages / Cloudflare Pages / beliebiges statisches Hosting). - Ticketseite teilen:
ticket-<id>.htmlim Multi-Page-Modus kann separat an die entsprechende Person gesendet werden; im Einzeldatei-Modus#ticket-<id>-Anker verwenden, aber dieselbe Seite enthält Inhalte aller. - Datenschutzhinweis: Öffentliche Seite = für jeden sichtbar. Echte QR-Codes, Ticketcodes, Ausweisnummern, Telefonnummern nicht in öffentliche Seiten einfügen; Passwortschutz ist reine clientseitige Prüfung (Details siehe
deploy.md).
Aufrufbeispiele
Beispiel 1: Akademische Konferenz in Tokio (identisch mit Beispieldaten)
Benutzer: Ich reise vom 20. bis 24. November zu einer akademischen Konferenz nach Tokio, zwei Personen (A/B). Hier sind Screenshots von Flügen und Hotels sowie der Agenda-Link;
Hilf mir, Registrierung, Eröffnung, Poster-Session und Abendessen einzuplanen, auf einer Seite, die ich jederzeit auf dem Handy ansehen kann.
Agent:
1. Daten sammeln → 3 Dinge abklären: Ist Frühstück im Hotel enthalten? Welcher Konferenzausweistyp für A und B? Wann ist der Rückflug-Check-in?
2. Recherche → Transportmöglichkeiten vom Flughafen Haneda in die Stadt und letzte Verbindung, Lage des Konferenzortes und Hotels, Zeit für Einreise nach Landung
3. trip.json schreiben → Referenz: examples/tokyo-conference/trip.json (im Beispiel wird Flug zu einem Ereignis zusammengefasst, endTime in Abflugzeitzone umgerechnet)
4. Build → node scripts/build.mjs trips/tokyo-2026/trip.json --multi --out dist
5. Validierung → node scripts/verify.mjs trips/tokyo-2026/trip.json --strict
6. Vorschau → dist/index.html öffnen; Deployment auf GitHub Pages vorschlagen / ticket-badge-a.html an Person A senden
Beispiel 2: Familienauslandsreise (Mehrere Ziele + Doppelzeitzone + Versicherungsinfo)
Benutzer: Ich reise im Sommer mit meinen Eltern 10 Tage nach Spanien, rein über Madrid, raus über Barcelona. Erstelle eine Reiseplanseite mit Infos zu U-Bahn und Notrufnummern.
Agent:
- destinations mit zwei Einträgen (Madrid / Barcelona, Zeitzone Europe/Madrid, Vergleich mit Heimatzeit)
- handbook mit Schwerpunkt: Flughafen↔Stadtzentrum, U-Bahn-Tickets, Zahlung und Trinkgeld, Notruf und Botschaft, Essen (Eltern haben Allergien)
- In Ereignissen „Warum“ und „Verzichtetes“ klarstellen (z. B. „Heute nicht Retiro-Park, Kräfte für Königspalast sparen“)
- Nach Build und Verify dist auf GitHub Pages bereitstellen, Link an Familie senden
Beispiel 3: Aktualisierung vorhandener Daten + Nur Ticketseite einer Person teilen
Benutzer: Reiseplan geändert: Abendessen von 23. auf 24. November 19:30 verschoben. Außerdem sende mir bitte die Konferenzausweisseite meiner Frau separat.
Agent:
1. trip.json entsprechend ändern (Ereigniszeit/detail anpassen, Formulierung „Bestätigt“ + Quelle beibehalten)
2. node scripts/build.mjs trip.json --multi --out dist --force
3. node scripts/verify.mjs trip.json
4. dist/ticket-badge-b.html separat teilen; Hinweis: Öffentlicher Link legt QR-Code offen, daher nur an die Person selbst senden oder Zugriffskontrolle hinzufügen
Qualitätsrichtlinien (Rote Linien)
- Nichts erfinden: Preise, Fahrpläne, Öffnungszeiten, Buchungsstatus, Telefonnummern müssen Quellen haben; ohne Quelle mit „Zu überprüfen“ + „Offizielle Quelle beachten“ kennzeichnen.
- Bestätigt vs. Zu überprüfen: Vom Benutzer bestätigte Unterlagen/offizielle Seiten = Bestätigt; Drittanbieter-Plattformen/alte Screenshots/Reisetipps = Zu überprüfen; feste Formulierungen siehe
content-guide.md§6, kein „Angeblich“, „Sollte“. - Doppelzeitzone:
timein Ereignis-Ortszeit; bei zusammengefassten FlügenendTimein Ereignis-tz(Abflugzeitzone) umrechnen,detailenthält Ankunfts-Ortszeit; Übernacht-Ereignisse in nächsten Tag verschieben; Zeitzonen nur im IANA-Namen. - Datenschutz und Ticketcodes: Keine echten QR-Codes, Ticketcodes, PNRs, Ausweisnummern, Telefonnummern oder Adressen in öffentliche Seiten schreiben;
copymit Platzhaltern verwenden; Beispieldaten müssen fiktiv und anonymisiert sein; Repository nur Platzhalter-QR-Codes enthalten. - Keine Fähigkeiten versprechen: Keine Echtzeitbestände/Buchungen/Check-ins versprechen; irreversible Aktionen wie Bestellungen, Zahlungen, Stornierungen dem Benutzer überlassen, nicht für den Benutzer ausführen.
- Vor Auslieferung zwingend validieren:
verify.mjs --strictmit null Fehlern, dann ausliefern; vor Deployment erneut auf vertrauliche Informationen prüfen. - Grenzen klarstellen: Passwortschutz ist Schutz für Bekannte, keine Verschlüsselung; für echte Sicherheit privates Hosting/Zugriffskontrolle verwenden.
Einzeldatei vs. Multi-Page: Auswahlhilfe
| Anforderung | Einzeldatei (Standard) | Multi-Page (--multi) |
|---|---|---|
| An Familie/Kollegen senden (WeChat/E-Mail), offline Doppelklick | ✅ Ein HTML am einfachsten | Nicht empfohlen (ganzes Verzeichnis nötig) |
| Als Website bereitstellen, Langzeitnutzung, regelmäßige Updates | Geht (jeweils eine Datei neu übertragen) | ✅ Cache-freundlich, klare Struktur |
| Ticketseiten personenweise separat teilen | ❌ Anker legt Tickets aller Personen auf einer Seite offen | ✅ ticket-<id>.html als eigenständige Seite |
| Komplett eine Datei (inkl. QR-Codes) | tickets[].qr durch data:-URI oder externe URL ersetzen | — |
| Passwortschutz erforderlich | ✅ Unterstützt (Hauptseite und interne Ticketansicht) | ✅ Hauptseite und ticket-<id>.html zeigen Passwortdialog (gleiches Passwort, einmalige Entsperrung pro Browser) |
Hinweis: Der Einzeldatei-Modus bettet lokale QR-Bilder automatisch als
data:-URI ein, das Ergebnis ist wirklich nur eine HTML-Datei; bereits vorhandenedata:/http(s)-QRs bleiben unverändert.
Dateistruktur
skills/trip-cheat-sheet/
├── SKILL.md # Diese Datei: Wann verwenden, wie verwenden, rote Linien
├── references/
│ ├── trip-schema.md # Einziger Datenvertrag (Felder/Zeitzonen/Build-Befehle)
│ ├── content-guide.md # Inhaltliche Schreibregeln (sechs Elemente/Doppelzeitzone/Handbuch-Kapitel/Markierungsregeln)
│ └── deploy.md # Deployment und Teilen (Pages/Cloudflare/Einzeldatei-Multi-Page/Passwortschutz)
├── scripts/
│ ├── build.mjs # trip.json → Webseite
│ └── verify.mjs # trip.json-Validator (wird intern von build genutzt)
├── templates/ # style.css / app.js / index.html / ticket.html
└── examples/tokyo-conference/ # Ausführbares Beispiel (mit Platzhalter-QR-Codes)
├── trip.json
└── assets/qr-a.svg, qr-b.svg
Häufige Probleme
| Problem | Lösung |
|---|---|
❌ Ausgabeverzeichnis nicht leer | --force hinzufügen oder --out-Verzeichnis wechseln |
| Seite leer/CSS fehlt | Im Multi-Page-Modus gesamtes dist/ (inkl. assets/) hochladen; sicherstellen, dass index.html und assets/ auf gleicher Ebene liegen |
| Falsche Zeitanzeige | tz-Schreibweise prüfen (IANA-Name); bei zusammengefassten Flügen endTime in Abflugzeitzone umrechnen |
verify zeigt Warnungen | Beheben oder nachvollziehbar begründen und ausliefern; --strict schlägt bei Warnungen fehl |
| Passwort für Passwortschutz vergessen | Neu bauen: node scripts/build.mjs trip.json --gate-password "Neues Passwort" |
| 404 nach Deployment | Pages-Branch/Verzeichnis-Einstellungen prüfen, ob Actions durchgelaufen sind, Groß-/Kleinschreibung von Dateinamen |
| Node-Versionsfehler | Node.js ≥ 18 verwenden (benötigt vollständige Intl-Zeitzonendaten und ESM) |
English quick reference
- What: generate a mobile-first travel cheat-sheet web page from one
trip.json— itinerary timeline, checklists, destination handbook, dual-timezone display, map deep links, QR ticket pages, optional password gate, PWA. - Build:
node scripts/build.mjs <trip.json> --out dist(single file, default) or--multi(static site withticket-<id>.html). Flags:--theme paper|slate|night,--gate-password,--no-pwa,--force,--quiet. - Verify:
node scripts/verify.mjs <trip.json> [--strict] [--quiet]. - Contract:
references/trip-schema.md; writing rules:references/content-guide.md; deployment:references/deploy.md. - Never: fabricate prices/schedules, mix up timezones, or commit real ticket codes, QR images, IDs or phone numbers. Mark verified vs unverified content explicitly.