Field operations management app for a villa management company in Cyprus
A villa management company in Cyprus ran its operations on spreadsheets, group chats, and phone calls, with owner work unbilled and every chargeback lost. ZingZee built one app that creates the work from the bookings and records every task, photo, and payment.
Client A villa management company with hundreds of properties in Cyprus.

At a glance
The company manages hundreds of villas and handles thousands of jobs a season, and it now runs that work from one operations app.
A villa management company in Cyprus with hundreds of properties across the island.
Each villa has its own owner, its own management contract, its own keys and its own access details.
From May to October most stays start and end on the same days of the week, so on a Saturday in August a small crew can face dozens of turnovers with a few hours between one guest leaving and the next arriving.
The engagement was to replace spreadsheets, group chats, phone calls and paper with one operations app: a task for every job, generated from the booking; a photo, a checklist, a timestamp and a cost on every task; and a live view of where every person and vehicle is.
The rollout ran team by team over one off-season, and by the following May nothing was completed without a task.
Compensation to guests fell to near zero, every chargeback in the last year was won, and the same portfolio now runs with fewer than half the operations staff.
Outcomes
Operations staff from 30 to 14, with more than EUR 150,000 a year saved.
Owner work rebilled: EUR 48,000 in the first year, where more than EUR 40,000 a year had been given away.
Guest compensation from more than EUR 60,000 a year to under EUR 3,000.
Five chargebacks in the last year, all fought on the task evidence and all won.
Six separate apps for tasks, chat, checklists, tracking, HR and files replaced by one, saving around EUR 18,000 a year in subscriptions.
Late turnovers from several a week to none, with every add-on delivered on the day it was booked for.
Every villa's cost and profit fed to the accounting system, task by task.
The challenge
The day's work was set by phone and group chat, and no record existed of what had been done, by whom, or at what cost.
Some villas are fully managed, with the company responsible for everything from the linen to the garden; others are on a commission contract, where the owner runs parts of the service. Cleaners, maintenance staff, pool technicians, gardeners, laundry, drivers and a long tail of subcontractors handle turnovers, linen, pools, gardens, hot tubs, repairs and guest call-outs, which amounts to thousands of jobs a season carried out in the owners' properties.
Villas sit up to an hour apart, so a wasted journey costs a turnover. The winter is quiet, which is when the company can change how it works, and by May the change has to hold under full load.
ZingZee built it inside the company's own booking platform, so the app knows every booking, every add-on and every owner contract without anyone retyping them.
Setting the day's work
A message went out in the morning listing the day's turnovers, and whoever answered first took the job. The plan was a spreadsheet on a laptop in the office, edited by whoever was nearest; by lunchtime it no longer matched what the crews were doing, and by the evening nobody could say which villas had been cleaned. There was no task record and no sign-off, so a job was done when someone said so in a chat thread that would be pushed off the screen within the hour.
The manager's day
An operations manager's day started on the phone and ended on the phone. In between, the manager rang crews to find out where they were, rang the pool contractor to ask whether the heated pool had been switched on for that afternoon's arrival, rang the office to check whether a guest had paid for a mid-stay clean, and rang an owner to explain, from memory, what had been done at the villa the week before. Nobody in the office knew where the vans were. In August the company hired extra people to cover the peak, and the extra people, new to the villas, needed more supervision than they saved.
Three failures
The missed clean was the most frequent failure. A guest checked out in the morning, the next guest was due in the afternoon, and the message assigning the clean was read by two people who each assumed the other had it. The new guest arrived to the previous guest's towels on the bathroom floor, and a crew was pulled off another villa to put it right. The unbilled contractor job was the most costly failure: a pump replacement outside the management contract was ordered by phone, carried out, paid by the company and never rebilled to the owner, because no paperwork showed what had been done or agreed. The complaint paid for lack of proof was the third failure. A guest claimed the villa had been dirty at check-in, nobody could show what state it had been in, and the company paid the compensation.
The consequences
Nobody had a record of who did what, where, when, or at what cost, and the gap reached every part of the business.
- 01
Work outside the management contract was done and never rebilled. With no paperwork there was no invoice, so upwards of EUR 40,000 a year of billable work was given away while the company carried the maintenance cost itself.
- 02
When a guest complained, nobody could show the state of the villa at check-in, so the company paid: more than EUR 60,000 a year in compensation.
- 03
When a guest disputed a card payment with their bank, there was no evidence that the stay had been delivered as sold, so every chargeback was lost.
- 04
Cleaning crews were double-booked across two villas in the same afternoon, and late turnovers were discovered when the guest rang from the driveway.
- 05
Gate codes, key-safe codes and alarm codes sat in chat threads on the phones of staff who had left months earlier.
- 06
Subcontractor invoices arrived by message with no job behind them. Some were paid twice, and some were for work never done.
- 07
Guests paid for a heated pool or a hot tub and nobody told the pool team, so the guest arrived to cold water and left with a refund.
- 08
Nobody knew who had worked which hours, and overtime was argued over at month end.
The company had tried off-the-shelf tools: a task app, a chat app, a checklist app, a vehicle tracker, an HR app and a file store, none of which knew what a villa, a booking, an add-on or an owner contract was. Staff had six logins and no single place to look, so the work continued to be set in the group chat.
The company now runs its operations from one app, with every task, photo and payment on the record.

