If time is money, QueueMe puts hours back in people's wallets.
QueueMe is a mobile-first queue management app that digitizes physical lines for businesses and customers. Instead of waiting around in person, users can join a queue, track their place live, and show up when it is actually their turn.
QueueMe started at JAMHacks 9 as a hackathon project focused on one practical problem: people waste too much time standing in line.
The original prototype made it easy to create a queue, share a code, and let customers monitor their position remotely. This repository reflects the newer version of that idea, with:
- 🔐 authenticated customer and business accounts
- 📲 realtime queue syncing across devices
- 🧑 profile management with role switching
- 📍 searchable queue discovery by business name or location
- ☁️ Supabase-backed persistence instead of a lightweight prototype backend
- 🔑 Role-based auth for customers and businesses with email/password sign-in
- 🏪 Queue creation with generated queue codes, service-time estimates, descriptions, and optional real addresses
- 🙋 Fast join flow through queue code entry or queue discovery search
- 📍 Live queue search by business name or location
- ⏱️ Realtime position tracking with estimated wait times
- 🔄 Realtime sync through Supabase Realtime
- 👤 Profile editing with name, avatar, and role management
- 🧑💼 Business controls to call the next person, remove someone, or end the queue
- Frontend: Expo 54, React Native 0.81, React 19, Expo Router
- Backend/Data: Supabase Auth, Postgres, Realtime
- Language: TypeScript
- Location search: OpenStreetMap Nominatim
- Frontend: React Native, TypeScript
- Backend: Python Flask
- Database: Hosted JSON object
- Tools: Git, Figma
QueueMe was built at JAMHacks 9 and designed for walk-in services where physical lines slow everyone down.
- Clinics
- Campus service desks
- Salons
- Restaurants
- Government services
- Providers could create a queue and share a simple code on the spot
- Clients could join in seconds with basic info
- Users could view their live position and estimated wait time
- The experience stayed simple for both businesses and consumers
- Sign up or switch profile role to
business - Create a queue with a name, wait-time estimate, and optional real address
- Share the generated queue code with customers
- Manage the queue from the app
- Call the next person, remove someone, or end the queue
- Sign up or switch profile role to
customer - Search active queues by business name or location, or enter a queue code
- Join with a display name and optional contact info
- Track your live position and estimated wait time
- Leave the queue if needed
app/ Expo Router screens
app/(tabs)/ Main tab flows for create, join, manage, profile, and status
context/ Auth and queue state providers
components/ Reusable UI pieces
utils/ Supabase client, queue helpers, profile helpers, location search
supabase/schema.sql Database schema and policies
SUPABASE_SETUP.md Supabase setup reference
npm installCopy .env.example to .env and set:
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key- Create a Supabase project
- Run
supabase/schema.sql - In Supabase Auth, keep Email enabled
- In Realtime publications, enable:
public.queuespublic.queue_members
More setup detail is in SUPABASE_SETUP.md.
npm run devThen open it in Expo on iOS, Android, or web.
npm run devstarts the Expo development servernpm run build:webexports the web buildnpm run lintruns Expo linting
- The app requires valid Supabase environment variables at startup
- Location lookup uses OpenStreetMap Nominatim and needs client-side network access
- Queue state stays in sync across devices through Supabase Realtime
- 🔔 Push notifications when a customer is close to the front
- 🔎 Stronger business discovery and filtering
- 📋 Better clipboard/share support for queue codes
- 🖼️ Proper media storage for profile photos instead of inline image data
- 📊 Wait-time analytics and smarter queue insights
Built at JAMHacks 9 by:
- Sunny Wu - Frontend, product vision, pitch
- Vrinda Joshi - Full stack, pitch
- Jusraj Toor - Full stack, UI/UX
- Matthew Kim - Backend
Special thanks to the JAMHacks 9 organizers at the University of Waterloo Engineering 7 building for creating the space to build, learn, and ship the original version of QueueMe.
