Stoc Manager (Inventory Manager)
An operational application for managing a construction-materials warehouse, with stock tracked in square meters and units, multi-product receiving, a responsive POS, orders, snapshot-based traceability, QR codes, and real-time synchronization.

Core stack
The challenge
The main challenge was unifying the catalog, receiving, stock, and sales into a product simple enough for daily use, in a domain where quantity is expressed in square meters but operators also need the equivalent in units. In addition, history had to remain understandable when a product's commercial data changes, and POS terminals had to quickly receive availability changes.
The solution
The solution uses a Laravel 12 monolith with Inertia and Vue 3: rules and persistence stay on the backend, while the frontend provides an SPA-like reactive experience. Current stock is kept on the product and complemented by a StockMovement log for inbound and outbound movements. On relevant operations, ProductSnapshot saves a denormalized copy of the product's data and is linked to orders and movements for traceability. The POS persists the cart on the backend, completing an order groups the main operations into a single SQL transaction, Reverb distributes changes in real time, and Endroid QR Code and DomPDF generate printable labels that link physical products to the app's flows.
Notable complexity
Stoc Manager centralizes the catalog, stock, and sales of a business that sells tiling and finishing materials. Products are organized by category and have a unique SKU, photo, dimensions, color, price per square meter, and current stock. From width and length, the app automatically calculates the estimated equivalent in units, so the same records can be used both in the warehouse and in the sales interface.
The app uses three operational roles — Administrator, Agent, and Salesperson — for navigation and separating the main work areas. The administrator manages the catalog, categories, users, the dashboard, and QR labels, and the receiving flow allows entering multiple products in a single operation, with the quantity in square meters and the associated reason or document. Movement history can be filtered by product, user, type, reason, and period.
The POS interface is optimized for desktop, tablet, and mobile. Available products are shown visually with photo, SKU, dimensions, color, price, and stock, and the user can search quickly, add quantities to the cart, and see the calculated value before checkout. Carts are persisted server-side, and completing an order creates the sales line items and the outbound movements, updating stock in the same SQL transaction.
To preserve historical context, receiving and sales operations create immutable ProductSnapshots with the product's data at the time of the operation. Order items and stock movements reference these snapshots, so history can use the name, SKU, category, dimensions, price, and image that existed at the time of the transaction, instead of depending solely on the product's current version.
Laravel Reverb and Echo propagate stock updates between POS instances and synchronize the cart on a private per-user channel. The administrator can generate A4 PDF documents with QR codes for selected products; scanning the QR code opens the product directly in the flow appropriate to the role. The app is installable as a PWA and runs on VPS infrastructure, with Nginx for HTTPS and WebSocket proxying, Apache/PHP-FPM for Laravel, and a deployment script that runs dependency installation, the Vite build, migrations, and the framework's caches.
Key results
- Manageable catalog with categories, unique SKU, images, dimensions, colors, price per square meter, and current stock
- Square-meter tracking with automatic conversion into an estimated number of units based on product dimensions
- Multi-product receiving with quantity and a reason or document associated with each inbound operation
- Stock-movement history filterable by product, user, type, reason, and date range
- Responsive POS with a visual catalog, fast search, persistent cart, total calculation, and availability checks
- Orders with line items, unit price kept at the time of sale, and automatic outbound stock movements
- Dedicated ProductSnapshots for preserving the historical context of products within transactions
- Admin dashboard with 30-day sales and orders, a daily series, total stock, top products, and category distribution
- Server-side generated QR codes in A4 PDFs, with an option to display the price and role-adapted routing
- Real-time stock updates between POS instances and cart synchronization on a private per-user channel
- Installable PWA and interface adapted for desktop, tablet, and mobile
- VPS deployment with a Laravel/Vite build, migrations, Laravel caches, and an Nginx proxy for Laravel Reverb
Related projects
- GrileAMGA training ecosystem for nursing assistants: courses, multiple-choice questions, exam simulations, statistics, and tests distributed by teachers, across web, iOS, and Android, with subscriptions, AI, and editorial administration.
- Risa TimeA digital ecosystem for picking up a customer's car, transporting it to a partner car wash, and returning it safely, coordinated through separate customer and driver apps, an operations panel, and real-time tracking.
- MixboxA multi-vendor marketplace for local products, with a single cart spanning multiple stores, separate apps for customer, merchant, and courier, flexible payments, and an advanced system for importing and managing supplier catalogs.
Want something similar?
Start with the estimate wizard — answer a few questions and get a realistic price range and timeline.