The Least Intelligent Part of My AI Stack Is the Most Reliable
My most trusted pipeline step has zero machine learning in it. A Rust binary turns JSON into PNG at about 50ms per slide, and it replaced a headless browser that kept breaking my batch jobs.
The least intelligent part of my AI stack is the most reliable part
Somewhere along the way my content pipeline accumulated an ironic detail. The step that involves zero machine learning, a Rust binary, and templates I wrote by hand has quietly become the part I trust most. Not the model writing the drafts. Not the model summarizing research. The thing that turns JSON into PNG.
I think that says something worth writing down.
What I replaced
For a long time, every image my blogs and social accounts needed went through a headless browser. Playwright, Chromium, a CSS template, screenshot, done. It worked, mostly. But a browser is a demanding houseguest. Updates moved the DOM. Fonts failed to load in headless mode for reasons nobody could explain twice. A memory-hungry rendering step sat at the heart of what should have been a boring batch job, and every few weeks it reminded me of that fact at the worst time.
Today that entire job runs on a single Rust binary. JSON in, PNG out, about fifty milliseconds per slide, on a CPU. No browser anywhere in the path. The failure modes I fight now are template typos, which fail loudly at render time instead of quietly producing a half-broken image.
The weird economics of "AI-powered"
This is the part I keep noticing when I talk to other solo builders: the label "AI-powered" has quietly become a maintenance forecast. Every generative step in a pipeline brings a model version to chase, an output to human-review, and a reroll culture where "good enough" is the ceiling because exact repetition is impossible by design.
None of that is a reason to avoid models. My drafts get model help, my research gets model help, and my backgrounds are AI-generated textures I could never draw myself. The mistake I made early on was letting generative steps into jobs that never needed creativity. An OG image does not need to be surprised by its own layout. A carousel slide with the price in it needs the price to be legible, not vibes-adjacent.
Where the line sits now
After a year of tuning this stack, my rule is embarrassingly simple: models for the one-time creative act, deterministic code for everything that repeats. A generated texture gets used once, then it becomes part of a template. Blog images render from templates hundreds of times without a single reroll session. When something renders wrong, there is a typo to fix, not a seed to hunt.
The deeper shift is in what I review. Generative output demands review because it might be subtly wrong. Deterministic output with validated input needs no review at all, which means it can run unattended, which means it can scale. Trust is what makes automation possible, and for now, the least intelligent components are the ones earning it.
What I would tell past me
Stop asking "can a model do this?" and start asking "should a model do this?" If the job has a right answer, the model is the wrong tool no matter how impressive the demos are. If the job has no right answer, the template is the wrong tool no matter how fast it is. The stacks that feel calm to operate are the ones that sorted their jobs into those two buckets and stopped crossing the line.
The product-side write-up of this pipeline, with the actual setup commands, is on the CodeCora blog: deterministic vs generative image pipelines.
Comments ()