Communitygithub.com

timerise-ai/booking-kiosk

Agent-Fähigkeit: Erstellen eines berührungsbasierten Selbstbedienungs-Buchungskiosks – siebenstufiger Walk-up-Ablauf, Bildschirmtastatur, Inaktivitäts-Auto-Reset, servergestützte Buchungen mit Kapazitätstransaktionen und Bestandssperren, Bezahlung an der Kasse oder per QR, Live-Verfügbarkeitsaktualisierung, LAN-Offline-Failover, Meine-Buchung-Bearbeitung – in Next.js App Router, backend-agnostisch

Was ist booking-kiosk?

Diese Skill definiert die Architektur und Implementierung eines selbstbedienungsfähigen Touchscreen-Buchungskiosks, der in Next.js App Router gebaut und backend-agnostisch ist. Der Kiosk ist für die physische gemeinschaftliche Nutzung ohne Authentifizierung ausgelegt, daher liegt das gesamte Vertrauen auf dem Server (Preise, Kapazität, Idempotenz) und der gesamte Zustand ist flüchtig (In-Memory, automatischer Reset, keine Persistenz). Die Skill umfasst einen siebenstufigen Walk-up-Buchungsprozess (Service → Datum → Uhrzeit → Teilnehmer → Ausrüstung → Zusammenfassung → Bestätigung), eine Bildschirmtastatur für alle Texteingaben, einen Inaktivitäts-Timer mit automatischem Reset sowie einen Seitenablauf für Buchungssuche und -bearbeitung. Der Server führt die Preisberechnung, Prüfung von Aktionscodes und transaktionale Kapazitätsreservierung durch, während der Client nur eine Voransicht anzeigt. Unterstützt werden Zahlung an der Kasse (PENDING_COUNTER_PAYMENT) oder per QR mit Checkout-Session sowie Live-Verfügbarkeitsaktualisierung per Abonnement und LAN-Offline-Failover. Die Skill stellt eine klare Trennung zwischen Client- und Serverlogik dar: Ein einheitlicher Fetch-Wrapper handhabt Geräteauthentifizierung (x-kiosk-api-key), Fehlerbehandlung und Offline-Basis-URL-Failover. Die UI-Komponenten und das Design bleiben anpassbar, während die Geschäftslogik strikt serverbasiert ist.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add timerise-ai/booking-kiosk

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Selbstbedienungs-Buchungskiosk

Ein Kiosk ist eine Buchungswebsite mit umgekehrtem Vertrauensmodell: Der Client ist per Design nicht authentifiziert und physisch gemeinsam genutzt, daher liegt das gesamte Vertrauen auf dem Server (Preise, Kapazität, Idempotenz) und der gesamte Zustand ist flüchtig (In-Memory, automatischer Reset, nie persistent). Alles in dieser Skill folgt aus diesen beiden Tatsachen.

Wann verwenden

  • Erstellung eines Walk-up-Buchungsterminals für slotbasierte Kapazität (Stationen × Zeitfenster) mit optionaler Ausrüstung und Verbrauchsmaterialien.
  • Hinzufügen eines Kiosk-Modus zu einer App, die bereits Online-Buchungen unterstützt.
  • Überprüfung eines bestehenden Kiosks anhand der unten stehenden harten Regeln; provenance.md dokumentiert den Grund für jede Regel.

Wann NICHT verwenden

  • On-Premises-Offline-Fallback-Server – dies ist die Schwester-Skill island-mode-server; diese Skill definiert nur den Client-seitigen Failover-Vertrag des Kiosks.
  • Digitale Beschilderung/Anzeigebildschirme – andere Fähigkeit (Wiedergabe, keine Eingabe), andere Skill.
  • Mitarbeiter-POS oder Admin-Buchungswerkzeuge – Mitarbeiter sind authentifiziert und vertrauenswürdig; das Vertrauensmodell dieser Skill ist für sie falsch.
  • Eine normale Buchungswebsite – nutzen Sie die Backend-Schnittstelle, wenn nützlich, aber die Kiosk-Mechanik (Tastatur, Timer, Berührungsoptimierung) ist dort überflüssig.

Architektur

 KioskProvider (reiner Reducer: Schritte, Auswahlen, Warenkorb, sessionId)
   │ Props: Dictionary-Abschnitte        Hooks: Preisgestaltung · Ausrüstung · Verfügbarkeit
 Bildschirme: service→date→time→participants→equipment→summary→confirmation
   │                         └─ Nebenablauf: booking-lookup → booking-edit
   ▼ ein Fetch-Wrapper (device key + offline base-URL failover)
 /api/kiosk/booking/{create,lookup,add-items,edit}     ← alle Vertrauensentscheidungen
   ▼ KioskBackend-Schnittstelle: Server-Preisgestaltung · Promo · Bestandssperren (TTL 15 Min.)
     transaktionale Kapazitätsprüfung · Kassen-/Online-Zahlung · Webhook
 Echtzeit: location.lastBookingChangeAt → stilles Nachladen → REFRESH_SLOT

