DEV Community

Cover image for I Moved My Launch Copy Workflow into the Terminal (One Brief, One Loop, Every Platform)
张洲诚(Zack.ZHANG)
张洲诚(Zack.ZHANG)

Posted on

I Moved My Launch Copy Workflow into the Terminal (One Brief, One Loop, Every Platform)

I shipped a side project last month, and the code was honestly the easy part. What ate my week was the launch copy: a Product Hunt tagline, an X thread, a LinkedIn post, a Reddit post that wouldn't read like an ad, plus a stack of SEO articles. Same product — five completely different voices.

Here's the workflow I ended up with: every platform voice is a .txt file, the product brief is another file, and one loop command generates the whole matrix in ~30 seconds. Honest breakdown below, including where it falls short.

The problem with the chat-tab workflow

My first approach was the obvious one: a chat tab, one piece at a time. It broke down in three ways:

  • Voice drift — thread #5 didn't sound like thread #1, because I phrased my request slightly differently each time
  • Evaporating prompts — the "Reddit voice" I tuned last week was gone with the session
  • Copy-paste tax — at volume, the mechanical work became the actual job

The root cause isn't the model. It's that a chat session is volatile storage, and platform voice is something you want persisted.

Voices as files, generation as a loop

The tool is bl, the CLI for Alibaba Cloud Model Studio:

npm install -g bailian-cli
bl auth login
Enter fullscreen mode Exit fullscreen mode

(Node 18+. You'll need an API key — free to grab here, and the free tier covers everything in this post.)

The structure:

launch-copy/
├── brief.md            # product brief: value props, audience, pricing
├── voices/
│   ├── ph.txt          # Product Hunt: tagline + maker comment, banned hype words
│   ├── x-thread.txt    # X: 6-tweet thread, hook first
│   ├── linkedin.txt    # story-driven, no emoji walls
│   ├── reddit.txt      # plain text, zero marketing speak
│   └── seo.txt         # 800-word keyword article
└── out/
Enter fullscreen mode Exit fullscreen mode

And the loop:

for f in voices/*.txt; do bl text chat --system "$(cat "$f")" --message "$(cat brief.md)" > "out/$(basename "$f" .txt).md"; done
Enter fullscreen mode Exit fullscreen mode

--system carries the voice, --message carries the brief. Both read from files, output lands in out/. That's the entire architecture.

Copy pipeline in the terminal: brief and voice files through one loop into per-platform drafts

Three lessons from a month of real use

1. Lock the output format inside the voice file. My first Product Hunt draft came back with "revolutionary" in it. I added banned words: revolutionary, game-changing, disrupt to ph.txt — clean ever since. Fix it once in the file, and it stays fixed. That's the fundamental win over chat.

2. Temperature is a per-genre dial. Taglines at default settings were dead ("Learn smarter"). At --temperature 1.2 I got shortlist-worthy lines; at 1.8 it drifted off-product. Press releases went the other way: --temperature 0.3 gave me identical structure across three runs. You can't touch this dial in most chat UIs.

3. Split models by stakes. SEO volume work runs on the budget tier (--model qwen-turbo --max-tokens 1500) — a fraction of a cent per 800-word article. Front-facing copy (taglines, the launch thread) stays on the default flagship model. One flag, an order of magnitude in cost.

Bonus: covers without leaving the terminal —

bl image generate --prompt "Cozy desk scene, warm lamp light, open notebook next to a phone showing a study app, flat illustration, warm colors" --model qwen-image-2.0-pro --size 3:4 --n 2 --out-dir ./covers/ --watermark false
Enter fullscreen mode Exit fullscreen mode

The numbers

Full launch run: ~60 text calls + 4 images.

Before: ~40 min per launch set in chat tabs. After: 30 seconds per set in the terminal

bl usage free
bl usage stats --days 30
Enter fullscreen mode Exit fullscreen mode

Most of it fit in the free tier. Priced at list rates, the entire token bill wouldn't buy a coffee — versus $39-49/month per seat for the usual copy SaaS. And retries become psychologically free: tweaking one word in a voice file and re-running costs fractions of a cent.

What it doesn't do

Honesty section. The output is draft tier, not publish tier — fact-checking and de-AI-flavoring stay human (my routine: batch in the terminal, polish the keepers in a chat window or by hand). If you write two pieces a week, a chat tab is genuinely more comfortable. And picking the winning tagline out of ten candidates is still your job.

Try it

Start small: install the CLI (docs), and save your single best-tuned platform voice as your first .txt file. The moment that file exists, your copy workflow starts compounding.

What does your launch-copy workflow look like — chat tabs, workflow platforms, or something scripted? Would love to compare notes in the comments.

Top comments (0)