VibeDay

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:

  • Captions for three platforms — Instagram, Facebook, TikTok — each in that platform's idiomatic style
  • 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 — topic title, DRAFT badge (yellow) or READY badge (green), source topic link, source campaign + brand links
  • Amber callout (DRAFT only) — "This is a draft. Review and edit if needed, then click Approve for posting…"
  • Three platform cards — Instagram, Facebook, TikTok captions side-by-side
  • 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
  • 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.

The Generations list

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

  • Topic title (link)
  • Status badge — amber DRAFT stands out, green READY, red FAILED, grey ARCHIVED
  • Brand + campaign context
  • Created date

Use this view to find a specific draft, 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.