Skip to content

xelauvas/arrivo-doc

Repository files navigation

Arrivo Logo

Arrivo

Self-service hotel check-in tablet kiosk — guest registration, dinner upselling, email capture, and car registration in a single touchscreen flow.

React Vite Tailwind Firebase Stripe PWA 33 Routes 9 Endpoints Proprietary

ScreenshotsTablet FlowFeaturesTech StackArchitectureSecurity


Screenshots

Landing Page

Arrivo Landing Page

Hotel self check-in that actually works. Arrivo replaces the reception queue with a branded tablet kiosk — guests check in, book dinner, and share their email in under 60 seconds.

Pricing

Pricing

Free plan (1 tablet, 50 reservations/month) and Pro plan (unlimited tablets, unlimited reservations, custom branding, dinner upselling). Stripe-integrated billing with customer portal.

Login

Login

Firebase authentication with email/password. Hotel admin dashboard access for managing guests, reservations, analytics, and branding settings.

Sign Up

Sign Up

Hotel registration with instant onboarding. Create an account, configure branding, and deploy to a tablet in minutes.


Tablet Check-in Flow

Tablet Check-in Flow

Screensaver — Ambient Display

Tablet Screensaver

Full-screen ambient display with hotel branding, live clock, weather, and promotional imagery. Cycles through content when idle. Guests tap anywhere to begin check-in.

Welcome — Tap to Begin

Tablet Welcome

Branded welcome screen with hotel name, evening greeting, and clear "CHECK IN" call-to-action. Secondary "RETURN TO LOBBY" option for guests who change their mind.

Find Your Reservation

Find Reservation

Guest types their surname or room number. Booking auto-matches instantly from the hotel's reservation database. No booking reference needed — just a name.

Guest Details & Car Registration

Guest Details

Pre-filled guest information with editable fields: vehicle registration and email (optional). 89% of guests provide their email when asked at this moment. Gold "Continue" CTA guides the flow.

Dinner Upsell — Exclusive Dining Experience

Dinner Upsell

Personalised dinner invitation using guest's first name. "Reserve a Table" gold CTA with "Maybe Later" secondary option. Elegant typography with decorative borders — designed for maximum conversion at the perfect moment.

Check-in Complete — Confirmation

Check-in Complete

Confirmation screen with heart icon, amenity icons (Free WiFi, 24/7 Service, Concierge), and auto-return countdown. Guest feels welcomed before they even reach their room.

Mobile Tablet View

Mobile View


Admin Dashboard

Dashboard — Overview

Admin Dashboard

Real-time dashboard with today's arrivals, check-in progress, dinner covers, and email capture stats. Live Activity feed shows check-ins as they happen. "Open Tablet" button for instant kiosk launch.

Guest Management

Guest Management

Full guest list with search, date filters, and status badges (Pending/Checked In). Room numbers, booking references, contact info, and export functionality. "Add Guest" for manual entries.

Reservation Management

Reservations

Dinner reservations captured from the tablet kiosk. Time slots, party sizes, and guest details. Staff can confirm, modify, or cancel reservations.

Promotional Offers

Offers

Create and manage upsell offers displayed on the tablet screensaver. Supports images and video. Active/inactive toggles with drag-to-reorder. Free plan: 2 offers, Pro: unlimited.

Analytics

Analytics

7-day and 30-day performance metrics: total guests, check-ins, dinner bookings, and conversion rate. Daily breakdown bar chart shows trends at a glance.

Settings — Tablet Themes

Settings

Choose from 8+ preset themes (Grand Noir, Château Blanc, Azure Resort, Midnight Jade, Velvet Amethyst, Sunset Terracotta) or create a custom theme. Dark and light modes available.


Features

Guest Check-in Kiosk

  • Screensaver mode — ambient display with hotel branding, live clock, weather, and promotional content when idle
  • Surname/room lookup — instant reservation matching without booking references
  • Guest details capture — first name, last name, email, phone, car registration
  • Pre-filled forms — data pulled from reservation system, guests just confirm
  • Multi-step flow — welcome → find reservation → guest details → dinner upsell → confirmation
  • Touch-optimised — large tap targets, clear typography, tablet-first design
  • Auto-return — times out and returns to screensaver after inactivity

