Three days of an arthritis flare. Forty accounts. Zero intervention from me. That was the test. I did not design the test. I just ended up in it. Here is what I built in February that made the May test passable, and the technical decisions that mattered. The stack: Supabase (PostgreSQL) with a marketing_queue table. Key columns are platform, body, title, week_of, day_of_week, status, content_type, and source. Status flow runs from pending (failed validation or needs review) to ready (validated, queued) to approved (cleared for publishing) to ready_to_publish (execution target) to published or rejected. Validation uses two database functions. is_publishable_content(body, title) returns boolean. content_validation_reason(body, title) returns the failure reason. Every insert runs validation before touching the table. The functions check for metadata prefixes in body, minimum length of 200 characters, biographical accuracy triggers, and brief-format field patterns. Two DB triggers rewrite bad status values on every insert and update: normalize_publish_status on marketing_queue and normalize_publish_status_comet on comet_posts. These catch any status value outside the valid set and rewrite it automatically. Upstream mistakes cannot persist in the queue. The publishing agent is Comet, a local Python process. It reads from marketing_queue where status is in approved or ready_to_publish and drives publication platform by platform on a schedule. Content generation runs as a scheduled Cowork task. It calls Claude with a documented story bank and voice rules, generates the full content batch across nine platforms, validates each piece against the DB functions, and inserts clean rows. What worked: the validation functions before every insert, the status normalization triggers, and the story bank documentation. What I would change: the queue depth (7 to 10 days is the right target, not 3 to 5) and adding a dead man's switch for the Comet process since it runs locally with no uptime monitoring. Current queue state: 41 published, 8 human_required, 8 pending, 14 rejected. No stuck items. If you are building a similar content pipeline and want to compare notes, I am at chadtdyar.com or in the comments below.
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)