# Publishing posts

Compose, draft, schedule, and publish posts to your connected channels, then track each channel's delivery status.

The **Posts** screen is the publishing hub. It lists everything you have drafted, scheduled, or published, and hosts the **Publishing Composer**, where posts are written and sent to your channels.

## Views

Switch between views with the List / Calendar / Grid control in the toolbar:

- **List** — a table of posts with per-post status, platform, date, and actions.
- **Calendar** — a month grid showing which days have posts scheduled or published. Click a day to see that day's posts, or use **Schedule post for this date** to open the composer with that date pre-filled.
- **Grid** — a card gallery of the same posts, with an adjustable column count.

The toolbar filters posts by platform, Brand Profile, status (**All statuses**, **Scheduled**, **Published**, **Drafts**, **Failed**), and date (**All dates**, **Today**, **Next 7 days**, **Past 30 days**), plus a text search and newest/oldest sorting. Choose **Scheduled** to review posts with manually selected publication times.

Checkboxes select Posts in List and Grid; Calendar day details expose the same
selection controls. Select-all applies only to visible filtered Posts. Selection
survives view and filter changes; the bottom pill shows the count, **Deselect**,
and **Delete**. Confirm the exact selected batch before deletion. Successful
deletions leave the selection; failed Posts remain selected for retry.

Deletion uses each Post's owning Brand Profile, so individual and bulk deletion
also work in **All Brand Profiles**. Switching Workspace or Brand Profile clears
selection. Already-published platform copies are never removed by deleting here.

## Before you publish

Two things must be in place, or the action buttons stay disabled:

1. **A Brand Profile selected** in the toolbar or composer. With "All Brand Profiles" selected, the composer shows an info banner asking you to pick one profile first — publishing is always done on behalf of a single profile.
2. **At least one connected channel** under that profile. The **Destinations** bar at the top of the composer lists the profile's channels as toggleable pills. Channels marked **Disabled**, **Expired**, or **Incomplete** can't be selected — fix them on the [Channels](/docs/channels) screen, or use **Add Channel** to connect a new one.

## Composing a post

Click **Create post** (or **Edit** on an existing draft or scheduled post) to open the composer.

- **Shared Content** is the text published to every selected channel. The counter under the editor shows the character count and how many channels you're targeting.
- **Add Media** attaches images or videos directly from your device (via file picker or drag and drop). Attached media can be reordered, replaced, paused, resumed, or removed directly in the composer. See [Media](/docs/media).
- Media attachments are validated against each channel's constraints (accepted media types and allowed attachment counts).
- **Per-channel tabs** appear for each selected channel. Use **Customize for This Channel** to write different text for that channel (a dot on the tab marks channels with custom text). **Remove Custom Override** reverts it to the shared text.
- **Channel settings** — destination tabs provide persistent provider configuration:

| Platform | Controls configured with the post                                                                                                                                                                                                                                                                                |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| YouTube  | **Video Title** (required, 2–100 characters) and **Tags** (comma-separated; combined length limited to 500 characters, count capped by channel capabilities).                                                                                                                                                    |
| TikTok   | **Post Title** (optional), **Privacy Level** (required — options determined by creator account requirements), interaction toggles (**Duet**, **Stitch**, and **Comments** — enabled when supported by the creator account), and disclosure toggles (**Brand Content**, **Organic Brand**, and **AI Generated**). |
| Threads  | Informational panel — Threads posts use standard post text and attached media with no provider-specific controls.                                                                                                                                                                                                |

Facebook and Instagram channels publish using standard post text and attached media without provider-specific configuration panels in the composer.

### Validation

When you submit, the composer checks the post before anything is sent: a Brand Profile must be selected and the post needs text or media. Scheduling or publishing additionally requires at least one selected channel (and a valid date/time for **Schedule**) — **Save Draft** has neither requirement. Each channel's text must also fit that platform's limits (caption length, hashtag count, accepted media type, YouTube title, TikTok privacy level, and so on). Every problem is listed in a banner — fix them and submit again. Your text, media, and settings are kept even if submission fails.

The composer also keeps an in-progress copy of your text, media, and overrides in your browser for the active Brand Profile, so leaving and coming back restores what you were writing. The copy is cleared when the post is successfully scheduled or published.

## Draft, schedule, or publish now

- **Save Draft** — stores the post text without sending it anywhere. No channel selection is needed. Drafts appear in the **Drafts** status filter in Posts and can be edited, scheduled, or deleted later. Saving a draft for a post that was scheduled cancels its pending deliveries.
- **Schedule** — queues the post for the date and time in the picker.
- **Publish Now** — queues the post for immediate delivery to every selected channel.

"Queued" means Meltiply accepted the post for each channel; delivery to each platform then proceeds per channel and is reported individually — one channel can publish while another is still processing or has failed.

Scheduled times are selected manually using the date and time picker. Every post gets its own individual date and time — Meltiply does not currently offer recurring weekly time-slot Queues, and the composer has no Queue mode that auto-assigns publication times from a named schedule.

## Post statuses

Each post shows a status per channel in the post details (open any post to see them). The group badge summarizes the most urgent channel state.

| Status                                  | Meaning                                                                                                   |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| Scheduled                               | Waiting for its scheduled time.                                                                           |
| Queued / Processing / Awaiting provider | Delivery is in progress for that channel. Statuses update automatically while posts are in flight.        |
| Published                               | Delivered to the channel. A **View on platform** link opens the live post when the platform provides one. |
| Failed                                  | Delivery failed for that channel — the reason is shown.                                                   |
| Cancellation requested                  | Meltiply is stopping an in-flight delivery — check whether it still published on the platform.            |
| Cancelled                               | The delivery was stopped before it went out.                                                              |
| Needs reconciliation                    | Meltiply could not confirm the outcome with the platform.                                                 |

## Managing posts

Click a list row or grid card, or choose **Details** from a calendar day's posts, to open the post's details in a panel that slides in from the right. It shows the full caption, ordered attachments, per-channel status, scheduled and published times, failure reasons, and live post links. On smaller screens the panel fills the width.

The panel's content scrolls independently while its heading and actions stay visible. Action groups wrap on narrow screens so longer translated labels remain fully visible. Close it with **Close**, the close icon, **Escape**, or a click outside the panel. Keyboard users can activate **View details** on list rows and grid cards; focus returns to that control when the panel closes. Low-motion mode opens the panel without sliding.

The same **Edit** and **Delete**/trash shortcuts remain on list rows, grid cards, and calendar day entries.

Available actions depend on the channel's state:

- **Retry** — re-queues delivery for a **Failed** channel. Not every failure is retryable; when it isn't, the retry is refused with an error toast and the failure stays on the post.
- **Reschedule** — picks a new date and time for a delivery that hasn't published yet (also offered for unconfirmed deliveries).
- **Cancel** / **Cancel all pending** — stops pending deliveries. For a channel already in flight, this sends a cancellation request rather than a guaranteed stop — watch the status and check the platform. A confirmation dialog explains that only pending channels are cancelled; channels that already published are unaffected and the post stays live there. Cancelling never unpublishes a post that already went out.
- **Edit post** — opens drafts and not-yet-published posts in the composer. Removing a channel while editing removes that channel's pending delivery. Published posts can't be edited — the button tells you so.
- **Delete post / Delete draft** — removes the stored Post and stops its pending channels after confirmation. Anything already published remains on its platform; remove that copy on the platform itself.

> **Heads-up on unconfirmed deliveries:** if a channel shows **Awaiting provider** or **Needs reconciliation**, check the post directly on that platform before sending it again — the delivery may have actually gone through, and reposting could create a duplicate.