Dinner Upselling

  • Contextual prompt — "Join us for dinner tonight?" shown at the perfect moment during check-in
  • Party size selection — tap to select number of guests
  • Time slot picker — shows only available times
  • 30-40% conversion — guests book when asked at this moment, before they even reach the room
  • Revenue attribution — track how many dinner bookings come from the kiosk

Email Capture & Direct Booking

  • 89% email capture rate — guests willingly share email during check-in
  • Direct booking promotion — confirmation screen includes hotel website and promo code
  • OTA bypass — "Stop giving 20% to Booking.com" — encourage direct bookings for return visits
  • Follow-up ready — captured emails feed into hotel marketing pipeline

Hotel Admin Dashboard

  • Guest management — view all checked-in guests, check-in status, dinner bookings
  • Reservation management — dinner reservations with time slots and party sizes
  • Offers management — create and manage upsell offers shown during check-in
  • Analytics dashboard — check-in rates, email capture rates, dinner conversion metrics
  • Email configuration — custom SMTP settings for hotel-branded emails
  • Branding customisation — upload logos, set theme colours, choose typography
  • Billing management — Stripe subscription portal for plan upgrades

Superadmin Platform

  • Hotel management — onboard, suspend, and manage all hotel accounts
  • Lead finder — search and discover hotels via Serper.dev API
  • Email campaigns — outreach campaigns with templates and tracking
  • Subscription management — monitor plans, usage, and revenue across all hotels
  • Campaign analytics — track outreach performance and conversion

Platform Features

  • PWA — installable on tablets with offline support via service workers
  • Multi-tenant — each hotel gets isolated data and custom branding
  • Subscription tiers — Free (1 tablet, 50 reservations) and Pro (unlimited)
  • Stripe Connect — automated billing, subscription management, and customer portal
  • Real-time data — Firebase Firestore for instant reservation sync

Tech Stack

Frontend

Technology Purpose
React 18 UI framework with hooks-based architecture
TypeScript Type-safe development
Vite Build tool with HMR and optimised bundling
Tailwind CSS Utility-first responsive styling
React Router Client-side routing (33 routes)
PWA + Workbox Service workers for offline support and caching

Backend

Technology Purpose
Express.js Node.js server (port 3001)
Firebase Admin SDK Firestore database and authentication
Stripe API Subscription billing and webhook handling
Nodemailer SMTP email via Microsoft 365
Serper.dev API Hotel discovery for lead generation

Typography (Luxury Hotel Aesthetic)

Font Style Use
Cormorant Garamond Serif Premium hotel headings
Playfair Display Serif Display titles
Cinzel Serif Elegant branding
Raleway Sans-serif Body text
DM Sans / Inter Sans-serif UI elements

Infrastructure

Technology Purpose
Firebase Firestore NoSQL database (hotels, leads, campaigns)
Firebase Auth Identity management
Stripe Webhooks Subscription lifecycle (checkout, update, cancel, failed)
Service Workers Offline tablet operation
Microsoft 365 SMTP Transactional and campaign emails

Architecture

System Overview

┌─────────────────────────────────────────────────────────────────┐
│                    TABLET KIOSK (PWA)                            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │ Screen-  │  │  Find    │  │  Guest   │  │   Dinner      │  │
│  │ saver    │  │ Reserv.  │  │ Details  │  │   Upsell      │  │
│  │ Ambient  │  │ Surname  │  │ Email    │  │   Party Size  │  │
│  │ Branding │  │ Room No. │  │ Car Reg  │  │   Time Slot   │  │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └───────┬───────┘  │
│       └──────────────┼──────────────┼───────────────┘           │
│                      │  Firestore + REST                        │
└──────────────────────┼───────────────────────────────────────────┘
                       │
┌──────────────────────┼───────────────────────────────────────────┐
│             HOTEL ADMIN DASHBOARD                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │  Guests  │  │Reserva-  │  │Analytics │  │  Settings     │  │
│  │  Status  │  │ tions    │  │ Metrics  │  │  Branding     │  │
│  │  History │  │ Dinner   │  │ Rates    │  │  SMTP         │  │
│  └──────────┘  └──────────┘  └──────────┘  └───────────────┘  │
└──────────────────────┼───────────────────────────────────────────┘
                       │
