Social
Learn how to compose and schedule posts to Bluesky and X from the admin.
Marketing → Social Media composes posts for X and Bluesky, the only two platforms with a publisher behind them.
A post carries its text, an optional image, and an optional product and campaign.
There are two ways to get it out. Setting a publish time hands it to a job that runs every fifteen minutes. The Post button instead copies the text and opens the platform's own composer, which is what you use before the accounts are connected — or for a platform that cannot publish at all.
The record behind the screen is the social post.
The two platforms that publish
X (Twitter) and Bluesky are connected under Settings → Integrations.
X needs:
API key
secret
access token
access secretBluesky needs:
username
app password
service URLThe editor counts characters against each platform's limit as you write:
- 280 for X
- 300 for Bluesky
The platforms that do not publish
Instagram, Facebook, LinkedIn and TikTok can still be shown on older records, but they cannot be chosen for a new post.
If one is scheduled anyway it is marked failed with the reason. It fails loudly rather than sitting in the queue being re-read forever.
Schedule, or share by hand
A publish time queues the post for the publisher.
The Post button copies the text and opens the platform composer in a new tab, and you mark the post as shared afterwards.
How a scheduled post is sent
A post moves through four states:
draft
scheduled
posted
failedThe publisher runs every 15 minutes and takes up to 10 due posts per run. For each one:
- The post is claimed out of the scheduled state before the platform is called, so two overlapping runs cannot both publish it.
- There is no in-flight state to move it to, so it is claimed as failed.
- It is flipped to posted only once the platform confirms.
A crash mid-send therefore leaves a retryable failure rather than a false success. Given a choice between a post that might be sent twice and a post that might look sent when it wasn't, this picks the one you can see and fix.
Never sent twice
A failed post that already carries an id from the platform did reach it.
That post is settled as posted rather than sent again.
Retries have a budget
Failed posts are retried automatically up to 3 times, rescheduled 5 minutes apart so they don't all fire at once.
The page also has a retry action for the whole batch.
Failures become work
A failed post raises an operator task that links back to this page.
The page itself leads with an alert listing them, so a failure is visible in two places rather than waiting to be noticed.
Deciding how to post
Schedule it when the account is connected and the platform is X or Bluesky. That is the only path that publishes on its own.
Use the Post button for everything else — the four platforms that cannot publish, and anything you want to send before Settings → Integrations is filled in. Remember to mark it as shared afterwards, because nothing else will.
When a post has failed, check for an id from the platform before retrying by hand. A post that reached the platform is settled as posted, not resent.
The question when the queue looks stuck is:
Is this post waiting for the next fifteen-minute run, or has it already failed and used its three retries?