Tested end-to-end on PVVNL

Your prepaid meter,
finally making sense.

Self-hosted analytics dashboard for UPPCL SMART prepaid electricity meters. Reverse-engineered FastAPI proxy + Next.js 16 dashboard. Laptop or Raspberry Pi.

UPPCL Pro — home dashboard

What it does

The official UPPCL SMART portal stops at "today's balance." This goes further.

Live balance + runway

Auto-fallback chain ensures a trustworthy number. Fitness-ring gauge shows days remaining at current burn, with ETA date.

📊

Anomaly detection

Flags days where consumption is >1.5σ above the 30-day average, with a side panel explaining the math.

💰

Cost breakdown

Effective ₹/unit trend, stacked charge composition (energy / fixed / duty / FPPA / subsidy), tariff slab usage, subsidy YTD.

🔋

Recharge sweet-spot

Sliders recommend amount × frequency for a target runway, based on your actual historical burn rate and lifespan analytics.

🛡️

Meter health

Reading reliability donut, 365-day data-gap calendar, peak-vs-sanctioned load gauge, power-factor trend over 12 months.

📞

1912 complaints

Live status of every complaint from your phone, full JE/AE/XEN officer chain, one-tap call, and a "Report outage" panel.

Screenshots

Dark and light themes — follows your OS preference. All data is real; values are redacted.

Quickstart

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/.

DISCOM compatibility

Every user-specific identifier is discovered at runtime — nothing is hardcoded per DISCOM.

DISCOMRegionStatus
PVVNLWest UP (Noida, Agra, Ghaziabad…)✅ tested end-to-end
MVVNLCentral UP🟡 same API, unverified
PuVVNLEast UP🟡 same API, unverified
DVVNLSouth UP🟡 same API, unverified
KESCoKanpur🟡 same API, unverified

On a non-PVVNL DISCOM? File a verification issue if it works — I'll flip the table to ✅.

API Reference

23 reverse-engineered endpoints, OpenAPI 3.1. Browse without cloning. "Try it out" requires the proxy running locally.

Swagger UI

Interactive explorer — expand endpoints, inspect schemas, try calls against a local proxy. Identical to /docs on a running proxy.

Open Swagger UI →

ReDoc

Clean three-panel reference — all routes, field descriptions, and example payloads. Identical to /redoc on a running proxy.

Open ReDoc →