← All projects
Gated · private

Poker Night

A private, invite-only RSVP app for a recurring home poker game — magic-link login, auto-waitlist, live table talk — running on a fully serverless stack for $0/month.

5 systemswired together
Productionreal users
$0/mono paid auth
Data flow

The hero diagram of the set — a real five-system production app, with the parts a dev shop would charge for marked out.

Why it exists

Kill the group-text RSVP scramble for a recurring poker night. I wanted one private place where the regulars (roughly 20 seats per game, drawn from a 100+ person invite list) could log in, see who's in, claim or release a seat, auto-waitlist when the game's full, and talk — all synced to the base I already ran the group out of. The deeper why: prove that a non-developer can ship a real, production, multi-system web app end to end with AI.

What it is

Players log in by magic link — no passwords. Authorization is gated server-side on an access checkbox: you're in only if you're a known player and you've been granted access. Once in, you RSVP against a capacity limit; a full game auto-waitlists you and auto-promotes the next person in line the moment someone drops. The app shows a live roster, a Table Talk comment thread, direct messages between players who've actually shared a game, and a unified real-time notification feed, plus a host console for managing games, capacity, RSVP windows, and day-of check-in. Airtable stays the system of record for everything reservation-related; ephemeral data lives in Cloudflare D1; the real-time layer runs on Durable Objects; email goes out through Resend.

The hard part

Three things were genuinely non-trivial. The hardest: getting Cloudflare Durable Objects — the WebSocket layer behind live chat, DMs, and notifications — to export and run through the OpenNext adapter for Next.js, which is not a documented happy path. It needed a custom Worker entry that re-exports the DO class and intercepts WebSocket upgrades, de-risked with a throwaway “echo room” spike first. The other two: a clean split between authentication and authorization (the browser renders and relays, it never decides — revoking someone is one unchecked box), and a no-lock concurrency guard that re-reads the live headcount at click time instead of heavyweight locking.

Worth highlighting

The Learn tutorial (public)

Poker Night ships with a built-in Learn tutorial — a walkthrough of how to actually play, at poker.drost.us/learn. It's ungated: anyone can open it and learn the game without an invite or a login. Because it sits outside the access wall, it's the one piece of this project I can share freely — a public front door to an otherwise private app.

App screens
Screenshots · pending privacy scrubAnnotated app screensDashboard with the inline RSVP card, the live roster + Table Talk thread, the host console, and a magic-link / waitlist email. These require a data-level privacy scrub before they ship.
vibe-coded with ClaudeProduction Next.js on Cloudflare — real-time WebSockets, magic-link auth, the works — built solo by someone who doesn't write code, for the price of a domain name.

More projects

← Back to all projects