Blog
Thomas Sparegodt
Thomas SparegodtJune 19, 2026 · 7 min

Two weeks heads-down in the code

What we shipped in early June 2026 — told through the problems that drove it

Building software gets different when you sit close to the people who use it. A customer calls because an SMS didn't go through. Another writes because the vacation schedule only shows the current month. And suddenly it isn't a feature roadmap shaping the day — it's real problems landing on the table, one at a time, problems we need to understand before writing the first line of code.

Over the last two weeks we shipped a string of changes, each one starting as a concrete question from a single user. Here are the three we learned the most from.

When an SMS doesn't arrive

A customer wrote because some of their SMS messages weren't going out. The error looked like a normal delivery failure in the conversation thread, and that made them think their customers' numbers were wrong. In reality they'd hit a daily send limit — a safety feature that prevents abuse of our SMS gateway, but one we'd never explained clearly.

The error message was the problem, not the error. We built a new card in subscription settings that shows exactly how many SMS messages and emails have been sent today, and where the limit sits. When an SMS gets blocked by the limit, the conversation thread now says "limit reached" — not a generic "could not be delivered".

It's still the same limit. But now the user can see it, understand why it exists, and act on it. An SMS failure that feels like a bug is embarrassing. An SMS failure that points to a concrete account limit is just information.

A vacation overview that actually shows vacations

The old vacation overview was a list. You saw employee time-off as rows in a table, sorted by date, and if you wanted to know who was out in week 28, you had to count. That worked badly for an office manager planning two months ahead.

The new default view is a month grid. ISO weeks, vacations as horizontal bars spanning multiple days, each employee neatly in their own lane. You can still switch to a list, but the grid gives you the overview that planning actually needs — you see overlap, gaps and pressure in the same week at a glance.

The default range is now the next 90 days. The old date filter used payroll periods, which made sense for the payroll system but not for someone trying to find out whether two painters were on vacation at the same time. Inactive employees are hidden by default — small touch, but it removes noise from the list.

Inboxes as first-class objects

A cleaning company wanted to keep their email in Outlook and only forward the contact@ address to Clientflow. That should be simple. It wasn't — because inboxes in our system were tied to email domain verification, and if you hadn't verified a domain, there was no inbox to forward to.

We built a unified "Inboxes" tab in settings. You can create an inbox without a verified domain. You can map forwarding endpoints, phone numbers and email addresses to whichever inbox you choose. Every tenant gets a visible primary inbox from day one — so an inbound SMS before domain verification doesn't just disappear into a system filter.

It sounds technical. In practice it means a company using Clientflow for window cleaners can keep their existing email flow and just let Clientflow handle customer conversations — without having to move their entire domain first.

The best start week for a subscription

When you create a new subscription for a customer — say a monthly cleaning — you pick a start week. Until now the weeks were just a row of neutral buttons. But some weeks are better than others, because we're already in the area that week and a new stop costs almost no extra driving time.

Now the week buttons are tinted on a green-to-red scale based on how much extra drive time the new customer adds to the route. The greenest week is the cheapest to schedule. The reddest costs the most. It's computed from the actual subscriptions you already have in the area, not averages or estimates.

A small detail makes a real difference. When you hover a subscription row we pre-warm the calculation, so the colours are there the moment the dialog opens. It's the kind of thing the user doesn't notice — and that's the point. Route optimization should help you before you've planned the route, not just after.

Telephony: listen before you guess

A small but real problem: if you created a phone prompt by typing text and letting us generate the audio, the file got a name like "Welcome" — no file extension. Our PBX rejected the file because it couldn't tell it was an MP3. The user just saw a "could not generate audio" error.

We now send both the storage path and the MIME type along, so the system validates on the right field. Errors like that are easy to overlook because they only hit a small slice of users. But they hit hard — for the person stuck with a phone setup that doesn't work, one cryptic error is one too many.

At the same time we made "no answer" recordings available in both queue modes, not just when voicemail is on. If you just want to play a message and hang up, you can now do that. If you want to play a message and let the caller leave one, you can do that too. Those are two different things, and they deserve two different buttons.

What we haven't shown on screen

Half of the last two weeks of work isn't visible. We've sharpened our error monitoring so we catch problems faster. We've tightened the security around SMS sending so demo tenants can't abuse our gateway. We've added automatic supervision on top of every deployment, so we see when a function didn't quite make it out the door.

That's the work that makes everything else feel reliable. A platform that runs smoothly isn't one that never has problems — it's one where the problems get caught before the user notices them. We're getting better at it month by month.

What I take away

The things I'm happiest to have shipped aren't the biggest features. They're the ones where we fixed a wrong impression — an SMS limit that looked like a bug, a vacation list that looked like a spreadsheet, a colourless week picker that wasn't telling you what you needed to know.

When I talk to service-business owners using something else today — say an alternative to Ordrestyring — it's never features they're missing. It's explanations. Why didn't it work? Why does it look like that? Where do I find it? That's where we try to win.

Want to see it for yourself?

Try Clientflow free for a week.

Try demo