guide · ai

Review Publishing Pipeline: The Voice Note to Post Chain

The seven-stage review-publishing pipeline: voice note + amzn.to URL in, post out. Capture, STT, first-pass draft, review pass, image gen, commit, ship. Each stage's failure shape and verify.

July 14, 2026 · By Alastair Fraser

A friendly retro-futurist robot in a chrome hard hat walks along a 7-segment factory conveyor belt: each segment is labeled with a working task — CAPTURE, STT, DRAFT, REVIEW, IMAGE, COMMIT, SHIP. The robot carries a small cassette tape (the voice note) over its shoulder at the first segment and balances a rolled scroll (the finished post) on the other shoulder at the last. A small human figure stands beside the SHIP segment, arms folded, inspecting the output before signing off.

The seven stages in one sentence

Voice note + amzn.to URL → STT → first-pass draft → review pass → image gen → commit → ship. Each stage surfaces to the operator at the boundary; the agent runs the chain end-to-end.

The agent runs these stages automatically. The operator confirms at three points: (1) the STT transcript is correct, (2) the review pass is acceptable, (3) the ship-ready commit is well-formed.

Stage 1: capture (the operator’s input)

The operator sends a voice note + an amzn.to URL via Telegram. Two artifacts:

  • voice.ogg — a 60-180 second voice note describing the product.
  • https://amzn.to/<tag> — the affiliate-tracked Amazon URL.

The voice note is the natural-language description of the product: what it is, what it does, the operator’s first impression, the standout features, the verdict. The amzn.to URL is the canonical product link.

Failure shapes:

  • Voice note under 30 seconds. Likely missing context. The agent surfaces a “more detail?” ping.
  • Voice note over 5 minutes. Likely rambling. The agent surfaces a “summarize?” ping.
  • No amzn.to URL. Pipeline can’t run end-to-end. Pause and ask.

Stage 2: STT (Whisper transcription)

The voice note is transcribed via Whisper:

from openai import OpenAI
client = OpenAI()
text = client.audio.transcriptions.create(
    model="whisper-1",
    file=open("voice.ogg", "rb"),
).text

Common errors:

  • ZTS Mini MBT -> zits mini MVT. The STT misheard a brand name. The operator verifies and corrects.
  • Garbled text at start. A common Whisper artifact when the recording starts mid-word. Truncated.
  • Bullet-point truncation. Long voice notes sometimes drop the last 5-10 seconds. Agent surfaces the line count.

Stage 2 verify: render the transcript and confirm with the operator that brand names and key claims are correct.

Stage 3: first-pass draft (haiku-class)

The transcript + the model used to draft:

prompt = (
    f"You are the botsitter-review skill. Voice-note transcript: {text}\n"
    "Draft a 900-1500 word review in operator-facing markdown. "
    f"Product URL: {amzn_url}. Include the affiliate link tag agenticbotsit-20."
)
draft = chat(prompt, model="claude-haiku-4-5-latest")

The default model is haiku-class (cheap, fast, follows instructions well for short jobs). The agent runs this stage in ~30 seconds.

Failure shapes:

  • The draft misses the verdict. A common miss — the model drifted on description without committing to a verdict. Re-run with “include the verdict: ”.
  • The draft reverts the affiliate tag. The amzn.to URL becomes amazon.com/dp/ without the agenticbotsit-20 tag. Post-process fix.
  • The draft cuts long. The transcript was very long; the model dropped paragraphs. Split the prompt.

Stage 4: review pass (sonnet-class)

The first-pass draft goes through a second model (sonnet-class for quality tightening):

verified = chat(
    f"Review the following review for editorial quality, voice consistency, "
    f"affiliate link tag, and verdict clarity. Output the corrected version.\n\n{draft}",
    model="claude-sonnet-5-latest",
)

Sonnet-class is more expensive but the body-quality gains justify the cost for a review. ~$0.05 per pass.

Failure shapes:

  • Sonnet reverses the verdict. Sonnet wants to be balanced; it sometimes reads the draft as too opinionated. The operator verifies the verdict survived.
  • Sonnet cuts length. The body comes out at 600 words. Re-run with “preserve word count.”

Stage 5: image gen (gpt-image-2-medium)

A featured illustration is generated for the review’s hero card:

prompt = LOCKED + review_subject + closing
r = OpenAIImageGenProvider().generate(prompt, aspect_ratio="landscape")

The image style is locked (see the image-style guide); only the subject varies.

Failure shapes:

  • Image gen returns 5xx. Retry once; if still failing, move to failover chain (cached PNG / cache-bust / text-only).
  • Image includes text. Some review subjects trigger text-bleed. Reject the image, regenerate with stronger “no text” in the prompt.

Stage 6: commit

The agent commits the post + image pair:

git add src/content/posts/<review-slug>.md public/images/<review-slug>-<date>.{png,webp}
git commit -m "post(review): <review-slug> (N cumulative today)" -m "<body>"

Commit messages follow the operator-readable form.

Failure shapes:

  • Build fails. The post’s frontmatter schema fails. Agent surfaces the offending field.
  • Image files missing. PNG or WebP not in place. Agent catches this before commit.

Stage 7: ship

The agent pushes to origin + github:

git push origin main
git push github main

The three-SHA check confirms the deployment, then CF purge happens, then the agent surfaces ship-ready.

Failure shapes:

  • Origin has diverged. Pull —ff-only first, retry.
  • CF purge fails. Non-fatal; CF will re-serve stale-but-still-correct HTML.

The agent does NOT do without operator confirmation

  • Don’t ship a draft the operator hasn’t reviewed. The operator sees stages 3 and 4 outputs before the commit.
  • Don’t override the operator’s verdict. If sonnet rewrote the verdict differently than the operator intended, the operator gets the final say.
  • Don’t regenerate an image more than 3 times. Three failures means the subject is too hard; surface to operator.

The timing

End-to-end: 5-15 minutes per review. Bottleneck is operator review (steps 2 and 4 confirmation), not agent execution.

The cost

Per review (today’s model prices):

StageCost
Stage 2: STT~$0.006
Stage 3: First-pass~$0.01-0.03
Stage 4: Review pass~$0.05
Stage 5: Image~$0.04
Total~$0.10-0.13 per review

For comparison, 30 reviews per day is $3-4 / day, or roughly $90-120 / month. The affiliate revenue covers it at the current conversion rate.

What to monitor

Three signals tell you the pipeline is broken before the operator does:

  1. STT misheard brand names more than 2 times in 10 reviews. Train a correction model or fall back to type-in.
  2. First-pass drafts come back at <900 words. The model is over-trimming; bump the floor.
  3. Review pass cost > $0.10. Sonnet is being asked to do too much; triage the prompt.

Sources

Last verified: 2026-07-14. Pipeline verified end-to-end against today’s active botsitter-review workflow.

Sources

#review#pipeline#voice-note#botsitter#workflow

Submit a take

Have a different read on this? Drop a comment below — your email isn't published, and I read every one. Nothing leaves the site until I approve it.

Your email address will not be published. Required fields are marked.