Your site stays up
- If Waitrooms can't be reached, the snippet opens your page after a short timeout. We're designed never to be the cause of an outage.
- Visitors already let in hold passes that verify offline, against public keys, without contacting us.
- Each room chooses what happens if our queue store is unreachable: let new visitors in, or hold them.
Passes and line integrity
- Passes are ES256-signed tokens; only Waitrooms can issue them, and anyone can verify them.
- Places in line are HMAC-signed, so they can't be forged or moved forward.
- A place in line can only be redeemed a few times, so sharing it doesn't let a crowd in behind one person.
- An emergency control revokes every issued pass within seconds.
- Visitors are only ever redirected back to the room's own site, never to an address in the URL.
- Optional invisible bot checks (Cloudflare Turnstile) run before a visitor gets a place.
Accounts and keys
- Passwords are stored as salted PBKDF2-SHA256 hashes. API keys, session tokens, invites, reset links and VIP links are stored only as SHA-256 hashes; the full value is shown once.
- Sessions use HttpOnly, SameSite cookies, and changes from the browser are only accepted from our own origin.
- Four roles (owner, admin, developer, viewer) control who can change what. Workspaces are isolated in every query.
- Sign-in, join and API traffic are rate limited at the edge.
Custom pages
Customer-written HTML runs in a sandboxed frame with scripts disabled and a strict content security policy, so a waiting page can't run code against visitors or our dashboard. Uploads are limited to raster image types; SVG isn't accepted.
Infrastructure
Waitrooms runs on Cloudflare's network, with data in Neon (Postgres) and Upstash (Redis), all encrypted in transit and at rest. Webhooks are signed with a per-endpoint secret and protected against replay.
Reporting a vulnerability
Please email hello@waitrooms.dev with details. We'll acknowledge within two working days, and ask that you give us reasonable time to fix the issue before disclosing it.