Aquatic Artists custom waterfall
Categories
Flow

Website monitoring found five false alarms and one real bug

The website monitor went off at 6 a.m. Something was wrong with one of our sites. I pulled up the alert, looked at the flagged section, and everything looked fine to me. I closed the laptop and went back to my coffee.

That happened six times over two weeks. Five of those times, I was right to dismiss it. The sixth time, I was wrong – and a real bug had been sitting there, visible to customers, for longer than I’d like to admit.

When website monitoring alerts cry wolf

We run automated website monitoring that checks our sites regularly and flags anything that looks off. It compares page sections against a baseline – layout, content, key elements. When something drifts far enough from the baseline, it fires an alert.

The problem is that not every change is a problem. A font loads slightly differently on a Tuesday. An image swaps out because we updated the gallery. The comparison tool sees the difference and sends the alarm. Five of our six recent alerts fell into that category: legitimate changes the monitor didn’t recognize as intentional.

The issue with that pattern is obvious. Once alerts fire often enough for non-problems, you start dismissing them faster. Your response time to a real issue quietly gets worse.

So we dug into every one of those six alerts properly, traced each one back to its actual root cause, and fixed the detection logic where it was overly sensitive. That part is maintenance work. Not exciting. Worth doing.

The real bug: a project gallery failed on first load

The sixth alert pointed to a project gallery section – the part of a page that shows photos of completed work. When I loaded the page and clicked around, it looked fine. Images loaded, captions appeared, everything worked.

What I hadn’t done was run a first-load website test: load the page fresh and just wait.

A customer who lands on that page for the first time, scrolls to the gallery section, and doesn’t immediately click on anything – they would have seen a blank space. The gallery wasn’t rendering on initial page load. It only appeared after some interaction triggered a refresh.

We’d been testing from inside the system, navigating page to page while logged in. The bug only appeared when you came in cold, the way a real visitor does. Once we loaded pages fresh from outside, the issue was obvious. Fix took less than an hour once we understood it.

The lesson: test from the outside. Your workflow and your customers’ workflow are not the same path.

Backup verification has to check the destination

During this same debugging window, we found something unrelated but equally worth writing about.

Our automated backups were running. They were completing. They reported success. But we hadn’t looked closely at where the files were actually landing. When we checked, they’d been routing to the wrong cloud account – one we had access to, technically, but not the right destination for a real recovery scenario.

For weeks, our backups were “working” – no error ever appeared. But if we’d needed to restore something, we’d have been digging in the wrong place under pressure.

The rule we wrote after this: backups must fail in a way you notice, not succeed in a way you never verify. An automated process that completes quietly and routes output somewhere wrong is worse than one that breaks loudly. A loud failure gets fixed. A silent mismatch can sit there for months.

Now our backup jobs verify destination and file count as part of their completion check. If the numbers don’t match expectations, the alert goes to a human. Not a log entry. A human.

Verify backups before website upgrades

In the same week, we upgraded WordPress to version 7.0. New security patches, compatibility updates, the usual.

The rule before any significant website upgrade is simple: confirm the backup exists and that you can actually restore from it, then proceed. Not “I think the backup ran.” Confirm it. Pull a recent file from it.

The upgrade went fine. But that discipline is what makes an upgrade something you do on a Tuesday afternoon instead of scheduling a Saturday for it. A verified backup means a bad upgrade is a two-hour recovery, not a crisis.

Using an AI coordinator without giving it the keys

One more thing worth explaining: we started using an AI coordinator we call “jefe.” The name is intentional. Jefe’s job is to direct, not to do.

When we have a complex task, jefe breaks it into pieces, assigns each piece to a specialized AI assistant, and collects the results. It never edits a file or makes a change directly. It only coordinates.

I built it this way because I watched what went wrong when a single AI assistant tried to handle too many things at once: mixed-up context, lost steps, fixes from one area getting applied to problems in another. One coordinator plus focused specialists plus a human reviewing the output works noticeably better than one assistant trying to do everything.

The structure matters more to me than whichever model happens to be newest that week: a director that does not touch the work, specialists that stay in their lane, and a human who checks before anything ships. That is how I keep AI useful without letting it run the business by itself.

Tuning monitoring alerts lowers noise but adds risk

Jefe can delegate to the wrong specialist, or two specialists can return conflicting answers. The human review step isn’t optional or a formality. More than once, the consolidated report has included a finding that was just wrong, and a human caught it.

The monitoring tuning is also not a permanent fix. Reducing false positives means the thresholds are less sensitive, which means a real issue might take slightly longer to trigger. We accepted that tradeoff deliberately and will revisit it if something slips through.

Check one automated business process this week

Pick one automated process in your business this week – a backup job, a scheduled report, a recurring email – and check the actual output, not just whether it ran. Did the backup land where you expected? Does the file open? Is the report showing the right data?

This takes about five minutes. It has saved us more than once.

Categories
Flow

How we used AI audits for SEO, social media, and security

Over a couple of days in early June, I pointed AI assistants at three separate corners of our operation: our websites, our social media history, and our security configuration. They worked through the night. By morning I had prioritized lists of findings across all three areas: website SEO, content patterns, and access risks.

What we got back was useful. What the experience taught us about how to use AI for this kind of work was more useful.

A website SEO audit across 325 pages

Between our two companies, we have a lot of web pages. Product pages, project galleries, service descriptions, blog posts. I honestly don’t know the last time anyone sat down and systematically checked whether they were all set up well for search, especially the project pages a homeowner or facility manager might find while comparing contractors.

We ran an AI assistant through both sites – more than 325 URLs – and had it flag every page with a missing description, a title that was too long or too short, images without descriptive text, thin content, or pages that were slow to load. It worked through them methodically and produced a queue of small-business SEO findings.

