Portfolio Case Study

QueuePoint Appointment & Queue SaaS MVP

A branch-aware appointment and queue SaaS case study built with vanilla JavaScript and Supabase. The goal was to prove a small service business can manage public booking, short appointment codes, staff/services/settings, daily queue status, branch isolation, and mobile-safe front-desk workflows from one practical dashboard.

Working SaaS MVP Supabase Backend PostgreSQL RLS Vanilla JavaScript Multi-branch dashboard
QueuePoint dashboard showing branch selector, stats, and module navigation

Main dashboard view with branch selector, operating stats, and module navigation.

Project Overview

A service-operations system built around branches, bookings, and daily queue flow.

QueuePoint is designed for businesses that currently manage appointments through notebooks, Messenger chats, phone calls, spreadsheets, and informal PM-based workflows. The case study focuses on the technical work needed to separate public booking from authenticated operations while keeping every branch’s data isolated.

For customers

Customers can choose a business location, use a public booking page, receive a short appointment code, and track booking status without creating an account.

For front desk

Staff can view today's appointments, move customers through booked, waiting, serving, and closed states, and keep queue flow visible from a mobile-tested dashboard.

For owners

Owners can manage branches, services, staff, settings, and business data through an authenticated dashboard protected by Supabase RLS and branch-aware filtering.

Technical Architecture

How QueuePoint separates public booking from private operations.

The homepage presents QueuePoint as a business system. This case study carries the heavier details: branch context, RLS boundaries, public/private data access, edit locks, short codes, and mobile behavior.

Public side Location picker, service/date/time selection, customer details, booking success, and code-based tracking.
Dashboard side Authenticated branch modules for services, staff, settings, appointments, queue, and business details.
Data safety Supabase Auth, RLS policies, branch filtering, public RPC, and dashboard access controls.
UX safety Edit locks, draft guards, Android Back handling, branch-switch protection, and landscape keyboard support.
Choose branch Book Get code Track Confirm Queue Close

The Problem

Small service businesses need booking structure without enterprise complexity.

Many small businesses need appointment and queue control, but not a large scheduling suite. The system needs to be simple enough for front-desk use while still protecting business data.

  • Manual booking creates confusion. Messenger threads, phone calls, and notebooks can make it hard to know which customer is booked, waiting, serving, completed, cancelled, or no-show.
  • Branches need separation. One branch should not accidentally see or manage another branch's services, staff, appointments, or settings.
  • Mobile users need protection from accidental exits. Front-desk users and customers can lose work through Back, navigation taps, branch switches, or keyboard layout problems.
  • Long codes are not user-friendly. Customers need appointment codes that are short enough to write down and use later.

The Solution

A Supabase-backed operations dashboard with public booking.

QueuePoint combines public booking with an authenticated business dashboard. The selected branch controls the services, staff, appointments, queue, and settings shown to the user, while public pages stay simple for customers.

  • Branch selector. The dashboard reloads services, staff, appointments, queue, and settings based on the active branch.
  • Operational workflow. Appointments can be moved through real-world statuses such as booked, confirmed, waiting, serving, completed, cancelled, and no-show.
  • Safety-first UX. A global edit-lock blocks branch switching, sidebar navigation, and logout while a form is being edited.

Core Features

Customer, front-desk, owner, and branch workflows included.

The current MVP is more than a booking form. It includes authenticated branch operations, public booking, queue flow, and reusable module patterns for services, staff, and settings.

Business & Branches

  • Authenticated dashboard
  • Business / branch CRUD
  • Branch selector
  • Public location picker
  • Business slot rule planning
  • Branch-specific data loading

Services & Staff

  • Services per branch
  • Staff records per branch
  • Add / edit forms
  • Deactivate / reactivate instead of delete
  • Work-day parsing and schedule display

Appointments & Queue

  • Public booking page with location switching
  • Short appointment codes
  • Appointment tracking page with result focus
  • Status updates
  • Queue board for daily operations
  • Booking draft protection against accidental navigation
Multi-branch Services, staff, settings, appointments, and queues reload per branch.
RLS-first Authenticated users access only branches they belong to.
Public-safe Public booking uses only safe business and booking data.
Edit lock Unsaved changes block branch switching, navigation, logout, and Back.

Backend & Security

Supabase tables, RLS policies, RPCs, and branch isolation.

QueuePoint uses Supabase Auth, PostgreSQL tables, Row Level Security, and RPC functions to keep public booking and authenticated dashboard workflows separated while preserving branch-specific operating context.

Core tables

  • businesses
  • business_users
  • services
  • staff_members
  • business_settings
  • customers
  • appointments

Tenant rule

No business should see another business's customers, appointments, services, staff, settings, or queue entries. Dashboard modules filter by the selected branch and RLS enforces ownership at the database layer.

Public/private split

Public booking can read safe business/location data and active services, while authenticated users manage private operational data through owner/admin policies.

Tenant boundary

Rule: one business or branch should never see another business's customers, appointments, services, staff, settings, or queue entries. RLS and branch-aware queries both enforce the operating context.

Public booking RPC

Rule: customers can create appointments without logging in, but public inserts are routed through a controlled backend workflow instead of exposing broad table access.

Business slot enforcement

Rule: each active business or branch consumes an allowed slot. The backend checks ownership and plan limits before allowing new branch creation.

Short appointment codes

Rule: customer-facing codes must be readable enough to write down, while still remaining unique within the business/date context.

Supabase Auth PostgreSQL Row Level Security RPC booking flow ES Modules Vercel deployment

Engineering Notes

Technical details that carry the SaaS credibility.

QueuePoint is strongest where the UI depends on backend rules: branch context, public/private access, owner limits, status transitions, and safe editing behavior.

Branch as operating context

