All posts
6 min readEngineering · Product

How we make sure you never repeat yourself

Every flypost.ai post is checked against your entire history before it's generated. Here's why that's harder than it sounds, and why it matters.

The fastest way to look like AI is to repeat yourself. The same angle twice, the same hook formula every Tuesday, the same "Here are 3 things..." template. Humans catch this in a week and never re-engage. Worse: the algorithm catches it and slowly drops your reach.

So the first hard problem we solved at flypost.ai wasn't "how to write a post." It was "how to not write a post we've already written."

Why this is hard

The naive version is to compare new posts against old ones by text similarity. That works until the model gets clever and rewords the same angle. "5 study habits" becomes "Five strategies for studying" becomes "What top scorers actually do", same idea, three different surface forms. Text similarity misses them all.

The right version compares semantic angles, not strings. We embed every post we've ever generated for you, and every new candidate gets checked against that embedding space before generation finalizes.

The Originality Engine

The actual pipeline:

1. Candidate angles, the strategist generates 8-12 possible angles for the next post, not 1. 2. Embed them, each angle becomes a 1536-dim vector via OpenAI embeddings. 3. Compare against history, cosine similarity against every prior post in your account. 4. Threshold, any angle within 0.85 similarity of an existing post is dropped from the candidate pool. 5. Diversity sample, the remaining angles are clustered, and we pick across clusters so we don't ship five variations of one cluster's hook.

The result: a generation that's guaranteed semantically distinct from everything you've ever posted through us. You never repeat. The algorithm rewards you. The audience stays interested.

The edge case: when there's nothing new

What if your brand has 80 posts in history and the candidate pool comes back empty? We don't fail; we expand. We pull in adjacent angles, same pillar, different lens, and re-embed. If that fails too (rare, but it happens after 200+ posts), we surface "we're running out of angles in pillar X" in the dashboard and suggest a new pillar.

This is the difference between a tool that generates and a tool that grows with you. After post 30 most AI tools become useless because they've already used their best angles. The Originality Engine is the thing that prevents that.

Why it costs us

The Originality Engine is expensive. Embedding everything you post adds latency and OpenAI cost on every generation. We could ship faster without it. We don't, because the moment a customer says "this post sounds like the one we did last month" is the moment they cancel.

Quality is the only retention strategy that survives.

Keep reading