Energy Dashboard Roadmap
Roadmap
Stage 1: Comparisons
Goal: Temporal pattern recognition — how does this week/month/season compare to previous periods?
Done
Stage 2: Tariff Optimisation
Done
Goal: Answer “Am I on the best tariff?” using actual consumption data.
Done
Stage 3: Forecasting
Goal: Forward-looking cost and generation projections.
Cost forecasting:
- Monthly cost forecast based on current trajectory (use rolling averages from
energy_daily_summary)
- “At this rate” projections for month/quarter/year
- Projection cards: “February forecast: £X (±£Y)”
- Trend arrows indicating improving/worsening
Solar forecasting:
- Weather-adjusted solar forecast for next 7 days
- Uses Open-Meteo forecast API (already have client for historical data)
- Forecast line charts with confidence bands
Dependencies:
- Open-Meteo forecast endpoint (free, no API key needed — same as historical)
- Enough historical data for meaningful baselines (already have 12+ months)
Stage 4: Recommendations Engine
Goal: Context-aware suggestions for cost savings. Depends on Stage 2 (tariff data).
Components:
- Load-shifting recommendations: “Run dishwasher at 2am to save £X/month”
- Baseload optimisation suggestions (already have baseload analysis)
- Solar self-consumption improvement tips
- Battery charge/discharge timing optimisation
- Seasonal adjustment recommendations
UI:
- Recommendations panel on overview page
- Priority-ranked: Quick Wins | Behavioural Changes | Equipment Upgrades
- Savings calculator for each recommendation
Known Issues / Tech Debt
- CSS layout: Rolling averages section on insights page is too narrow horizontally
- Anomaly detection: Working but needs refinement — z-score thresholds may need tuning
- Type safety: Multiple
as any[] casts in index.astro and insights.astro — should use typed interfaces
- Duplicate logic:
calcRollingAvg defined in both frontmatter (TypeScript) and client script (JavaScript) in insights.astro
- Inconsistent peak hours: index.astro uses 16-19 (4pm-8pm), insights.astro uses 16-18 (4pm-6pm) — should standardise
- No error handling: Failed Supabase queries silently default to empty arrays