The Project Origin: A Real Problem
6pm on a weeknight. I'm tired. Two kids asking for a bedtime story. My brain is empty. I mumble through something about a dragon, the kids lose interest after five minutes, I feel like a bad parent.
That's where this started. Not from a business angle. From a "I want to be better at this" angle.
What if I could request a story, get a personalized narrative in 3 minutes, and actually give my kids something good? Kid-Friendly Story Book.
This is different from my other projects. Shadow Hound solves a business problem (resume optimization). Social Spark solves a content problem (social media writing). But Kid-Friendly Story Book solves a parenting problem. It's the only tool I built for my family first.
Technical Architecture: Simple Pipeline
The flow is straightforward:
- Input form: Parent enters child's name, age, interests
- Webhook trigger: Form submission → Make.com webhook
- Prompt building: Create personalized prompt with age guardrails
- OpenAI call: Send prompt to GPT-4 with temperature controls
- Parsing: Extract story, format with chapters
- Delivery: Email the story with a nice HTML template
- Storage: Save to Airtable (to avoid re-generating same story)
Total time from request to delivery: 2-3 minutes.
Prompt Engineering: The Secret Sauce
This is where 80% of the project lives. The prompt.
Bad prompt: "Write a bedtime story for a 5-year-old about dinosaurs."
Result: Generic, short, boring dinosaur story. Kids already have 100 of these.
Good prompt: Specific, personalized, quality guardrails.
Here's what I actually send (simplified):
Write a personalized bedtime story for [NAME], age [AGE]. Context: - [NAME] loves [INTERESTS] - Tone: Warm, calming, suitable for bedtime - Length: 5-10 minutes reading time ([AGE]-appropriate length) Structure: 1. Opening: Introduce [NAME] as the hero 2. Challenge: A gentle adventure or problem to solve 3. Journey: Include [INTERESTS] naturally 4. Resolution: Satisfying but calm ending 5. Closing: Peaceful, sleepy conclusion Rules: - No scary elements (age appropriate) - No character names that repeat or confuse - Consistent character descriptions - Simple vocabulary for [AGE] years old - Include specific details about [NAME]'s interests - Make [NAME] feel like the main character Output: Format as readable story with chapter breaks.
This prompt is what makes the difference. Without the structure and rules, OpenAI generates okay stuff. With it, the stories are actually good.
Age-Appropriate Content: The Tricky Part
Kids aged 3-10 are vastly different. A 3-year-old needs simple, rhythmic stories. A 10-year-old wants plot and character development. Lumping them together breaks the system.
My solution: Dynamic prompt adjustments based on age.
- Ages 3-4: Very simple language, 5-minute length, repetition, rhythmic elements, concrete images
- Ages 5-6: Simple narrative, 10-minute length, gentle challenges, talking animals often work well
- Ages 7-8: More complex plots, 15-minute length, some humor, quests or adventures
- Ages 9-10: Real character development, 20-minute length, real challenges (age-appropriate), heroes solving problems
The prompt changes based on this age band. Vocabulary changes. Length changes. Complexity changes.
Illustrations: The One Thing I Got Wrong
I launched with a vision: Generate story + Generate illustrations + Deliver both together.
Reality: DALL-E illustrations for kids are hit-or-miss. Sometimes they're delightful. Sometimes they're weird or unsettling. And generating them adds 2-3 minutes to the pipeline.
Current approach: Story is delivered immediately. Illustrations are optional. If parent wants them, they can request them separately. This keeps the fast delivery and avoids the 10% of cases where AI illustrations look creepy.
Lesson learned: Ship the core experience fast. Add nice-to-haves later if they don't slow down the main value.
Parent Customization: What They Actually Want
Originally I thought parents would want templates and choices. "Pick a setting," "Pick a conflict type," etc.
Instead, I found parents want simplicity: just name, age, interests. Let the AI figure out the rest.
What they do want to customize:
- Story length (sometimes they have 5 minutes, sometimes 20)
- Story type (adventure, gentle, funny, magical)
- Specific fears to avoid (dogs, dark, loud noises, etc.)
So now the form has three inputs (required) and three preferences (optional). Simple but customizable.
What Worked Surprisingly Well
Character consistency: I was terrified OpenAI would forget character names or flip details mid-story. It doesn't. It's actually better at keeping characters consistent than I expected.
Pacing for bedtime: I expected AI to rush stories. Instead, it naturally slows down and calms down as it approaches the ending. It's like it understands bedtime is about calmness.
Personalization with taste: Using the child's name and interests doesn't feel forced. The stories feel genuinely personalized, not just name-swapped.
Interest weaving: If a kid loves dinosaurs and space, OpenAI can weave both in a single coherent story instead of picking one. That surprised me.
What Was Harder Than Expected
Length control: I wanted consistent 10-minute stories. First version ran 6 minutes or 18 minutes depending on mood. Took three iterations of prompt refinement to nail the length.
Avoiding weird themes: AI sometimes generates oddly dark or strange elements. "The princess had to solve the mystery of the missing puppet" sounds innocent until OpenAI makes it unsettling. Added explicit rules: no kidnapping, no missing people, no real danger (only silly obstacles).
Voice consistency: Stories work best when they sound like one consistent voice. Early versions switched tone mid-story or got too formal. Solved by being more explicit about tone in the prompt.
Temperature tuning: Too cold (temperature 0.5) and stories are boring. Too hot (temperature 0.9) and stories are weird. Sweet spot: 0.7. Took a while to find.
What Parents Actually Want vs. What I Built
I thought parents wanted: Story + illustrations + shareable links + analytics.
They actually wanted: A fast, free or cheap way to get a good bedtime story.
I removed the analytics. Removed the social sharing. Removed template options. Kept it simple. That's when it clicked.
The metric that matters: Do kids ask for "the story machine" again tomorrow?
If yes, it works. If no, I'm overthinking it.
The Parenting Side: Real Impact
Honestly? This tool changed my evenings. Instead of a tired dad mumbling through recycled Disney plot, there's a fresh, personalized story every night. My kids love it. I love having time to make dinner without guilt.
Is it a business tool? No. I don't charge for it. It's one of my seven projects, but it's the one I use daily.
Is it worth building? Absolutely. Because the problem I solved wasn't "content creators need automation." It was "I want to be a better parent and not feel guilty about it."
The technical part was easy. The hard part was admitting that this tool was for me and my family first, and everything else second.
Lessons for Building Personal Tools
If you build automation for yourself first (before monetizing or scaling):
- You know the real problem. You live it. You fix the actual pain, not the imagined pain.
- You're ruthless about simplicity. You're the first user. You want it to work, not be fancy.
- You iterate faster. You use it every day. Bugs surface immediately. Improvements are obvious.
- You build with love. Not every product needs to be monetized. Sometimes it's just... nice to build something that makes your family happy.