The Problem
Ranking articles like 'Best AI Marketing Tools' are an SEO workhorse, but producing them is brutal: researching dozens of tools, keeping prose quality consistent across sections, updating pricing blurbs as tools change — all repeated for every category, every refresh cycle.
The Solution
A form-driven content assembly line. A category slug pulls live tool data from Sanity via GROQ; RankWriter composes a Deep Research prompt and hands it to a human through Slack's send-and-wait — real research gates every article before drafting starts. The report then feeds specialised LLM chains: Claude 3.5 Sonnet writes the introduction in a top-tier SaaS-blog voice, o3-mini handles the meta description, Gemini 2.5 Pro drafts ranking criteria, and per-tool sections run map-style in parallel before aggregation. Autofixing structured parsers repair JSON quirks mid-flow, and the finished bestTools payload PUTs directly into the CMS admin API.
How the workflow runs
01 · Brief
Content team submits category, audience, and optional tool slugs through an n8n form.
02 · Gather
Live category metadata and its tool catalogue arrive from the product API and a Sanity GROQ query.
03 · Research
A Deep Research prompt plus tools JSON file post to Slack; the flow pauses until a human returns with findings.
04 · Draft
Section-specialised chains run across Claude, o3-mini, and Gemini; tool sections fan out in parallel and aggregate.
05 · Guard
Autofixing output parsers repair malformed LLM JSON so one bad response can't kill a run.
06 · Publish
The assembled payload — ids, best-for phrases, standout features, pricing — PUTs straight into the CMS.
AI layer
- Model-per-section strategy
- Prose quality from Claude, cheap precision from o3-mini, long-context reasoning from Gemini — matched to each section's needs.
- Structured outputs everywhere
- Every chain parses to schema with autofix fallbacks — article data stays machine-usable end to end.
- Prompt-as-artifact
- The Deep Research prompt is generated, filed to Slack, and versioned by the workflow itself.
Automation layer
- Human gate where it counts
- Slack send-and-wait pauses the run for real research — automating drafting without automating shallowness.
- Map-reduce section scaling
- Tool count changes fan out automatically — a 5-tool listicle and a 50-tool listicle use the same graph.
- Form-driven operations
- Non-technical teammates launch runs without touching the workflow canvas.
- Direct CMS integration
- Finished content lands publish-ready via API — no copy-paste handoffs.
Technical challenges
Pure LLM listicles read as generic filler because models lack current, specific knowledge of each tool.
A mandatory human research stage injects fresh findings between the brief and any drafting.
Long structured outputs from multiple models regularly break JSON parsing mid-pipeline.
Autofixing output parsers wrap every structured chain, repairing common LLM formatting faults automatically.
One model is never best at everything — cheap meta descriptions waste strong models; weak models mangle long-form intro prose.
Per-section model routing: Claude for voice-critical prose, o3-mini for short precision, Gemini for analytical criteria.
Outcome
- Category slug to CMS-ready 'Best Tools' article in one supervised run.
- Every article grounded in human-conducted research, drafted in consistent section-specific voices.
- Content team operates the whole pipeline from a form and a Slack thread.
Lessons learned
- “Automate the assembly line, not the judgment — research stays human while drafting scales across models.”
- “Different sections deserve different models; uniform model choice is either wasteful or underpowered.”
- “Autofixing parsers turn flaky LLM JSON from a pipeline-killer into a non-event.”