Minotavros
A production web app that replaced phone calls, group chats and spreadsheets for a short-stay apartment operator in Greece. Front desk, maintenance, housekeeping, hosts and guests all work from the same live picture of every room.
minotavros.xyz
At a glance
- Challenge
- Hundreds of apartments across a city, run from phone calls, group chats and spreadsheets.
- What we built
- One live system for 369 rooms: maintenance, the room board, housekeeping checks, reports and an AI assistant.
- Outcome
- 96%
- of 1,628 maintenance issues resolved
- 1,565 closed, and none of the rest simply forgotten.
- Platform
- minotavros.xyz
- Scope
- Design and full-stack build, 15 modules, 7 roles
- Scale
- 369 rooms, one live picture
- Status
- Live, in daily use
- Year
- 2026
The brief
- rooms tracked across 50+ properties
- 369
- maintenance issues logged
- 1,628
- of issues resolved (1,565)
- 96%
- faster housekeeping room checks, as reported by the operator
- 10×
Hundreds of apartments, scattered across a city, run from chat threads.
A hotel has one building and one front desk. This operator has hundreds of apartments in dozens of buildings, each with its own key locker, cleaning rota and quirks. Before Minotavros, the state of a room lived in someone's head or in a message nobody could find again.
Now every fault, every clean, every locker code and every inspection goes through one app, in Greek and English. Seven roles each land where their work is, and each sees only what it needs.
There is no server to patch. The client talks to Firestore directly under strict rules, and anything privileged or third-party runs in Cloud Functions. Serverless, real-time, and cheap to run.
The approach
Maintenance that says why a job is stuck
Most trackers stop at open and closed. Here a job that cannot move says what it is waiting for — a technician, materials, painting or capital spend — so a manager can act on the blocker instead of chasing the maintainer. Every job has an owner, a priority from SOS to low, tags and photos. Front desk logs a fault from one form: picking a property fills in the address and floor, and a duplicate check warns if the same fault is already open.
A room board three teams share
Each room is a card that moves through a fixed sequence: unchecked, cleaned, locker ready, ready. Housekeeping, the locker check and the final inspection are separate steps owned by different people, and the colour shows how far the room has got. Today's schedule is imported from the PMS, the key-locker number and code sit on every card, and open maintenance issues surface on the room they affect. Housekeeping accounts can be locked to one property group.
Hestia: the morning plan in three clicks
The property management system exports Excel. Housekeeping needs paper. Hestia parses the export, works out arrivals, departures, stays and which long stays are due a mid-stay refresh, then produces an editable preview and a PDF per team. The PMS has no usable API, so Hestia tolerates renamed columns and odd room names, and matches every row against the room registry. Imperfect integration shipped beats perfect integration planned.
Numbers management can act on
Because every action goes through the app, reporting comes for free. The reports answer operational questions: which trade do we need to book, which building costs the most, is the backlog growing. Weekly created versus completed, technician and material needs rolled up from blocked jobs, a printable report per building, and tabs for room status, cleaning completion and staff activity.
When a stay goes wrong, the recovery is tracked too
Fixing the tap is half the job. The other half is what the guest remembers. Three modules close that loop. Staff issue a compensation voucher in one dialog, tied to the original booking and a reason, with a unique code, an expiry date and a bilingual PDF. At the end of every shift the host files a structured report instead of a long chat message. And reviews exported from the booking channels are imported, de-duplicated and matched to reservations, so a score lands on the room and the stay it belongs to, next to that room's maintenance history.
What kept going wrong
Every module answers something that kept going wrong.
- A fault was reported by phone, then forgottenso every job now has an owner, a priority and a reason it is waiting: technician, materials, painting or capital spend.
- Front desk could not tell whether a room was ready before a guest arrivedso housekeeping, locker and inspection each move the room one colour forward. Green means ready, with no phone call needed.
- Daily housekeeping plans were typed by hand from PMS exports every morningso Hestia takes the Excel export and returns arrivals, departures, stays and mid-stay refreshes as a printable PDF per team.
- Guests had no channel besides calling, and staff had no way to show progressso guests report a fault with a photo, follow its status and read their check-in instructions.
- Management had no numbers: which buildings break most, which trades are needed, how fast jobs closeso there are trends, priority and status splits, technician and material needs, per-building analysis and staff activity.
- Supplies, linen, compensation vouchers and deep cleans each lived in a separate spreadsheetso each is now a module behind the same login, and each role sees only what it needs.
Once staff were logging in every day, each side process that lived in a spreadsheet became a module: deep cleaning, biological cleaning, storage and linen, compensation vouchers, guest review analytics, host shift reports, a manuals library. They share the same properties, rooms, users and permissions — enforced twice, by routes in the client and by Firestore security rules on the server.













By the numbers
Figures from the production system, September 2026.Under the hood
- 7 user roles, 29 staff accounts
- 15 feature modules
Result
1,565 of the 1,628 issues logged are closed, and a housekeeping room check now takes about a tenth of the time it used to.
The 63 still open each have an owner and a stated blocker, so none of them is simply forgotten, which was the original complaint. The inspector taps a card on the board instead of phoning the office, and front desk sees the room turn green as it happens. The morning plan is generated, not typed. And 197 vouchers, 139 deep-clean requests and more than 500 shift reports now live in one place with a history, instead of in separate spreadsheets and chat threads. Modelling the blocker, not just the state, did more for throughput than any dashboard: with “needs technician” and “material shortage” as first-class statuses, the manager's to-do list writes itself. And the app kept changing while staff used it every day — from JavaScript to TypeScript, from single-file dashboards to feature modules, one file at a time, with no big-bang rewrite.
- Stack
- React 19, TypeScript, Firebase, Gemini
Still running the rooms on phone calls, group chats and spreadsheets?
We reply within one working day.



