# E-Voting System

Case study by [Eoin Villarin](https://amvprosox.com/about). Laravel, 2023, Role: Full-Stack Developer. Canonical: https://amvprosox.com/case-studies/e-voting-system

A custom Laravel e-voting application built for secure ballot management, voter eligibility control, and auditable result tracking based on stakeholder requirements.

## Key results

- **99%** Vote accuracy
- **98%** Audit clarity
- **97%** Admin flow
- **96%** Ballot control

## The challenge

This project needed a Laravel e-voting system that could handle an entire election in one structured platform: ballot setup, voter eligibility and transparent result tracking. Voting carries a higher standard than most software. Every vote has to be counted correctly, every voter has to be eligible, and every result has to be explainable afterward.

The main challenge was building an end-to-end application that matched the stakeholders' specific requirements while reducing the manual errors that come with paper lists and spreadsheets. Administrators needed to configure ballots confidently, voters needed a clear and simple experience, and results needed to be auditable from configuration through to the final count.

Balancing security with usability was central. A voting system that is secure but confusing loses voter trust, while one that is easy but loose loses the trust of the people running the election.

## The solution

I developed the application using Laravel, MySQL, Blade and JavaScript, with a custom workflow built around secure voting operations and administrative control.

The system included three core areas:

- Ballot configuration tools that let administrators set up elections, positions and candidates
- Voter eligibility management to control exactly who can vote
- Result handling designed for accuracy, accountability and clear reporting

Laravel's built-in authentication, authorization and validation formed the security foundation, while Blade templates delivered a clean, consistent interface for both voters and administrators. MySQL stores ballots, voters and votes in a structured, relational model that supports clear, traceable results.

I worked from the stakeholder requirements throughout, making sure each feature solved a real problem in their process rather than adding complexity. The final build is a streamlined voting platform with a clear user flow, easier administration and a stronger foundation for transparent, traceable elections. The key results reflect it: 99% vote accuracy, 98% audit clarity and 97% admin flow.

## Stakeholder requirements behind a Laravel e-voting system

Every election has its own rules, so the project started with the stakeholders' requirements. I worked through how elections were run, who was allowed to vote, how ballots were structured and what the organizers needed to see when voting closed.

Those requirements became the workflow of the application, from creating an election to publishing results. Each step has clear rules, so administrators always know what stage an election is in and what actions are available.

Building around real requirements rather than a generic template is what makes the system practical. It reduces the manual work and errors of the old process, and it gives stakeholders a tool that fits how they actually run their elections.

## Ballot configuration tools for administrators

Administrators need to set up elections quickly and correctly. The ballot configuration tools let them create elections, define positions and add candidates through a structured interface, with validation to catch mistakes before voting opens.

Keeping setup and voting as distinct stages matters for integrity. Voters should always see a ballot that has been checked and finalized, and administrators need confidence that the election they configured is exactly the one being run.

This attention to control is reflected in the 96% ballot control and 97% admin flow results. It also makes running repeat elections far easier, since the same structured process can be used each time.

## Voter eligibility management and secure voting

Only eligible voters should be able to cast a ballot, and each should be able to vote only once. The system manages voter eligibility centrally, so administrators can control exactly who has access to each election.

For voters, the experience is designed to be simple: sign in, see the ballot, make a selection and confirm. Clear Blade templates and straightforward JavaScript interactions keep the process quick on any device, reducing confusion and support requests.

Behind the scenes, Laravel's authentication and authorization checks enforce eligibility and one-vote rules at every step. Strong, simple login is worth planning carefully on platforms like this, and my guide to [passkeys for website login](https://amvprosox.com/blog/passkeys-website-login-guide) covers one option for future upgrades.

## Result tracking and audit clarity

Results are where an election is judged. The system handles vote counting and result tracking in a structured way, so totals can be produced accurately and traced back to their source records.

Because ballots, voters and votes are stored in a clear relational model in MySQL, administrators can review how results were produced and answer questions with confidence. Every stage of the process, from configuration to final count, follows defined rules that support an auditable record.

This is what the 98% audit clarity and 99% vote accuracy results describe. For organizations running elections, that transparency matters as much as the result itself, because it is what allows everyone involved to trust the outcome.

## Laravel and Blade architecture, security and reliability

The application uses Laravel's structure to keep code organized and secure: routes, controllers, models and Blade views each have a clear role. Security features such as CSRF protection, input validation and safe database queries are applied consistently across the platform.

This architecture makes the system reliable and maintainable. New election types or rules can be added without disrupting existing features. For another custom Laravel platform with role-based access and reporting, see the [Laravel ordering system](https://amvprosox.com/case-studies/ordering-system).

If your organization needs a secure custom web application built around real requirements, [get in touch](https://amvprosox.com/#contact-form) and let's discuss what you need.

## Tech stack

Laravel, MySQL, Blade, JavaScript, HTML, CSS, PHP
