Modern business application intake and admin review platform built with Laravel 12 + Livewire.
VotAfrica delivers:
- Public-facing, no-signup application submission.
- SPA-like admin experience with Livewire navigation and reactive components.
- Advanced list management with search, archived tab, and multi-field filters.
- Soft-delete lifecycle (archive/restore) for safe record management.
- SPA feel across key flows using
wire:navigateand Livewire components. - Public submission form implemented as Livewire (
ApplicationForm) with animated success feedback. - Admin application list implemented as Livewire (
ApplicationsTable). - Admin list supports search, tabs, filter panel, pagination, detail navigation, and restore in archived view.
- Application detail page implemented as Livewire (
ApplicationDetail). - Detail page supports inline edit for
phone,business location,category, andcapital range. - Detail page supports archive/restore actions and in-page status notices.
- Role-protected admin routes via
EnsureAdminmiddleware.
- PHP
^8.2 - Laravel
^12 - Livewire + Volt + Flux
- Tailwind CSS
v4 - Vite
v6 - SQLite/MySQL compatible Eloquent models
app/Livewire/ApplicationForm.phpapp/Livewire/ApplicationsTable.phpapp/Livewire/ApplicationDetail.phpapp/Http/Controllers/ApplicationController.phpapp/Http/Middleware/EnsureAdmin.phpresources/views/applications/create.blade.phpresources/views/livewire/application-form.blade.phpresources/views/livewire/applications-table.blade.phpresources/views/livewire/application-detail.blade.phpresources/views/components/layouts/app.blade.phproutes/web.php
git clone https://github.com/dericking01/votafrica.git
cd votafrica
composer install
npm installcp .env.example .env
php artisan key:generateConfigure DB in .env.
Example for SQLite:
DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database/database.sqliteThen create database file if needed:
touch database/database.sqlitephp artisan migrate --seedSeeded admin user credentials:
- Email:
admin@example.com - Password:
password
Option A, one command for server + queue + Vite:
composer run devOption B, run processes manually:
php artisan serve
npm run devPublic routes:
GET /-> application formPOST /applications-> create application (controller endpoint; Livewire form is primary UX)
Admin routes (auth + admin required):
GET /dashboardGET /applicationsGET /applications/{application}
Auth routes are loaded from routes/auth.php.
- User fills public form on
/. - Livewire validates and stores application.
- Success message animates in and auto-clears.
- Admin logs in.
- Opens
/applicationsto review submissions. - Uses search, tabs, and filters to find records quickly.
- Opens details page and edits fields inline.
- Archives or restores records as needed.
- Search by organization, location, activity, phone, and category.
- Tabs:
ActiveandArchived. - Filter panel with status, category, capital range, date from, and date to.
- Archived-only restore action.
- Category label shorthand:
Small Entrepreneursdisplays asSMEin the table UI.
- Edit mode with save/cancel.
- Field validation for editable fields.
- Archive action for active records.
- Restore action for archived records.
- Status badges and contextual notices.
- Admin pages are protected by auth middleware.
- Additional admin check is enforced by
EnsureAdmin(user.is_adminmust be true). - Non-admin users receive
403on admin endpoints.
# Clear all caches
php artisan optimize:clear
# Run tests
php artisan test
# Code style
./vendor/bin/pintIf styles or Livewire interactions are not updating:
php artisan optimize:clear
npm run devIf route/view cache appears stale:
php artisan route:clear
php artisan view:clear
php artisan config:clear
php artisan cache:clear
php artisan event:clear- Public form submit works and success state auto-clears.
- Admin login works with seeded credentials.
- Applications list search/tabs/filters return expected results.
- Archived tab shows restore action only where expected.
- Detail page inline edit updates DB correctly.
- Archive/restore lifecycle reflects in list and detail views.
This project is open-sourced under the MIT license.