🌍 Inspiration

During the last Presidential Election in 2023, I asked my dad why he wasn’t voting. His response shocked me: “Why should I waste my time standing in long queues when they’ve already chosen the winner?” And that’s not just my dad’s story—it’s the story of millions of Nigerians. People don’t trust the system anymore. They’ve lost hope.

VoteLink was inspired by the recurring electoral challenges across Africa—including voter intimidation, ballot manipulation, vote buying, and poor infrastructure. In Nigeria, where connectivity is often limited and trust in election outcomes is low, we envisioned a secure, offline-first voting system that would empower citizens to cast verifiable votes using simple technology—even without internet access. Our goal was to build a resilient, privacy-preserving solution that bridges the gap between grassroots voters and the power of blockchain transparency. For decades, we’ve relied on ballot papers—paper that can be burnt, torn, or stolen. But for our generation—Gen Z and Gen X—we live in a world of AI, self-driving cars, and 6G. And yet, when it comes to something as important as voting, we’re still stuck in the past.

✅ What it does

VoteLink turns voting into something as easy as unlocking your phone.

Here’s how it works:

  • A voter chooses their preferred language—Yoruba, Igbo, Hausa, or even Pidgin—so everyone can vote in the language they understand best.
  • They verify themselves using Voter ID plus biometrics. For biometrics, the voter can choose:

    • Fingerprint recognition, or
    • Facial recognition with anti-spoofing—so fake photos, AI deepfakes, or masks won’t work.
  • Once verified, the voter casts their ballot.

Instantly:

  • A secure cryptographic hash is created and stored on IPFS (decentralized).
  • A QR code receipt is printed, letting the voter confirm their vote is counted—without revealing who they voted for.
  • After the election, results sync to the blockchain, ensuring they can’t be tampered with.

And the whole process? Under 3 minutes.


Why Hardware, Not an Online Voting System

Our first approach was to build an online voting platform, like a web app or mobile app. We actually tested it with a department election at Lautech:
Demo link: https://www.youtube.com/watch?v=MyyE2inHMmA

We also had a version where we integrated Zero-Knowledge Proofs using MACI and USSD functionalities for easier voter access. The goal was to let voters vote from the comfort of their homes:
Demo link: https://youtu.be/Qb3FmS5ryt8

But the shift came when we saw a post by Vitalik Buterin, where he said:


But voting also requires some crucial properties that blockchains do not provide:
\--- Privacy: you should not be able to tell which candidate someone specific voted for, or even if they voted at all.
\--- Coercion resistance: you should not be able to prove to someone else how you voted, even if you want to.

With this in mind, we knew we couldn’t make voting a mobile or web application because privacy and coercion resistance aren’t guaranteed in Nigeria or Africa. That’s why we started the hardware project.


🛠️ How we built it

  • Hardware: Raspberry Pi 4, Adafruit fingerprint module, 58mm thermal printer, touchscreen.
  • Software: Python (Kivy GUI), IPFS daemon via HTTP API, OpenCV for biometric capture.
  • Backend: Solidity smart contract for commit-reveal voting, deployed on a testnet.
  • Vote Explorer: Built with HTML/JS, it shows vote inclusion and election results.
  • Printing: Each vote prints a QR code linking to https://votelinkexplorer.com/{voteHash}.

🧱 Challenges we ran into

  • Getting IPFS running on ARM architecture (Raspberry Pi).
  • Handling offline-first vote collection and syncing reliably.
  • Ensuring that vote receipts don’t compromise privacy.
  • Simplifying biometric capture for usability.
  • Designing anti-spoofing facial recognition without slowing down voting.
  • Keeping the process under 3 minutes while supporting multiple languages.
  • Limited time to integrate MACI or ZKPs fully due to final exams and hardware limitations.

🏆 Accomplishments that we're proud of

  • Tested the web application for a department election with over 100 voters.
  • Built a fully working offline-to-onchain voting system in under 10 days.
  • Voter privacy is protected using commit-reveal and printed receipts.
  • Developed our own Vote Explorer web dashboard.
  • Managed hardware-software integration smoothly.
  • Solved real-world constraints (connectivity, low compute) using clever engineering.

🏆 Semi-final Accomplishments (10-days gap)

  • Integrated multi-language support, so anyone can vote without barriers.
  • Added anti-spoofing checks to protect against deepfakes and fake IDs.
  • Made the whole voting process under 3 minutes.

📚 What we learned

  • How to use IPFS, HTTP APIs, and local storage for decentralized offline systems.
  • Working with biometric hardware and thermal printing in Python.
  • Implementing cryptographic commit-reveal schemes on-chain.
  • Designing voter-friendly UX while maintaining strict privacy guarantees.
  • Importance of verifiability without traceability in anti-collusion design.

What we learned from our mentors

  • Why simplicity is the ultimate sophistication—voters need speed, trust, and clarity.

🔮 What's next for VoteLink

  1. Conduct department elections with the machine to build traction.
  2. Conduct local elections with NGOs.
  3. Conduct local elections for groups, organizations, and institutions.

We plan to integrate Zero-Knowledge Proofs to allow voters to confirm inclusion without revealing who they voted for. Although we didn’t integrate MACI (Minimum Anti-Collusion Infrastructure) in this offline prototype, we’ve used it before in the online version of VoteLink. Future versions will feature:

  • ZK-SNARKs for private tallying.
  • Encrypted vote syncing between polling units and blockchain.
  • Cross-platform Vote Explorer with geographic breakdown.
  • Integration with USSD or mobile agents to reach even more remote voters.

Built With

Share this project:

Updates