VibeDayAI-Powered Social Media Management

Generations

From draft to approval: review captions, regenerate the image, iterate on locked fields, then push READY so the scheduler can pick it up.

A generation is one AI-produced post — captions, hashtags, CTA, image prompt — drafted from a topic. Generations are first drafts; you review, edit, and approve them before they're eligible for scheduling.

What's in a generation

A generation in VibeDay holds:

  • Name — a short, descriptive title (e.g. "Golden-hour beach sunset"). The AI drafts it as part of the same step that writes your captions, so every AI post gets a recognizable name instead of a generic label. Uploaded content is named from its filename. You can rename it any time (see below).
  • Captions for three platforms — Instagram, Facebook, TikTok — each in that platform's idiomatic style
  • YouTube title + description (optional) — the AI also drafts a punchy YouTube headline (≤100 chars) and a longer description (≤5000 chars). Editable in the editor and used when the post is published to YouTube. Optional at approve — you're never blocked from approving just because you don't post to YouTube.
  • Hashtags — 3–15, lowercase, no # prefix
  • Call to action (optional) — one line; AI only writes one when natural for the topic
  • Image — a 1024×1024 AI-illustrated PNG (via OpenAI gpt-image-2). The image prompt is also stored so you can see what the AI illustrated from.
  • Trace — which model/provider produced it, the prompt used, credit cost, iteration number
  • Status — DRAFT / READY / FAILED / ARCHIVED (see below)

Status lifecycle

DRAFT → READY                    (you approve it)
      → ARCHIVED                 (you discard it)
[any] → FAILED                   (generation hit an error)
  • DRAFT — just generated, awaiting your review
  • READY — approved by you; eligible for scheduling (Sprint 4+)
  • FAILED — the AI call or save failed; the row exists but has no usable content
  • ARCHIVED — discarded; not visible in default views

New generations always land in DRAFT. You explicitly promote to READY by clicking Approve for posting — there's no auto-approval. This is intentional: AI output is a starting point, not the final word.

Generating a post

From the Topics list, click the green Generate draft button on a topic row. A blocking modal appears with:

  • A circular progress arc filling toward the expected duration (~15 seconds)
  • An elapsed counter ("12s")
  • Adaptive copy that flips to "Taking a little longer than usual — still working…" if it goes over

When the AI finishes you're redirected to /generations/[id] — the detail view of your new draft.

If the AI errors, the modal switches to a red error state with the underlying detail and a Dismiss button. The modal stays open until you dismiss it so you can read the message in full.

The generation detail page

The detail page (/generations/[id]) shows:

  • Header — the generation's name with a small pencil button to rename it inline (click the pencil → edit → Save / Cancel; Enter saves, Esc cancels), a DRAFT badge (yellow) or READY badge (green), and a meta line beneath: {date} · {type} · {source} · #{seq} (e.g. "Jun 18 · Image · AI Studio · #014"). Source campaign + brand links and the source-topic link follow.
  • Amber callout (DRAFT only) — "This is a draft. Review and edit if needed, then click Approve for posting…"
  • Platform caption row — Instagram, Facebook, TikTok, and YouTube captions in one horizontally-scrollable row of cards; scroll left/right to work on each (new platforms drop into the same row). Every field has a ? hover-note explaining what it is and how to use it
  • Hashtags card — chips of every hashtag
  • CTA card — the call to action, or "No CTA — the AI judged the topic didn't need one"
  • Image card — the AI-generated illustration (1024×1024). On DRAFT, a Regenerate image button lets you try a different illustration without rewriting the captions. The prompt the AI used is collapsed under "Show the prompt the AI used".
  • Footer trace — model used, credit cost, iteration number

Header actions:

  • Regenerate — drafts a new variant from the same topic (always available)

When the status is DRAFT, the captions / hashtags / CTA are editable inline. Below the editable cards is an action bar with:

  • Approve for posting (green) — promote the draft to READY without saving any edits. Becomes Save & approve the moment you change anything.
  • Save changes (only visible when you have unsaved edits) — persist edits without changing status; stays DRAFT.
  • Discard changes (only visible when you have unsaved edits) — revert to the last saved version.

When the status is READY (or FAILED / ARCHIVED), the captions / hashtags / CTA render read-only. To change anything, regenerate (which produces a new DRAFT).

Editing and approving a draft

