Skip to Content
WEB APPLICATION

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.

Tech Stack

Node.js Express PDFKit QRCode Nodemailer SnapScan API nginx

Results

3
Ticket tiers with mixed-quantity ordering
100%
Unique ticket numbers with per-ticket QR codes
Auto
Invoice and ticket PDF delivery via email
< 1 day
Deployed behind existing nginx infrastructure

Want something like this? Let's talk

Get in touch