04 / Print product

Kept in Print

Turns a WhatsApp chat export into a printed keepsake book, with a studio, a print pipeline and checkout.

Year
2025–26
Status
Live and selling.
The Kept in Print home page.The Kept in Print landing page in its dark theme.

The problem, stated properly

It started as a one-off gift: take a couple's chat history, lay it out so it still looks like WhatsApp, and get it bound. The hard part was never the parsing. It was making a printed page look enough like the app that the person opening it recognises their own conversation.

WhatsApp's export is not one format, it is several. The parser handles iOS and Android layouts, 12- and 24-hour clocks, edited and deleted messages, attachments, and system events, and matches media in the ZIP back to the message that referenced it.

The rule that shaped it

Rendering runs as a job, not a request.

A large export would blow a single request budget, so it doesn't get one. Pages are produced by headless Chromium on a serverless function, then stitched and imposed into printer signatures so the PDF can go straight to a press. A cover generator works out spine width from the page count.

Three editions of a printed chat book.
The editions. A free watermarked tier alongside the paid Keepsake and Heirloom.
The Studio with a chat being typeset into pages.
The Studio: a chat being typeset. Both themes, the real doodle wallpaper, voice notes as waveforms with real durations.
A typeset page.
A printed page. A5, two columns, and a bubble never orphans across a page break.
A generated cover.
The cover, generated from the chat.
The pricing page.
Pricing. Yoco checkout; a signed webhook is the only thing that completes a purchase.

What it is built from

  • Next.js 16
  • Firebase
  • Yoco
  • Puppeteer + pdf-lib
  • Vercel Blob
  • Programmatic SEO pages from one template

Known limits

Stated plainly, because a client should know what they have.

  • The creator and ambassador programme is suspended until payouts can be automated.
  • Payments cannot be tested locally without a tunnel.

Need something like this to run on?

A thirty-minute call, then a written scope within five business days. No obligation either way.

Start a project
Call
30 minutes
Scope
5 business days
Build
Weeks, in the open