Navya Sharma // personal site
← projects

Web · 2026

HSS — a hotel support system for one 36-room property

The hotel's own website and booking, a front desk, kitchen display, waiter orders, housekeeping and admin, running as peers on a cloud server and a PC in the lobby that keeps working when the internet does not.

PHP 8Laravel 12MariaDBDockerVite

A hotel with thirty-six rooms and a restaurant does not need a property-management suite built for chains. It needs its own website to sell rooms, a front desk that knows which of those rooms is clean, a screen in the kitchen, a way for waiters to take orders on a phone, and one person with the admin password. HSS is those things as one Laravel application, and the second version of it — the first taught me most of what the second gets right.

Two servers, and neither is in charge

The system runs in two places at once: a shared-hosting server that the public website and bookings land on, and a PC in the hotel itself, which is both the front desk's workstation and a server running the same stack in containers. They are peers. A sync spine reconciles them in both directions, and when the internet at the hotel drops — which it does — the desk, the kitchen and the waiters carry on against the local machine and catch up when it returns.

The two are peers for data and a gateway for hardware. Only the on-site box can talk to a receipt printer or a key-card encoder, so the design gives it a role the cloud half cannot take over, rather than pretending both halves are interchangeable. Where a reconciliation cannot be settled by a rule, it goes to a conflict inbox for a person to decide.

What the first version got wrong

Version one assumed staff would use the on-site server whenever they were on the hotel's network. That is false for anyone on a personal phone, which is everyone. It was rebuilt.

Two structural fixes carry the second version. Selling a room type and assigning a physical room are separate acts — v1 conflated them, and within weeks the thirty-six rooms were fragmented into a pattern no clean booking could fit. And there is exactly one piece of code that counts rooms. Three counts that disagreed had produced oversells and unsellable rooms at the same time; now there is a single capacity service, and every screen that says "available" asks it.

The website sells the desk's own rooms

The public site is not a form on a subpath; it is the hotel's website, and it sells rooms from the same table and the same rate calendar the front desk uses. It cannot advertise a room the hotel no longer has or a price the desk would not honour, because there is no second copy of either for it to be reading from.

Staff sign in by enrolled device plus a PIN — a desk machine, a kitchen screen, a waiter's handset — rather than by email and password, which nobody at a front desk types twice a day. Four idempotent scripts turn a bare Ubuntu box into a staffed workstation, which is what makes the cold spare a desk rather than a rebuild.