Skip to main content

22 — Self Check-in Kiosk Specification

Surface: Lobby self-service kiosk (touchscreen, 21"–27" display, wall-mount or pedestal) Phase: P2 / R2 Shell: Kiosk shell (08-runtime-shells-spec.md §Shell 3) Competitive reference: Mews Kiosk, Ariane, Civitatis, SALTO


1. Overview

The self-check-in kiosk allows guests to complete their arrival independently: retrieve their booking, complete the registration card, sign electronically, pay outstanding balances, and collect their room key — without interacting with front-desk staff.

Target personas: Walk-in guests, pre-booked guests, group check-in initiators, guests with mobility limitations.

Languages: Pashto (default), Dari, Arabic, English, French (Phase 2).


2. Hardware configuration

ComponentRequirement
Display21"–27" touchscreen; 1920×1080; PCAP multitouch
MountWall-mount (900 mm center height) OR pedestal (adjustable)
PrinterThermal receipt + key envelope printer (USB; see C6-native-api-capability-catalog.md)
Card readerEMV chip + contactless (NFC) payment terminal (Adyen P400)
Key encoderTTLock BLE encoder or RFID encoder (Mifare DESFire)
Passport / ID scannerMRZ scanner (optical; see C6)
Camera1080p (for document capture + optional liveness check)
BiometricOptional fingerprint reader (for returning guest recognition; Phase 3)
NFCFor Apple Wallet / Google Wallet key delivery

3. Application architecture

apps/kiosk-checkin (React + Vite + Electron or Chromium kiosk mode)
├── Shell: Kiosk shell (common/08)
├── State: Zustand (session state); cleared on session reset
├── Offline: IndexedDB (booking cache, key pre-fetch) + outbox
├── Hardware bridge: IPC to Electron main process (printer, key encoder, payment terminal)
└── BFF: bff-tenant-booking-service (check-in APIs)

Deployment: Electron app on dedicated mini-PC (NUC or equivalent). Auto-update via Electron's built-in updater. No internet browser address bar exposed.


4. User flow

4.1 Attract loop (idle)

  • Branded slideshow (property photos, amenity highlights, wifi password)
  • "Check in" + "Check out" prominent CTA buttons
  • Attract loop restarts after 60 s of inactivity
  • Staff can access staff menu via hidden 3-tap gesture on logo

4.2 Language selection

Welcome / Xush Keldingiz / خوش آمدید / أهلاً
[🇬🇧 English] [پښتو] [دری] [عربي]

Large flag + script buttons; ≥ 60×60 px. Language selection persists for the session; not reset between guests (operator configuration).

4.3 Booking lookup

Option A — QR code scan: Guest scans QR from confirmation email. Camera reads QR; booking retrieved from check-in-service.

Option B — Booking reference + last name: Guest enters 6-character booking reference and last name. On-screen keyboard (QWERTY + Pashto/Dari/Arabic layouts switchable).

Option C — Walk-in: "I don't have a reservation" → front-desk call button or walk-in flow (collects name, phone, room preference; routes to front desk for room assignment).

4.4 Booking confirmation screen

Welcome back, Ahmad!
──────────────────────────────────────────
Reservation: 1 May – 3 May (2 nights)
Room: 201 — Standard Double
Guests: 2 adults

[Check-in details correct? ✓ Yes, continue] [✗ Something's wrong]
  • ID/passport scan via MRZ scanner or camera OCR
  • Pre-filled from booking; guest confirms / edits
  • Fields: Full name, nationality, passport number, date of birth, visa type (if applicable), purpose of visit
  • Electronic signature pad (on-screen; finger or stylus)
  • Submission: check-in-service.completeRegistration() → writes to guest-registration-authority-service for nightly submission

4.6 Additional guests (group check-in)

If reservation has multiple guests (e.g., 4-room group):

  • Show "How many guests are checking in now?" step
  • Allow partial check-in (remaining guests check in later)

4.7 Pre-authorization / payment

  • Outstanding balance shown (e.g., city tax, pending charges)
  • Pre-authorization amount per tenant config (e.g., $200 security deposit)
  • Adyen P400 payment terminal prompt
  • Apple Wallet / Google Wallet accepted for NFC payment

4.8 Upsell (optional, tenant-configurable)

  • Single upsell screen: "Enhance your stay" (late checkout, breakfast, parking)
  • Max 3 options; explicit "Not now" button
  • No pre-checked upsells

4.9 Key issuance

  • Kiosk shell calls lock-integration-service.issueKey({ reservation_id, room_number })
  • For RFID key: key encoder activated; guest inserts blank card into encoder slot; key programmed
  • For BLE/Wallet: QR code displayed + "Add to Wallet" button; NFC tap option
  • Key envelope printed (thermal printer; envelope has room number + wifi password)

4.10 Check-in complete

You're all set! 🎉
Room 201 — Floor 2
Checkout: 3 May 2026

[Collect your key card from the slot below]
[Wifi: MelmastoonPKAF — Password: 7721xK]
[Get directions to your room →]
[Done]

Auto-advance to attract loop after 30 s if guest doesn't tap "Done".


5. Check-out flow

Accessible from attract loop "Check out" button:

  1. Booking lookup (same as check-in, options A or B)
  2. Folio review (charges, payments, balance)
  3. If balance outstanding: payment step
  4. If balance zero: "Thank you for staying with us" + receipt print option
  5. Key return reminder (if RFID cards)
  6. Rate your stay (star rating; optional; 30 s timeout)

6. Walk-in flow

For guests without a reservation:

  1. "I don't have a reservation" screen
  2. Availability check: date picker + guest count (queries search-aggregation-service)
  3. If rooms available: room selection + rate → booking creation via BFF
  4. If no availability: "Sorry, we're fully booked tonight. Staff can help you find alternatives." + staff call button
  5. Proceeds to standard check-in flow on booking confirmation

7. Offline behaviour

ScenarioHandling
Pre-booked guest, offlineBooking retrieved from IndexedDB cache (synced on startup)
Payment terminal offlineCannot complete payment; prompt guest to visit front desk
Key encoder offlineTemporary key issued by staff; kiosk shows "Please see front desk for your key"
Registration submission offlineQueued in outbox; submitted when connectivity restored

8. Accessibility requirements

  • Wheelchair height: All essential elements within 900–1200 mm from floor (adjustable pedestal preferred)
  • Low-literacy mode: Icon + large text; no dense paragraphs; progress bar visible at all times
  • Screen reader: VoiceOver compatible (Electron Chromium); keyboard navigation for switch-access users
  • TTS: Optional text-to-speech readout of all screen text via Web Speech API (activated by accessibility button in footer)
  • Contrast: All text ≥ 4.5:1 (WCAG AA); kiosk background is typically bright (lobby lighting)
  • Touch target minimum: 60×60 px everywhere
  • Timeout warning: 15 s warning before session reset; guest can tap "I'm still here"

9. Security requirements

  • Kiosk device behind firewall; only BFF ports open
  • Auto-lock on idle (attract loop)
  • No browser address bar; no right-click menu; no keyboard shortcut exposure
  • Payment card data never touches app layer (Adyen P2PE terminal handles encryption)
  • Passport scan data: processed in-memory; not logged; transmitted encrypted to check-in-service
  • Staff mode requires PIN + property admin approval

10. Performance budgets

MetricTarget
Cold start to attract loop≤ 3 s
Booking lookup response≤ 1.5 s (online)
Screen transition≤ 300 ms
Key encoding time≤ 5 s
Receipt print time≤ 8 s

References