While the source code isn't public for now, you'll find a detailed breakdown of the architecture, decisions, and implementation approach below.
What
An anonymous online voting system designed around strict domain separation: the identity zone never sees vote content, and the vote zone never sees voter identity. Phase 1 uses ECDSA-signed one-time tokens. Later phases add mixnet routing and threshold homomorphic encryption for full receipt-freeness.
Why
...
Architecture
Three phases of increasing privacy guarantees:
| Phase | Name | Mechanism | |---|---|---| | 1 | MVP | Domain separation + ECDSA signed nonce + SHA-256 spent-check | | 2 | Mixnet | Traffic unlinkability via blind signatures + mixnet routing | | 3 | Threshold Tally | Receipt-freeness via threshold homomorphic encryption + DLT |
The monorepo separates services by network zone:
auth-service(.NET 8) — identity zone, issues credentials, never stores vote contentvote-service(.NET 8) — vote zone, verifies credential hash, never stores voter identityfrontend(Next.js) — voter UI and admin panelinfra/— PostgreSQL, Nginx, Docker Compose
Stack
| Layer | Choice | |---|---| | Auth service | .NET 8 + EF Core + PostgreSQL | | Vote service | .NET 8 + PostgreSQL | | Frontend | Next.js + TypeScript + Tailwind | | Crypto | ECDSA P-256, SHA-256 | | Infra | Docker Compose + Nginx | | Tests | xUnit |
What I learned
...