┌──────────────────────┼───────────────────────────────────────────┐
│              EXPRESS BACKEND (9 Endpoints)                       │
│                      │                                           │
│  ┌───────────────────┴────────────────────┐                     │
│  │            API Layer                   │                     │
│  │  /api/create-checkout-session          │                     │
│  │  /api/create-portal-session            │                     │
│  │  /api/stripe-webhook                   │                     │
│  │  /api/send-email                       │                     │
│  │  /api/send-welcome-email               │                     │
│  │  /api/send-outreach-email              │                     │
│  │  /api/send-campaign-email              │                     │
│  │  /api/search-hotels                    │                     │
│  │  /api/health                           │                     │
│  └──┬───────┬────────┬────────┬──────────┘                     │
│     │       │        │        │                                  │
│  ┌──┴──┐ ┌──┴───┐ ┌──┴──┐ ┌──┴──────┐                         │
│  │Stripe│ │Email │ │Lead │ │Firebase │                          │
│  │Subs. │ │SMTP  │ │Finder│ │Admin   │                          │
│  │WebHk.│ │365   │ │Serp.│ │Firestor│                          │
│  └──┬──┘ └──┬───┘ └──┬──┘ └──┬─────┘                          │
│     └───────┴────────┴───────┘                                  │
└──────────────────────┼──────────────────────────────────────────┘
                       │
        ┌──────────────┼──────────────┐
        │              │              │
   ┌────┴────┐   ┌────┴────┐   ┌────┴────────┐
   │ Firebase │   │ Stripe  │   │  External   │
   │Firestore │   │ Billing │   │  Services   │
   │  Auth    │   │ Webhooks│   │ Serper.dev  │
   │ hotels   │   │ Portal  │   │ MS 365 SMTP │
   │ leads    │   │ Checkout│   │ Weather API │
   │campaigns │   │         │   │             │
   └─────────┘   └─────────┘   └─────────────┘

Data Flow — Guest Check-in

Guest taps tablet screen
       │
       ▼
  ┌──────────┐    ┌──────────────┐    ┌─────────────────┐
  │ Screensav│───▶│   Welcome    │───▶│ Find Reservation │
  │ → Tap    │    │   CHECK IN   │    │ Surname / Room   │
  └──────────┘    └──────────────┘    └────────┬────────┘
                                               │
                                      ┌────────┴────────┐
                                      │  Firestore      │
                                      │  Match booking  │
                                      └────────┬────────┘
                                               │
                              ┌────────────────┼────────────────┐
                              ▼                ▼                ▼
                       ┌───────────┐    ┌───────────┐    ┌──────────┐
                       │  Guest    │    │  Dinner   │    │ Confirm  │
                       │  Details  │    │  Upsell   │    │ Complete │
                       │  + Email  │    │  Party +  │    │ Room Key │
                       │  + Car    │    │  Time     │    │ Wi-Fi    │
                       └───────────┘    └───────────┘    └──────────┘

Data Flow — Subscription Lifecycle

Hotel signs up (Free plan)
       │
       ▼
  ┌──────────────┐    ┌──────────────┐    ┌─────────────────┐
  │ Stripe       │───▶│  Webhook     │───▶│ Firestore       │
  │ Checkout     │    │  checkout.   │    │ Update hotel    │
  │ Session      │    │  completed   │    │ plan → Pro      │
  └──────────────┘    └──────────────┘    └─────────────────┘
                             │
              ┌──────────────┼──────────────┐
              ▼              ▼              ▼
       ┌───────────┐  ┌───────────┐  ┌──────────┐
       │ sub.      │  │ sub.      │  │ invoice. │
       │ updated   │  │ deleted   │  │ payment  │
       │ → sync    │  │ → free    │  │ _failed  │
       │   plan    │  │   plan    │  │ → notify │
       └───────────┘  └───────────┘  └──────────┘

Key Architectural Patterns

PWA-First Design — Built as a Progressive Web App for tablet deployment. Service workers enable offline check-in capability. Workbox handles caching strategies for static assets and API responses.

Multi-Tenant Isolation — Each hotel gets its own Firestore document with isolated guest data, reservation history, and branding settings. Tablet URL includes hotel ID (/tablet?hotel={id}) for tenant resolution.

Subscription Gating — Features are gated by subscription plan. Free plan limits tablets (1), reservations (50/month), and offers (2). Pro unlocks unlimited everything plus custom branding.