Here’s the part that matters for how we set this up: the AI flagged and queued every issue. It did not change anything on its own. Before a single word changed on any page, a human reviewed the finding and approved the fix.

That gated approval step sounds like extra work, and honestly, it is a little. But an AI assistant that can edit your website without asking is a liability wrapped in a convenience. For anything customer-facing, the pattern we use is: the AI proposes, a human approves, then the AI executes. That sequence gives you the efficiency of automation without the risk of waking up to a homepage that now says something you didn’t intend.

A social media content audit

Separately, we had a team of AI agents review two months of posts across our social channels: what was getting engagement, what was falling flat, what felt off-brand, and what was redundant with something we’d already said.

We used sixteen agents working through the archive in parallel, each covering a slice of the content. Not because you need sixteen AI assistants to read Instagram posts, but because splitting the work that way meant we got results in minutes instead of waiting for one agent to work through everything sequentially. A human read the consolidated summary and made the actual decisions.

The findings weren’t dramatic. A few things we’d guessed were confirmed. A few patterns we hadn’t noticed showed up clearly. One recurring theme: posts that led with a specific project detail consistently outperformed posts that led with a general statement about what we do. Good to know, and costs nothing to act on.

A security and access review

The third audit was less glamorous but probably the most important: a sweep of our credentials, configurations, and access controls. For a trades business, that still matters. Customer information, email accounts, website logins, and backup destinations are all part of the operation now.

We set up 14 AI investigators to work through 14 categories simultaneously: which accounts had unnecessary access, whether any old access credentials were still active, whether backup configurations were pointed at the right destinations. Each investigator produced a finding. A human reviewed the consolidated report and triaged what needed fixing.

Fourteen findings came back. We fixed what needed fixing. None of it was catastrophic, but several things had drifted over time into states we wouldn’t have chosen deliberately. The kind of quiet accumulation that happens when you’re focused on building and not on auditing.

Why I used several AI audit assistants

One thing I have learned using AI is that different models and different prompts behave differently. AI is great, but it is not infallible. Sometimes the answer is correct for a different situation than the one you are actually in. Sometimes one assistant catches what another one misses.

That is why we split the audit into specialists. One looked at SEO. One looked at social posts. One looked at access and security. Then a human read the combined report. The value was not that one giant AI knew everything. The value was that several focused passes gave me better raw material to judge.

AI audit findings still need human judgment

AI audits surface findings, not wisdom. An SEO tool will flag every page with a description under a certain length, but sometimes a short description is intentional. A security scan can’t replace a human who understands your specific business context: what’s sensitive, what’s legacy by design, what the acceptable tradeoffs are.

Use the list as a starting point, not a checklist to execute blindly. The AI found 14 security items. A human had to decide which 14 mattered in what order, and whether any of them were false positives. Two of them were.

The same applies to SEO findings. More words on a page isn’t always better. A recommendation is a recommendation, not an instruction.

Start with a simple website SEO audit

If you haven’t looked at your website’s SEO setup in the past year, that’s a reasonable first project. Most website platforms (WordPress, Squarespace, Wix) have free or low-cost SEO audit tools you can run yourself without any AI involved. PageSpeed Insights from Google is free and takes about 30 seconds.

If you find more than you want to tackle alone, that’s exactly what the SBDCs are for.

Categories
Flow

One master price list, frozen customer quotes

A customer called to confirm a proposal we’d sent a few weeks earlier. Simple question: “Is that price still good?” I should have been able to answer in five seconds. Instead I spent two minutes cross-referencing three different places while she waited on the line: our CRM (the software we use to track customers and jobs), an older pricing spreadsheet, and whatever our AI assistant had on file from its last sync.

None of them matched exactly. That was the problem.

Why small-business pricing drifts across systems

When you run a small business or contracting company, pricing has a way of multiplying across systems. The original lives in a spreadsheet. Someone pastes a copy into the customer-tracking software. The AI assistant learned from a snapshot that’s now three months old. The website shows a range nobody has updated since last year. None of this is careless. It’s just what happens when you’re moving fast and there’s no rule about where the number officially lives.

The drift is slow and mostly invisible. Until a customer catches it.

Make one master price list the source of truth

We settled on a rule: the master Excel workbook is the source of truth. Every price in every other system has to trace back to that one file. The AI assistant reads from it and doesn’t fill in numbers on its own. The CRM syncs from it. If there’s ever a conflict, the Excel wins.

People in tech call this a “single source of truth.” The plain-English version: there is exactly one place where the right answer lives, and every person and every tool knows to check there first.

Getting there required cleanup. We went through the customer-tracking software and removed duplicate product rows that had crept in over time. We reconciled the project gallery pricing with what was in the workbook. It took a few days of careful work. After that, the AI’s answers stopped drifting.

Freeze customer quotes after they leave the shop

While we were doing this reconciliation, we found something that made us stop cold.

Saving a project record in the CRM was silently pulling in the current live price for each line item – even on records that already had a customer-facing quote attached. So a job we’d quoted to a customer at last month’s pricing could have its numbers quietly updated to today’s pricing the next time anyone opened and saved that record. No warning. No change log entry in plain sight. The numbers just changed.

We fixed the bug. But we also made a quote-management policy that doesn’t depend on the code being perfect: a line item that has been quoted to a customer is frozen. The AI cannot touch it. A human has to deliberately override it if circumstances genuinely require a change, and that action gets logged.

The principle generalizes to any business that sends proposals. Once you’ve told a customer a price, that price is a commitment. Your systems need to treat it that way, not leave it open for automated updates to drift through.

Website speed matters while customers compare quotes

