A modern, production-ready Laboratory Information Management System (LIMS) built with Laravel 12 (PHP 8.2), Tailwind CSS, and Blade — featuring a full workflow from Patients → Tests → Cases (Orders) → Results → Invoices → Inventory.
It includes a sleek dark UI, analytics dashboard, and role-based access powered by Spatie Permission.
- 🧍 Patients & Tests: CRUD, search, pagination, validation
- 📋 Cases (Orders): Multi-test workflow, auto total calculation, case status tracking
- 🧪 Results Workflow: Enter → Validate → Approve (with timestamps and audit trail)
- 📄 Invoices: Printable PDF with patient/test details
- 📊 Dashboard & KPIs: 30-day charts, today’s revenue, and top tests
- 📦 Inventory & Batches: Stock tracking (qty in/out, expiry, cost per batch)
- 🔐 RBAC: Role-based access — Admin & User
- 🌙 Dark Theme: Mobile-friendly interface with custom Tailwind utilities
- ⚙️ Reports Module: Search by invoice #, patient name, or phone (via
ReportController) - 💾 Operations: Automated backups, migrations, and log rotation
| Layer | Technology |
|---|---|
| Backend | Laravel 12 (PHP 8.2) |
| Frontend | Blade + Tailwind CSS |
| Database | MySQL 8.x |
| Auth / RBAC | Laravel Breeze + Spatie Permission |
| Charts | Chart.js |
| PDF Engine | DomPDF / Snappy |
| Build Tools | Vite + NPM |
# 1. Clone & install
git clone <your-repo-url> lims && cd lims
composer install
npm install
# 2. Environment setup
cp .env.example .env
php artisan key:generate
# 3. Database setup
# update DB_ credentials in .env
php artisan migrate --seed
# 4. Assets build
npm run dev # or npm run build
# 5. Run server
php artisan serve
# → http://127.0.0.1:8000
| Role | Description | Permissions |
|---|---|---|
| Admin | Full access to all modules | Manage Inventory, Users, Reports |
| User | Day-to-day lab operations | Patients, Cases, Results, Invoices |
- Total Patients / Cases / Revenue (Today & Monthly)
- 30-Day Orders Chart (Chart.js)
- Top 5 Tests (by frequency)
- Pending vs Completed Cases
| Field | Description |
|---|---|
| qty_in / qty_out | Stock movements |
| expiry_date | Batch expiry tracking |
| unit_cost | Cost per batch |
| qty_total | Computed: SUM(qty_in - qty_out) |
➕ Add stock per item through Add Stock in the Inventory module.
php artisan optimize:clear # Clear caches
php artisan route:list # View all routes
npm run dev # Live compile assets
npm run build # Production build| File | Description |
|---|---|
| Project-Overview.md | Business scope & goals |
| Project-Structure.md | Folder layout |
| Routes.md | All endpoints |
| Operations-Runbook.md | Backups, logs, migrations |
| Security.md | Hardening checklist |
| Contributing.md | PR / branching guide |
| CHANGELOG.md | Release notes |
| LIMS_User_Admin_Manual_Agha_Essa_Khan.docx | Full installation & user manual |
Agha Essa Khan — Project Lead / Developer
💡 Contributions welcome via Pull Requests
v1.1 — October 2025
Updated with new Case workflow, enhanced report search, and refined dark-UI components.
© 2025 Agha Essa Khan — All rights reserved.