Background
SnuggleRead had a simple pitch: a children's book in which your child is the hero, their name woven through the story, their photo on the cover. The founders could produce one book by hand in an afternoon of design work. That afternoon was the business problem: personalization doesn't scale if a designer touches every order. The whole pipeline, story, cover, layout, print file, had to run itself.
Challenges
- Free-form AI text was too risky for a children's product. Stories had to stay warm, age-appropriate, and structurally identical from book to book.
- Print is unforgiving. A file that looks perfect on screen gets rejected, or printed wrong, without exact bleed, trim, 300-DPI resolution, and a spine width that changes with page count.
- Parents upload real photos: dim living rooms, busy backgrounds, half-cropped grandparents.
Solution
We treated each book as a template with controlled blanks. The story arcs were written and edited by people; OpenAI filled in the personalized threads, the name, pronouns, small scene details, inside those rails. Every book read like it was written for one child, and none of them could go off-script.
The production line was code. Uploaded photos passed through automatic background removal, covers were composed on HTML Canvas, and Puppeteer rendered every page to a print-ready, 300-DPI PDF with correct bleed and a spine computed from the final page count. The finished file went straight to Lulu's print-on-demand API, which printed and shipped the physical book. Firebase carried order state the whole way, so parents watched their book move from “composing” to “printed”.
Key features
- Human-written story arcs, AI-personalized inside strict rails
- Automatic photo cleanup and cover composition on Canvas
- Puppeteer-rendered 300-DPI print PDFs with computed spine width
- Direct print-and-ship through the Lulu API
- Live order status, from “composing” to “printed”
Outcome
About three minutes from photo to print-ready PDF, with no designer in the loop. The site is no longer active; the pipeline it ran on is the reference design for our automated-content work.