When the status is DRAFT, you can edit any of:

  • Instagram caption — recommended 80–200 words; word + character counter shown live
  • Facebook caption — recommended 100–300 words; live count
  • TikTok caption — recommended 40–150 words; live count
  • YouTube (optional) — a single-line Title (≤100 chars, char counter) and a Description (≤5000 chars, char counter). These aren't required to approve; leave them blank if you never post to YouTube. When set, the YouTube publisher uses them instead of deriving a title/description from the shared caption.
  • Hashtags — comma- or space-separated, lowercase, no # prefix. Live chip preview below the input.
  • Call to action — optional one-line; leave blank to omit

Validation matches what the AI produces (same min/max + format rules). If your edits are out of bounds, the save fails with a clear "Couldn't save — …" message in the modal so you can fix it.

Two paths to ready:

  • Click Approve for posting without editing anything → flips to READY immediately
  • Make any edit, then click Save & approve → saves your edits and flips to READY in one transaction

If you want to keep editing without committing to approving yet, click Save changes — your edits persist, but the status stays DRAFT.

Once READY, the generation is eligible for scheduling (Scheduler ships in Sprint 4). You can still regenerate a READY generation if you change your mind — that'll produce a new DRAFT linked to the same topic.

Regenerating

Click Regenerate on any generation. Same blocking modal, same wait, same result type — a fresh draft from the same topic + brand + campaign context.

The current implementation (v1) does a full regenerate: every field is re-drafted. Locked-field regen ("keep the image, just rewrite the caption") ships in Sprint 6 — you'll be able to pin specific fields from the parent before regenerating.

Regenerated drafts share lineage with their parent (iteration tree) and cost 0.5× credits vs. the original.

Iterating a video. Use Iterate (top-right) with the Lock video / Lock text toggles. Locking the video and regenerating text only is instant. Regenerating the video itself runs asynchronously: the new draft appears immediately as "Generating…", the video renders in the background (you can navigate away), and the page updates when it's ready — credits are only charged when the video succeeds. (This matches how AI Studio and topic video generation work, so a long render never blocks or times out.)

The Generations list

/generations is the list of every generation in your workspace. Each row shows:

  • The generation's name (link) — its descriptive title, falling back to the topic title or a type label for older posts
  • Status badge — amber DRAFT stands out, green READY, red FAILED, grey ARCHIVED
  • A meta line: {date} · {type} · {source} · #{seq} — e.g. "Jun 18 · Image · AI Studio · #014". Source shows the campaign or brand name for topic posts, or "AI Studio" for from-scratch / uploaded posts. The source-topic link appears only when there is one.

Use this view to find a specific draft by name, see which topics have been drafted recently, or scan for FAILED generations that need a retry.

How the AI generates a post

The AI prompt is built from:

  1. Brand context — voice persona, tone, tone adjectives, forbidden words (effective brand: topic > campaign > none)
  2. Campaign context — name + brief, if the topic has a campaign
  3. Topic context — title, description, AI context

The AI is instructed to:

  • Write each platform caption in that platform's idiomatic style (Instagram warm/story-led, Facebook longer-form/conversational, TikTok punchy/hook-first)
  • Generate 3–15 hashtags, lowercase, no spaces, no # prefix
  • Write a CTA only when natural for the topic (otherwise omit)
  • Draft a specific image prompt — no text-in-image instructions

Provider redundancy: if Anthropic Claude (primary) is unavailable or rate-limited, VibeDay automatically retries on OpenAI before surfacing an error. You'll see "Our AI providers are busy right now" only when both are unavailable.

What happens if the image fails

Text and image are generated in sequence. If the image step fails (timeout, content policy, provider outage), your text is still saved as a draft. The image card on the detail page will show:

No image yet. The image step didn't complete (timeout, content policy, or provider hiccup). The text of this draft is saved — retry the image when you're ready.

With a green Generate image button. Click it to retry — the AI will re-illustrate from the same prompt. You can retry as many times as needed.

You can also approve a draft without an image if you'd rather publish text-only (less optimal for engagement on visual platforms, but supported).

Tips

  • Don't approve the first draft blindly. Read all three platform captions; the AI sometimes nails Instagram and misses TikTok. Regenerate if needed.
  • Use Regenerate to explore. Each regen produces a different angle on the same topic. Two or three regens often gets you a great post.
  • Watch the image prompt. Even before image generation ships, the image prompt is a tell — if the prompt is generic, the topic might be too vague.
  • Approve drafts you might use later, not just ones you're about to publish. READY is a "good enough to schedule" signal, not "scheduled now."

Still stuck?

Email support@vibeday.com with what you're trying to do and a screenshot if it helps — we'll write back within one business day.