A real-time raffle app built with Nuxt. An admin shares a QR code / link, participants join from their phones, and a winner is drawn live with a spinning animation and confetti.
- Enter the admin secret to unlock the dashboard.
- Share the join URL or QR code with the audience.
- Watch participants appear in real time.
- Hit Draw to spin through names and reveal a winner.
- Reset to clear everything and start a new round.
- Open the join link on any device.
- Tap Join — a random codename is assigned automatically.
- Wait for the draw. The page updates in real time via SSE.
- The winner sees a celebration screen with confetti; everyone else sees who won.
Closing the browser tab automatically removes the participant.
- Nuxt 4 with server routes and SSE
- Tailwind CSS 4 via the Vite plugin
- VueUse for reactive utilities
- uqr for QR code generation
- In-memory store (no database) — data resets on server restart
pnpm installCreate a .env file (or set the environment variable) with your admin secret:
NUXT_ADMIN_SECRET=your-secret-here
pnpm devThe app starts at http://localhost:3000. To expose it over the internet for participants, ngrok support is built in via @nuxtjs/ngrok — just set NGROK_AUTHTOKEN in your environment.
pnpm build
pnpm previewSee the Nuxt deployment docs for hosting options.