Operations staff from 30 to 14, with more than EUR 150,000 a year saved.
The solution
Off-the-shelf task apps do not know what a villa is, so we built the operations app as custom code inside the company's own booking platform.
Every task knows its booking, its villa, its owner, its cost and the person doing it, because the booking is already in the same database. Roles and access came first, then the task record and photo evidence, then generation from bookings, then the manager app and rota, then money, then guest messaging and tickets, and last the owner view.
Roles and access
ZingZee built roles for staff, subcontractors, managers and owners, each seeing only what they need. Access is checked on the server for every request and fails closed: a person must hold the right entitlement and the specific capability before a write is accepted, so a cleaner cannot edit the rota and a subcontractor cannot see another contractor's jobs. Villa access details, gate codes and location are shown only to the person on the job, only while the task is open, and are changed in one place. Leavers lose access the day they leave. For the client this ended the storage of access codes in chat threads: a code changes once, in the villa record, and the next person on a job sees the new one.

Task generation from the booking
Every booking creates its own work. A set of rules, one per job type, says what a booking of a given shape needs, when it is scheduled, when it is due and which role does it. The rules run when a booking is created or changed, and a sweep covers every booking inside the next 30 days so a late booking or a date change still gets its tasks.
A worked example: a seven-night stay arriving on a Saturday, with a heated pool and a mid-stay clean on the Wednesday. The booking creates an inside clean on the previous guest's departure day, an outside clean, a pre-arrival check for a manager and a pool visit on the arrival day, and a linen delivery the day before. Towels are picked and packed three days before arrival, the heated pool is switched on three days before and off again at departure, the mid-stay clean lands on the Wednesday, and a departure check is created for the day the guest leaves. The inside clean is due on the next arrival at that villa rather than on the departure day, and when the next booking moves, its deadline moves with it.
Each task goes to the role that does that work, with a per-villa override for the regular contractor on that property; if nobody holds the role, the task is created unassigned and flagged red to the manager rather than silently dropped. Every add-on a guest books (hot tub, heated pool, baby cot, high chair, extra bed, linen change, mid-stay clean) creates its own task with its own date. For the client this removed the morning message: the day's work exists the moment the booking does, and a guest's heated pool is a task due three days before they arrive.
The manager app and the staff phone view
Managers plan from a rota of shifts (full day, first half or second half), a day view showing every task in hourly slots against the people on shift, and a task board showing what is open, in progress, done or late. A task can be reassigned to another person, and the app checks that the person is on shift and not already at another villa in that slot. Each member of staff sees their own day on the phone: the tasks in order, the villa, the access details, the checklist and the photos required. A task is started with a tap and the start time is recorded; it is completed only when the checklist is filled and the photos are taken, and the completion is timestamped and attributed. For the client this gave the operations manager a day that starts with a screen, every villa, every job, every person, every van on one page with the late ones at the top, and it replaced a message in a chat thread with a record that a manager, an owner, an accountant or a bank can read.
Evidence and checklists
Every job type carries a checklist, attached to the task by type, so a turnover clean always asks for the same rooms and the same photos. We rebuilt the company's existing checklists, which had lived in a separate form tool, as versioned forms inside the app; a published checklist cannot be edited in place, so a completed task always shows the version that was used. A failed item on an inspection raises a maintenance task on the spot, linked to the villa and the booking. Timestamped photos of every room on every turnover are taken before the guest arrives, and for a dispute the task record, the photos, the check-in time and the guest messages export as one evidence pack. For the client this gave every complaint a documented answer: the photo of that bathroom at that time, taken by that person, and a maintenance fault found by the team on the turnover before the guest arrived.
Work orders and owner billing
A job beyond routine care becomes a numbered work order. A manager raises it, attaches the quote or the owner's approval, and assigns it to a subcontractor, who sees only that order, with the villa access details for the day of the work. The contractor's photos and sign-off go on the order, and a subcontractor invoice attaches to a completed order before it can be approved, so every payment traces to a job and a second invoice for the same order is blocked. Each task and order is flagged inside the contract or rebillable, and a rebillable one carries the cost, the photos, the sign-off and the owner's approval and raises the owner invoice. Every payment for every job is logged to its task and every task to its villa, so the cost and profit of each property feed the accounting system. For the client this closed the gap that had cost the most: a pump replacement is now a work order with a photo, a cost, a sign-off and an owner invoice, raised the day the work is signed off.
Guest messaging and tickets
Guests message the company through a secure link emailed with the booking, and staff reply from the app. Each reply is also emailed to the guest, and every message shows where it came from: the guest in the chat, the guest by email, or a member of staff. A guest problem becomes a ticket on the booking, with a category, a villa, an owner and a deadline, and it stays open for a period after checkout so a complaint made after the stay is still answered against the record. If a guest is moved to another villa mid-stay, the ticket follows the booking to the new villa's team. An enquiry assistant works in its own lane with read-only access to villa facts and the right to raise a ticket, so a late-night question is logged for the morning without a person waking up. Each booking carries its service terms, so the person answering a ticket sees what was promised to that guest. For the client this ended the search through three inboxes to find what a guest had been told: the thread is on the booking, and so is the ticket.
Live location and hours
The app links to the vehicle tracking, so the task board shows who is on each job and where the van is. Every task has a start, an end and a person, and hours roll up by person and by week. Vehicle records and daily vehicle checks sit in the same app, alongside the HR and policy sections (leave, documents, procedures and policies). For the client this settled month-end: hours come from the task record, and a van's day is a list of jobs with times.
The owner view
Owners see every task on their villa, with the photos and the sign-off, without asking. Villas on a commission contract are in the same scope, so the team sees the work at those properties too and the owner sees the same record. For the client this replaced a phone call answered from memory with a record the owner can read at any time.
The engines that generate tasks and deadlines run under error monitoring, so a failure to create a task reaches ZingZee as an alert before it becomes a missing clean for the client.
How it was delivered
We delivered the app in phases over one off-season, each phase live to one team before the next began, with the old way running alongside until the team asked to switch it off. The order was cleaning first, then maintenance, then pools and gardens, then subcontractors.
- 01
Phase one: the record.
Roles, access, villas and the task record with photos. The cleaning team ran it for four weeks in parallel with the group chat, with a manager creating each day's tasks by hand from the spreadsheet, and the task record became the place where done was recorded.
- 02
Phase two: generation.
The booking rules were switched on in a dry-run mode that wrote what it would have created without creating anything, and a manager compared the dry run against the hand-made day for two weeks. Where the two disagreed, the rule was corrected, and only then did generation go live.
- 03
Phase three: the manager app and rota.
The rota, the day view, the board and task reassignment replaced the spreadsheet, and the maintenance team joined with work orders.
- 04
Phase four: money.
Task costs, subcontractor invoices attached to orders and the rebill flag, with the pool and garden teams and the subcontractors brought in, and the first owner invoices raised from tasks.
- 05
Phase five: guests and owners.
Guest chat, tickets, service terms per booking and the owner view.
Data rules were set before anything moved. Villas, owners and contracts came from the booking platform and were not retyped. The historical task lists from the old tools were imported once and marked as imported, and a duplicate guard stops the generator creating a second set where an imported set already covers a booking. A task, once created, is never deleted: it is completed, cancelled, reassigned or reopened, and every change is written to an audit log with who made it and when. Every write from the phone carries a request identifier, so a retry on a bad signal cannot create the same task twice.
Staff were trained one team at a time in a half-day session in a villa rather than a classroom, with a member of our team on the phone to the manager for the first week, and feedback went into the app the same week.
What was hard
- 01
Deadlines that move.
The inside clean is due when the next guest arrives rather than when the last one leaves, and next bookings change: they are extended, cut short, cancelled and replaced. The first version regenerated tasks whenever a booking changed, and it overwrote dates that a manager had moved by hand for a good reason. We changed the engine so a hand-moved date is protected: the generator recomputes the deadline from the new booking, and if that conflicts with a date a person set, it refuses to overwrite it and raises the conflict to the manager. The recomputation runs on both the booking change and the 30-day sweep, so a change missed at the moment it happened is caught within the day.
- 02
Catch-up generation under load.
When generation first went live it had to create tasks for every booking already inside the next 30 days at once, on the same server that serves guests booking on the website. The catch-up run contended with live requests for database connections and slowed the booking site for several minutes. We moved generation into its own background lane with its own connections, rate-limited the catch-up, and added a per-rule kill switch so any single rule can be paused without stopping the rest.
- 03
Two systems writing the same task.
During the parallel-running weeks, the old task lists and the new generator both described the same bookings, and the first week produced duplicate cleans. We added the imported marker and the duplicate guard described above, and an identity on each generated task (booking, villa, job type, date) so the engine can replay safely and always recognises a task it has already made.
The results
The company runs its operations from one app with 14 people where there were 30.
What's next
Predictive maintenance will flag a pump before it fails, from the inspection history on each villa. Guests will see that the villa is ready before they set off, from the completed pre-arrival check. The same app can run operations for another villa or property company with the same shape, and the rule set is the only part that changes.