While we were cleaning up the data layer, we also pushed both of our websites past 90 on Google’s PageSpeed test. It sounds like a technical metric, but the practical effect is real: slow pages lose visitors before they’ve read a word. Some fixes were straightforward – image compression, removing a few scripts that were loading before the page content. Others took a little more digging. Worth it.

Speed is one of those things that doesn’t feel urgent until you realize a potential customer bounced in the two seconds your homepage was loading.

AI pricing tools need pinned source data

I use more than one AI model because each platform has strengths and weaknesses. One might be better at coding, one might be better at writing, and one might reason through a messy problem better on a given day. That is useful, but it also means the instruction has to be clear and the data has to be pinned down.

If the tool is reading from the master spreadsheet correctly, a model change should not cause price drift. If the instruction is vague and the source is stale, you are asking the AI to improvise with customer money. That is not a place I want improvisation.

Automation still needs a maintained price list

The AI syncing to the master spreadsheet only works if someone maintains the master spreadsheet. If prices change and nobody updates the workbook, the AI will confidently quote the old number right up until a customer points out the problem.

Automation doesn’t remove the responsibility to keep your data current. It just makes the consequences of not doing so more consistent – and therefore more visible when something goes wrong.

A simple pricing audit to run first

Pick the single most-quoted price in your business. Find every place that number lives. Write down which one is official. If you can point everyone – and every tool – at that one place, you’ve closed a gap that causes more small-business headaches than most people realize.

If you’ve already done that, check when it was last updated. The master list is only as good as the last time someone touched it.

Categories
Flow

Moving our AI platform without business downtime

Picture moving your whole shop across town over a weekend. Every tool, every piece of equipment, every file cabinet. Monday morning your crew shows up and everything is where it belongs. Nobody missed a call. Nobody lost an estimate. The customers have no idea anything happened.

That’s what we pulled off last week with our AI platform, and I want to tell you about the boring work that made it possible – because business downtime is not an abstract technology problem when your phone, CRM, and job schedule all depend on the same system.

Why AI platform reliability matters

Most AI coverage focuses on the visible wins. Voice assistants. Automated quotes. Smart scheduling. That stuff matters, and it does save real hours.

What rarely gets mentioned is the infrastructure underneath it. Moving a platform that handles customer calls, CRM data (that’s the contact and job database – your digital Rolodex), voice agents, and automated tasks to brand-new hosting is nerve-racking. One misconfigured server, one missing database file, one deploy that lands on the wrong machine – and you’re explaining to customers why nobody picked up the phone on Tuesday.

We had been running our operation on one hosting setup for a while. It worked, but we’d grown: more services, more data, more things that mattered. The new hosting was faster and better spec’d. But knowing it’s the right move and actually making the move without breaking anything are two very different problems.

The backup and recovery prep that saved us

Here’s what we did before we touched a single live system.

Backups, then backups of the backups. I know that sounds obvious, but I mean current, tested backups – not the ones you set up six months ago and assumed were running. We verified every database, every recording, every config file. If we had to roll back, we’d be rolling back to something real.

A warm standby. Think of this like staging a second crew truck with all the same tools. The new server was fully configured and tested weeks before the cutover. We ran it in parallel, not live, until we were confident.

Disaster-recovery drills. This is the one most shops skip. We actually practiced the restore. Not on the real system – on a copy. We blew it up on purpose and timed how long it took to come back. You do not want the first time your team runs a backup restore procedure to be during an actual emergency.

Here’s the moment that made me glad we ran the drill. Halfway through the practice restore, the voice-agent database came back up but pointed at the wrong config file – a leftover from the old server setup. The agents started, looked healthy, and would have answered calls with stale routing rules. On a test copy, that’s a finding. On cutover day with customers calling, that’s an incident. We caught it, fixed the config, documented the step, and added it to the checklist. Forty minutes of drill time, potentially hours of customer-facing grief avoided.

Host-aware deployment. When you’re managing multiple servers, you can end up in a situation where a deploy – think of it like sending a new version of a tool to your crew – lands on the wrong machine. We labeled everything so the system knows which server it’s talking to and refuses to run a job on the wrong host.

Think of it like color-coded key tags on a truck fleet. The red tag goes with Truck 1, the blue tag goes with Truck 2, and if someone grabs the wrong keys the ignition won’t turn. That’s roughly what this does for software. It sounds simple. It prevents a whole category of expensive mistakes.

What happened during the hosting migration

We moved on a Saturday. We had a checklist, we had a rollback plan, and we’d tested both. By Sunday afternoon, everything was running on the new platform. Voice agents answering calls. CRM accessible. Automated jobs running on their usual schedule.

Monday morning: no customer emails asking why something was broken. No missed calls showing up in the logs. Nothing. The migration was invisible from the outside, which is exactly what you want.

What downtime planning still won’t protect you from

I won’t pretend this was quick. The prep work I described above took several weekends. Backups had to be verified, not just assumed. The warm standby had to be configured correctly, not just spun up. The DR drills took time to design and run.

If you skip the prep and just move, you’ll probably be fine. Until you’re not. And the day you’re not is the day a customer calls and nothing answers, or an estimate goes missing, or a payment doesn’t process. At that point you’re not thinking about how much time the prep would have taken. You’re thinking about how fast you can fix it.

The boring work is what keeps the phones, quotes, and crews moving.

A downtime checklist for a small business

If your business runs on any software you depend on – scheduling, CRM, phone system, website – find out when the last backup ran and whether anyone has ever tested the restore. Not “does a backup exist.” Does the restore actually work.

That’s the question that matters. And most small businesses don’t know the answer until something breaks.

If you want to talk through what a simple backup-and-recovery approach looks like for a shop your size, reach out. It’s one of those things that’s less complicated than it sounds once you’ve done it once.

Categories
Flow

