We took the whole thing apart, and put it back properly.
This is the largest update CleanFlo has had. The website and the app have both been redrawn end to end, thirteen things are new or rebuilt, and a long list of things that were quietly wrong are now right. Here is all of it, and why we did it in one go.
First: we're offline Sunday, 9pm–1am- Entered
- Fri 14 Aug 2026
- Scope
- 205 files · 8 database changes
- Redrawn
- Every screen, site and app
- Checked
- 1,066 tests · 0 contrast failures
We're moving servers on Sunday night.
CleanFlo will be unavailable from 9pm on Sunday 16 August until around 1am. It is the quietest window in a cleaning week: Sunday evening's rota is already set, and Monday's first job has not started.
Nothing you have entered is affected, and nothing needs doing at your end. We are moving onto new infrastructure, and the reason is speed: ours, not the app's. On the new setup a change ships in minutes rather than taking an evening, which means new features land sooner and a bug you report gets fixed in days instead of waiting for the end of the month. This update took a fortnight to get out of the door. The next one should not.
- 21:00 CleanFlo goes offline Sunday 16 August
- 01:00 Back up, or sooner Monday 17 August
Four hours. Nothing to do at your end.
- If you would rather have Monday's rota to hand, take a copy before 9pm on Sunday.
- Cleaners already carrying their jobs on their phones keep them: the cleaner app is built to work with no signal and syncs when we are back.
- If we are still down after 1am, this page will say so. It is the page we will update, so it is the one worth checking.
Why we did all of it at once.
In August we stopped adding things and read the product instead: every screen, every background job, every claim on this website. We wrote down what we found rather than what we hoped.
Plenty of it was good. The offline queue your cleaners depend on is solid. The design system underneath the app was better than what the app was doing with it.
Some of it was not. Figures that quietly disagreed with each other. Work being lost when a phone went back a screen. And a handful of things this website promised before the product could keep them.
Shipping it as one update rather than dripping it out over six months was deliberate. Half of this is corrections, and a correction is worth less the longer it sits on a private list.
One company, on both sides of the login.
CleanFlo is a day book now, because a day book is what a cleaning business actually runs on. Jobs written down. Cleaners assigned in the margin. A quote scribbled in a van. Invoices ruled off at the end of the month, and a stamp on the things that are finished. Ledger paper, a red margin rule, one teal doing all the signalling, and times set the way a typewriter sets them.
That is new on both sides of the login. This website has been rebuilt on it and so has every screen of the app: the dashboard, the schedule, clients, health & safety, invoicing, messages, the client portal, the cleaner's app and the sign-in page. cleanflo.io and the software you sign in to were two different-looking products, made by what appeared to be two different companies. There is one now.
It is not decoration. A job's status reads the same way everywhere it appears, so a colour means one thing across the whole product instead of three. And every text colour in the app is checked against its background on each build: the build that shipped this had no failures.
What's new.
Two audiences, and they want different things. The office wants to stop chasing. The cleaner wants to know where to be and get out without a phone call.
For the office
- New
Job reports you can send a client
A finished job now prints as a plain A4 document: when the cleaner arrived and left, what was on the checklist, what they noted, what they photographed. You produce it from the job; your client downloads their own from the portal. There is no price on it, because that belongs on the invoice, and no map of where anybody's phone was, because that is your business and not your client's.
- New
Late alerts
Every five minutes CleanFlo looks for a job that should have started and hasn't. It nudges the cleaner first, in a tone that assumes traffic rather than absence, and then tells you. You set the threshold, because ten minutes late on a holiday-let changeover is not ten minutes late on an office at six in the morning. Zero switches it off.
- New
A compliance vault, and method statements
Health & Safety now has somewhere for documents to live, and RAMS finally has its MS: method statements sit alongside your risk assessments instead of in an email thread.
- New
The compliance score on your dashboard
It lived on the Health & Safety page. A number your contracts are judged on belongs on the front page, so that is where it is.
- New
Unique payment references on every invoice
Each invoice carries its own reference, on the document and on both of the emails that send it, so a BACS payment arrives already matched to the job it paid for.
- Better
Photo proof you can actually look at
Photographs open full screen and page with a swipe or an arrow key, and a bad shot can be deleted rather than living next to the good one forever.
- Better
Three ways to add a cleaner
By email invitation, by a link you share in the group chat, or entered directly. Accepting one works properly on a phone, which is where it is always accepted.
For the cleaner
- New
“On my way”
One tap before setting off. A van appears against the job on the office's schedule, and anyone who has said they are en route is not then nudged for being late.
- New
One-tap shift confirmation
One question on the job screen, one answer, and a tick on the calendar. A job nobody has confirmed shows nothing at all rather than a warning: not answering yet is not the same as saying no.
- New
Jobs that were missed can still be closed
A job nobody tapped used to disappear the next morning and could only ever be fixed by an admin. Unclosed work now stays visible for 28 days as “Needs completing”. Closing one asks why, from six deliberately blameless reasons, because most of these are jobs that were done and not tapped.
- New
A nudge if a job is left running
Four hours past the expected finish, one question: still on site? A job left open overnight breaks the cleaner's own hours and leaves the client with no completion email, and neither is worth a telling-off.
- Better
The site brief, where it is needed
Access notes, key safe details and what the property actually is now reach the person standing at the door. Getting in comes first, because standing on a doorstep unable to open a key safe is the failure this prevents.
- Better
27 languages, finished
Twenty-six of the twenty-seven were up to fifty phrases short and fell back to English mid-screen. All twenty-seven are complete. The app matches your phone's language the first time you open it, and Arabic and Urdu mirror properly, every screen and every arrow, with times still reading left to right.
What we fixed.
The unglamorous half, and the half that took the longest. Each of these was live. None of them is now.
- Job photographs reach storage. They were being filed under a value the app never actually had, so some of them never arrived at all.
- Notes typed during a shift save as they are typed. Tapping back used to throw away everything a cleaner had written.
- Deleting an invoice releases its jobs. They used to be stranded and could never be billed again. The ones already stranded have been repaired.
- Revenue per client is counted once. Reports, the printed report and the CSV were each adding the jobs and the invoices those same jobs produced.
- The on-time rate counts only jobs that were measured. Everything older than the measurement was quietly counted as on time. A window with nothing measured now reads a dash, because zero would be a claim about the cleaner.
- Notifications to the office arrive. Seven places were sending to a role that does not exist, and reporting success every time.
- Historic risk assessments read “Not scored”, not “Critical”. Unscored legacy hazards were printing as critical on the document you hand an inspector.
- No hourly interruption. A tab left open used to blank itself to “Loading your workspace” about once an hour, taking a half-typed invoice with it.
- Long-standing customers are treated as long-standing customers. A few were being offered the setup wizard, and a few were being offered a free trial they had already had.
- CSV exports survive Excel. One export now, properly escaped, and safe to open whatever is in your client names.
And the part you can't see.
Every background job that sends an email or a push notification now checks who is asking before it does anything, and reads the details from your own records rather than from whatever it was handed. Files attached to messages are locked to the company that owns them.
The database changes went out on 14 August. Every customer's records were counted before and after, and the counts matched.