Let the dancefloor decide the line-up!
A real-time, QR-code-powered interactive voting system for events, parties, and DJs.
QR Party is a lightweight, high-performance web application designed to let event participants vote for their favorite tracks, sets, or DJs in real time using printed QR codes and any camera-enabled device (smartphone, laptop, or Raspberry Pi).
Designed with simplicity and efficiency in mind, it works entirely in local network environments (no active internet connection required) and supports hosting multiple simultaneous parties on a single instance.
- Multi-Party Support: Host and manage multiple parties concurrently with unique PartyTAGs.
- 100% Offline-Capable: Runs perfectly on a local network without requiring an external internet connection.
- Real-Time Data Visualization: High-impact, responsive D3.js real-time charts designed for projector screens and VJ setups.
- Ultra-Lightweight: Fully optimized to run on low-spec and older hardware (e.g., Raspberry Pi, legacy laptops).
- Responsive & Mobile-Friendly: Clean, modern web interfaces for DJs, admins, and voters alike.
- Secure & Solid: Fully patched dependencies with zero security vulnerabilities.
The system has been modernized to run on contemporary web standards:
- Backend: Node.js (v22+) & Express (v4+)
- Database: Redis / Valkey (v6+ / v8+)
- Templating Engine: Pug (v3+)
- Frontend: Bootstrap, jQuery, & D3.js (v5)
- Real-time Scanning: HTML5 Webcam scanner integrated via Instascan
- QR Generation: Modernized native Node-QRCode implementation
- Node.js (v22 or higher recommended)
- Redis or Valkey database server
Install and start Redis (or its open-source compatible counterpart Valkey).
docker run -d --name valkey -p 6380:6380 valkey/valkey:8.1.3-alpine3.22 --port 6380sudo apt update
sudo apt install redis-serverClone the repository and install the production dependencies:
# Clone the repository
git clone https://github.com/jcnade/QRParty.git
cd QRParty
# Install fully-patched dependencies
npm installStart the QR Party web server:
npm startThe server will start up on http://localhost:3001 (configurable in config/default.yaml).
Access the admin portal to configure your party parameters and description:
http://localhost:3001/start/your-party-id
Generate and print unique voter cards from the Admin Dashboard. Cut them out and distribute them to your dancefloor participants. Each card contains high-quality, pre-encoded QR codes.
Participants scan their QR codes using any terminal equipped with a camera or webcam:
http://localhost:3001/vote/your-party-id
Broadcast the gorgeous real-time chart feed on your event’s main screens or projectors:
http://localhost:3001/vjay/your-party-id
This project is released under the Beerware License (Revision 42):
As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.