← All Field Notes
GHL · Digital Marketing Agency · Oct 8, 2026

The Job Said Success, And The File It Was Supposed To Write Was Never Written

The Job Said Success, And The File It Was Supposed To Write Was Never Written

Key takeaways

If you run Go High Level in San Jose, you have a dashboard full of green checkmarks. Workflow ran. Email sent. Task complete. Every one of those tells you a step finished. Very few tell you the step did what it was for. This is a post about the gap between those two, and the small piece of code that closes it in our own image pipeline.

How the pictures on this blog get made

Every post here gets three images: a hero with my face and the headline, and two diagrams that explain the mechanism. None of them are drawn by hand. A script builds a small web page for each one, opens it in a browser with no window, takes a screenshot at the right size, and saves it as a file. Another script uploads those files and puts their addresses into the post.

It works well, it is free, and it runs every single day. Which is exactly why a quiet failure in it would be so easy to miss.

The failure we had already met once

We had seen this break before, on a video. A member spotlight came out carrying somebody else's name on it. The render step had drawn each overlay under a fixed file name, and on the fourth build in a row the browser reported success without writing anything new. The previous person's overlay was still sitting there under the same name, so the next step picked it up and carried on. Every check said fine. Only pulling a frame and looking at it caught it.

The honest part: when we fixed that video, the same exposure was sitting in every other render path in the repo, including the one that draws this blog's images. Same browser, same fixed file names, same "did the file appear" check. Fixing the video script did nothing for the others.

Diagram: a render job asks the browser to screenshot a page, the browser exits with success, and the file from the previous run is still on disk under the same name, so a check that only asks whether the file exists passes on a stale image

What the render step checks now

Every render script in this blog lane now does three things after the browser exits, and it does not trust the exit code for any of them.

Then every image still gets opened and looked at before it is uploaded. Several times the diagrams have come out technically perfect and visually wrong, a column half empty, a headline that no longer matched what was drawn under it, and those got fixed and rendered again. The code proves a new file was written. Only looking at it proves it is the right picture.

Diagram of the render guard: record the time before the browser runs, refuse any file older than that, refuse any file under a size floor, name the file that failed, then open every image by eye before upload

Where this shows up in your business

You do not need a render pipeline to have this exact problem. You need anything that reports "done" on its own behalf.

Those status flags are useful, but they are the system reporting on itself. The habit worth building is to pick the few outputs that matter most and check the output itself, not the report about it.

What I would set up for a Go High Level San Jose account

For most local businesses on Go High Level in San Jose, three checks cover most of the risk.

This blog's images are a small thing. The rule that came out of them is one I would put on any system that matters: when a job says success, go check the thing it was supposed to make.

Want to build this yourself?

Join the On Point Tech Academy at optechsol.llc/academy. It's free, and we build live every Tuesday and Thursday.

Learn to build this yourself. Free.

The On Point Tech Academy costs nothing and never asks for a card. We build live every Tuesday and Thursday, 12:30 to 1:30 PT.

Join the Academy free ← Back to all Field Notes