Cleaning up AI-generated code after the robot ships

I’m going to tell you something that doesn’t make it into most AI hype pieces: after a big AI-assisted development sprint, you open the codebase and it looks like a job trailer after a long install week. Things everywhere. Half-finished ideas. The same logic written three different ways in three different files. Perfectly functional, mostly, but you would not want to hand it to anyone else and call it done.

This is not a knock on AI tools. The speed is real. In a week of heavy AI-assisted coding we’ll ship more working features than we’d have managed in three weeks doing it by hand. But “working” and “clean” are not the same thing, and in software, same as in a waterfall build, the difference shows up later. You either deal with it now, or you deal with it at a worse time, under more pressure, when you can least afford it.

This past week we did a full cleanup pass on a big chunk of our small business automation platform. Here’s what that looks like and why it matters.

What AI-generated code clutter actually is

When you ask an AI coding assistant to build something, it solves the problem you gave it. It doesn’t automatically know about the solution you built six weeks ago that does half the same thing. It doesn’t keep a running sense of what the overall system should look like. It focuses, it ships, and it moves on.

The result is that over time you get modules that ballooned to five times a healthy size, logic that’s been duplicated in three places when one would do, and functions that were written once for a specific situation and then never touched again even when the situation changed. None of it is broken. All of it is weight.

Our cleanup pass this week split several oversized files into smaller, focused pieces. We found three separate places doing the same data lookup and consolidated them into one. We deleted roughly a thousand lines that were doing nothing useful. The working behavior didn’t change. The system got easier to reason about, like organizing a parts room after a busy season so the new hire can actually find things.

A clean codebase is also much easier for an AI assistant to understand and improve. When the structure is obvious, the AI spends fewer tokens figuring out where things live and less time guessing which duplicate helper is the real one. That means less wasted context, fewer wrong turns, and better outcomes when I ask it to make the next change.

Automated tests are the acceptance checklist for AI automation

Here’s the part I want to emphasize, because it’s the thing that makes the cleanup meaningful rather than cosmetic.

When you tidy a parts room, you know it worked because you can see the parts on the shelf. When you reorganize software, “it looks better” isn’t enough. You need to know it still works exactly as it did before. That’s what automated tests are for.

A test is a small program that checks one specific thing. “When this input comes in, this output should come out.” We write tests before we clean up code, run them after, and if they all pass, we know the cleanup didn’t break anything. If one fails, we know exactly what broke and where.

For a business owner, the practical point is this: if you’re going to trust AI automation with anything important, like customer communications, scheduling, or estimates, you need a way to verify that the automation is still doing what you think it’s doing. Tests are that verification. Without them, you find out something broke when a customer tells you. With them, you find out before anyone sends an email.

We added a meaningful number of tests this week to code that had been running in production without them. It’s the kind of work that doesn’t feel urgent until it suddenly is.

A small business automation example: email that files itself

While we were doing the cleanup sprint, we also shipped something that has nothing to do with code tidiness but is a good example of AI automation for a small business that earns its keep quietly: automatic email-to-record linking.

Before this, an email from a customer about a job would land in the inbox and someone had to drag it to the right folder, paste the key parts into the CRM, or just try to remember what was said. Ten ongoing projects means ten chances to miss something.

Now the system reads incoming email, figures out which customer and which job it’s about, and attaches it to the right record automatically. Open a project in the CRM and the relevant thread is already there. No filing, no copy-pasting.

It doesn’t do anything a diligent office manager couldn’t do manually. But it does it on every email, every time, without forgetting. That consistency is the whole point.

Good AI workflows beat chasing every new release

It is almost scary how fast the AI coding tools are improving. I have used tools that feel close to zero-code for certain jobs, and that would have sounded like science fiction not very long ago.

But the teams getting real value from AI tools are not the ones jumping to whatever launched last Tuesday. They’re the ones who picked a set of tools, got good at using them, and built the cleanup habit around them.

The cleanup work we did this week, testing, consolidating, removing AI-generated clutter, applies regardless of what model is running. Habits matter more than the latest release. A tidy, well-tested automation on a good-enough model will outperform a messy, untested one on the newest model.

AI code cleanup still takes a human eye

Cleanup takes real time. I spent the better part of a week on it, and that’s a week I wasn’t shipping new features. That’s the right call, but it’s a call that requires discipline. The pressure to keep adding things is constant. The pressure to tidy what’s already there is quieter and easier to defer.

The automated tests caught a few things during cleanup, but they can’t catch everything. A test only checks what you thought to write a test for. Tests reduce the risk. They don’t eliminate it.

The email auto-linking isn’t right 100% of the time either. Occasionally an email attaches to the wrong record, usually when a customer mentions multiple projects in one message. We do a periodic review to catch mis-files. The automation handles the routine; a human handles the edge cases.

The rule I’ve settled on: after any AI-assisted sprint, schedule a cleanup pass before moving to the next thing. Even an afternoon spent deleting what you don’t need, consolidating what’s duplicated, and writing one test for the thing that would hurt most to have break silently pays back more than it costs.

The robot builds fast. Cleaning up after it is still your job.

Categories
Flow

AI phone answering for contractors, with a human handoff

A few weeks back we got a call from a pool builder. He was on-site, asking about spec details for one of our waterfall systems. It was the kind of question where getting it wrong means someone orders the wrong thing and a job gets delayed. He was standing about ten feet from an excavator.

Our AI phone assistant picked up. And then, for a long moment, it could not figure out what he was saying.

It wasn’t a disaster. He called back, got a person, got the answer. But it stuck with me. Pool builders and landscape contractors don’t call from quiet offices. They call from job trailers with compressors running, from trucks on the highway, from backyards where a crew is cutting block. If your AI phone answering system can’t handle that, it’s not useful for the people you most need to reach.

