POS System โ a project by Ahsan Mahmood
Production-ready Point of Sale system built with Laravel 12 and Nova 5
Multi-location is where a point-of-sale system either works or quietly does not.
One shop counts stock once. It can treat that number as a fact. Two shops turn the same number into a question about where, and every report written above it inherits the question. Sales figures, inventory levels and customer records all stop meaning anything on their own the moment there is more than one till.
So location is in the data model rather than bolted on as a filter.
That is the decision the rest of this follows from. Retrofitting a location column into a working system touches every query in it, and the ones it does not touch are the ones that go on quietly returning the wrong total for a fortnight.
The system covers inventory, sales tracking, customer management, reporting and that multi-location layer underneath all four.
It is built on Laravel with Nova as the administration layer, PHP and MySQL underneath, and Vue on the interface side.
That combination is a deliberate answer to what this kind of software actually is.
A point-of-sale system is not one clever feature. It is mostly plumbing. It is a large number of ordinary screens sitting over a strict relational schema, and most of the labour is in the ordinary screens rather than the clever part. Nova generates those directly from the models, which removes the repetitive half of the work and leaves the half worth thinking about.
The relational database is the right shape here, and that is not always true.
Stock, sales, customers and locations have real constraints between them. A sale cannot reference a product that does not exist, a stock movement cannot leave a location that never held it, and a database that enforces those is a database that stops a bad write instead of recording it. Software that discovers its own inconsistencies at reporting time has usually been inconsistent for weeks.
Reporting sits above all of it.
The point of a till is not the transaction. The transaction is the easy part, and it is over in a second. The value is in what the accumulated transactions tell somebody a month later about which lines move, which locations carry dead stock, and which customers come back, and none of that exists unless the schema underneath was strict enough to be trusted.
What it cost is that there is nowhere to send you.
The record carries no live URL, no listing and no repository. Software of this shape usually lives inside a business rather than on the open web, so that is less surprising than it would be for a consumer product. It is still an absence, and the page says so rather than pointing at something adjacent and hoping the distinction is not noticed.
Two more things are worth naming, because both are easy to leave implied.
The interface is Vue rather than a second full application, which keeps the till screen close to the models it is reading and avoids a whole parallel state layer for what is fundamentally a form over a database. And customer management is here because retail loyalty is not a feature you add later; it is a foreign key you either put in at the start or spend a migration adding once there are real rows depending on it.
The record says completed.
That means the work is finished, not that it is serving anybody today. Those are different claims and a portfolio is exactly the place where they get quietly merged, so this page keeps them apart.
What it does, and what that costs to build
- Inventory management
- Sales tracking
- Customer management
- Reporting
- Multi-location support
Built with
- Laravel 12
- Nova 5
- PHP
- MySQL
- Vue.js
Worth knowing
- pos
- retail
- inventory
- laravel
Who built the POS System?
Ahsan Mahmood built it alone. The same person designed the schema, wrote the Laravel application behind it, configured the Nova administration layer and built the interface on top. It is recorded as completed rather than in progress, which on this catalogue means the work is done and not that it is running somewhere you can visit. There is no published address on the record, so this page names none, and that absence is the honest headline rather than a footnote.
Where can I see it running?
Nowhere public. The project record carries no live URL, no store listing and no repository, so there is nothing to open. A point-of-sale system is also the kind of software that lives inside a business rather than on the open web, so an absent public address is less surprising here than it would be on a consumer product. It is still an absence, and the page states it rather than pointing you at something adjacent.
What does multi-location actually change?
It changes what a stock number means. One shop can treat a count as a fact; two shops turn the same number into a question about where, and every report written above it has to carry the answer. Sales, inventory and customer records all inherit that, so the location is part of the data model rather than a filter added later. Retrofitting it afterwards is the kind of change that touches every query in a system.
Why Laravel and Nova rather than a JavaScript backend?
Because the administration side is most of the work. A point-of-sale system is a large number of ordinary screens over a strict relational schema, and Nova generates those screens directly from the models rather than requiring each to be built by hand. The relational database is the correct shape for stock, sales and customers, all of which have real constraints between them. Choosing the tool that removes the repetitive half is what makes a solo build of this size finishable.
Does the POS System work on iPhone?
No. It is a server-rendered web application, so an iPhone reaches it through a browser exactly as any other device does, and there is no iOS build to install. There is no Apple Developer account here and nothing I build has shipped to the App Store. A till running in a browser is the ordinary arrangement for software of this shape, so the absence of a native application is a smaller limit here than it would be elsewhere.
https://aoneahsan.com/projects/com.aoneahsan.possystem