Skip to content
All work
SaaS · ElectionsLiveGhana

E-Voting Platform

Institutions running elections by hand face slow counts and disputed results. This white-label SaaS automates the full election lifecycle with cryptographic vote receipts and real-time dashboards.

Role
Solo Developer
Timeframe
2024

Stack

React 18TypeScriptViteNode.jsExpressMongoDBJWTChart.jsjsPDF

Architecture

RBAC + isolationper-election data
Concurrent votinglive ballot intake
Cryptographic receiptsjsPDF proof
Chart.js resultsreal-time dashboard
RBAC + multi-election data isolation → concurrent voting → cryptographic PDF receipts → real-time Chart.js results.

Key decisions

Chose

A TypeScript-first architecture across the whole voting flow, with roughly 73% of the codebase typed.

Rejected

A faster-to-write JavaScript-only approach, and separately, extra tooling and framework layers.

Why

Vote integrity depends on validation, role checks, and result tallying being correct. Static types catch whole classes of silent runtime bug in exactly those paths before they ship. JS-only would have been quicker at first but raised long-term risk where correctness matters most. Extra framework layers were also rejected to keep the stack lean enough for school-level operations to maintain.

Chose

Per-election data isolation: each election owns its own separate set of voters, candidates, positions, and votes.

Rejected

One shared pool of records filtered by an election id at query time.

Why

Isolation means a change or bug in one election cannot bleed into another, and a mis-scoped query cannot silently count the wrong election's ballots. It also lets past elections be preserved intact for audit. The cost is more moving parts and deliberate migration when data must move between elections, which is the safer default for anything holding vote results.

Try it

Screens

E-Voting Platform screenshot 1
E-Voting Platform screenshot 2
E-Voting Platform screenshot 3