A Laravel web app for sales and purchase invoices, clients and suppliers, with a dashboard, outstanding summaries, PDF/Excel exports, and database notifications for overdue items..
- Dashboard — totals, client/supplier counts, recent invoices
- Sales & purchase — line items, statuses (
pending/overdue/paid), mark paid, PDF & Excel per invoice - Clients & suppliers — credit periods, per-party pending/overdue statements (PDF/Excel)
- Reports — outstanding summaries with optional PDF export
- Admin users — CRUD,
is_admin, module permissions (dashboard,sales,purchase,clients,suppliers,reports), active/inactive accounts - Notifications — overdue sale/purchase alerts (in-app)
- Profile — name, email, password (Fortify), optional profile photo
| Area | Choice |
|---|---|
| Framework | Laravel 13, PHP 8.3+ |
| Auth | Laravel Fortify (login, profile, password change) |
| UI | Blade, Bootstrap 5, Font Awesome, DataTables (server-side) |
| barryvdh/laravel-dompdf | |
| Spreadsheets | maatwebsite/excel |
| Tooling | Vite, Pint, PHPUnit |
Validation for writes uses Form Request classes under app/Http/Requests/.
- Email + password only (no OAuth). No public registration — admins create users under
/admin/users. - No forgot-password / email reset in this build. Email verification is not used.
is_admin: full module access + user management.- Non-admins: JSON
permissionsonusers; at least one module (or admin) is required for meaningful access. is_active: inactive users cannot sign in; middleware blocks authenticated inactive users.- After login, redirect goes to the first allowed module (or Profile if none).
| Permission key | Routes / area |
|---|---|
dashboard |
/dashboard |
sales |
Sales CRUD, exports |
purchase |
Purchase CRUD, exports |
clients |
Clients CRUD, statements |
suppliers |
Suppliers CRUD, statements |
reports |
/reports, summary PDFs |
(Add more images under docs/screenshots/ if you like.)
- PHP
^8.3with extensions:pdo_mysql(orpdo_sqlite),mbstring,openssl,tokenizer,xml,ctype,json,bcmath,fileinfo;zip/gdhelp Excel/PDF - Composer 2.x
- Node.js 18+ and npm (for Vite when editing bundled assets)
- MySQL (recommended for production) or SQLite for local/demo
git clone https://github.com/YOUR_USERNAME/invoice-tracking-system.git
cd invoice-tracking-system
composer installcp .env.example .env
php artisan key:generateEdit .env — at minimum set APP_URL and database:
MySQL (typical)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=invoice_tracker
DB_USERNAME=root
DB_PASSWORD=SQLite (quick local try)
DB_CONNECTION=sqlite
# DB_DATABASE=/absolute/path/to/database.sqliteThen create the file if needed: touch database/database.sqlite
php artisan migrate
php artisan db:seedDefault admin (from Database/Seeders/DatabaseSeeder.php):
| Field | Value |
|---|---|
admin@example.com |
|
| Password | password |
db:seed is idempotent for that email (updateOrCreate). Change this password before any shared or production deploy.
php artisan storage:linkphp artisan serveOpen http://127.0.0.1:8000, sign in, then use Users (admin) to add staff and assign modules.