CP//DEV
Inventory Management System

2024 · Full-stack developer (Laravel)

Inventory Management System

Multi-warehouse inventory with QR codes, roles and per-user isolation in Laravel

  • Laravel 10
  • PHP 8.2
  • Alpine.js
  • Tailwind CSS
  • Cloudinary
  • PHPUnit
  • Docker
Multi-tenant
Isolated per user
Identification
Unique QR per product
Quality
PHPUnit tests + Pint
Walkthrough

The problem

Tracking stock spread across several physical warehouses without scattered spreadsheets: knowing which product exists, where, in what state, and being able to locate it by scanning a label. The target users are small and medium businesses (retail, logistics, depots) where each manager needs their own inventory, isolated from everyone else’s.

Architecture decisions

  • Laravel 10 + Blade + Alpine.js, no heavy SPA. Vite for asset bundling. Just-enough interactivity (filters, scanner) handled with Alpine, without a client framework’s cost.
  • Multi-tenancy by user_id: every query is scoped to the user instead of a schema-per-tenant setup. Simple to reason about and to test.
  • Cloudinary for product images: external storage and CDN, automatic transformations, no load on the app server.
  • Unique QR codes generated on the model’s creating hook, exportable to PNG/SVG and scannable from the browser camera to locate a product instantly.
  • Auth with Passport + Sanctum: OAuth2 tokens with a future mobile client in mind, plus sessions for the web panel.
  • SQLite in development, MySQL/PostgreSQL in production; reproducible deploy with Docker (PHP 8.2 + Apache) and automatic migrations.

Data model

Users (with admin or operator role) own products, warehouses and categories. Each product belongs to a warehouse (N:1), is classified into several categories (N:M via a pivot table), has a state (in stock, with incident…), a unique QR and its images on Cloudinary.

Security hardening

The most interesting work wasn’t adding features — it was closing gaps. I documented and fixed a batch of findings:

  • IDOR: edit, detail and status-change queries are scoped by id_user so nobody can reach another user’s products.
  • Cross-tenant contamination: an isolation test (CrossTenantIsolationTest) verifies a user never sees another’s data.
  • Controlled mass assignment ($request->only(...), id_user outside $fillable), rate limiting on login/signup/QR, and token revocation on logout.

Result

An app that manages real multi-warehouse inventory, with physical QR identification and strict data separation between users, covered by feature tests (auth, QR, roles, isolation) and reproducibly deployable with Docker. The emphasis: secure by default, not just functional.

In short

What is Inventory Management System?
A Laravel app to track stock across multiple warehouses, with QR generation and scanning, Cloudinary image uploads, admin/operator roles and per-user multi-tenant isolation. Hardened against IDOR and covered with tests.
What is Inventory Management System built with?
Inventory Management System is built with Laravel 10, PHP 8.2, Alpine.js, Tailwind CSS, Cloudinary, PHPUnit and Docker. Carlos Ponce delivered it in 2024 — Full-stack developer (Laravel).
What stands out in Inventory Management System?
Multi-tenant: Isolated per user. Identification: Unique QR per product. Quality: PHPUnit tests + Pint.
Is Inventory Management System live?
Yes. Inventory Management System has been live at c-depot.onrender.com since 2024.

Related work