That was the starting point for a round of upgrades we pushed through this month.

AI phone answering starts with better audio

The first fix was noise cancellation on the audio side. Before the AI assistant ever tries to understand what a caller is saying, the audio gets filtered. Background noise, wind, machinery, anything that’s consistent and predictable gets stripped out before transcription starts.

Transcription is the step where spoken audio becomes text, and it’s where most voice AI fails. Once you have clean text, the AI can actually figure out what someone wants. But if the input is half-static and half-words, the transcription is garbage and everything downstream is a guess.

We also upgraded the speech-to-text engine itself. The practical result is that the assistant handles noisy jobsite calls noticeably better. Not perfectly. A nail gun at close range is still a nail gun. But well enough that calls which were previously failing are now going through cleanly.

The key feature is knowing when to hand off

Here’s the thing about AI phone assistants that most demos don’t show you. A well-designed AI can answer a lot of common questions well: hours, pricing tiers, basic product specs, how to schedule a callback, where to find information on the website. It can take a message with the right details. It can book a time slot.

But a contractor asking a technical specification question under time pressure is a different situation. The wrong answer there doesn’t just fail to help. It actively causes a problem.

What we built is a human handoff system. The AI assistant knows its own limits. When a call goes past what it can handle confidently, like a detailed technical question, a scope-of-work discussion, or anything where a wrong answer has real consequences, it routes the call to the right person on our team, with context about what was already discussed.

The caller doesn’t start from scratch. The assistant summarizes what it captured so far, the specialist picks up mid-conversation, and the whole thing feels like one call instead of two. The AI handled what it could. A person handled what it couldn’t. Nobody guessed.

This is the part of voice AI that I think matters most for contractor businesses. The value isn’t in having a robot try to answer every question. It’s in making sure the right questions reach the right people without falling through the cracks.

Searchable meeting transcripts for contractor teams

We also wired up a separate but related piece: the conference room mic and meeting transcription. We have a small hardware setup, just a dedicated mic and a button to start recording, that captures our internal meetings and produces a speaker-labeled transcript. The AI figures out who said what based on voice patterns, and the result gets stored where anyone on the team can search it.

The reason this matters for a small shop is simple. We have four or five people who need to know what was decided in a meeting they didn’t attend. Before this, someone took notes. Sometimes the notes were good. Sometimes they were a few bullet points that made sense in the moment and nothing three days later. Now the full transcript is searchable, and if someone needs to find the exact thing Chuck said about the Henderson project, they can find it in about thirty seconds.

Trades and contractor businesses run on verbal decisions. Job change orders get discussed on-site and sometimes never make it to paper. Having a searchable record of what was actually said isn’t a luxury. It’s the kind of thing that prevents real disputes.

Where AI call routing is useful for the trades

If I were explaining this to another contractor, I would not start with the AI part. I would start with the missed-call part. A builder calls after hours. A homeowner calls while you are on a job site. A supplier calls with a question that needs to land with the right person. Those are real moments where work gets won, lost, or delayed.

Phone answering fits squarely in that category. A missed call from a builder who’s deciding between two waterfall vendors is a real cost. An AI answering service that picks up, gets the basic information, and either handles the question or routes it correctly, that’s the whole job.

What AI phone answering can’t fix on its own

A handoff only works if the right human is available to receive it. We set ours up with fallback routing, but there are still calls that go to voicemail because everyone is out in the field. The AI can’t conjure a person who isn’t there.

Meeting transcripts are also not perfect. The speaker identification works well most of the time but occasionally attributes a line to the wrong person, especially when two people speak at the same time or someone is remote on a phone line. We spot-check important transcripts before treating them as the record of record. They’re a first draft, not a court document.

And none of this changes the fact that for certain calls, like complex estimates, scope negotiations, or anything with a difficult customer, a person needs to handle it from the start. The AI assistant is good at coverage and triage. It’s not good at nuance, and we don’t ask it to be.

If you’re thinking about voice AI for your business, the practical test is this: call your own number from a loud location. See what happens. If the AI can’t hear you, it can’t hear your customers either. That’s the first thing to fix.

Categories
Flow

Renting cloud GPUs for AI video by the hour

At some point last year I looked up what it actually costs to run AI video processing on hardware you own. A workstation spec’d for serious AI video work – the kind that handles upscaling and frame interpolation without turning into a space heater – runs $8,000 to $12,000. That’s before you factor in that it would sit idle for most of the year. Most of our video projects are assisted with AI, but not fully generated using AI. The math does not work for a small contractor.

The computing power AI video needs is genuinely enormous. When I tried running an upscaling job on my regular laptop, the fan spun up like a jet engine and the machine was unusable for anything else. Two hours in, the job was maybe a third done. I killed it. That’s not a workflow – that’s an obstacle.

The problem isn’t that the tools don’t work. They work well. The problem is that the hardware underneath them is built for studios and research labs, not for a shop that wants to polish forty minutes of jobsite footage before a client presentation. Nobody running a waterfall, pool, or landscape business is going to drop five figures on a workstation they’d use twenty times a year.

Cloud GPU rental works like renting a lift

Cloud GPUs work like equipment rental. A GPU, short for graphics processing unit, is the specific kind of chip that handles heavy video and AI work. The big tech providers have warehouses full of them, and they’ll let you use one for an hour or a day, then hand it back.

We hooked our AI video pipeline into a remote job broker. That’s a piece of software that takes a heavy task, sends it to a rented GPU in a data center somewhere, runs it, and ships the finished file back to us. The whole thing looks like a button click on our end. We pay for the compute time we actually used. For a forty-minute AI video upscaling job, that’s a few dollars, not a few thousand.

