Case · Web app
Bad Club: seat booking for a gaming coworking space
A demo app on Vue 3, Express and SQLite: an interactive hall map with seat booking, a user account and an admin panel with a layout editor. Passwordless sign-in via a one-time e-mail code.
- Vue 3
- Vite
- Pinia
- Vue Router
- GSAP
- Express
- node:sqlite
- JWT (httpOnly cookie)
- Resend
01 · How it looks
Screenshots


02 · About
What it is and why
A demo app on Vue 3, Express and SQLite: an interactive hall map with seat booking, a user account and an admin panel with a layout editor. Passwordless sign-in via a one-time e-mail code.
Limitations
A demo project that is not deployed anywhere; no production or real customers.
Screenshots were taken on a fresh database with seed data; busy seats on the map come from the seed, not real bookings.
Without a mail service key the sign-in code is printed to the server console.
The project has no automated tests.
What is inside
- Hall map with zones (standard, quiet, VIP, dual-monitor), a type filter and seat status
- Admin panel: overview, bookings, seats, computers, users and a drag-and-drop layout editor
- OTP sign-in with attempt and rate limits; the admin role is bootstrapped via an env variable
- Demo data is created by a seed script on first start
03 · How to run
Run it locally
npm install && npm run dev
# backend :3001, frontend :5173; production: npm run build, then NODE_ENV=production npm start (JWT_SECRET and ADMIN_EMAILS in backend/.env)04 · Code
The repository is private
The source lives in a private repository. I will grant access on request: write to me and I will send an invitation.
Request the code