There is no framework. The frontend is 100% vanilla.
This demonstrates that modern, polished UIs don't require heavy frameworks. The animated gradient background, floating particles, glassmorphism cards, and real-time gauge are all pure CSS/JS. Most "AI built this" demos ship a React app with numerous npm packages because that's what their training data looks like. This argues the opposite: AI can help you build less, not more, finding the minimal solution rather than the conventional one.
Comprehensive Technology Stack
Python 3.11 - Backend services and data processing
JavaScript (ES6+) - Vanilla JS, no frameworks - lightweight and fast
HTML5 - Semantic markup with Schema.org structured data
CSS3 - Modern styling with Grid, Flexbox, animations
SQL - SQLite queries, including a window-function energy integral
XML - Eagle-200 smart meter data format
Custom SVG Gauge - Hand-coded with trigonometric arc path calculations
CSS3 Animations - Keyframe animations (gradient, float, pulse, fadeIn)
CSS3 Transforms - translateY, scale, rotate with GPU acceleration
CSS3 Filters - drop-shadow, blur, backdrop-filter for glass effects
Linear Gradients - Background animations and text gradients
uPlot 1.6 - Fast canvas time-series chart (the engine behind Grafana's time series panel)
Range Picker - 1h to 30d, averaged server-side into buckets sized to the range
Flask 3.0.0 - Lightweight Python web framework
Flask-CORS - Cross-origin resource sharing
Werkzeug 3.0.1 - WSGI toolkit
sqlite3 (standard library) - Embedded time-series storage in WAL mode
Cloudflare Workers Static Assets - The site is served from the edge, no origin server
Data Staleness Monitor - Detects when the power meter stops reporting
APScheduler - Background interval health checks
Slack Alerts - Outage and recovery notifications on state change
Pushover - Emergency-priority siren push that repeats until acknowledged, for up to about 50 minutes
SQLite - Embedded in the ingest service, one row per meter reading
SQL Window Functions - Trapezoid energy integral and bucketed averages
5-Year Retention - 43,800 hours of historical data
Fly Volume - Encrypted, with daily snapshots kept 14 days
Fly.io - One machine running the ingest API and its database
Cloudflare Workers - Static site at the edge on the free tier
Docker - Containerized Python service (python:3.11-slim)
Health Checks - Fly stops routing to the service while /health fails
Cloudflare - Global anycast network with 300+ PoPs
DDoS Protection - Layer 3/4/7 attack mitigation
Brotli Compression - Modern compression at the edge
HTTP/2 + HTTP/3 (QUIC) - Multiplexed, UDP-based transport
TLS 1.3 with 0-RTT - Fast, secure connections
Early Hints (103) - Preload resources before HTML arrives
Universal SSL - Wildcard certificate for all subdomains
GitHub Actions - Automated workflows
Change Detection - Smart deployments via dorny/paths-filter
Post-Deploy Checks - /health for the API, build-info.json for the site
Wrangler - Site deploys to Cloudflare from GitHub Actions
Slack Integration - Native GitHub notifications
unittest - Storage, panel math and API route tests gate every backend deploy
Migration Verification - InfluxDB vs SQLite parity checked for every week of history
Semgrep - OWASP Top 10 + Flask/Python/JS scanning
Trivy - Docker image vulnerability scanning
Gitleaks - Secrets detection in code
Rate Limiting - Per-client limit on the meter ingest endpoint
CSP Headers - Content Security Policy with specific directives
HSTS - HTTP Strict Transport Security
CORS Whitelist - Origin-specific cross-origin policies
Eagle-200 - Rainforest smart meter bridge
Zigbee SEP - Smart Energy Profile protocol
BC Hydro Rates - Tiered pricing calculations
~9 Second Updates - Near real-time power monitoring
Web App Manifest - Installable on mobile/desktop
Responsive Icons - 192px, 512px, maskable variants
Theme Color - Native app feel
Project Economics
Fly.io Hosting - 1 VM (shared CPU, 256MB RAM)
Persistent Storage - 1GB volume for the SQLite database
Cloudflare Workers - $0 (static requests are free)
Domain - ~$1/month (amortized annual cost)
No React, Vue, Angular - Avoided complexity debt and bundle bloat
No CSS frameworks - No Tailwind/Bootstrap overhead
No build tooling - Zero Webpack/Vite configuration
One vendored library - uPlot pinned at 1.6.32, no CDN at runtime
SQLite - Embedded, no database server to run
Native charts - Replaced a self-hosted Grafana + InfluxDB pair and their two VMs
GitHub Actions - Free tier for public repositories
Docker - Open source containerization
Automated deployments - No CircleCI/GitLab fees ($15-50/mo saved)
Semgrep - Open source SAST (vs $30-100/mo for Snyk)
Trivy - Open source container scanning
Gitleaks - Open source secrets detection
Cloudflare Free Tier - CDN, DDoS protection, HTTP/3, compression
SSL/TLS Certificates - Cloudflare Universal SSL (site) + Fly.io (API)
Rate Limiting - Built into the ingest API
Health Monitoring - Fly.io built-in checks
Typical SaaS stack for equivalent functionality - $300-1,000/month
This project - ~$3/month
Monthly savings - 95-98% cost reduction