Build in public with numbers you didn't type
How Sona drafts build-in-public posts from what shipped, writes every number from your own data and checks each post against its network's rules.
4 min readUnisonia team

Building in public works because the numbers are real. "Revenue up 25% this week" earns attention only while the people reading it trust that it happened. The moment a post rounds up, copies last week's figure or quotes a number nobody can trace, the habit stops paying off.
Writing those posts every day is also the part that slips first. You have a product to ship. So in Unisonia, the posts are drafted for you, and the numbers in them are never typed by hand, not by you and not by an AI.
Why numbers in posts go wrong
Most build-in-public numbers break in one of three ways:
- They are typed from memory. A dashboard said 1,240 visitors on Monday; by Thursday the post says "about 1,300".
- They are copied from the wrong period. Yesterday's revenue lands in a post about the week.
- They are written by a model. A language model is good at sentences around a number and bad at the number itself. It rounds, it guesses, and it sounds sure either way.
Each of these is easy to fix once, and hard to avoid every day.
A post starts from what happened
Sona, Unisonia's teammate for every product, drafts posts in Content from the things that actually happened in the project: the Daily status and its numbers, the pull requests that merged, a video that is ready to go out, an improvement that was measured. Product facts come only from the product's own description, its site and its assets.
A post in Unisonia is written for one network. Its text can be several parts, which is a thread on networks that have them, and it carries the videos and images that go with it. It moves from Idea to Draft, Planned, Ready and Posted, and that state is worked out from the post itself, never set by hand.
Numbers by reference
When Sona needs a number, she doesn't write it. She writes a reference to it, and Unisonia writes the value when the post is saved:
Revenue this week: [[week finance:revenue]] ([[week finance:revenue change]])
becomes
Revenue this week: $1,250.00 (+25%)

The numbers are the same ones the Daily status shows: recorded revenue, expenses and net, merged pull requests and releases, search clicks and product events. Each can be read for yesterday, the last 7 days or the last 30 days, and against the same length of time before it.
If a number isn't there yet, for example because a source is still syncing or there is nothing to compare with, the post isn't saved with a gap or a zero. Sona is told the number is missing and writes the sentence without it.
The same works in a post's image. Sona designs images as small HTML pages around the project's real screenshots and assets, and a reference inside the design is written the same way before Unisonia renders it to a PNG.
Each network counts differently
A post that fits X doesn't fit Threads the same way, and LinkedIn takes a link only when nothing else is attached. Unisonia keeps each network's rules in one table, read from the networks' own help pages, and checks every post against them: the page's character counter, its warnings and the Mark ready button all read the same check.
Characters are only half of it. What a post can carry differs just as much:
| Network | Media in one post | Images and video together | Threads |
|---|---|---|---|
| X | Up to 4, one of them a video | Yes | Yes |
| Up to 20 images, or one video | No | No | |
| Threads | Up to 20 | Yes | Yes |
| Up to 20, and at least one | Yes | No | |
| TikTok | Up to 35 photos, or one video | No | No |
| YouTube | One video, a Short | No | No |
A draft may break these rules while you work on it. A post marked ready, or posted, may not.
You still post it yourself
Unisonia doesn't post to any network. When a post is ready, you copy its text, download its media and post it where it belongs. Then you mark it posted with its address and the day, and later add its views, likes and comments as you read them. That keeps your accounts in your hands, and it keeps a record of what went out next to the numbers it talked about.
Your own agent can do all of this too. Over Unisonia's MCP server, Claude Code or Codex can list the same numbers with list_datasets, write a post with create_post and design its image with create_post_image, with the same references and the same checks.
Where to start
Start the trial and connect the services your product already runs on: payments, hosting, analytics, search, code. The Daily status starts the next morning, and with it the numbers your posts can use. From then on, a good build-in-public post is a conversation with Sona and a click on Copy text, with every number in it one your data can back up.
One teammate who gets every product you ship found.
Sona checks, fixes, tells people and measures, and asks before anything ships.