Real-Time Cooperative Election Platform
Hundreds of members vote at once from their own phones, and the results tally live on the projector.
The full election lifecycle on members' own phones: registration, admin-approved QR ballot access, live tallies, and exportable reports.

Team of one· Solo full-stack engineer
No team, no agency, no hand-offs. I owned this project end to end:
- Requirements
- Architecture
- UI & UX
- Backend & APIs
- Database
- Stack
- React 19Express 5Socket.IOMS SQL ServerReal-time
What was broken, and what fixed it
Problem: Paper elections are slow to count and hard to audit.
Fix: Votes tally live on a presentation dashboard, each election moves through draft, open, and close with an audit trail, and results export as PDF, CSV, DOCX, or JSON.
Problem: Hundreds of members need to vote at the same time.
Fix: Members scan a projected QR code and vote from their own phones once an admin approves them. All selections save in one transaction, and database constraints allow one vote per voter per position.
Problem: Election day runs on a local network, so setup has to be simple.
Fix: One Express server serves the app, the API, and WebSockets on a single port, and one script installs, builds, sets up the database, and starts it.
Approach
- A single-port monolith: Express serves the app, the API, and WebSockets together, so LAN deployment is trivial.
- An admin approves each voter's access before the ballot unlocks.
- Votes are saved in one transaction, and database constraints allow one vote per voter per position.
What it does
Voter experience
- Scan a projected QR code to open the ballot
- Admin-gated access, approved in real time
- Position-by-position voting with configurable multi-select
- All selections committed in one transaction
Admin
- Election lifecycle: draft, open, close, with an audit trail
- Voter approval queue and live turnout counters
- Full-screen presentation mode for results
- Employee roster bulk import from CSV
- Exports in PDF, CSV, DOCX, or JSON
Realtime
- Socket.IO rooms for admins, each election, and each voter
- Tallies, approvals, and attendance pushed, with no polling
- Runs on the LAN, with an optional secure tunnel for voters on other subnets
Architecture
Interface
- React 19
Logic & APIs
- Express 5
- Socket.IO
- Real-time
Data
- MS SQL Server
Infrastructure & delivery
- Identity
- 1React
React 19 SPA for voters and admins.
- 2ExpressRealtime
Express 5 and Socket.IO on one port serve the app, REST API, and realtime gateway.
- 3SQL ServerIdentity
Microsoft SQL Server through a pooled connection; JWT auth with bcrypt.
Engineering
- Database unique constraints guarantee one vote per voter per position.
- The real employee roster is git-ignored and never leaves the host machine.
- One script installs, builds, sets up the database, and starts the server.
Outcome
- Hundreds of members can vote simultaneously from their own phones.