Case study
One dashboard instead of four disconnected systems
Resort Operations Dashboard & Data Pipeline
A live, interactive dashboard and the ETL pipeline behind it, unifying lift-ticket visitation, weather/snow conditions, lift downtime, and staffing for an independent ski resort into one recurring view.
- Data Pipeline
- ETL
- Dashboard Design
- Reconciliation
Most independent ski resorts run visitation, weather/snow, lift status, and staffing as four disconnected systems, checked separately every morning. This piece builds a Python ETL pipeline that cleans and joins those four sources into one daily-operations fact table, and the live dashboard below, which the operations team can check every morning instead of four separate systems. Full methodology in the PDF below; every number on this page is fully synthetic.
Total Season Visitors
157,752
152 operating days
Avg. Daily Visitors
1,038
Peak: 2,354 on Feb 16
Avg. Lift Uptime
98.3%
Across 6 lifts, cleaned downtime log
Avg. Staffing Ratio
26.7:1
Visitors per staff, peak-concurrent
Total Downtime
124 hrs
Season total, all lifts
Daily Visitation vs. Staffing
Unique visitors (left axis) and total peak-concurrent staffing (right axis) across the full season.
Season-Total Downtime by Lift
Cleaned downtime minutes (bars) and cumulative share of total downtime (line).
Lift Utilization vs. Theoretical Max Capacity
Season-total gate scans as a % of what each lift could have carried running at full rated capacity, every seat full, every operating hour of the season. That baseline is a ceiling, not a realistic target, so the percentages are naturally low; the ranking across lifts is what matters.
Snowfall vs. Daily Visitation
r = 0.108: a modest, honestly-reported relationship; calendar effects (weekday/weekend, holidays) dominate, snowfall is a secondary factor.
The Problem
- An operations team checks 3-4 disconnected systems every morning: ticket/gate scans, a weather feed, a lift-status log, and a staffing spreadsheet.
- None of those systems agree on basic questions: total visitation, whether staffing matches expected demand, or which lift actually drives most downtime.
- A one-time report can't solve this: the answer needs to keep working every operating day of the season.
What Was Built
- Generated four fabricated raw source files reproducing the real reconciliation problems a unified pipeline has to solve.
- Built a Python ETL pipeline: de-duplicate and merge the downtime log, reconcile lift scans against true unique visitation, aggregate shift-level staffing to daily headcount.
- Joined all four sources into one daily-operations fact table plus dashboard-ready aggregates.
- Built the dashboard from reusable chart/KPI components (Apache ECharts) so new metrics can be added without rebuilding the interface.
What It Found
- 98.3% average lift uptime across 6 lifts, after cleaning 45 duplicate and 30 adjacent downtime-log entries a naive total would have double-counted.
- Normalizing gate scans by rated capacity flips the naive read: the beginner carpet has the lowest raw scan count of all six lifts but the highest capacity utilization, while the six-pack chair has the second-highest raw count but the lowest utilization.
- A modest, honestly-reported weather/visitation correlation (r = 0.108): calendar effects dominate demand, snowfall is a real but secondary factor.
- One daily view that replaces four separate morning checks with one, built to extend as new lifts, departments, or metrics are added.
Stack
- Python
- pandas
- NumPy
- Next.js
- React
- TypeScript
- Apache ECharts
Read the Full Report
The full report covers the operations problem, the pipeline's three data-quality fixes (log de-duplication, scan-vs-visitor reconciliation, staffing aggregation), and the dashboard's design.
Download the PDF reportThe same discipline shapes every engagement