Webhook-Driven Billing — Stripe webhooks handle the entire subscription lifecycle: checkout completion upgrades the plan, subscription updates sync status, cancellation downgrades to free, and payment failures trigger past_due state.

Lead Generation Pipeline — Superadmin can search for hotels via Serper.dev API, manage leads in Firestore, and run email campaigns with templates — all from the dashboard.

Luxury Design System — Premium serif fonts (Cormorant Garamond, Playfair Display, Cinzel) paired with clean sans-serif (Raleway, DM Sans) create a luxury hotel aesthetic. Gold accent (#d4af37) with deep navy (#1e3a5f) backgrounds.


Security

Layer Implementation
Authentication Firebase Auth with email/password
Data Isolation Per-hotel Firestore documents with tenant-scoped queries
Payment Security Stripe webhook signature verification
API Protection Express middleware with CORS and origin allowlisting
PWA Security HTTPS-only service worker registration
Email Security SMTP via Microsoft 365 with TLS encryption
Subscription Gating Server-side plan validation on all premium features
Session Management Firebase Auth tokens with automatic refresh

Project Structure

arrivo/
├── index.html                      # Source HTML entry point
├── server.cjs                      # Express backend (Stripe, Email, Firebase)
├── package.json                    # Dependencies manifest
├── manifest.webmanifest            # PWA manifest (standalone tablet mode)
├── registerSW.js                   # Service worker registration
├── sw.js                           # Service worker (offline support)
├── workbox-ec372ce3.js             # Workbox caching library
├── favicon.svg                     # Branding asset
├── vite.svg                        # Vite logo
├── dist/                           # Production build
│   ├── index.html                  # Built HTML
│   └── assets/                     # Hashed JS/CSS bundles
│       ├── index-*.js              # React app bundle (~1.2MB)
│       └── index-*.css             # Tailwind styles (~114KB)
├── assets/                         # Static assets & fonts
│   └── fonts/                      # Google Fonts local copies
│       ├── Cormorant Garamond/     # Premium serif
│       ├── Playfair Display/       # Display titles
│       ├── Cinzel/                 # Elegant branding
│       ├── Raleway/                # Body text
│       ├── DM Sans/                # UI elements
│       ├── Inter/                  # System font
│       └── ... (12 font families)
└── node_modules/                   # Dependencies

Frontend Routes (33)

Public:

  • / — Landing page
  • /login — Authentication
  • /signup — Hotel registration
  • /pricing — Plans and pricing

Tablet Kiosk:

  • /tablet?hotel={id} — Guest-facing check-in interface

Hotel Admin (/admin/*):

  • /admin — Dashboard
  • /admin/guests — Guest management
  • /admin/reservations — Dinner reservations
  • /admin/offers — Upsell offer management
  • /admin/analytics — Performance metrics
  • /admin/emails — Email configuration
  • /admin/billing — Subscription management
  • /admin/settings — Hotel branding and config
  • /admin/upload — Asset upload

Superadmin (/superadmin/*):

  • /superadmin — Platform dashboard
  • /superadmin/hotels — Hotel account management
  • /superadmin/leads — Lead management
  • /superadmin/campaigns — Email campaigns
  • /superadmin/lead-finder — Hotel discovery
  • /superadmin/subscriptions — Billing overview

API Endpoints (9)

Endpoint Method Purpose
/api/create-checkout-session POST Create Stripe checkout for subscription
/api/create-portal-session POST Open Stripe customer portal
/api/stripe-webhook POST Handle Stripe lifecycle events
/api/send-welcome-email POST Welcome email to new hotels
/api/send-email POST Custom email via hotel SMTP
/api/send-outreach-email POST Lead outreach email
/api/send-campaign-email POST Bulk campaign email
/api/search-hotels POST Hotel discovery via Serper.dev
/api/health GET API health check

Performance

  • PWA + Service Workers — offline-capable tablet operation with Workbox caching strategies
  • Code splitting — Vite bundles with content-based hashing for optimal caching
  • Firestore real-time — instant reservation sync without polling
  • Touch-optimised — 60fps interactions with large tap targets and smooth transitions
  • Font preloading — luxury fonts loaded from local assets, no external CDN latency
  • Auto-return — idle timeout returns to screensaver, preventing UI stale states

Built by xelauvas.dev

This repository contains only documentation. Source code is proprietary.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors