by InlinexDev

How I Built a WhatsApp-Integrated Booking System for a Retail Store

A deep dive into building an appointment booking system with WhatsApp OTP verification and automated reminders for a Singapore retail store.

WhatsApp APINode.jsbooking systemShopifyPostgreSQL

The Problem

Running a brick-and-mortar retail store means managing a constant flow of customer visits. For Inlinex, Singapore's leading inline skate retailer, walk-ins for fittings, repairs, and pickups were creating bottlenecks. Customers would show up without appointments, leading to long wait times and frustrated staff.

The solution? A booking system that meets customers where they already are — WhatsApp.

Why WhatsApp?

In Singapore, WhatsApp is the dominant messaging platform. Rather than asking customers to download yet another app or check their email, we integrated directly with Meta's Cloud API for:

  • OTP Verification — no fake bookings
  • Automated Reminders — 24 hours before each visit
  • Instant Confirmations — customers get immediate feedback

Technical Architecture

The system is built with Node.js and Express, backed by PostgreSQL for data persistence. Here's how the key pieces fit together:

Intelligent Slot Management

Not all visits are equal. A fitting session blocks a time slot (only one customer can be fitted at a time), but a pickup or wheel purchase doesn't. The system differentiates between blocking and non-blocking visit purposes, maximizing the store's capacity.

Shopify Integration

The booking widget is embedded as an iframe on the Shopify storefront. Getting this right required real-time height synchronisation between the iframe and the parent page — a classic cross-origin challenge solved with postMessage.

Rate Limiting

To prevent abuse, the system implements progressive rate limiting. First few requests are allowed freely, then delays increase exponentially. This stops both bot attacks and overly enthusiastic users from flooding the system.

Key Learnings

  1. WhatsApp template messages require approval — plan your message templates early and submit them for Meta's review process
  2. International phone numbers are tricky — we built a country flag selector to handle different formats
  3. Cron-based reminders need timezone awareness — Singapore is UTC+8, and getting reminder timing right across daylight saving changes elsewhere required careful handling

Results

Since launching, the booking system has:

  • Reduced walk-in wait times significantly
  • Given staff advance notice of what equipment to prepare
  • Virtually eliminated no-shows thanks to WhatsApp reminders

Tech Stack

  • Backend: Node.js, Express
  • Database: PostgreSQL
  • Messaging: WhatsApp Cloud API (Meta)
  • Frontend: Vanilla JS (embedded iframe)
  • Hosting: Railway
  • Storefront: Shopify

Related Project

Inlinex Booking System

A full-featured appointment booking system with WhatsApp OTP verification, intelligent slot management, and automated reminders for a premium inline skate retail store in Singapore.