Gaming Club Data Platform
End-to-end data infrastructure for gaming venue operations — automated ingestion pipelines, dbt transformations, and decision-ready analytics over a centralised PostgreSQL warehouse.
Overview
Gaming clubs are complex operational businesses. Revenue comes from multiple streams: gaming sessions (seat rentals by the hour), monthly subscriptions, food & beverage sales, and merchandise. Each stream has its own pricing logic, customer lifecycle, and reporting requirements.
This project built an end-to-end analytics platform for a live gaming club operation — automated nightly ingestion from four operational systems into a central PostgreSQL data warehouse, dbt transformation layers with consistent metric definitions enforced as code, and a Metabase reporting layer delivering trusted business metrics daily.
Business Context
Understanding what a gaming club actually operates helps frame what the data platform needed to solve.
- Gaming sessions are the core revenue unit — customers book seats by the hour using gaming PCs, consoles, or VR stations. Session data captures equipment, duration, and seat utilisation.
- Subscriptions provide recurring revenue — monthly plans grant members priority access and discounted hourly rates. Tracking activations, renewals, and churn is critical for MRR forecasting.
- Food & beverage sales happen concurrently with sessions — POS transactions link to active sessions and customer profiles, enabling per-visit spend analysis.
- CRM interactions record every customer touchpoint — registration, tier changes, loyalty points, and support interactions feed into customer lifetime value and segmentation models.
- Revenue operations require cross-stream reconciliation — a single customer visit generates events in the booking system, POS, CRM, and subscription service simultaneously.
Data Challenges
Before the platform existed, operational data lived in four disconnected systems with no shared data model, no agreed metric definitions, and no automated reporting.
- Fragmented operational systems — POS, booking, CRM, and subscription service had separate databases with no shared customer identifiers or event schema.
- Inconsistent metrics — revenue figures differed between systems because each calculated totals differently: gross vs. net, session vs. payment date, subscription period vs. collection date.
- Manual reporting — weekly management reports were assembled by hand from CSV exports across all four systems, taking several hours and introducing copy-paste errors.
- Duplicated business logic — discount calculations, subscription status rules, and revenue attribution logic were reimplemented independently in each reporting tool.
- Reporting delays — by the time weekly reports reached management, the data was 5–7 days old, making fast operational decisions impossible.
Architecture
A layered data platform built around a central PostgreSQL data warehouse, with Airflow orchestrating nightly ingestion and dbt owning all transformation and metric definition logic.
Data Flow
Analytics Layer
The analytics layer standardises all business metrics into a single governed definition layer, ensuring every dashboard and every stakeholder works from the same numbers.
Automation Layer
DWH Modeling
The warehouse follows a three-layer medallion architecture enforced through dbt project structure. Each layer has a distinct contract: raw data is never modified, staging is where cleaning happens, marts are where business logic lives.
Exact copies of source system data. Insert-only, no transformations, full history preserved. Serves as an audit log and re-processing baseline.
raw_pos_transactionsDirect copy of POS transaction records with original field names and typesraw_bookingsSession booking events exactly as received from the booking system APIraw_subscriptionsSubscription lifecycle events: activations, renewals, cancellations, expirationsraw_crm_profilesCustomer profile snapshots from CRM with full field historyCleaned, typed, and deduplicated source data. One staging model per source table. Business logic is explicitly forbidden at this layer.
stg_paymentsTyped payment records with nulls handled, currency normalised, duplicates removedstg_sessionsNormalised session events with duration computed, equipment IDs standardisedstg_subscriptionsUnified subscription events with consistent status codes and date typesstg_customersMerged customer profiles with segment tags and acquisition channel attributionBusiness-facing tables optimised for reporting queries. Aggregated KPIs, revenue attribution logic, and cohort metrics all live here.
mart_revenueDaily and monthly revenue broken down by category, payment method, and source systemmart_sessionsHourly utilisation metrics, equipment allocation rates, peak period flagsmart_subscriptionsActive subscriber counts, churn rates, renewal pipeline, and MRR trackingmart_customersCustomer segments, LTV estimates, acquisition cohorts, and engagement scoresReporting Layer
Technologies
Results
- Automated nightly pipeline replaced manual weekly CSV reporting cycle
- Consistent metric definitions enforced across all dbt models and downstream dashboards
- Single management dashboard covering revenue, sessions, and subscriptions
- Data discrepancies between systems identified and resolved through reconciliation logic
- Reporting cycle shortened from several days to overnight
- Duplicated business logic eliminated — one definition, used everywhere