Synchronized drawing-and-light show across multiple devices in real-time.
Create synchronized drawing-and-light shows across multiple devices in real-time!
Turn any event into an interactive art experience. Everyone draws, everyone gets ready, and when you hit play โ all screens light up together in perfect sync. ๐จ๐ก
A Nuxt 4 web app that combines drawing, WebSockets, and synchronized playback to create shared visual experiences at events. Perfect for parties, workshops, or any gathering where you want people to collaborate creatively!
/admin with token authundefinedPrerequisites: Node 20+, pnpm, mkcert
# Install mkcert (if needed)
# macOS: brew install mkcert
# Linux: See https://github.com/FiloSottile/mkcert#installation
# Clone and setup
pnpm install
pnpm prepare # Generates SSL certs
# Create .env file
echo "NUXT_ADMIN_TOKEN=changeme" > .env
# Start dev server (HTTPS on localhost:3000)
pnpm dev
https://localhost:3000 on your devicehttps://localhost:3000/adminpnpm dev # Dev server with HTTPS
pnpm build # Build for production
pnpm preview # Preview production build
pnpm start:node # Run production server (requires env vars)
Edit server/data/schedule.json to customize timing and effects:
{
"totalMs": 220000,
"events": [
{ "label": "up", "time_ms": 12822 },
{ "label": "drop", "time_ms": 51234 }
]
}
undefinedEffect labels:undefined
up / down / ground โ Show themed images with fadeslife / buildup โ Repeating flashesdrop โ Party mode with colorful flashessilence / end โ Dimming effectsapp/
โโโ pages/
โ โโโ index.vue # ๐จ Participant view
โ โโโ admin.vue # ๐๏ธ Admin console
โโโ composables/
โ โโโ usePlaybackSocket.ts # WebSocket connection
โ โโโ usePlaybackScheduler.ts # Timeline engine
โ โโโ useDrawingCanvas.ts # Canvas drawing
โ โโโ useCountdownSync.ts # Countdown overlay
โโโ components/ # UI components
server/
โโโ routes/
โ โโโ playback.ts # WebSocket handler
โโโ api/
โ โโโ schedule.get.ts
โโโ data/
โโโ schedule.json # Playback timeline
types/
โโโ topics.ts # Drawing prompts
โโโ websocket.ts # Message schemas
Set these environment variables:
# Required
NUXT_ADMIN_TOKEN=your-secret-token
# Production (optional)
HOST=0.0.0.0
NITRO_SSL_CERT=/path/to/ssl.crt
NITRO_SSL_KEY=/path/to/ssl.key
undefinedAdmin auth fails?undefined
โ Check NUXT_ADMIN_TOKEN is set in your environment
undefinedHTTPS certificate errors?undefined
โ Run mkcert -install and then pnpm prepare
undefinedWake lock not working?undefined
โ Requires HTTPS. Make sure youโre using https:// in the URL.
We use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.