AI upscaling takes a lower-resolution video and rebuilds it at higher quality using pattern recognition. The model has seen enough video to make educated guesses about what the missing detail should look like. Frame interpolation adds smoothed frames between the original ones, so slow-motion footage looks cinematic instead of choppy. Neither one is magic, but both are real, and the results are good enough to put in front of clients.

We also do AI thumbnail generation and SEO scoring for our YouTube channel through the same setup. The video marketing work that used to take a morning now runs overnight in the cloud while nobody’s watching.

Why we test AI automation in a sandbox

The other thing we built around the same time is what I call a sandbox, and rented GPUs are part of what makes that practical. A sandbox is a separate environment where the AI can try things without touching the actual business systems. Instead of buying hardware for experiments that might not work, we can rent the compute for a test, run the job away from production, and shut it down when we’re done.

Think of it like this. You have a real kitchen where you prep food for customers. You wouldn’t test a new recipe using the same station where tomorrow’s orders are staged. You’d use a separate prep area, or come in on a Sunday when the restaurant is closed. The sandbox is that separate prep area, but for software.

When we want to try a new AI automation, whether that’s a new way to draft proposals, a new way to route incoming calls, a video model, or anything that might behave unexpectedly, we run it in the sandbox first. For heavier tests, that sandbox can use a rented GPU just like the video pipeline does. It has its own copy of the data it needs, its own services, no connection to the live CRM or the real phone system. If it does something wrong, it does something wrong in a corner nobody can see, and we are only paying for the compute while the test is running. We review the results, tweak the settings, and only then move it to production.

The reason this matters is that AI tools are genuinely useful and genuinely unpredictable in roughly equal measure. An AI assistant that can draft a solid follow-up email can also, under the wrong conditions, send one to the wrong person. The sandbox is the rule we made so that “wrong conditions” means “caught in testing,” not “already in a customer’s inbox.”

What cloud AI tools mean for a small business

For us, the practical payoff splits into two pieces.

The video side means our marketing footage actually gets used. We had a backlog of good jobsite video that was too rough to publish. The cloud GPU pipeline cleared it out over a couple of weekends without anyone sitting at a computer. The finished clips go on the website, on YouTube, in proposals. Good waterfall video sells waterfalls.

The sandbox side means we move faster on experiments without lying awake about what might go wrong. Before we had it, every new automation felt like a judgment call about risk and hardware commitment. Now the rule is simple: new things go in the sandbox, rented compute handles the heavy test, and tested things go in production. That structure made it easier to say yes to new ideas and easier to explain to Chuck what we were building and why.

Where cloud GPU jobs still need a safety net

Cloud GPU work needs a solid internet connection and a pipeline that knows what to do when a job fails midway – which happens. Our setup retries automatically, but if you’re running a one-off job with no error handling, a dropped connection means starting over.

The sandbox also isn’t a substitute for actually reviewing what the AI does. It catches catastrophic failures, the kind where something clearly went wrong. It doesn’t catch subtle errors, like an AI that’s technically doing the right thing in the wrong context. A human still has to look at the output before it ships. We check the video before it goes on the website. We review the AI responses before they go live. The sandbox just means the review happens on our schedule, not after a customer already saw something we’d rather have caught.

The AI space is busy right now. There are free trials, promos, new tools, and demos everywhere. What I’ve found is that the tools we use every week pay off, and the tools we tried once and forgot are just clutter. For us, AI video cleanup and thumbnail work made sense because we already had the footage and a real place to use it. That is the test I would use before signing up for anything: do I have a real workflow for this, or am I just curious?

If you have a backlog of real work and there’s an AI tool that can help, that’s a good place to start. It’s fun to try things out and learn what’s new in the AI world, but at the end of the day AI is only valuable if it’s doing valuable work. The compute is there. You just don’t have to own it.

Categories
Flow

Why your small business emails land in spam

We spent a Friday afternoon building out a small business email campaign for Aquatic Artists – wrote decent copy, put together a clean template, hit send to a list of a few hundred contacts we’d accumulated over years of doing business. Then we waited.

Almost nothing came back. No opens worth counting, no replies. A few days later, I started getting the occasional “never got your email” from people I knew well. The emails hadn’t bounced. They’d gone straight to spam.

That’s a deflating experience. And it’s not rare. If your contractor emails, service reminders, or marketing emails keep going to spam, here is what I learned about why it happens and the fixes we put in place.

Email authentication: the part most small businesses skip

Most small businesses set up an email address, maybe connect it to a domain they bought, and assume it’s ready to go. The problem is that spam filters run a series of background checks on every message before it reaches an inbox. Three of those checks matter most:

SPF is a record you publish for your domain that says “these are the servers allowed to send email on my behalf.” If your email goes out through a service that isn’t on that list, spam filters treat it as suspicious. Think of it like a contractor showing up to a job site without being on the authorized crew list.

DKIM is a cryptographic signature attached to your message – a way of proving it wasn’t tampered with in transit. Most email platforms add this automatically, but only if you’ve set it up correctly in your domain’s settings.

DMARC tells receivers what to do if SPF or DKIM fail: quarantine the message, reject it, or just report it. Without DMARC, even a properly signed email can end up treated inconsistently.

None of this is exciting. Setting up SPF, DKIM, and DMARC is mostly a couple of hours in your DNS settings and your email platform’s configuration panel. But it’s the foundation that everything else depends on.

Plain-text email helps deliverability

Here’s one that surprised me. If you send a marketing email that’s only HTML – a nice-looking newsletter with images and formatting, but no plain-text version alongside it – spam filters often mark it down. Real communication between people almost always has a plain-text component. A message that’s pure HTML looks like it came from a bulk-sending machine, not a person.

