Step 1 · Audience ICP

Step 2 · Copy TXT

0 / 80
0 / 140

Step 3 · Caption POST

0 / 2200
Live Preview

Step 4 · Background BG

Multi-color blended mesh from your selected palette. Picks the most vibrant version of any color set.

Step 5 · Style VIBE

Audience Snapshot WHO

Targeting
No ICP Selected
Generic copy will be generated. Select an ICP for sharper messaging.

Step 6 · Save & Export SHIP

Post Direct GO

Each button downloads the image, copies your caption to the clipboard, and opens the platform composer in a new tab. On mobile, tap "Share Native" to send the image straight into any app.

Saved Ads

Click any ad to load it back into the studio.
No Saved Ads Yet
Build something in the Studio and click Save to Library.

Ideal Customer Profiles

Define audiences once, reuse them across every ad.
No ICPs Defined
Create your first audience profile to get sharper, role-specific ad copy.

Admin & Brand Settings

All settings persist to Supabase. Changes are visible to every signed-in employee.

Brand Defaults

UTM Tracking

AI Copy Proxy Optional

Deploy a Cloudflare Worker that proxies to the Anthropic API, then paste the URL here to enable AI-generated headlines and captions per ICP. Without it, the studio uses smart templates pulled from your ICP fields.

AI Image Generation Optional

Deploy a Worker that proxies to OpenAI's gpt-image-1 endpoint. Can be the same Worker as copy proxy if it dispatches on body.kind. Costs roughly 4 to 19 cents per image depending on quality.

Unsplash Photos Free

Free Unsplash Developer account gets you 50 searches/hour. Get a key at unsplash.com/developers, create an app, copy the Access Key.

Brevo Integration Optional

When set, you can push a saved ad to a Brevo email campaign as a banner image. The image is hosted by Cloudflare R2 (you supply the upload URL via Worker).

Custom Palettes

Each palette uses up to 4 colors. The first two define the dominant gradient, the third is the accent for CTAs and highlights, the fourth is the text color (use white for dark gradients).
Changes are unsaved until you click Save.