NextGen Voting logo

NextGen Voting

A Django-based voting platform that encrypts ballots client-side and records verifiable proofs on-chain. Built to explore practical, auditable online elections.

System diagrams

System architecture diagram
System architecture
Database schema diagram
Database schema

Demo walkthrough

Admin: create and publish an election

  1. Homepage
    Home
  2. Sign in
    Sign in
  3. Dashboard
    Dashboard
  4. Create election
    Set up election
    Add candidates
    Add candidates
    Create ballot
    Define ballot
    Upload voters
    Upload voters CSV
    Review election
    Review & publish
  5. Election page
    Election page (published)

Voters perspective

  1. Election email
    Email invite
    Voter welcome
    Welcome
    Voter ballot
    Ballot (rank choices)
    Vote confirmation
    Encrypted + submitted

Simulate large election with command

  1. Generate election command
    Management command for seeding votes (50,000 votes, 5 candidates, 1 winner)
  2. Generated election
    Election with generated ballots

Results (ranked choice rounds)

Round 1
Round 1
Round 2
Round 2
Round 3
Round 3
Round 5
Final round

NextGenVoting 2.0

After building this project, I realised there are a few things I’d do differently if I were starting again. The first version was very focused on functionality, with less attention to design and user experience. For the next version, I plan to build a dedicated React frontend to give it a more modern, responsive interface, and rework the Django backend into a clean REST API that powers it.

  • React UI with live result streams
  • Django REST API endpoints for admin and voters