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
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:
| Element | What You Can Override | Stored In |
|---|---|---|
| Caption text | Adjust length, tone, mentions per platform | captionOverrides (JSON) |
| Hashtags | Different hashtag sets per platform | hashtagOverrides (JSON) |
| Media | Select different images or videos per platform | PostMedia with sortOrder |
| Call-to-action | Platform-specific CTAs | Part 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
| Type | Accepted Formats | Notes |
|---|---|---|
| Image | JPG, PNG, GIF, WebP | Auto-thumbnailed on upload |
| Video | MP4, MOV | Duration tracked for platform limits |
| Carousel | Multiple images | Linked 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/generateendpoint. - 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.
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:
| Option | What Happens | Post Status |
|---|---|---|
| Publish Now | Sent to the publish queue for immediate delivery | PUBLISHING → PUBLISHED |
| Schedule | Sent to the schedule queue for timed delivery | SCHEDULED |
| Save as Draft | Stored for later editing or team review | DRAFT |
| Submit for Approval | Enters the approval workflow before publishing | DRAFT + 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.
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
| Shortcut | Action |
|---|---|
Ctrl/Cmd + Enter | Publish or schedule the post |
Ctrl/Cmd + S | Save as draft |
Ctrl/Cmd + Shift + G | Generate AI caption |
Related Pages
- AI Captions — Deep dive into AI-powered caption generation
- Scheduler — Schedule management and optimal timing
- Drafts & Approvals — Draft management and approval workflows
- Brand Voice — Train the AI to write in your brand's style