A modern, role-based inventory & point-of-sale (POS) system for a houseware shop — built with Laravel 11, Tailwind CSS, Alpine.js, and Chart.js, running on PHP 8.2+ with MySQL / MariaDB.
- Dashboard — KPI cards, sales & stock-movement charts, low/out-of-stock alerts, best sellers, recent activity, quick actions.
- Products & Variants — image, auto-generated SKU, barcode, category/brand/supplier/unit, cost & selling price, and multiple variants each with their own SKU/barcode/stock/price.
- Catalog — Categories (with archive), Brands, Units, Suppliers, Customers.
- Inventory — Stock In, Stock Out (sale/damaged/expired/returned/internal), and Inventory Adjustments (add/remove/correct) — all auto-update stock and write to an audit ledger.
- Purchase Orders — create, status workflow (pending → approved → ordered → partially received → completed → cancelled), and receive items into inventory.
- Point of Sale — fast product grid, barcode scanning, cart, discount, tax, payment methods, and printable receipt; stock auto-deducts.
- Reports — Sales, Inventory, Stock In/Out, Purchase Orders, Profit, Low Stock, Dead Stock, Fast Moving. Export to PDF / Excel / CSV.
- Barcode & QR — auto-generated per variant, printable label sheets.
- Users & Roles — Owner (full), Manager, Cashier, Inventory Staff — enforced via permissions.
- Activity Logs — every action logged with user, IP, and device.
- Notifications — low stock / out of stock alerts.
- Settings & Backup — shop info / tax / currency; database backup via
mysqldump. - UI/UX — responsive, dark/light mode, glassmorphism, toasts, confirmations, pagination.
| Layer | Technology |
|---|---|
| Backend | Laravel 11, PHP 8.2+ |
| Database | MySQL / MariaDB (XAMPP recommended on Windows) |
| Frontend | Blade, Tailwind CSS, Alpine.js, Chart.js (via CDN — no build step) |
| Auth/Roles | spatie/laravel-permission |
| PDF / Excel | barryvdh/laravel-dompdf, maatwebsite/excel |
| Barcode / QR | milon/barcode, simplesoftwareio/simple-qrcode |
See requirements.txt for the full list of prerequisites and dependencies.
- PHP 8.2+ with extensions:
gd,pdo_mysql,mbstring,openssl,tokenizer,xml,ctype,json,bcmath,fileinfo,curl,zip - Composer 2.x
- MySQL 8+ or MariaDB 10.4+ (e.g. via XAMPP)
- Node.js 18+ & npm — only needed if you switch from the CDN assets to a Vite build
On Windows, XAMPP bundles PHP + MySQL together and is the easiest way to get going.
# 1. Clone the repository
git clone https://github.com/Drin5/InventorySystem.git
cd InventorySystem
# 2. Install PHP dependencies
composer install
# 3. Create your environment file
cp .env.example .env # Windows: copy .env.example .env
php artisan key:generateCreate a database (e.g. houseware_inventory) in phpMyAdmin / MySQL, then edit .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=houseware_inventory
DB_USERNAME=root
DB_PASSWORD=
SESSION_DRIVER=filephp artisan migrate:fresh --seed
php artisan storage:linkStart MySQL (e.g. in the XAMPP Control Panel), then:
php artisan serveOpen http://127.0.0.1:8000 🎉
Password for all accounts: password
| Role | Access | |
|---|---|---|
| Owner | owner@houseware.test | Full access |
| Manager | manager@houseware.test | Inventory, reports, sales |
| Cashier | cashier@houseware.test | POS / sales only |
| Inventory Staff | inventory@houseware.test | Stock in / out / adjustments / products |
app/
Http/Controllers/ # Products, POS, Sales, PO, Reports, Users, Settings, Backup…
Models/ # Eloquent models
Services/ # InventoryService — core stock logic + ledger
Support/ # NumberGenerator — SKU / PO / invoice numbering
Exports/ # Excel/CSV export classes
database/
migrations/ # Schema
seeders/ # RolePermissionSeeder + demo data
resources/views/ # Blade templates (Tailwind + Alpine)
routes/web.php # Application routes
storage/app/backups/ # Generated .sql database backups
- Sessions use the
filedriver (reliable on XAMPP / OneDrive setups). - Stock logic lives in
app/Services/InventoryService.php— every change writes astock_movementsledger row and triggers low-stock notifications. - Numbering (SKU, PO, invoice, references) is in
app/Support/NumberGenerator.php. - Roles/permissions are seeded by
database/seeders/RolePermissionSeeder.php(spatie/laravel-permission). - Frontend uses Tailwind, Alpine, and Chart.js via CDN — no build step required.
Backups (Admin → Backup) run mysqldump (on Windows: C:\xampp\mysql\bin\mysqldump.exe) and store timestamped .sql files in storage/app/backups.
Released under the MIT License.