Self-hosted analytics dashboard for UPPCL SMART prepaid electricity meters. Reverse-engineered FastAPI proxy + Next.js 16 dashboard. Laptop or Raspberry Pi.
The official UPPCL SMART portal stops at "today's balance." This goes further.
Auto-fallback chain ensures a trustworthy number. Fitness-ring gauge shows days remaining at current burn, with ETA date.
Flags days where consumption is >1.5σ above the 30-day average, with a side panel explaining the math.
Effective ₹/unit trend, stacked charge composition (energy / fixed / duty / FPPA / subsidy), tariff slab usage, subsidy YTD.
Sliders recommend amount × frequency for a target runway, based on your actual historical burn rate and lifespan analytics.
Reading reliability donut, 365-day data-gap calendar, peak-vs-sanctioned load gauge, power-factor trend over 12 months.
Live status of every complaint from your phone, full JE/AE/XEN officer chain, one-tap call, and a "Report outage" panel.
Dark and light themes — follows your OS preference. All data is real; values are redacted.
Python 3.10+ and Node 20+ (or Bun 1.1+) required.
# clone and set up git clone https://github.com/Harry-kp/uppcl-pro.git cd uppcl-pro make setup # Python + Node deps make dev # proxy :8000 + dashboard :3000
# first-time login curl -X POST localhost:8000/auth/login \ -H 'content-type: application/json' \ -d '{"username":"<phone>","password":"<pw>"}' # then open open http://localhost:3000
Using Claude Code? Type
/setup
— skills are bundled in .claude/skills/.
Every user-specific identifier is discovered at runtime — nothing is hardcoded per DISCOM.
| DISCOM | Region | Status |
|---|---|---|
| PVVNL | West UP (Noida, Agra, Ghaziabad…) | ✅ tested end-to-end |
| MVVNL | Central UP | 🟡 same API, unverified |
| PuVVNL | East UP | 🟡 same API, unverified |
| DVVNL | South UP | 🟡 same API, unverified |
| KESCo | Kanpur | 🟡 same API, unverified |
On a non-PVVNL DISCOM? File a verification issue if it works — I'll flip the table to ✅.
23 reverse-engineered endpoints, OpenAPI 3.1. Browse without cloning. "Try it out" requires the proxy running locally.
Interactive explorer — expand endpoints, inspect schemas, try calls against a local proxy. Identical to /docs on a running proxy.
Clean three-panel reference — all routes, field descriptions, and example payloads. Identical to /redoc on a running proxy.