how we manage a large auto-generated blog without repetition
a look at how lucy's blog stays fresh with 130+ seed topics, rotation rules, and scaffolding to avoid topic collapse. no ai-generated sameness here.
when you’re generating a blog at scale, 266 posts and counting, you run into a classic problem: the content starts to sound the same. not just in tone, but in topic. the same angles, the same arguments, the same five ideas dressed up in slightly different words. we’ve seen it happen. if you just ask a language model to 'write something diverse,' it often converges on a handful of safe, familiar themes. it’s not the model’s fault. it’s a prompt design problem.
so we built a system that doesn’t rely on the model to invent diversity on the fly. instead, we bake it into the input. here’s how.
the seed pool: 130+ distinct angles
we maintain a pool of over 130 seed topics in our codebase. each seed has a few components: a slug hint (for url generation), a title seed (to guide the headline), and a prompt that defines the angle. these aren’t just broad categories. each seed is crafted to target one specific type of post:
- deep dives on a product feature
- ethical considerations around ai companionship
- user pattern guides (how people are actually using lucy)
- competitor analysis (fair, specific, not ranty)
- operator diaries (like this one)
- cultural commentary on ai and connection
this level of granularity matters. if we just said 'write about ethics,' we’d get a generic essay every time. but by having seeds like 'ethics of memory persistence' or 'ethics of emotional boundaries,' we force specificity. the model isn’t starting from a blank slate. it’s starting from a pointed question.
rotation rules: round-robin with occasional new seeds
we use a simple round-robin system to pull from the seed pool. no fancy weighting, no 'engagement' scoring, just cycling through the list. every time we generate a post, we take the next seed in line.
every ten posts or so, we also append two new seeds to the pool. these are usually inspired by recent product updates, user feedback, or ops events. if we launch a new feature, we add a seed for it. if we notice a pattern in how people are talking about lucy, we add a seed to explore that. this keeps the pool evolving alongside the product.
why scaffolding beats 'just be diverse'
if we handed the model a vague directive like 'write a unique blog post,' it would fail. not because it’s incapable, but because 'unique' isn’t a prompt. it’s a vibe. models need constraints to produce variety. they need guardrails.
by defining diversity at the seed level, not the prompt level, we ensure that each post starts from a different place. the model isn’t asked to generate novelty. it’s asked to respond to a specific, pre-defined novelty. the creativity is in the response, not the invention of the topic.
this also keeps us honest. we can’t just generate ten posts in a row about how great lucy is. the seeds force us to mix product updates with ethical questions, with user stories, with technical explainers. it feels less like marketing and more like a real blog with a point of view.
what didn’t work
we tried early versions where we just let the model 'do its thing' with minimal guidance. the result? topic collapse within 20 posts. it defaulted to the same tropes: 'ai companionship is the future,' 'here’s how to get the most out of your ai friend,' 'why emotional ai matters.' all true, but all same-y.
we also tried letting the model choose from a list of categories. but without tight constraints, it would often pick the easiest or most generic option. the scaffolding, the pre-written seeds, is what fixed it.
the result: 266 posts and no dupes
after 266 posts, we haven’t had a single duplicate topic. not because the model is magic, but because the system is designed to avoid it. each post has a genuine reason to exist. each one has a signal.
you can read them all and feel like you’re moving through a coherent but varied body of work. not a loop of slightly rewritten templates.
it’s a reminder that ai generation works best when you give it structure, not just freedom.
you can explore the full blog, and maybe find a companion while you’re at it, over at /companions.
thanks for reading. if this resonated, the product is downstairs.