A web-based voting system built with Laravel for organizational elections and decision-making processes.
Laravote was developed to support voting activities in local community organizations, replacing manual vote counting and simplifying election administration.
- Secure voter authentication
- Voting session management
- Real-time vote counting
Laravote uses one screening machine (with barcode scanner) and multiple voting booths (clients). All machines access the same Laravel app.
- Voters — people who cast votes, identified by a unique barcode/ref code
- Candidates — users marked as
candidate = true, voters pick from these - Clients — voting booth machines, each with a name and password
┌──────────────────────────────────────────────────────────────┐
│ SCREENING MACHINE │
│ (barcode scanner) │
│ │
│ 1. Open /voter — shows barcode input form │
│ 2. Voter scans their barcode → ref entered automatically │
│ 3. System finds an empty booth, shows: │
│ "Silakan menuju ke [booth name]" │
│ 4. Voter walks to their assigned booth │
└──────────────────────────────────────────────────────────────┘
│
│ Queue entry created (voter → booth)
▼
┌──────────────────────────────────────────────────────────────┐
│ VOTING BOOTH (client) │
│ │
│ 1. Booth operator logs in at /client → password │
│ 2. Redirected to /check — polls every 3s: │
│ "Harap tunggu sebentar..." │
│ 3. When voter is assigned → auto-redirects to voting page │
│ 4. Voter selects candidates, submits → votes recorded │
│ 5. Booth goes back to /check, ready for next voter │
└──────────────────────────────────────────────────────────────┘
- Voter scanned →
POST /logindispatchesVoterValidated, which creates aQueueentry linking voter to an empty booth - Booth polls →
GET /check(every 3s via HTMX) picks up the Queue entry, marks booth as occupied (is_empty = false) - Vote cast →
POST /votesinserts intovotestable, marks queue asis_done = true, booth becomes empty again - Events:
SlotOccupied/SlotAvailabletoggle theclients.is_emptyflag on each booth
- Candidate management
- Enhanced reporting with analytics
- Dashboard
This system has been used for organizational voting activities, including youth and community organizations.
- Laravel
- PHP
- sqlite
- Bootstrap
- HTMX
git clone https://github.com/atmorojo/Laravote.git
cd Laravote
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
php artisan serveUsed in real organizational voting workflows. Future improvements include reporting, administration, and test coverage.



