Litestore · Operator guide

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 secret

Bluesky needs:

username
app password
service URL

The 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
failed

The publisher runs every 15 minutes and takes up to 10 due posts per run. For each one:

  1. The post is claimed out of the scheduled state before the platform is called, so two overlapping runs cannot both publish it.
  2. There is no in-flight state to move it to, so it is claimed as failed.
  3. 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?

On this page