Q-Putaway
Enterprise FMCG Warehouse Management System: Core PHP (7.4–8.x), MySQL/MariaDB, Bootstrap 5, jQuery. It runs on Hostinger shared hosting with no VPS, Node.js, Redis or workers.
Highlights
- Authoritative inventory ledger: stock is never overwritten. Every movement is recorded and balances reconcile against the ledger.
- Batch and expiry tracking with FEFO (or FIFO) allocation, shelf-life rules per product and customer, batch blocking/recall and traceability.
- Full warehouse flow: goods receipt → QC → guided putaway → transfers → orders → FEFO allocation → order/batch/wave/zone picking → packing → dispatch → returns. Also cycle/full/blind counts, adjustments with approval, and replenishment.
- Scanning: USB/Bluetooth scanners and the phone camera (native BarcodeDetector with ZXing fallback). GS1-128/DataMatrix parsing fills batch, expiry and quantity automatically.
- Concurrency-safe: InnoDB row locks and idempotency keys. Verified with multi-process race tests.
- Mobile-first, installable PWA with safe update prompts, and a task-focused worker screen.
- Admin: roles and permissions (module × action × warehouse), 2FA, Remember Me with token rotation, audit log, PHP-based encrypted backups and restore, Ed25519-signed application updates.
- Insights: role-aware dashboards, a report catalogue with CSV/XLSX/print export, local demand forecasting, and scheduled email reports through cron.
- Built-in Help Center (searchable, context-sensitive), plus standalone docs viewable without login at
/manual.
Quick start
- Upload everything to
public_html(there is nopublic/folder; the root is the web root). - Create a MySQL database in hPanel and enable SSL.
- Open the site. The installer guides you through system checks → database → company → Super Admin.
- Add the cron job shown under Administration → Email & Schedules.
Full guide: docs/installation.md.
Documentation
| Document | Contents |
|---|---|
| docs/installation.md | Requirements, Hostinger deployment, cron, hardening |
| docs/user-guide.md | Day-to-day use by role |
| docs/help-center.md | Help Center structure and article index |
| docs/inventory-and-fefo.md | Ledger, stock states, FEFO algorithm |
| docs/mobile-scanning.md | Scanners, camera, GS1, device test plan |
| docs/barcode-and-printers.md | Labels and printing |
| docs/csv-import.md | Templates and the import engine |
| docs/reports-and-analytics.md | Reports, forecasting, schedules |
| docs/administration.md | Users, roles, settings, email, audit |
| docs/security.md | Security controls |
| docs/backup-restore.md | Backups and recovery |
| docs/application-updates.md | Signed server updates and PWA updates |
| docs/troubleshooting.md | Common problems |
| docs/architecture.md | Code structure and design |
Development
php -S 127.0.0.1:8080 tools/dev-router.php
QP_TEST_DB_PORT=3306 php tests/run.php # unit + integration + security (database must end in _test)
QP_TEST_DB_PORT=3306 php tests/concurrency/race.php # multi-process race tests (needs pcntl)
php tests/http/smoke.php https://your-site admin@example.com 'password'
Status, test results and known limitations: DEVELOPMENT_STATUS.md. Changes: CHANGELOG.md.
Third-party components (all MIT)
Bootstrap 5.3.3, Bootstrap Icons 1.11.3, jQuery 3.7.1, Chart.js 4.4.4, @zxing/library 0.21.3, JsBarcode 3.11.6, qrcode-generator 1.4.4. All are vendored in assets/vendor/.