Case Study · Venue Management System

Rajdari
WaterPark
Management

A complete venue operations platform built with Flask — handling ticketing, payments, staff roles, and real-time reporting for a physical waterpark. Deployed and running on Android via Termux.

2024 Full-Stack Android / Termux Private Deployment 24 Models
Aerial view of a waterpark — Rajdari WaterPark Management System
24
DB Models
8
Blueprints
QR
Ticket Gen
Razorpay Live

The Problem

Rajdari WaterPark needed a complete operational software system — from visitor check-in to daily revenue reporting. Existing solutions were expensive SaaS tools that didn't fit the local context or workflow.

The system needed to run locally on-site without depending on cloud hosting, handle multiple staff roles simultaneously, generate physical QR tickets, and process real Razorpay payments.

The constraint: it had to run entirely on an Android device using Termux — no dedicated server, no cloud VMs.

Technical Constraints

Android-Only Runtime
Full Flask app running in Termux with no external servers. Local network access for on-site staff.
24-Model Schema Design
Designing a normalized schema covering tickets, visitors, staff, rides, payments, and reports without duplication.
Walk-in Booking Crash
A form parsing crash in the walk-in booking route was debugged and resolved during production use.

What the System Does

A complete venue management suite covering every operational touchpoint from entry to close-of-day.

QR Ticket Generation
Each visitor booking generates a unique QR code ticket. Staff scan QR codes at entry gates for instant validation without manual lookup.
Razorpay Payments
Live Razorpay integration for online ticket purchases. Webhook verification ensures payment records stay in sync with booking status.
Role-Based Access
Separate dashboards for Admin, Cashier, Gate Staff, and Ride Operators. Each role sees only relevant data and actions.
Walk-In Booking
On-site booking form for visitors arriving without prior reservation. Generates instant QR tickets and updates available capacity in real time.
Revenue Reporting
Daily and weekly revenue summaries broken down by ticket type, payment method, and time slot. Exportable reports for management.
Capacity Management
Real-time tracking of visitor count per zone. Automatic booking cutoffs when capacity thresholds are reached.

How It's Structured

The app uses Flask's Blueprint architecture to keep each domain isolated and maintainable. 8 blueprints handle different areas of the business logic, all sharing the same SQLAlchemy models layer.

Client Layer
Browser (Staff) Mobile (Gate) QR Scanner
Flask Application
auth bp tickets bp payments bp staff bp
rides bp reports bp admin bp api bp
Data / Services
SQLAlchemy (24 Models) SQLite DB Razorpay API
Runtime
Termux / Android Local Network

SQLAlchemy Models

24 total
User
Role
Visitor
Booking
WalkInBooking
Ticket
Payment
Transaction
Refund
Ride
RideSlot
RideEntry
Zone
ZoneCapacity
TicketType
TicketScan
DailyReport
RevenueLog
StaffShift
Announcement
Setting
AuditLog
Notification
Incident

Built With

Python 3.x
Flask
Flask-Login
SQLAlchemy ORM
SQLite
Razorpay SDK
qrcode (Python)
Pillow
Jinja2 Templates
Bootstrap 5
Flask-WTF
Termux (Android)

Walk-In Booking Crash

During live production use, the walk-in booking route threw a form parsing crash when multiple fields were submitted simultaneously by busy staff.

The root cause was a missing request.form.get() fallback — the route was using direct dictionary access which raises KeyError on missing optional fields.

Fixed by auditing all form parsing logic, switching to .get() with defaults, and adding server-side field validation before DB writes.

Development Phases

Schema Design
Designed all 24 SQLAlchemy models, relationships, and migrations. Mapped all real-world entities to normalized tables.
Auth & Role System
Built Flask-Login based auth with role decorators. Each user type gets a distinct dashboard on login.
Ticketing & QR
Booking flows, walk-in forms, QR code generation using Python's qrcode library, ticket scanning validation.
Payments Integration
Razorpay checkout, order creation, webhook verification, and payment status sync.
Termux Deployment
Configured Flask to serve on local network from Android via Termux. Staff access from any device on the same WiFi.

Project Outcomes

24
SQLAlchemy models covering all venue data
8
Flask blueprints for clean module separation
4
Staff roles with separate access controls
0
Cloud cost — fully self-hosted on Android

Need a custom management system?

I build complete operational platforms for physical businesses — ticketing, payments, staff roles, and reporting. Let's talk.