Inspiration

I never got to know my great-grandparents. I don't have their voices, their handwriting, or one story in their own words. By the time I was old enough to ask, there was nobody left to ask.

I grew up on my family's stories from Lima and Callao, Perú. My grandpa worked the docks as a stevedore. One day he came home with a bag of bread, and my mom, who was four, asked for butter he couldn't afford. My grandma prayed the whole way home. Those stories made my family who we are, and right now they only live in a few people's heads.

I wanted to make sure my grandkids' kids get to know us. Not through a transcript nobody reads, but through a real book they'd want to open.

What it does

Keeper turns a family memory into an illustrated, narrated storybook in four steps:

  1. Tell: record the memory, upload an old recording, or type it. If the person has passed away, you can tell what you remember, and the book labels it as your recollection.
  2. Check: Keeper types out what was said (ElevenLabs), and the family fixes names and details.
  3. Make the book: AI writes 8 or 12 short chapters (Grok) and paints a watercolor picture for every chapter automatically.
  4. Share: read it, listen to it read aloud, make a Spanish, French, Portuguese or Hindi edition, and download the whole thing as one file the family keeps forever.

The example on the home page, The bread he brought home (El pan que pudo traer), is my grandma's telling, reconstructed from my family's memories, in English and Spanish, with every chapter narrated.

Isn't this just making things up?

That was my first worry too. I talked it through with my dad, and he put it simply: when someone writes a book about a person's life, they don't publish the raw words. A writer shapes them so people will actually read them. Keeper is a biographer for every family, and it stays honest about what it does:

  • You choose: Close to the telling (only what was said) or Vivid retelling (adds scenes and dialogue).
  • Every chapter links back to the exact words it came from. The original telling is never changed.
  • Anything invented is labeled on the page, and every picture says "illustration, not a photograph."
  • The reading voice is a labeled AI voice. Keeper never clones a relative's voice.
  • Nothing goes to an AI service until you press the button, and the app tells you what is sent where.
  • The family reviews the transcript, the translation and the final book before it becomes a keepsake.

How I built it

  • Frontend: plain HTML, CSS and JavaScript, with no framework, so the downloaded book opens anywhere, even offline. Books are saved in the browser (IndexedDB), with no accounts.
  • Backend: Python and FastAPI.
  • AI: xAI Grok writes the chapters, asks follow-up questions and translates. Grok's image model paints the illustrations. ElevenLabs Scribe v2 transcribes with word timestamps, and ElevenLabs Multilingual v2 narrates, with timing so the words highlight as they're read.
  • Guardrails: every chapter has to pass checks before you see it: it must quote a real excerpt of the memory, fit a length range, and say what it added. If the checks fail, Keeper gives you back your original words instead of a broken book.
  • Deployment: Docker on a Vultr server behind Caddy at keeper-ai.tech. GitHub Actions runs the tests on every push and rolls back automatically if the new version fails its health check.
  • AI coding help: I built it with Claude Code and Cursor.

Challenges I ran into

  • Keeping the AI honest. Early drafts made up details that felt true but weren't said. I fixed it by making every chapter quote the real words, with a check that rejects anything that doesn't match.
  • Short memories. One sentence can't honestly fill 8 chapters. In faithful mode the checks reject it, so right now vivid mode works best for short memories.
  • Tone. Family stories include hunger, illness and grief. I removed the assumption that every story is a happy childhood memory.
  • Making it calm. A tool for grandparents can't feel like a dashboard. I moved the story first, put the controls after it, and made the text bigger and easier to read.

What I learned

Preserving a memory is a different problem from "generate a story." Most of my time went into limits (checks, labels, review steps) rather than generation. I also learned that trust is the product: if a family can't tell what's real, the book is worthless to them.

What's next for Keeper

  • Pictures that look like your family: describe the people in the story ("Grandma Irene: dark brown skin, curly black hair") and fix any picture that's wrong.
  • A shared family library with accounts, so relatives can read and add memories, and a book never depends on one device.
  • A life story: a person's books arranged in the order of their life, from childhood through work to family.
  • Right-sized books: a short memory becomes a short book, after 2–3 follow-up questions.
  • A one-tap start: "Who is this about?" and then record.

Built With

Share this project:

Updates

Submission history