Requirements
The dashboard needed to make dense election data scannable for campaign teams: national view, state drill-down, constituency detail, turnout, vote share, alliance splits, and trend context across election years. The key requirement was speed of interpretation, not just chart coverage.
Stack choices
Vite and React kept the dashboard fast and client-focused, TypeScript protected the regional data model, Zustand handled navigation and selection state, TanStack Query was available for data workflows, and D3 powered the custom map and charting needs that generic dashboard components would not cover well.
Design system
The interface moved toward an atomic structure with atoms such as StatNumber, ProgressBar, Sparkline, Badge, and ChartTooltip; molecules such as MetricCard and PartyBreakdown; and organisms such as StateMap and historical charts. Design tokens such as bg-base, bg-header, bg-surface, border, text-primary, text-muted, nda, india, others, and info kept the analytics UI consistent.
MVP definition
The MVP was an India-to-state drill-down with year switching for 2014, 2019, and 2024, KPI cards, alliance comparison, map interaction, and constituency-level panels. Authentication, advanced filtering, and broader campaign tooling were secondary to proving the core exploration flow.
Progression
The project progressed from normalized election data and hash-based navigation into bento-style dashboard composition. Once the state selection model worked, maps, trend sparklines, vote-share donuts, and constituency panels were layered in to support progressively deeper analysis without forcing full page transitions.