When we built our email template editor, we made it generate both versions automatically. Every campaign goes out with a proper HTML design and a plain-text fallback. It takes zero extra effort and removes one more reason a filter might catch your message.

Domain warming for business email

If you’ve never sent marketing email from a domain before – or haven’t sent much – spam filters are going to be cautious about you. You don’t have a reputation yet. The fix is to build one slowly: start by sending small batches to your most engaged contacts (people who actually open and click), then increase volume over several weeks. This is called domain warming, and it’s genuinely boring. There’s no shortcut.

Double opt-in helps here too. When someone signs up to hear from you and then confirms that signup with a second click, you know they actually want your emails. That keeps your complaint rate low, which keeps your sender reputation healthy.

Where AI helps with email marketing

Once the plumbing was working, we added two things that make the system smarter.

First, the template editor I mentioned is drag-and-drop, roughly what you’d expect from a Mailchimp-style tool, with AI suggestions for subject lines and send times based on which days and hours your audience tends to engage. Not magic, but genuinely useful when you’re doing this as one of fifteen things on your plate.

Second, we built an inbox scanner. It’s an AI tool that reads the incoming mailbox and surfaces the actual leads and action items buried in there. Not “here’s every email you got,” but “here are the three threads that look like someone wants to talk business.” For our business, that matters more than fancy automation. That is the kind of AI I like: boring, specific, and tied to a real job that used to eat time.

What email authentication alone won’t fix

Authentication fixes are necessary but not sufficient. If your content looks spammy – all-caps subject lines, aggressive promotional language, sending to people who never asked to hear from you – you’ll still land in filters regardless of your DKIM record. And domain warming takes weeks. There’s no fast version.

The other rule we follow is simple: do not use AI as an excuse to send vague, pushy, or unwanted messages. If the email would annoy you as a customer, making the computer send it faster does not improve it. It just scales the mistake.

What I’d check first

If you’re not sure whether your domain is authenticated, use a domain checker instead of guessing. Start with Google Admin Toolbox Check MX for MX/SPF checks and DKIM selector checks, MXToolbox SuperTool for MX, blacklist, SMTP, SPF, DKIM, DMARC, MTA-STS, and TLS-RPT lookups, dmarcian Domain Checker for SPF, DKIM, and DMARC inspection, or EasyDMARC Domain Scanner for a domain health scan across SPF, DKIM, DMARC, and BIMI. Run more than one if the result matters, because each tool explains failures a little differently. You’ll see quickly whether SPF, DKIM, and DMARC are configured. That’s the starting point. Fix what’s missing, then think about content and warming. The deliverability problems tend to sort out in that order.

If you’re curious how we handle email marketing for our business, reach out. Happy to share what worked.

Categories
Flow

Crew scheduling software for real-time updates

For a long time, the crew schedule lived in a spreadsheet. It worked because everyone knew where to look, but it was still a snapshot of a moving week.

The problem wasn’t the spreadsheet itself. The problem was everything that happened after the spreadsheet changed. A job moved. A crew member was unavailable. The weather pushed a pour to Thursday. Now the version someone saw earlier in the day might be wrong, and the confusion came from people working from different copies of the plan.

If you coordinate crews, you’ve lived this. It doesn’t matter if the schedule starts in a spreadsheet, a group text thread, or one person’s head. The problem is a schedule that changes often but does not update everywhere at once.

What we built for crew scheduling

We stood up a crew scheduling app this month that covers our install crews and job assignments. At its core it’s not complicated: jobs get entered, crew members are in the system with their availability, and the app assigns people to jobs based on who’s free and what skills a job needs.

The “auto-scheduling” part means the app can suggest a crew assignment – it looks at who’s available, who’s already booked, and what each job requires, and it proposes a lineup. You still review it and confirm. It’s not the app making the final call; it’s the app doing the tedious matching work so you’re reacting to a draft instead of building the whole thing from scratch.

That distinction matters. People hear “auto-scheduling” and picture software that runs the whole operation without them. That’s not what I’m describing. The version that actually works for us is: the software handles the obvious assignments, surfaces the conflicts, and leaves the edge cases for human judgment.

I do not put much weight in average numbers for this kind of thing, because every operation runs differently. What I do know is simpler: if the schedule changes frequently and the current version is not visible to everyone who needs it, the business is going to keep paying for that with confusion and missed details.

The spreadsheet sync that made the switch painless

The main lesson from our rollout was simple: don’t throw out the old spreadsheet on day one.

We kept our Excel spreadsheet running alongside the new app for the first few weeks. The two systems sync in both directions – a change in the app shows up in the spreadsheet, and an update in the spreadsheet (for whoever hadn’t switched to the app yet) feeds back into the system.

That two-way sync changed the dynamic of the rollout completely. People who were nervous about the new tool didn’t have to trust it immediately. They could keep doing what they were doing while the rest of us used the app, and the schedule stayed consistent across both. Over time, as the app proved itself, the spreadsheet became the backup rather than the primary. By the time we stopped updating it manually, nobody noticed.

The principle generalizes. Almost any time you’re moving a team off a tool they’re used to, the hard part isn’t the software – it’s the trust. They’ve been burned by systems that launched with fanfare and then broke at the wrong moment. The way to earn that trust is to not ask them to abandon the old system as a condition of trying the new one. Let both run. Let the new one prove itself. Then the transition happens naturally.

What the scheduling app changed day-to-day

The clearest win is that the schedule reflects changes as they happen.

Before, the spreadsheet could be correct at 8 a.m. and stale by lunch. A job moved, availability changed, weather shifted the plan, and people were suddenly working from different versions of the week.

Now the contractor schedule is a shared live view. Crew members can check the current plan themselves. Changes are visible immediately. When a job pushes to the following week, one update propagates everywhere. The value is not that nobody asks questions anymore; it is that everyone starts from current information instead of an older spreadsheet.

