Skip to main content

Post Composer

The Composer is your central content creation hub in UniPulse. Write once, customize per platform, and publish everywhere — with AI assistance, media management, and per-platform overrides built right in.


How the Composer Works

Every piece of content in UniPulse starts as a Post. Under the hood, a Post is a rich data object that tracks everything from your caption text to per-platform overrides:

Post
├── caption → Your primary caption text
├── hashtags[] → Array of hashtags applied to the post
├── mediaType → IMAGE | VIDEO | CAROUSEL
├── captionOverrides → JSON: per-platform caption tweaks
├── hashtagOverrides → JSON: per-platform hashtag tweaks
├── status → DRAFT | SCHEDULED | PUBLISHING | PUBLISHED
│ PARTIALLY_PUBLISHED | FAILED
├── scheduledAt → When the post should go live
└── publishedAt → When it actually went live
Behind the Scenes

When you write a single caption and then tweak it for Instagram, the base caption field stays intact while the changes are stored in captionOverrides as a JSON object keyed by platform. This means you can always revert a platform-specific version back to the original.


Multi-Platform Editor

The Composer lets you create a single post and publish it to Facebook, Instagram, and TikTok simultaneously. Each platform has its own tab where you can customize:

ElementWhat You Can OverrideStored In
Caption textAdjust length, tone, mentions per platformcaptionOverrides (JSON)
HashtagsDifferent hashtag sets per platformhashtagOverrides (JSON)
MediaSelect different images or videos per platformPostMedia with sortOrder
Call-to-actionPlatform-specific CTAsPart of caption overrides

Platform-Specific Tips

  • Instagram — Supports up to 30 hashtags; use the CAROUSEL media type for multi-image posts
  • Facebook — Longer captions tend to perform well; hashtags are less critical
  • TikTok — Keep captions short and punchy; video (VIDEO media type) is the primary format

Media Management 🖼️

The Composer supports three media types, each backed by the MediaFile model:

MediaFile
├── fileName → Original upload name
├── mimeType → image/jpeg, video/mp4, etc.
├── fileSize → Size in bytes
├── storageUrl → CDN-accessible URL
├── storageKey → Internal storage reference
├── thumbnailUrl → Auto-generated thumbnail
├── width / height → Dimensions in pixels
└── duration → Video length (video files only)

Supported Formats

TypeAccepted FormatsNotes
ImageJPG, PNG, GIF, WebPAuto-thumbnailed on upload
VideoMP4, MOVDuration tracked for platform limits
CarouselMultiple imagesLinked via PostMedia with sortOrder

Media Ordering

For carousels, each media file is linked to the post through a PostMedia junction with a sortOrder field. Drag-and-drop reordering in the UI updates these sort values.


AI-Powered Features

The Composer integrates directly with UniPulse's AI engine (powered by Gemini 2.5 Flash). Without leaving the editor, you can:

  • Generate captions — Click AI Generate to produce captions from a topic or your uploaded media. See AI Captions for all options.
  • Generate hashtags — Get relevant hashtag suggestions via the POST /ai/hashtags/generate endpoint.
  • Generate CTAs — AI-powered call-to-action suggestions via POST /ai/cta/generate.
  • Generate images — Create AI images directly from a prompt via POST /ai/image/generate.
  • Translate — Translate your caption to another language via POST /ai/translate.
tip

If you have a Brand Voice configured and set as default (isDefault: true), the AI will automatically match your established tone, vocabulary, and style patterns in every generation.


Publishing Options

When your post is ready, you have four paths forward:

OptionWhat HappensPost Status
Publish NowSent to the publish queue for immediate deliveryPUBLISHINGPUBLISHED
ScheduleSent to the schedule queue for timed deliverySCHEDULED
Save as DraftStored for later editing or team reviewDRAFT
Submit for ApprovalEnters the approval workflow before publishingDRAFT + ApprovalRequest created

Post Status Lifecycle

DRAFT → SCHEDULED → PUBLISHING → PUBLISHED
↘ FAILED
↘ PARTIALLY_PUBLISHED
  • PARTIALLY_PUBLISHED — The post succeeded on some platforms but failed on others (e.g., Instagram published but TikTok returned an error).
  • FAILED — The post failed on all targeted platforms.
warning

Once a post enters the PUBLISHING state, it cannot be cancelled. Make sure to double-check your content and selected platforms before confirming.


Preview Mode

Click Preview to see exactly how your post will render on each platform before publishing. The preview uses your actual media files, caption (with any overrides), and hashtags to simulate the native platform appearance.


Keyboard Shortcuts

ShortcutAction
Ctrl/Cmd + EnterPublish or schedule the post
Ctrl/Cmd + SSave as draft
Ctrl/Cmd + Shift + GGenerate AI caption