← All work

ExportGPT

in use

A Chrome extension. It saves a ChatGPT conversation as a PDF: the whole thread, only the answers, or blocks you pick.

In the store Export ChatGPT Conversation
A fragment of a ChatGPT conversation in dark theme: the answer as a bullet list, ChatGPT's own row of icons under it, and in the top right corner an Export (2) button next to ChatGPT's own share button. One message below is outlined and ticked.
The button the extension adds, where it actually sits: in ChatGPT's own toolbar, next to ChatGPT's share button. It counts the messages you have ticked.

How it works

Four steps: the page holds only part of the conversation, the extension rebuilds it, a server renders the PDF, the file comes back.
What happens when you press Export.

Where the file goes

The route: DNS tells the browser the address, the extension sends an encrypted request, a firewall lets only that port through, Caddy decrypts it and keeps the certificate, Gotenberg renders the PDF inside the server, and the file returns the same way.
The route a conversation takes, and where it stops being readable by anyone in between.

Devlog

UI

The request for a rating got a visible “Not now”. Until then the only way out of it was to click somewhere else.

UI

Added “Everything” to the top of the menu. Exporting the whole conversation was already what the button did, and I assumed that was obvious. An uninstall comment showed it was not: people were looking for that option and did not find it.

The menu with a new first item, Everything, above the two older ones.
engine

Long exports had been arriving cut short, always at the same place. ChatGPT had stopped keeping the turns that scroll out of view, so the extension now walks the whole thread and rebuilds it before anything is rendered. The same day file names stopped collapsing into “New chat”: the name falls back to the first question asked.

engine

Images are shrunk before the file is sent. They used to be packed in at full size, so a chat with several pictures made a 24 MB file. That was heavy enough for the renderer to give up. The same chat now makes 2.7 MB and the pictures look the same.

UI

Block selection: messages are ticked one by one and the button shows how many are selected.

server

Rendering moved off the paid service onto a machine I rent. The same conversion, but the cost stops growing with every export someone makes.

UI

Renamed to Export. Paper settings moved into a separate window, and the menu began asking what to export instead of how to print it. The frame is not a screenshot kept from that day: no screenshots were taken. It is the markup and stylesheet of that commit, checked out of the repository and rendered again.

A dark menu offering “select to export” and “AI answers only”.
start

Built on top of someone else's extension that saved any web page as a PDF through its own paid conversion service. The first version kept that shape: a button “Save as PDF” and a menu about paper — A4 or Letter, portrait or landscape.