Task run 409490 Task: ceo-dashboard-build - Build CEO Dashboard Status: completed Started: 2026-06-12T05:00:06.268638+02:00 Finished: 2026-06-12T05:02:08.599574+02:00 Duration: 122.32751s Log path: /home/lucienne/workspace/logs/task-runs/ceo-dashboard-build/409490.log --- output --- run_id=409490 task_id=ceo-dashboard-build status=completed logged_at=2026-06-12T05:02:08.599308+02:00 truncated=false *FlySafair Daily Brief — 12 Jun 2026* Data through: 2026-06-11 *May 2026* Pax: 764,240 (-11.9% YoY) | Rev: R1.19B (+21.7% YoY) LF: 82.1% (-9.7pp YoY) | Yield: R1,552 (+38.1% YoY) Flights: 4,929 (-2.6% YoY) | Seats: 931,173 (-1.5% YoY) *June 2026 MTD (10 days, through 11 Jun)* Pax: 207,058 (-21.1% YoY) | Rev: R292M (-0.2% YoY) LF: 77.8% (-8.0pp YoY) | Yield: R1,410 (+26.5% YoY) Flights: 1,409 (-14.1% YoY) | Seats: 266,301 (-13.0% YoY) *Attention:* ⚠️ Capacity (+-1.5%) outpacing demand (+-11.9%) — watch for LF erosion ✅ Yield strength +38.1% YoY — pricing power holding 🔴 Load factor down -9.7pp YoY — demand not absorbing capacity growth ✅ Revenue/flight up +24.9% YoY — quality growth 📊 2026-06 bookings: 462,893 pax (55% of PY final) | Rev R681M (70% of PY) 📊 2026-07 forward: 189,762 pax (22% of PY final) ✅ Best yield: CPT-HLA (+51.0% YoY, LF 75%) 🚀 Fastest growing: HRE-JNB (rev +118.8% YoY, 20,559 pax) ⚠️ LF dropping on CPT-DUR: -13.1pp YoY (now 81%, cap -2.6% YoY) ⚠️ Jet fuel up 3.3% WoW ($146/mt) ⛽ Jet fuel: $146/mt | Crack: $47 💱 ZAR stronger (-1.0% in 30d) — R16.29/$ ✅ Brent down 6.3% WoW ($89/bbl) ✅ ACSA market share (2026-05): 65.1% (+1.4pp MoM) 📈 YTD (5m): Pax 4,308,739 (+1.2% vs PY) | Rev R5.89B (+8.5% vs PY) _Dashboard: http://100.118.207.3:3001/apps/ceo-dashboard_ Telegram sent: True === CEO Dashboard Build — 2026-06-12 05:00 === Downloading data files... SummaryRoute.xlsx (7,227,751 bytes) SummaryExcel.xlsx (6,016,226 bytes) Data Fuel.xlsx (17,437 bytes) ACSA Monthly Data.xlsx (76,083 bytes) ACSA Website Data.xlsx (27,750 bytes) fleet_asana.json (49,744 bytes) 202606 Booking Curve.csv (booking curve) Downloading FlightAware capacity reports... Capacity_Scheduled_2026-06-01_to_2026-12-31.xlsx (138,845 bytes) Capacity_Actuals_2024-01-01_to_2026-06-08.xlsx (603,061 bytes) FA data ends 2026-06-08 (4 days old) Downloading Capacity schedule snapshots... Capacity_Scheduled_snapshot_2026-06-09.xlsx (138,843 bytes) Capacity_Scheduled_snapshot_2026-06-01.xlsx (155,743 bytes) Capacity_Scheduled_snapshot_2026-05-29.xlsx (155,797 bytes) Capacity_Scheduled_snapshot_2026-05-21.xlsx (156,384 bytes) Capacity_Scheduled_snapshot_2026-05-13.xlsx (156,384 bytes) Capacity_Scheduled_snapshot_2026-05-05.xlsx (156,128 bytes) Staging build script from PKA repo: /home/lucienne/workspace/PKA/Projects/ceo-dashboard/scripts/build_html_dashboard.py build_html_dashboard.py (326,289 bytes) Running build script (Linux branch, BASE auto-detected)... Loading SummaryRoute.xlsx... Loading SummaryExcel.xlsx... Data loaded. Processing... Loading forward bookings from Neon DB... Neon: 640,301 booking snapshot rows loaded (departures 2026-04-01 to 2026-07-31) Curve: 73 departure dates with real curves (flat-state filtered) Curve shape: 65 DBA points from 72 completed departures 2026-04: 126 points, latest gap=-4.4pp, 19/26 routes behind curve, PY final LF=90.9% 2026-05: 126 points, latest gap=-9.7pp, 23/25 routes behind curve, PY final LF=91.8% 2026-06: 126 points, latest gap=-7.2pp, 20/25 routes behind curve, PY final LF=86.3% 2026-07: 126 points, latest gap=-2.7pp, 16/25 routes behind curve, PY final LF=91.8% Loading economic indicators... EIA jet fuel: 649 weeks (2014-01-03 to 2026-06-05) FX data: 1394 days loaded (Frankfurter) FX gap-fill: +1 days from yfinance (through 2026-06-12) Fetching Brent crude oil prices... Oil data: 3128 days loaded Fuel trend: 649 weeks total (591 EIA [71 gap-fill] + 58 IATA from 2023-12-22) Loading ACSA data... Loading FlightAware capacity data... Actuals cutoff: 2026-06-08 (scheduled MTD cap for 2026-06) Schedule reliability: DB unavailable, prorating current month from xlsx Schedule reliability: prorated 2026-06 scheduled by 12/30 days Trimming 2 sparse months: ['2026-11', '2026-12'] Pre-computed route tables for 8 months, 4268 changes FlightAware: 34 months, 315 routes in latest month Loading fleet data from Asana... Fleet: 56 aircraft loaded from Asana Processing complete. Building HTML... WARNING: cash_data.json unavailable (no candidate found); Cash tab will show a placeholder. Dashboard written to: /home/lucienne/workspace/dashboard-build/dashboard/Dashboard.html File size: 3380 KB Data JSON written to: /home/lucienne/workspace/dashboard-build/dashboard/dashboard_data.json (4816 KB) Summary MD written to: /home/lucienne/workspace/dashboard-build/dashboard/dashboard_summary.md Dashboard.html generated (3,461,018 bytes) Updated Dashboard.html on Drive (ID: 15EeKvzeI2ZErZ6IFV2jHH7wBvA7cSf29) Copied to /home/lucienne/workspace/PKA/dashboards/ceo-dashboard.html Published to cloud: /home/lucienne/gdrive/PKA-Outputs/dashboards Success: CEO Dashboard built and uploaded