Overview
The Draft Queue is where all AI-generated social content lands after the Social Content Pipeline runs. Every piece of content starts as a draft and moves through a review lifecycle before it gets published. Nothing goes live without manual approval. The queue is managed entirely through API endpoints — giving you full control over the review, approval, scheduling, and publishing workflow.Draft Lifecycle
Every draft moves through a defined set of statuses:| Status | Description |
|---|---|
generating | Pipeline is actively creating this content (text, images in progress) |
draft | Generation complete. Ready for initial review. |
reviewed | Has been looked at and has review notes, but not yet approved or rejected. |
approved | Content is approved and ready to publish or schedule. |
scheduled | Approved with a specific scheduled_at timestamp for future posting. |
posted | Content has been published to the target platform. |
rejected | Content was rejected during review with a rejection_reason. |
failed | Pipeline encountered an error during generation. |
API Endpoints
List Drafts
Retrieve drafts with optional filters for status, platform, content type, and pagination.| Parameter | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter by lifecycle status |
platform | string | — | Filter by platform (tiktok, instagram, x, youtube, linkedin) |
contentType | string | — | Filter by content type (strain-breakdown, myth-bust, etc.) |
limit | number | 50 | Max results per page (1-100) |
offset | number | 0 | Pagination offset |
Get Single Draft
Retrieve the full details of a single draft including all images and metadata.Update Draft Status
Move a draft through the lifecycle. Include optional review notes, rejection reason, or scheduled timestamp.| Field | Type | Required | Description |
|---|---|---|---|
status | string | Yes | Target status (reviewed, approved, rejected, scheduled, posted) |
review_notes | string | No | Notes from the reviewer |
rejection_reason | string | No | Required when status is rejected |
scheduled_at | string (ISO 8601) | No | Publishing timestamp. Sets status to scheduled automatically. |
Bulk Approve
Approve multiple drafts at once. Useful after batch review sessions.Content Stats
Get aggregate statistics about the draft queue and content generation.Database Schema
Thesocial_content_drafts table in Supabase stores all generated content:
| Column | Type | Description |
|---|---|---|
id | uuid | Primary key |
platform | text | Target platform (tiktok, instagram, x, youtube, linkedin) |
content_type | text | Content category (strain-breakdown, myth-bust, etc.) |
content_pillar | text | Strategy pillar (strain-intel, science-drops, myth-busting, lifestyle, app-features, community) |
status | text | Lifecycle status (see lifecycle above) |
source_type | text | Source data type (strain, blog, terpene, general) |
source_slug | text | Slug of the source strain, blog post, or terpene |
text | text | Generated post text / thread content |
hashtags | text[] | Array of hashtag strings |
image_urls | text[] | Array of Supabase Storage URLs for generated images |
metadata | jsonb | Platform-specific metadata (slide count, character count, thread length, etc.) |
ai_model_text | text | Model used for text generation (e.g., claude-sonnet) |
ai_model_image | text | Model used for image generation (e.g., gemini) |
review_notes | text | Reviewer notes |
rejection_reason | text | Reason for rejection (if rejected) |
scheduled_at | timestamptz | Planned publish time |
posted_at | timestamptz | Actual publish time |
trigger_run_id | text | Trigger.dev run ID for traceability |
created_at | timestamptz | When the draft was created |
updated_at | timestamptz | Last modification time |
Storage
Generated images are stored in thesocial-content Supabase Storage bucket:
| Path Pattern | Content |
|---|---|
{draft_id}/image_{index}.png | Standard post images |
{draft_id}/carousel/slide_{index}.png | Instagram carousel slides |
{draft_id}/thumbnail.png | Video thumbnail concepts |
Review Workflow
Review Each Draft
Open individual drafts to review text, images, and hashtags. Check that the Professor High voice is consistent and the content is accurate.
Approve, Edit, or Reject
Approve drafts that are ready. Reject those that miss the mark with a reason. Add review notes for context.
Schedule Approved Content
Set publish timestamps for approved drafts to build out your content calendar:
Related Features
- Social Content Pipeline — The Trigger.dev pipeline that generates all draft content
- Ask AI (Professor High) — The AI persona whose voice drives all generated content
- Strain Discovery — Browse strains that serve as source material for content
