A production content pipeline a business can see all the way into
The outcome
I built a system that takes a rough idea and returns a near-final, on-brand post through three reviewed stages. It runs as a plain folder a non-developer can open, run, and edit, and a person still approves and sharpens the last draft before anything ships. The draft arrives about 90% of the way there.
How I thought about it
What was actually going on. The problem was never producing text. Any model does that. The problem was producing text that sounds like me and is worth publishing, on a repeatable basis, without a developer babysitting it. Brand voice is the whole asset, so correct text is easy and beside the point. Text worth publishing in my voice was the bar. I run this as a single operator, on subscription tools, with the files living on disk as the single source of truth, and I needed a system I could trust to carry a draft most of the way without drifting into generic content.
What I decided, and what I ruled out. I built it as a folder of numbered stages, where each stage loads only the context that stage needs and a person reviews at every boundary before the work moves forward. Brief, then draft, then break into platform posts.
I ruled out three obvious alternatives. A single long prompt would have been faster to stand up, but you can't see where it fails and you can't hand it to anyone else, so I split it into stages with explicit inputs and outputs. A semantic-search setup, loading files by similarity, is the reflex for anything involving documents, but this is a rule-governed process, and I didn't want a similarity match deciding whether to load a given rule file. A stage decides that, by rule. And I turned down an off-the-shelf tool for the final stage that would have saved real time, because it flexed the voice per platform and compressed a diagnosis down to a list of tips. Both of those break the one thing the brand runs on, so I kept only its neutral format specs and wrote the rest of the stage myself.
The decision that surprised me was the model choice. I assumed the most capable model I had, Claude Opus, would write the best short social posts. It didn't. In testing, GPT-5.5 running through Codex produced the social drafts closest to my voice and closest to shippable, against my own hypothesis. Long-form newsletter prose was the reverse, and routes to Claude Sonnet, which handles length and a steadier register better. I also keep the heaviest model out of the everyday drafting rotation and reserved for architecture and file work, so the production path runs on the models that do the recurring drafting well. The lesson that carries past this build is simple: route each job to the model that actually wins it, and test the assumption instead of defaulting to the biggest model.
Where this could break. The honest limit is that the pipeline is only as good as what you put into it. When a draft comes back flat, that is almost always a context-and-knowledge problem at the input, not a flaw in the pipeline. Garbage in, garbage out, and catching it is a judgment call at the brief stage every time. Two more limits worth stating plainly. It is proven on the architecture and on early runs, not at high volume yet. And it does not ship anything blind. A person edits the final draft, because brand voice is not safe to hand fully to a model today. I expect that changes sooner than most people think, but building as if it were already true is the wrong bet, so the review step is deliberate, not a placeholder.
What changed. Writing used to be the bottleneck, and every piece risked coming back accurate but dead. I nearly stopped the build over exactly that, because a system that reliably produces dead content is not worth running. What saved it was finding where the deadness actually lived. Swapping the entire draft engine did not fix it, the flatness held constant, which told me the problem was set one stage earlier, at the brief. Once I tightened the brief to force a specific person, a genuine surprise, and a few planted creative moves, the drafts came alive. Now the system produces drafts worth sharpening instead of drafts worth throwing out, and I know exactly where it fails and why.
Where this pattern fits, and where it doesn't
This runs on a method that separates two modes, and I have built on both sides of the line. The real question under the two modes is one a lot of teams get backward: is the tool augmenting a person, or automating them out? Both are useful. The call is decided by stakes and trust, not by preference.
High-stakes, trust-building, customer-facing work keeps the human in the center, because judgment is the whole value. That is the content pipeline: sequential, reviewed at every gate, run as a folder a non-developer owns and edits. The more a decision leans on trust, the more the person belongs at each step.
Lower-stakes, bounded, reviewable internal work can run end to end. Pine Water, a real-estate deal analyzer I built and deployed, is that mode. It looks high-stakes on its face, but it is a low-stakes internal tool. The analysis and reporting run start to finish with no one in the middle, and a person still reads the finished analysis before acting on it. The human moved to the end, not out of the picture.
That gradient is the point. Human-in-the-loop is not a switch. Where the person sits is the variable: at every gate, at the end only, or upstream configuring the system before it runs. For a company, the value isn't the folders. It's knowing which of their workflows should augment and which can automate, where the human belongs in each, and being right about it. Most of what sits in a company's drives is not a workflow at all. It is a store that needs to be organized so AI can read it, not staged into pipeline folders. Knowing where those lines fall is the deliverable, and it is the part that does not get cheaper as the tools get better.
What I'd do next
The pipeline works as intended, so the next gain lives upstream of it, in the quality of what feeds it: the raw specifics in the brief and the reference knowledge behind it. That is the next build.