Platform variants
A variant is the platform-specific version of a post: the actual text that publishes to LinkedIn or X (Twitter), plus the account it posts from and its own schedule and status. A post can have at most one variant per platform — the backend enforces this, so creating a second LinkedIn variant fails with "A variant for platform 'linkedin' already exists."
Add a variant
On the post detail page, click Add variant in the channel bar (or in the empty state if the post has none yet):
- Platform — LinkedIn or X (Twitter). The dropdown shows how many accounts are connected per platform.
- Posting account — the connected account this variant publishes from. If exactly one eligible account exists, or you saved a per-platform default, WriteMars preselects it. If you choose Create without account, you can still write the variant and connect an account later.
Each variant appears as a platform tab in the channel bar; switch tabs to work on each channel.
Write per-platform content
The active variant renders as a feed-style mockup — your account's avatar and name above an inline editor — so you write directly inside a preview of how it will read. The editor is plain text with :emoji: autocomplete, LinkedIn mention search, and / AI commands, plus a character count. Twitter/X variants swap the editor for the thread composer.
Content autosaves as you type (debounced) — there is no manual Save button — and any pending change is flushed the moment you click out of the editor or navigate away. Each variant also has its own media and attachments, auto-engagement, preview, and performance sections below the editor.
Posting account
Each variant publishes from one connected account. In API payloads this is social_profile_id; in the app it is shown as Posting account. Only scheduling-type profiles can be assigned. Two gotchas:
- A variant with no account can be written but not scheduled or published — assign one first.
- Changing the posting account is allowed while the variant is
draft,failed,scheduled, orneeds_approval.publishingandpublishedvariants are locked. - Scheduling to an account you can't publish to directly isn't blocked — the variant moves to Awaiting approval (
needs_approval) and the account's approvers are asked to sign off. See approvals.
The model is: one variant per platform, one posting account per variant. If you need a different message for the same LinkedIn page, create a separate post. If you need the same post to use a different LinkedIn account, change the variant's posting account.
Platform-specific options
One platform option field lives on the variant today. The app does not currently expose a picker for it — set it via the API or an AI agent when creating or updating a variant:
| Field | Values | Notes |
|---|---|---|
linkedin_visibility | public, connections, logged_in | Who can see the LinkedIn post: everyone, your connections only, or anyone logged in to LinkedIn. Unset defaults to public at publish time. |
Status and locking
Every variant carries its own status — draft, needs_approval, scheduled, publishing, published, or failed — shown on its tab and in the property pane's schedule summary. The full lifecycle is covered in Publishing and post statuses.
What you can still change depends on the status:
needs_approval— waiting on the channel's approvers; approval releases it toscheduled, rejection returns it todraftwith the reviewer's comment.publishing— every edit is rejected until the publish finishes.published— the variant is locked in: its schedule and status can no longer change, and a Twitter/X thread can no longer be edited (the composer turns read-only). A Published post banner appears above the editor with the publish time and a View post link to the live post. Editing the text of an already-published variant does not change anything on the platform.failed— the error message shows under the editor; fix the cause and publish or schedule again.
Media changes count as content changes for approval purposes. If an already-approved gated variant is edited before it publishes, WriteMars marks the old approval stale and routes the updated version back through the channel's approvers.