Stage 2 — Daily Drafter
How the daily drafter picks approved rows, generates full articles, and delivers them as Google Docs for final approval.
When Stage 2 Runs
The drafter fires every day at 08:30 IST (~03:00 UTC) — early enough that the draft lands in your inbox before your working day starts, whichever timezone you operate in. It picks exactly one row per run: the first sheet row where status=approved AND draft_status=pending. One row per day keeps the cadence manageable and gives you meaningful time to review each draft, rather than an overwhelming firehose. You can trigger the drafter manually whenever you want a faster tempo ("draft the next three approved rows now") — manual triggers process the matching rows in sequence without waiting for the next day.
What Stage 2 Produces
For every picked row the drafter generates a complete content package. A ~900-word first-person article in your configured voice (default: confident, practical, day-to-day examples of running client ops). A hero image from Unsplash (aspect=landscape) with proper attribution embedded. A Google Doc with the full article rendered — headings, paragraphs, lists, quotes, the hero image at the top — shared with you as a reviewer. An email to you with the Doc link, the article title, the target keyword, and a short "here is what I built" summary. After delivery, the sheet row's draft_status flips from pending to sent, and the draft_message_id is stored so the publisher can match your approval reply back to the correct row.
The draft email that lands in your inbox
What the drafter sends you each day.
Truncation-Aware Generation
LLMs occasionally cut off long responses when they hit their output token budget. The drafter detects this — if the first generation comes back with a truncation signal (finish_reason=length) it automatically retries with a fresh context. If the retry also truncates (rare — usually indicates the requested scope was too big for the model), the draft is still delivered, but the email subject is prefixed with "[TRUNCATED]" and the body includes an explicit warning noting that the article may be missing its FAQ or conclusion. You can then reply with changes to ask for specific sections to be completed, or ask the AI to split the article into parts.
If you see the [TRUNCATED] prefix in a draft email subject, read carefully before approving. The body warning tells you exactly what finish_reason and output_tokens came back, so you can spot-check the end of the article for a missing section before hitting approve.
Hero Images
Every draft gets a hero image sourced from Unsplash with aspect=landscape, matched to the article's keyword. The image is embedded at the top of the Google Doc with the photographer credit attribution text ("Photo by X on Unsplash"). Because image search is bundled into your Sarudo instance, no separate Unsplash account or API key is needed. On rare occasions the keyword is too abstract to return good Unsplash matches (very technical jargon, very niche terms) — in that case the drafter falls back to a related seed keyword for the image search, or leaves the placeholder for you to fill in manually after approving. You can also override the image at any point by replying to the draft email with "use a different hero image, try X".
Iterating on Drafts
If a draft is not quite right, reply to the email with what you want changed rather than starting over. "Tighten the intro — too long", "add a section on pricing comparisons", "this is too salesy, make it more tactical", "remove the conclusion about AI ethics, it is off-topic" — the drafter re-generates with your feedback and sends you a new Google Doc link. Multiple rounds of revision are fine; the row stays in draft_status=sent until you reply "approved", at which point the publisher picks up the final version for Stage 3.