ERP Workflow Hackathon · 2024

Hotel Self Check-In
System

Digitizing paper-based hotel reception workflows end-to-end — from booking lookup through identity verification to confirmation — using Flutter and CiMSO ERP API integration.

My Role
UX Lead · Flutter Developer
Team
4 members
Timeline
Aug – Dec 2024
Tools
Figma · Flutter · Dart
Integration
CiMSO ERP API
View on GitHub
The Problem

Hotel check-in is still a paper queue

Traditional hotel check-in requires guests to queue at the front desk, fill paper forms, hand over physical IDs, and wait for staff to manually update reservation status. During peak check-in periods, this creates bottlenecks that directly impact guest satisfaction.

The hackathon brief: design and build a self-service check-in system that removes the front desk from the critical path, while maintaining security through digital identity verification.

Pain Point 01

Queue Bottlenecks

Peak-time queues create significant wait times, especially when multiple guests arrive simultaneously during standard check-in windows.

Pain Point 02

Manual Data Entry

Staff manually transcribe guest information from paper forms into the ERP system, introducing errors and consuming significant time per guest.

Pain Point 03

Identity Verification Gaps

Paper-based ID checks are inconsistent — no digital record of verification, no audit trail, and no fraud prevention beyond visual inspection.

Pain Point 04

ERP Disconnect

Reservation status in CiMSO ERP isn't updated until staff manually process check-in — creating delays in room assignment and housekeeping coordination.

Our Process

Wireframe first, then prototype

We documented the full system workflow before designing any screen. The check-in flow has two entry points — Booking ID (no account required) and Email login (for returning guests) — both converging at the same reservation page and proceeding through an identical form and verification flow.

Key design decision made early: the self check-in feature is always one click away from the homepage via a persistent "Self Check-in" button in the navigation, reducing the path to check-in to a single action regardless of where the guest is on the site.

Wireframes → Hi-fi Prototypes

Every screen was wireframed in Figma before moving to high-fidelity. The wireframes established layout and information hierarchy; the hi-fi prototypes validated the visual language.

Wireframe — Home Page
Wireframe home page
Hi-Fi Prototype — Home Page
Hi-fi home page

Wireframe established the 3-column room grid, search bar, and navigation structure before any visual design decisions were made

Wireframe — Reservation Page
Wireframe reservation
Hi-Fi Prototype — Reservation Page
Hi-fi reservation

Wireframe defined the booking card layout (photo + details + status badge + CTA) before visual treatment. The "Booked" badge and "Check In" button positions were locked at wireframe stage.

01 — Define

Map the Workflow

Documented all user paths: homepage → check-in trigger → auth method → reservation → form → verification → confirmation.

02 — Wireframe

Layout First

Lo-fi wireframes for all 8 screens in Figma. Established information hierarchy, form structure, and modal vs page decisions before any visual design.

03 — Prototype

Hi-Fi in Figma

Applied visual design: clean monochrome palette, consistent form components, modal overlays for check-in entry points to avoid full page navigation.

04 — Build

Flutter + Dart

Implemented in Flutter with a Map<> data structure simulating CiMSO ERP data — designed for clean API swap when live integration is ready.

The Design

8 screens, 2 entry points, 1 seamless flow

Entry Point 1 — Booking ID Check-in (no account required)

Guests without an account can enter their Booking ID directly. The modal appears over the homepage without full-page navigation — reducing friction and preserving context. Two options are offered: continue with Booking ID, or continue with Email (which routes to login).

Wireframe
Wireframe ID check-in
Hi-Fi
Hi-fi check-in modal

Check-in modal: Booking ID field + Continue, with "Or Continue With Email" as a secondary path. Modal overlay keeps the homepage visible behind, reinforcing context (Nielsen: Visibility of System Status)

Entry Point 2 — Email / Account Login

Returning guests log in with email + password or Google SSO. On successful login, the system automatically retrieves all upcoming reservations — no Booking ID needed.

Wireframe
Wireframe login
Hi-Fi
Hi-fi login modal

Login modal: Email + Password, Forgot Password link, Continue button, and Google SSO — all within a single modal. No page navigation required to authenticate.

Reservations — Choose Your Room

After authentication, the guest sees all upcoming reservations in a clear card layout. Each card shows the Booking ID, property name, dates, guest count, price, and a prominent "Check In" CTA. A status badge ("Booked") confirms the current state. An Upcoming / Past tab allows viewing historical stays.

Reservations page with two bookings