Kritische Fakten

  1. Benutzertaps navigieren; Hintergrundaktualisierungen tun dies nie. SET_SLOT vs. REFRESH_SLOT ist der Unterschied zwischen Live-Verfügbarkeit und dem Versetzen eines Kunden mitten im Kauf vom Zusammenfassungsbildschirm.
  2. Der Server berechnet alles. Nichts Geldbezogenes wird eingehend übertragen; der Client-Gesamtbetrag ist eine Voransicht.
  3. Kassenzahlung ist der Resilienzpfad – Buchung bestätigt mit PENDING_COUNTER_PAYMENT, keine Zahlungsintegration im Ablauf; Online-Zahlung an einem Kiosk bedeutet einen QR, den der Kunde scannt, niemals den Kiosk weg navigieren.
  4. Jede Texteingabe öffnet die Bildschirmtastatur und setzt inputMode="none". Eines ohne das andere ist ein unbenutzbarer Bildschirm.
  5. Bestandssperren sind TTL-reserviert (15 Min.) und werden bei jedem Fehlerpfad freigegeben – der Sweep-Job ist das Sicherheitsnetz, nicht der Mechanismus.
  6. Die Client-sessionId ist der Idempotenzschlüssel. Doppeltippen, Wiederholen, verlorene Antwort: höchstens eine Buchung.

Harte Regeln

Kiosk-Sitzungszustand niemals persistent speichern. Der nächste Kunde darf nicht den Namen des vorherigen sehen. In-Memory + 120 s Inaktivitäts-Reset + 30 s Bestätigungs-Reset, auf Hardware verifiziert.

Dem Client niemals Preise, Kapazität oder Gültigkeit von Aktionen anvertrauen. Der Server berechnet jeden Betrag und antwortet auf eine ungültige Aktion mit PROMO_INVALID; ein Kunde an einem Kiosk hat keine Möglichkeit, den Betrag zu überprüfen.

Ein Fetch-Wrapper für jede Kiosk-Anfrage. Der Wrapper trägt den Geräte-Header, das Fehler-Envelope und die Failover-Basis-URL, sodass Authentifizierung, Fehler und Offline-Failover auf jede Anfrage gleichzeitig angewendet werden.

Wenn der Geräteschlüssel konfiguriert ist, ist ein fehlender Header ein 401. Nur-Ablehnung-bei-falschem-Schlüssel ist gleichbedeutend mit keiner Authentifizierung.

Bestandssperren bei jedem Fehlerpfad nach dem Erwerb freigeben. Ein 409, der die Reservierung hält, friert den Bestand für die gesamte TTL ein.

Schnellstart

  1. Lesen Sie state-machine.md; implementieren Sie den Reducer und Provider, führen Sie dessen Testsuite aus.
  2. Erstellen Sie Bildschirme gemäß dem Vertrag in screens.md mit dem Designsystem des Hosts – Tastatur, Timer, Berührungsoptimierung.
  3. Implementieren Sie die Routen aus api-contract.md über die booking-backend.md-Schnittstelle.
  4. Verdrahten Sie Aktualität + Offline gemäß realtime-offline.md.
  5. Bereitstellen und Rauchtest gemäß operations.md.

Anpassungsvertrag

SchnittstelleDiese Skill liefertDer Host liefert
Domain-Entitätenservice/station/equipment/consumable + Umbenennungstabellesein Vokabular (court, kart, bay…)
MandantenbereichlocationId in der Kiosk-URL, servergeprüftsein Standort-/Site-Modell
Geräteauthentifizierungx-kiosk-api-key-VertragSchlüsselverwaltung; optionale gerätebezogene Tokens
DatenzugriffKioskBackend-Schnittstelle; Firestore-Referenz + SQL-Entwurfsein ORM/SDK
ZahlungenKassenstatus + checkout-session/webhook-VertragStripe oder Äquivalent
EchtzeitSubscribeFreshness-SchnittstelleFirestore/Supabase/SSE/Polling
OfflineNetworkStatus-VertragLAN-Server (island-mode-server) oder keiner
UI-PrimitiveStruktur, Zustände, InteraktionsregelnButtons, Dialog, Spinner, Aussehen
StylingLayoutabsicht, Touch-Ziele, ein --primary-Tokensein Designsystem
ZeichenkettenWörterbuchschlüsselbaum, alle Schlüssel erforderlichseine i18n-Dateien, alle Locales
ValidierungAbhängigkeitsfreie Guardsseine Schema-Bibliothek, falls vorhanden

Referenzverzeichnis

SzenarioAuslöseschlüsselwörterReferenz
Zustand, Schritte, Reducer, Sitzung, Testsstep, reducer, GO_BACK, REFRESH_SLOT, sessionId, resetstate-machine.md
Bildschirme, Tastatur, Timer, Berührung, i18n-SchlüsselBildschirmtastatur, Inaktivität, Countdown, QR, Touch-Ziel, Wörterbuchscreens.md
Routen, Authentifizierung, Validierung, Idempotenz, Fehlerx-kiosk-api-key, 401, 409, Idempotenz, PROMO_INVALID, Suche, PIIapi-contract.md
Kapazität, Bestand, Zahlungen, Webhook, CronsTransaktion, Bestandssperre, TTL, PENDING_COUNTER_PAYMENT, Webhook, Rückerstattungbooking-backend.md
Live-Aktualisierung, Caching, Offline-FailoverlastBookingChangeAt, onSnapshot, s-maxage, Offline-Banner, LAN, Gesundheitsabfragerealtime-offline.md
Bereitstellung, Gating, BedienoberflächeEdge --kiosk, zugewiesener Zugriff, Heartbeat, Feature-Gate, Rauchtestoperations.md
Warum die Vorlagen von der früheren Implementierung abweichenPrüfung, Hauptbuch, bewusst beibehalten, hinzugefügtprovenance.md

Verwandte Skills