The business
Bolt House manufactures MS nuts and bolts. Every product comes in a range of diameters and lengths, and each combination is a separate line of stock: a bolt in M12 × 50 is not the same item as M12 × 60, and the team needs to know how many of each are on the shelf.
Stock comes in and goes out through the day, and the app lets the person moving it update the count from their phone at that moment.
What the app had to do
- Record stock in and stock out for any product and size in a few taps, on the phone people already carry.
- Run on Android and iPhone from one codebase.
- Show the stock for every size of a product at a glance, with the sizes running low easy to spot.
- Tell the team when stock changes, without anyone having to check.
- Keep a history of every movement, with who made it, and let mistakes be corrected.
- Let the office prepare price estimates for customers from the same data.
What was built
Stock in and out by size
The Inventory tab asks for three things: the product, the diameter and the length. As soon as a size is chosen, the screen shows how many are in stock. A quantity can be typed or picked from preset buttons (1, 5, 10, 25, 50 and 100), and one tap on Stock in or Stock out saves it. The dashboard's Stock in and Stock out buttons open the same screen with the right action ready.
A matrix for every product
Each product has a stock matrix: lengths down the side, diameters across the top, one cell per size. Empty sizes and sizes with five or fewer pieces are marked, and the totals sit above the grid: total stock, number of sizes, low and zero. The product list repeats those counts for every product, so the gaps show up before anyone opens a matrix. Admins also keep a price matrix per product in the same shape.
History and corrections
Every movement is kept: the product and size, in or out, the quantity, the stock left after it, who made it and when. The history can be filtered by product, size, direction and date, and shows the total in and out for the entries listed. When an entry was wrong it can be edited or deleted, and the stock count is adjusted to match.
Notifications
Each stock change creates a notification in the app's inbox, with links to the history and to the entry. At the same time the backend sends a push notification through Firebase Cloud Messaging to the phones that have signed in. An admin can switch mobile push off for the whole business, and each person can switch it off for themselves in My Profile.
Estimates for customers
Admins can build an estimate inside the app: a customer name, then one line per item with product, diameter, length, quantity and an optional discount. The unit price fills in from the product's price matrix, and tax is added at the rate set in Settings. The estimate is generated as a PDF on the server and handed to the phone through a signed, single-use link that expires after 15 minutes, so it opens in the phone's own PDF viewer, ready to share or print.
How the app and the backend fit together
The app is written in React Native and ships for Android and iOS. Signing in returns a Laravel Sanctum token, and the app registers its Firebase token with the backend, along with the platform it runs on, so the server knows where to send push notifications. Signing out clears both.
The stock screens are served by the Laravel backend in a layout made for the phone, with a top bar, a side menu and a bottom tab bar, and the app shows them inside a WebView. A small bridge passes the sign-in token and the PDF links from the page to the app. Because the screens live on the server, a fix or a new screen reaches Android and iOS users at the same moment, without a new store release.
The phone's Back button behaves the way people expect: it goes back through the screens, and on the first screen it asks whether to close the app instead of quitting straight away.
Behind the app sits a JSON API of 18 endpoints for signing in, the profile and password, products, sizes, stock levels, stock updates and the history.
Technology
The app is built in React Native for Android and iOS. The backend is Laravel on PHP, with Laravel Sanctum for app tokens, Firebase Cloud Messaging for push notifications, DomPDF for estimate PDFs and Laravel Excel for importing and exporting stock and price matrices, on a MySQL database.
- React Native
- Android
- iOS
- React Native WebView
- Laravel
- PHP
- Laravel Sanctum
- Firebase Cloud Messaging
- DomPDF
- Laravel Excel
- MySQL