<aside> ℹ️
Difficulty: Advanced • Time: 1 hour • Tools: Claude Code, Astro
</aside>
Publishing content involves a dozen steps between "I have an idea" and "it's live." Writing, formatting, generating images, validating metadata, building the site, deploying, emailing subscribers, posting to social. Most people do each step by hand, every time.
That's fine when you publish once a month. When you're shipping weekly — a newsletter, a blog post, both — the manual steps start eating hours you'd rather spend on the actual writing. Worse, they introduce errors: a missing hero image path, a broken frontmatter field, a deploy that fails because you forgot to run the build first.
The fix is a pipeline — a series of discrete, repeatable stages that you can run with a command instead of a checklist. By the end of this guide, you'll have the structure for an end-to-end publishing pipeline, from rough draft to live site and sent newsletter. You won't build every stage today, and that's the point. You'll start with what hurts most and add stages as you need them.
Think of this as six stations on an assembly line. Each one takes a specific input, does a specific job, and hands off to the next. You don't need to build the whole factory on day one — start with two stages and bolt on the rest over weeks or months.
The fastest way to get a first draft: let a local model do the rough work, then bring in a more capable model for refinement.
# Local model generates a rough draft from your outline
cat outline.md | ollama run qwen2.5-coder:7b \
"Write a first draft blog post from this outline. Keep it conversational."
# Save the output, then refine with Claude Code
claude "Revise this draft to match the voice profile in VOICE.md.
Tighten the opening, cut filler, and make the examples specific."
The local model doesn't need to be good at voice or style — it just needs to turn bullet points into paragraphs. That's mechanical work, and a 7B model handles it fine. The cloud model does the editorial pass: voice consistency, structural tightening, the judgment calls that actually matter. Grunt work local, taste in the cloud.
If you're using Claude Code with a CLAUDE.md file that includes your voice profile and project conventions, the refinement step gets better every time. The model already knows your preferences — it just needs the raw material to work with.
What you can automate here: A Claude Code custom command (slash command) that takes an outline file as input and runs the two-step draft process. One command, both stages.
You just wrote the thing. You're the worst person to review it. Your brain fills in missing words, smooths over awkward phrasing, and absolutely will not notice that you used "robust" three times in four paragraphs.