Remember the old ssyoutube
trick? That magical moment when you could just tweak a YouTube URL to instantly download a video? I’ve always loved how simple that was. So I decided to bring the same spirit to ChatGPT.
The result: pdfChatGPT — a tiny web app that solved a frustration that kept bugging me.
🛠️ The Problem
ChatGPT is fantastic, but it lacks a built-in "Export to PDF" button. We’re stuck with two not-great options:
- Copy-pasting: Ruins all formatting. Code blocks become a mess, tables break, images disappear.
- Screenshots: Need to stitch together endless images; text isn’t searchable.
It’s a nightmare, especially for long or technical threads.
⚡ The “Just Change the URL” Solution
Inspired by ssyoutube
, I wanted a solution that felt like a magic trick.
Take your ChatGPT share link:
https://chatgpt.com/share/abc123...
Just add pdf
to the domain:
https://pdfchatgpt.com/share/abc123...
That’s it! The download for a perfectly formatted PDF (or Markdown) starts instantly.
The tool makes sure everything comes out looking sharp:
- ✅ Emojis and all text formatting are retained
- ✅ Code blocks keep their syntax highlighting
- ✅ Images are perfectly embedded
- ✅ Complex tables are clean and optimized (even wide ones!)
- ✅ The PDF has seamless page breaks, so nothing is cut awkwardly
💡 How I Built It (The Fun Part)
Of course, it wasn’t that simple under the hood. Here are a few hurdles I had to clear:
- Broken Emojis: Standard PDF renderers often choke on emojis. I fixed this by embedding a full emoji-supporting font (like Noto Color Emoji) and enforcing UTF-8 everywhere.
- Syntax Highlighting: This wasn’t preserved by default. I inject Highlight.js and a custom CSS theme into the headless browser before printing to PDF.
- Disappearing Images: ChatGPT loads images asynchronously, so my backend waits, fetches, converts them to base64, and embeds them into the HTML before Puppeteer “prints” the page.
- Mangled Tables: Long tables would overflow or break. Custom responsive CSS and smart margin tweaks finally fixed it.
🚀 My Tech Stack
- Backend: Node.js + Express
- Rendering: Puppeteer (headless Chrome)
- Hosting: Vercel (ridiculously fast CI/CD and deploys)
🔒 Privacy
No chats are stored on our servers—everything is rendered on-the-fly and deleted instantly. Your data stays yours.
🙏 Shoutouts
- ChatGPT — for giving makers everywhere a platform to build for (and with!).
- Cursor — for making the coding process smoother and way more fun.
💬 Give It a Try!
It’s free, requires no login, and was built to solve one simple frustration.
What’s the most complex ChatGPT thread you have? Try and break my app with it—I’d love to hear your results in the comments!
Top comments (0)