Social automation

A human in front of eight platforms

2 min read


Every social scheduling tool sits somewhere on a line. At one end, full automation: content is generated and published with no human involved. At the other, a web dashboard someone has to log into, which means it does not get done.

Both ends fail. The first eventually publishes something tone-deaf on the wrong day. The second quietly stops being used in week three.

The design

Posts accumulate in a queue — one row per post, with an explicit approved flag that starts false. A Telegram mini app renders the queue: each post previewed as it will appear, with edit, approve and deny. Approving takes one tap.

A scheduler sweeps the queue every 15 minutes and publishes anything that is both approved and due, then marks it posted so it cannot go out twice.

The critical property is that approval is the default gate, not a setting. There is no configuration in which content reaches an audience without a person having looked at it. That is not a feature we could be talked out of; it is the reason the thing is trustworthy enough to leave running.

Why review in Telegram rather than a web app

Because the review has to be something you do while waiting for coffee. A web dashboard means remembering a URL, having a session, being at a computer. A notification in a chat you are already reading means the queue actually gets cleared.

The mini app is not a smaller version of a web dashboard. It is a different interaction: it comes to you.

Publishing to eight places without lying about it

Approved posts go to TikTok, Instagram, LinkedIn, X, Threads, Facebook and Reddit, plus Google Business Profile. Each platform is a separate call, and each returns its own result, which are collected into a per-platform summary sent back to Telegram after the run.

This sounds like an implementation detail and it is the most useful thing in the system. The naive version treats "publish" as one operation that either worked or did not. In reality one token expires, one platform rejects an aspect ratio, and six succeed. If the summary is a single tick, you find out weeks later when someone asks why you stopped posting to LinkedIn. Per-platform reporting means the failure is visible the same day.

The artwork problem

The most common reason a post did not go out was that nobody had taken a photo.

So a post with no image gets one generated: AI art from the post's own details, composited with the venue logo and the event text, uploaded, and attached. It is not a photograph and it does not pretend to be. It is better than the post not existing, which was the actual alternative.

What we would change

The queue has no notion of a campaign, so a run of related posts is a run of unrelated rows that happen to be scheduled near each other. And denying a post deletes the thought behind it — there is no "not this week" that resurfaces later. Both are on the list.