A framework for families to write personalized, culturally authentic bedtime stories.
I built it so my son could be the hero of stories that reflected his world — his name, his neighborhood, the people he sees, the food on the table. Then I anonymized the universe (the example ships as Kenji-Verse) and opened the framework so other families can do the same for their own kids without writing code.
A specific kid. A specific bedtime.
My son didn’t see himself in the picture books we read at bedtime. Not in the names, not in the food, not in the textures of the neighborhood. The off-the-shelf personalization tools were either shallow (swap a name into a generic template) or too generic to make him care.
So I built the thing I wanted as a parent. A small framework where the world the story lives in — the characters, the places, the values — is a YAML file you author once. Then any story you generate pulls from that world, and the kid recognizes themselves on the page.
Five layers, one universe file, no-setup web tools.
The 5-layer architecture (Surface, Skills, Values, Systems, Future) is the structure for a story that works at multiple altitudes at once — what happens, what the kid notices they’re learning, what values get reinforced, what systems they’re starting to see, where they’re heading. Same story; multiple pedagogical jobs.
The universe is a single YAML file. Characters, places, recurring objects, values, language preferences. A Python validator catches mistakes before a story gets generated. The web tools — onboarding, validator, story generator — are local HTML files that run in a browser without setup. Designed for parents, not engineers.
The example ships as Kenji-Verse.
My son’s actual universe stays private. The framework ships with a fully-worked anonymous example (Kenji-Verse) so families can see a real universe in motion and clone it for their own kid. Pick a name, pick a neighborhood, pick the foods, pick the people who matter. Generate a story. Read it at bedtime.
The hard problem was the schema, not the story generation.
Once the universe schema was right, the LLM did the storytelling work fine. The hard problem was deciding what a “universe” should even contain. Too few fields and the stories were generic; too many and parents wouldn’t fill them in. The 5-layer architecture came out of trying it on real bedtimes, with a real kid who’d tell me when something didn’t fit.
Open source on GitHub.
The framework, validators, and web tools are public. Bring your own LLM key.