Interactive election results dashboard with map visualization, live vote analysis, and constituency-level data fetched directly from the Election Commission of India.
Live site: https://www.debjyotipaul.in/ElectionWB2026/
- 🗺️ Interactive map — All 294 constituencies colored by winning/leading party, with tooltips and click-to-inspect
- 📊 Overview — Seat tally cards, alliance battle bar, notable candidates tracker, biggest leads and closest contests
- 🗳️ Vote analysis — FPTP distortion chart (vote share vs seat share), full party-wise vote breakdown table
- 🔬 Analytics — Margin distribution histogram, closest races, wafer-thin seat highlights
- 🏙️ Districts — Interactive district selector with constituency-by-constituency breakdown for all 23 WB districts
- 📋 All Seats — Sortable, filterable table with search across constituency, candidate, party, and district
- ⚡ Auto-refreshes every 3 minutes from ECI; live badge shows data freshness
The fetcher scrapes results.eci.gov.in and pushes updated results to GitHub every 3 minutes. It must run on your local machine — the ECI's Akamai CDN blocks cloud/datacenter IPs.
# Start the fetcher (runs continuously, auto-pushes to GitHub)
bash run.shThe fetcher writes data/live_data.json on each successful fetch, commits it, and pushes to the repo. The live site picks up the new file automatically on the next page refresh.
python3 -m http.server 8000
# Open http://localhost:8000├── index.html — Main dashboard (6 tabs)
├── fetcher.py — ECI scraper (Python stdlib only, no pip needed)
├── run.sh — One-liner: fetch continuously + auto-push
├── .nojekyll — Disables Jekyll on GitHub Pages
├── css/
│ └── style.css — Dual light/dark theme, all component styles
├── js/
│ ├── app.js — Main controller, all render functions
│ ├── charts.js — Chart.js renderers (donut, bar, histogram)
│ ├── map.js — Leaflet map (full + overview mini-map)
│ ├── table.js — All Seats results table with filtering
│ ├── ac_district_map.js — Authoritative AC→district mapping (294 constituencies)
│ └── seed_data.js — Seed data shown before live JSON loads
└── data/
├── live_data.json — Written by fetcher.py every 3 min
└── wb_map.json — GeoJSON boundaries for all 294 constituencies
All results are fetched from the Election Commission of India official portal. No third-party APIs or paid services are used. This is an unofficial visualization — always refer to the ECI portal for authoritative results.