Where auto-scheduling still needs a human

Auto-scheduling only knows what you put in it.

If a crew member updates their availability in the app, great – the system handles it. If someone mentions a change and nobody logs it, the schedule is wrong and the app doesn’t know. If a truck breaks down and no one updates the job status, the auto-assign will keep sending that truck out. Garbage in, garbage out – a rule that applies just as much to scheduling software as it does to everything else.

The other thing: scheduling software doesn’t fix a chaotic operation. If your jobs are poorly scoped or crew assignments change last-minute because of upstream planning problems, an app will reflect that chaos clearly. That can be useful – it surfaces problems that were previously invisible – but don’t expect the tool to solve problems that live in the process, not the calendar.

If your crew schedule changes faster than the spreadsheet

You don’t have to rebuild your whole operation to get value out of better scheduling tools. The useful first step is simple: make the current schedule visible to the people who need it, and make updates flow to one shared place quickly.

Start with two questions. Where is the current version of the schedule, and what happens when jobs or crew assignments change during the day? If the answer depends on someone remembering to reconcile a spreadsheet later, you’ve found the friction point. Even a basic app that lets more people see the latest schedule can reduce confusion before you add anything more advanced.

The spreadsheet got us by for a long time. I don’t miss trying to keep every moving part current by hand.

Categories
Flow

Website automation for Project Pages

There’s a photo on my phone of a waterfall we finished last fall. Great install. The kind of job you want on your website. I took about forty photos on-site, picked the best three, and then set them aside because getting them onto the website meant sitting down, opening three different tools, resizing images, filling in fields, writing a caption, and publishing – and I had six other things on my list.

The photos sat for two weeks.

That’s not a technology problem. That’s a friction problem. The harder you make something to do, the more often it doesn’t get done. And for a small shop, your website is your portfolio. If it doesn’t reflect your recent work, you’re leaving your best sales tool half-empty.

What publishing a Project Page used to look like

Before we built our website management system, getting a finished install onto the site went something like this: open the WordPress admin, create a new post, upload images one at a time, resize or crop as needed, write a title and description, assign categories and tags, check that the gallery template looked right, preview it, fix whatever was off, and publish. Then separately update the portfolio index.

From start to finish, about 15 to 20 minutes – on a good day, when nothing went wrong.

That may not sound like a full afternoon. But multiply it by every project we do in a year, and it adds up to a real chunk of time. More importantly, it’s the kind of task where friction wins. You do it when you have a clear desk and a focused hour. Which means it often doesn’t happen at all.

What website automation changed

We built a custom website editor that handles the whole project publishing workflow in one place. You pick the photos, the tool handles resizing and optimization, it generates a title and pulls in the project details we’ve already entered elsewhere, it sets the right template, and it publishes. The whole thing takes under a minute now.

The difference isn’t that the computer is working faster. It’s that we eliminated the switching – jumping between tools, re-entering information that already existed somewhere, hunting for the right image dimensions. The automation handles the steps that were only ever annoying busywork.

The time savings that compound most reliably for a small business are usually the boring ones. Shaving 15 minutes or more off a task you do every week. Removing the friction that caused you to skip updating your portfolio for two weeks straight. Nobody writes headlines about that, but it’s where the real time goes.

The YouTube and SEO workflow

We also built a YouTube management tool on the same principle: remove the friction from getting project content onto the channel.

The piece I find most useful is the AI thumbnail draft. When you publish a new video, the tool proposes a thumbnail based on the project photos and the title. It’s not always perfect – you still need a human eye on it before it goes live – but having a draft to react to is much faster than staring at a blank canvas and thinking about what to make. Most of the time the draft is 80% of the way there, and I’m adjusting rather than creating from scratch.

The SEO scoring layer checks the title and description against what tends to perform well in search – not in a black-box way, but by flagging specific things: title too long, description missing key terms for a Project Page, that kind of thing. Again, a guide, not an oracle. But useful enough that I actually use it instead of skipping the step because it feels like too much work.

My honest take is that you do not need to chase every AI update for this kind of work. Pick a friction point in your own operation and remove it. In our case, that meant getting good project photos out of my phone and onto the website before they got buried. Better tools help, but they help a lot more when you have already built the habit of using them.

What small-business automation still can’t do for you

Automation handles the steps that are well-defined and repeatable. It doesn’t replace judgment.

The AI thumbnail draft still needs a human look before it goes live. The SEO suggestions are starting points, not guarantees – what ranks well shifts, and a tool trained on last year’s patterns isn’t always right about this year’s. Publishing automation means nothing if the underlying content is weak or the photos are poor quality.

There’s also a real risk of automating too fast. We’ve had moments where the system published something with a formatting issue that looked fine in preview and wrong on the live page. Automation moves fast, and fast is useful only if you still have a review step before the thing is public.

The rule we follow: automate the tedious parts, keep a human eye on anything that touches the customer-facing result.

The math worth doing

If your shop does fifty Project Pages a year, and each one takes 15 to 20 minutes, that’s about 12 and a half to nearly 17 hours. Cut it to under a minute, and you’ve saved roughly 12 to 16 hours – which matters even more when you remember that those hours weren’t all in one block. They were fifteen minutes here, twenty minutes there, scattered across a year of days when you already had too much on your list.

The real savings aren’t the time. They’re the jobs that actually make it onto your portfolio instead of sitting in a folder for two weeks.

If you’re managing your own contractor website and marketing, even basic tools – a photo-resize shortcut, a template that fills in the repetitive fields – can make a real difference in whether you actually do the thing or skip it. Start with the step that causes the most friction. That’s usually where the time is hiding.