kiden
Kiden generated children’s stories built around customisation rather than a prompt box. A child first creates a hero: appearance and traits. That hero then appears in stories the user also parameterises, including the moral it should teach.
Three of us built it as equal partners, from mid-2023 to April 2026. I wrote the whole backend and the generation pipeline by hand, before AI coding assistants were any good: FastAPI, MongoDB on Atlas, deployed on Render, with Stripe. Another founder wrote the React frontend.
There is no prompt box anywhere in the product. The only thing a user types is the hero’s name.
Every other choice, the hero’s appearance and traits, the setting, the moral, the age band, comes from a list we defined. Users compose from options we had already decided were safe.
Most consumer generative products do the opposite: they accept arbitrary text, then try to catch what comes back. A closed input space eliminates prompt injection and unbounded user intent structurally; filtering text afterwards only reduces them probabilistically. For a product making stories for children, that was the right call.
The API enforces the constraint. Requests are validated against explicit allowed literals, so a handcrafted request that bypasses the UI is rejected: its values are not in the permitted set. It is easy to build the interface layer and mistake it for a control.
Above that sat a six-stage generation pipeline: writing, proofreading and structuring, then illustrations that keep the hero consistent across chapters. The reader’s age went into the prompts as a parameter, so age-appropriateness was part of the system rather than a hope about the model.
These are mechanisms, and I never measured them. Nothing tested whether the controls held: no adversarial testing of the option combinations, no sampling of generated stories against a rubric. I built the safeguards and never built the evidence that they work. That would take a held-out set of option combinations, including deliberately awkward ones, generated and reviewed against an explicit rubric. Building that kind of evidence is what my work since has been about.
Kiden is no longer running. The product was finished and deployed, with payments integrated; the partnership was not, and I left. It was where I first built AI into an application, where I started on LangChain and moved to pydantic-ai, which I have used for everything since.