A no-login, mobile-friendly waitlist system for walk-in restaurants. Diners join the queue from their phone (no app needed), and hosts manage the line from a PIN-protected dashboard with real-time ETAs.
# Prerequisites: Node.js >= 22, MongoDB running locally
npm install
cp .env.example .env # edit as needed
npm start # http://localhost:3000| Page | URL |
|---|---|
| Diner queue | http://localhost:3000/r/skb/queue.html |
| Host dashboard | http://localhost:3000/r/skb/host.html |
| All locations | http://localhost:3000/ |
| Variable | Required | Description |
|---|---|---|
MONGODB_URI |
No | MongoDB connection string (default: mongodb://localhost:27017) |
MONGODB_DB_NAME |
No | Database name (auto-detected from git branch if not set) |
PORT |
No | Server port (auto-assigned if not set) |
SKB_HOST_PIN |
No | Host-stand PIN (default: 1234) |
SKB_COOKIE_SECRET |
No | Cookie signing secret for host sessions |
TZ |
No | Timezone for service-day partitioning (default: America/Los_Angeles) |
SKB queue pages include structured data (JSON-LD) and Open Graph meta tags so they work well when linked from Google Maps, shared on social media, or indexed by search engines.
To make your restaurant's waitlist discoverable on Google Maps, follow these steps:
- Go to Google Business Profile and sign in with the Google account that manages your restaurant.
- If you haven't claimed your business yet, search for your restaurant and follow the verification process (Google will mail a postcard or call your business phone).
- Make sure your business information is accurate: name, address, phone number, hours, and category (should include "Restaurant").
Your queue page URL follows this pattern:
https://<your-domain>/r/<location-id>/queue.html
For example, if your domain is skb-waitlist.azurewebsites.net and your location ID is skb:
https://skb-waitlist.azurewebsites.net/r/skb/queue.html
- In Google Business Profile, click Edit profile.
- Find the Website / Links section (may also appear under "More" or "Business information").
- Add your queue URL as one of these link types (in order of preference):
- Reservations link — appears as a "Reserve" or "Join Waitlist" button on your Maps listing
- Order ahead link — appears as an "Order" button
- Menu link — appears alongside your menu
- Click Save.
Changes to your Google Business Profile can take 24-72 hours to appear on Google Maps. After that:
- Diners searching for your restaurant on Google Maps will see the link
- Tapping it opens your queue page in their mobile browser
- They can see the current wait time and join the line immediately
For the best search engine and social media experience, set the publicUrl field on your location document in MongoDB. This enables canonical URLs, Open Graph tags, and JSON-LD structured data to use the correct absolute URL.
// In MongoDB shell:
db.locations.updateOne(
{ _id: "skb" },
{ $set: { publicUrl: "https://skb-waitlist.azurewebsites.net" } }
)Without publicUrl set, the queue page still works but may not show rich link previews when shared on social media.
After setup, you can verify the structured data is working:
- View source: Open your queue page in a browser, view source, and look for
<script type="application/ld+json">and<meta property="og:tags in the<head>. - Google Rich Results Test: Paste your queue page URL into Google's Rich Results Test to verify the structured data is valid.
- Social share preview: Paste the URL into Facebook Sharing Debugger to see how the link preview looks when shared.
SKB supports multiple restaurant locations. Each location has its own:
- Queue page at
/r/:loc/queue.html - Host dashboard at
/r/:loc/host.html - PIN-protected access
- Independent queue and settings
The default location skb (Shri Krishna Bhavan) is auto-created on startup.
npm start # Start the server
npm test # Run unit tests
npm run test:integration # Run integration tests (requires MongoDB)
npm run test:e2e # Run end-to-end tests
npm run test:all # Run all tests
npm run typecheck # TypeScript type checking