A social post looks like a string until you try to send it to more than one platform.

That was roughly where OpenPost started. There was some source content, a list of accounts, and a queue that would publish it later. For a normal text post, that model is fine.

Then I started adding real formats.

X may need a thread. LinkedIn can take a PDF document. Instagram wants a carousel. YouTube needs a title, description, thumbnail and privacy setting. Even two accounts on the same platform may need different copy or media.

At that point, the “post” was no longer one thing. I could either keep adding exceptions to the original model or admit that I was modelling it wrong.