Dashboard modules do not behave as isolated pages. Services, staff, settings, appointments, queue entries, and business details reload from the currently selected branch.

Status-driven operations

Appointments move through real front-desk states: booked, confirmed, waiting, serving, completed, cancelled, and no-show. Queue views are grouped from these operating states.

Draft and edit protection

Booking drafts and dashboard edit forms are protected against branch changes, navigation, logout, and Back-button exits when a user has already entered data.

Public tracking without customer accounts

Customers can track appointments using business and appointment codes. The system keeps customer lookup simple while preserving private dashboard access for staff and owners.

Key Challenges Solved

Implementation problems solved during the build.

The strongest parts of the project came from the problems that appeared while turning a simple booking app into a multi-branch SaaS-style dashboard.

Multi-tenant branch isolation

Services, staff, appointments, queue, business details, and settings had to reload cleanly when the selected branch changed. This forced the dashboard to use the active branch as the operating context.

Global edit-lock protection

Users could originally switch branches, navigate away, log out, or press Android Back while editing forms. QueuePoint now blocks branch switching, sidebar navigation, logout, and Back while a module is in add/edit mode.

Auth/session vs RLS debugging

An apparent RLS error was traced back to a missing authenticated session. The fix clarified the difference between a recognized user and a usable Supabase session/JWT for authenticated database requests.

Short appointment codes

Long codes were not practical for customers. QueuePoint now uses shorter per-branch/per-day appointment codes that are easier to write down and use on the tracking page.

Settings insert/update behavior

Branches without settings use defaults until saved. Saving either updates the existing row or inserts a new branch-specific row.

Public booking location picker

The public booking page now lets customers choose the business location while still using branch codes internally. Draft locks block location changes, top navigation, and Back while customer booking details are already entered.

Landscape keyboard dock

Real-phone testing showed that normal responsive layout was not enough in landscape. QueuePoint now uses a focused-field dock for text inputs so the active field remains readable when the Android keyboard consumes most of the screen.

Screenshots

Screenshots of the customer and branch-operations flows.

These screenshots show the stable MVP flow: customers choose a location, book an appointment, receive a short code, track status, and staff manage daily operations through a branch-aware dashboard.

QueuePoint dashboard with branch selector, stats cards, and module navigation

Dashboard overview. The authenticated dashboard centers branch selection, operating stats, and the main modules: services, staff, appointments, queue, business, and settings.

Public customer flow

QueuePoint keeps the public side simple: choose a location, enter booking details, receive a short code, and track the appointment without creating an account.

QueuePoint public landing page with booking, tracking, and login navigation

Public landing page

Customer-facing entry point with clear paths for booking, tracking, and business login.

QueuePoint public booking page with location picker

Location-aware booking

The public booking page lets customers choose the business location before selecting service, date, and time.

QueuePoint successful booking card with appointment code and tracking action

Short appointment code

After booking, the customer receives a readable appointment code with actions to track the booking or start another one.

QueuePoint appointment tracking result showing customer, service, date, time, and status

Status tracking

Customers can look up their appointment status using the business code and short appointment code.

Business dashboard modules

The authenticated side is branch-aware: services, staff, settings, appointments, and queue data reload based on the selected branch.

QueuePoint services module showing branch-specific service cards

Services

Branch-specific service catalog with duration, price, and active/inactive service controls.

QueuePoint staff module showing staff records and schedule details

Staff records

Staff cards show branch-specific staff, role, schedule, and active/inactive state without deleting historical context.

QueuePoint appointments module showing filters and appointment cards

Appointments

Daily appointment view with date/status filters and status updates for front-desk workflow.

QueuePoint queue board with booked, waiting, serving, and closed columns

Queue board

Queue workflow groups appointments into booked, waiting, serving, and closed operational states.

QueuePoint business and branch module with plan, subscription, and slot status

Business / branches

Business status strip shows plan, subscription, and branch slot usage while keeping branch data separate.

QueuePoint settings module showing branch booking settings

Settings

Branch-specific settings control booking hours, slot length, booking capacity, walk-ins, and customer messages.

Real mobile QA proof

QueuePoint was tested beyond desktop resizing. Mobile fixes included sticky dashboard navigation, Android Back protection, booking draft protection, and a landscape keyboard dock for short screens.

QueuePoint landscape mobile keyboard dock proof on a real phone

Landscape keyboard dock. Real-phone testing exposed keyboard pressure in landscape mode. The focused-field dock keeps text inputs readable when the Android keyboard takes most of the screen.

Current MVP Status

Current MVP status and next production steps.

QueuePoint is a portfolio-grade SaaS MVP and guided-pilot demo. The current version proves the operational model; the next step would be production hardening around self-service onboarding, payments/deposits, reminders, staff logins, and owner subscription controls.

Completed MVP modules

  • Business / Branch MVP
  • Services MVP
  • Staff MVP
  • Settings MVP
  • Appointments and Queue
  • Public booking, location picker, and tracking
  • Booking draft guard
  • Auth/session guard
  • RLS policies and branch filtering
  • Edit-lock and Back-button protection
  • Landscape keyboard dock for mobile input

Future improvements

  • Self-service signup
  • Staff login accounts
  • Service-to-staff assignment UI
  • Public staff availability picker
  • Payment/deposit instructions or QR workflow
  • SMS/Viber reminders
  • Pilot feedback polish
  • Owner subscription controls
Positioning note: QueuePoint is best presented as a business organizer that helps protect appointments, reduce front-desk confusion, and keep daily service flow visible.

Need a small-business appointment or queue system?

QueuePoint demonstrates SaaS-style branch isolation, Supabase RLS, public booking, authenticated operations, mobile-safe form handling, and practical dashboard UX using vanilla JavaScript and Supabase.