Wapadrant Ticketing
Concert ticketing with SnapScan payment and PDF tickets
Overview
Wapadrant Gemeente needed a ticketing system for their Riana Nel concert fundraiser. The system had to handle three ticket tiers, accept SnapScan payments, generate unique ticket numbers, and email PDF tickets with QR codes for entrance validation.
We built a lightweight Node.js ticketing app that sits behind the existing safesun.co.za nginx server. No heavy framework, no database, just Express, PDF generation, and SnapScan payment integration. The whole thing was deployed in under a day.
The Challenge
Three ticket tiers needed to coexist in a single order: Adults at R250, high school children at R150, and lower school children at R50. Each ticket required a unique number and QR code for entrance validation. Payment had to go through SnapScan with webhook confirmation, PDF tickets had to be both emailable and printable, and the whole system had to deploy behind the existing nginx without disrupting the Odoo website already running there.
The Solution
Express.js Server
Three-tier pricing model with mixed-quantity ordering in a single checkout flow.
SnapScan Integration
QR code generation for payment with webhook confirmation and status polling as a fallback.
PDFKit Ticket Generation
Each ticket gets a unique number in WAP-0001 format with a per-ticket QR code encoding ticket number, order ID, and holder name.
Nodemailer Delivery
Automated email delivery of invoices and ticket PDFs straight to the buyer's inbox.
Payment Confirmation
Dual-layer verification with SnapScan webhook plus polling, so no ticket is sent before payment is confirmed.
nginx Reverse Proxy
Deployed at the /konsert path, sharing the existing safesun.co.za server without touching the Odoo site.