Two Tongue Tales
personalised bilingual storybooks, built solo for a client in Singapore.
A client in Singapore wanted a way for parents to turn a real family memory into a keepsake-quality storybook their kid could read in two languages at once. I built it end to end, on my own, from a v0 scaffold into a real product flow.
the flow
sign in
An email claims one free story credit. No account wall before you've seen the thing work.
create
The parent enters the child's name, age range, and target language (English plus 8+ others), uploads a photo for character consistency, and describes the memory.
generate
The engine turns that into a 10-page bilingual storybook, illustrations and narrative sized to the child's age.
preview & edit
Text can be edited and images regenerated before anything gets finalised.
order
Save it digitally, or order a print-on-demand softcover ($39.90) or hardcover ($59.90).
the mood
The client's reference point was warm, kid-friendly, closer to a picture book than a SaaS dashboard. A custom OKLCH palette and Geist type carry that through every screen, from the create flow down to the final printed spread.


what I actually built
Next.js App Router underneath, Zustand with localStorage persistence carrying auth state and in-progress drafts across the multi-step flow, and shadcn/ui for the component layer. Being the only developer on a client project means the design system, the state model, and the page-by-page flow all had to hang together with nobody else around to catch the seams.