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.