Reservations page: multiple bookings shown in a scannable card layout. Booking ID is highlighted in blue for quick reference. "Check In" button is right-aligned, consistent across all cards.

Design decision: When Booking ID check-in is used (non-account path), only the matched reservation is shown — not all reservations. This prevents guests from accidentally checking in to the wrong booking and reduces cognitive load. The account login path shows all upcoming reservations.

Single reservation view

ID check-in path: only the matched reservation is surfaced — one decision, one action, no ambiguity

Check-in Form — Guest Information

The check-in form collects the minimum required information: name, gender, email, phone (with country code selector pre-set to Thailand +66), arriving time, number of guests, and credit card information. All fields use labeled inputs with placeholder text — no inline icons that could obscure typed content.

Wireframe
Wireframe verification form
Hi-Fi
Hi-fi check-in form

Check-in form: name split into First/Last fields, gender radio buttons with "Prefer not to say" option, phone with Thai +66 flag pre-selected, arriving time, guest count, and credit card section — all in a single scrollable page with Cancel / Next at the bottom

Identity Verification — Selfie + Passport

The second step of the form captures identity: a live selfie via device camera, and passport upload for all guests via drag-and-drop or file browser. Separating the form into two steps (personal info → identity) prevents the single-page form from feeling overwhelming.

Wireframe
Wireframe passport/selfie
Hi-Fi
Hi-fi selfie + passport

Verification step: face scan icon for live selfie (not static upload — prevents photo spoofing), drag-and-drop passport upload zone for all guests. Back / Save navigation at the bottom.

Confirmation Slip

On successful check-in, a confirmation slip is generated with a barcode, full booking summary, room details (type, price, meal plan, occupancy), and guest information. The barcode serves as the room access credential — no physical key required at arrival.

Wireframe
Wireframe confirmation
Hi-Fi
Hi-fi confirmation slip

Confirmation slip: barcode at top-right, confirmation number and Booking ID prominently displayed, room details on the left, guest info on the right — mirroring a physical hotel receipt layout guests already understand (Nielsen: Match Between System and Real World)

Technical Implementation

Designed for ERP API integration from day one

The system architecture uses a Map<String, dynamic> data structure in Dart to simulate CiMSO ERP reservation records during development — allowing the team to build and test all UI flows without a live API dependency. The data structure mirrors the expected API response shape, so switching to real-time ERP data requires only replacing the data source, not rebuilding any UI logic.

The system was architected in 4 entities: User (authentication + booking methods), Reservation (booking management + status update), Room (availability + details), and Verification (passport + selfie upload + status). Each entity maps directly to a CiMSO ERP API endpoint for future integration.

Live selfie over static upload

Static selfie uploads can be spoofed with a photo of a photo. Live camera capture with face-detection validation ensures the person checking in is physically present.

Security by Design

Map<> → API-ready architecture

The backend uses a Map data structure that mirrors the ERP API response shape exactly — so live integration is a data source swap, not a rebuild.

Scalable Architecture

Two-step form split

Guest info and identity verification are split into two sequential steps to prevent form overwhelm and allow progressive save — reducing abandonment risk on long forms.

Error Prevention

Dual entry paths

Booking ID and Email login serve different guest types — first-time guests without accounts can check in immediately; returning guests get automatic reservation retrieval.

Flexibility and Efficiency
Flutter Dart CiMSO ERP API Figma Android Studio Map<> data layer Live camera capture Drag-and-drop file upload
Outcomes

What we delivered

8
Screens designed from wireframe to hi-fi prototype
2
Check-in entry paths covering all guest types
30+
Trial users validated the system across the full flow
75%
Reduction in input errors after field-level validation iteration
Reflection

What I learned — and what comes next

What I learned

  • Designing for an ERP integration context requires understanding the data model first — every UI decision about what to show and when maps back to an API call
  • Dual entry paths (ID vs account) seem like complexity, but they actually reduce abandonment — guests without accounts shouldn't be forced to create one to check in
  • Splitting long forms into steps significantly reduces perceived complexity, even when the total number of fields is unchanged
  • Security UX is a design problem as much as a technical one — live selfie over static upload is both more secure and easier to explain to a guest

What I'd build next

  • Live CiMSO ERP API integration — the architecture is already designed for this; it's a data source swap
  • Facial recognition matching between the live selfie and passport photo — moving from manual verification to automated identity confirmation
  • Room preference selection after check-in — floor preference, pillow type, early access request — turning the digital check-in into a full guest experience tool
  • Staff-facing dashboard showing real-time check-in status and verification queue for edge cases that require human review