26 — Tablet POS Specification
Surface: iPad or Android tablet (10"–13") used at F&B outlets, spa, and other hotel revenue centres Phase: P2 / R2 Shell: Operator shell (POS variant — minimal chrome, maximised content area) Competitive reference: Lightspeed Restaurant (iPad), Toast POS, Salido, Square for Restaurants
1. Overview
The tablet POS enables hotel F&B (restaurant, bar, room service), spa, and retail revenue centres to process orders and payments, charge to room folio, and manage tables — integrated with the main Melmastoon platform.
Key differentiator vs standalone POS: Native room-to-folio charge integration. A guest's restaurant bill is added directly to their room folio with no manual data entry — the POS looks up the reservation and charges via folio-service.
2. Tech stack
- React + Vite (same codebase as operator app; separate
apps/tablet-posentry point) - Capacitor wrapper for native hardware access (printer, cash drawer, card reader)
- State: Zustand (order state, cart, table map)
- Offline: IndexedDB order queue + local menu cache
3. POS layout
┌──────────────────┬───────────────────────────────────────┐
│ [Table map / │ [Order / Cart panel] │
│ Category nav] │ │
│ │ Table 5 — 3 guests │
│ [Tables: 1-12] │ ────────────────────────────────── │
│ OR │ 2x Grilled Kebab $24.00 │
│ [Menu categories │ 1x Naan $3.00 │
│ Food / Drinks │ 1x Chai $2.50 │
│ Specials] │ │
│ │ Subtotal $29.50 │
│ │ Tax (10%) $2.95 │
│ │ Total $32.45 │
│ │ │
│ [Item grid] │ [Pay] [Charge to Room] [Split] [Hold] │
└──────────────────┴───────────────────────────────────────┘
4. Key flows
4.1 Take order
- Select table (from table map or number input)
- Browse menu categories → tap items to add to order
- Item modifiers (e.g., "no onion", "extra sauce") via modifier sheet
- Quantities: +/- buttons
- Notes: free-text kitchen note per item
- "Send to kitchen": order sent to kitchen display system (KDS) via
order-service
4.2 Payment
Options:
- Cash: Enter tendered amount; display change due; open cash drawer
- Card (terminal): Adyen P400 prompt; EMV + contactless
- Tap-to-Pay: iPhone (iOS 16+) or Android (Google TapToPhone)
- Charge to room: Look up guest by room number or name → post to
folio-service.addCharge()→ guest signs on tablet
4.3 Split bill
- Split equally by N guests
- Split by item (guest selects their items)
- Split by amount (custom amounts)
4.4 Table management
- Table map overview: vacant / occupied / flagged for cleaning
- Merge tables (for large groups)
- Move order to another table
- Time-at-table indicator (for turnover management)
4.5 Room service
- Select "Room service" mode (no table; enter room number)
- Delivery time estimate shown to staff
order-servicesends push notification to room service runner (vianotification-service)
4.6 Refund / void
- Void item (before kitchen send): free
- Void after kitchen send: manager PIN required; kitchen notified
- Refund (after payment): manager PIN; Adyen reversal
5. Menu management
Operator-managed via desktop app (not on POS tablet directly). POS pulls menu from menu-service on startup and every 15 min:
- Categories + items + prices
- Availability (86'd items shown dimmed)
- Modifiers and modifier groups
- Happy hour / time-based pricing (auto-applied by POS)
- Multi-language menu (displayed in operator's language;
LocaleStringsupport)
6. Kitchen display system (KDS) integration
Orders sent to KDS via order-service event order.created:
- KDS displays orders on kitchen screen (separate display; browser-based)
- Kitchen marks items "ready" → POS shows "Ready for delivery" notification
- POS is not the KDS — this spec covers only the ordering/payment surface
7. Hardware requirements
| Component | Requirement |
|---|---|
| Display | 10"–13" iPad or Android tablet; landscape preferred |
| Receipt printer | Star Micronics TSP143 (Bluetooth / LAN) — supported via Capacitor plugin |
| Cash drawer | APG VB320 connected via printer port |
| Card terminal | Adyen P400 (Bluetooth or LAN) |
| Kitchen printer | Separate device; receipt printer in kitchen for backup (if KDS fails) |
8. Offline behaviour
| Scenario | Handling |
|---|---|
| Network down | Orders saved locally; sent to kitchen printer (if network down, use local WiFi LAN printer) |
folio-service unreachable | Charge-to-room disabled; cash/card only |
| Menu service unreachable | Last-cached menu used; staff alerted |
9. Accessibility
- Touch targets ≥ 44×44 px
- High contrast mode for low-light kitchen/bar environments
- Font size ≥ 16px minimum (staff reading in dim conditions)
- Audio feedback for order sent (sound + haptic)
10. Performance budgets
| Metric | Target |
|---|---|
| App launch to first order | ≤ 2 s |
| Item tap to cart update | ≤ 100 ms |
| "Send to kitchen" confirmation | ≤ 500 ms |
| Payment terminal response | ≤ 3 s |
| Receipt print | ≤ 5 s |