
DeMD
DeMD removes Markdown formatting from AI chatbot output — asterisks, headers, code blocks, extra whitespace — and gives you plain text you can actually use. Built for the small daily annoyance of cleaning up ChatGPT or Claude responses before pasting them anywhere else.
Frontend development
July 7, 20262 min read
- Contribution
- Frontend development
- Updated
- July 7, 2026
- Read
- 2 min
Inside the project
From intent to outcome
A closer look at the thinking, implementation, and decisions that shaped the final work.
DeMD
Every time I copied text from an AI chatbot into a doc, I had to manually clean up the asterisks, hash symbols, and extra newlines. Small annoyance, happened constantly. I looked around for a tool that did this. Didn't find one I liked. So I built it.
The Problem
AI responses are formatted in Markdown. That works fine inside a chat window. The moment you paste it somewhere else — a Google Doc, an email, a CMS — you're left with literal **bold** markers and ## headings rendering as plain characters. Cleaning it by hand takes about thirty seconds. Doing that twenty times a day adds up.
Building It
The decision I'm most glad I made early: keeping the core logic completely isolated. Everything in lib/cleaner.ts is pure functions. No side effects, no DOM, no state. Pass text in, get clean text out. If I ever ship a browser extension or a CLI version, I don't have to rewrite anything.
The stack itself is intentionally boring — Next.js 16, Tailwind CSS 4, Zustand. The harder calls were product ones. How aggressive should "Remove All" actually be? Should preset modes be visible immediately or tucked away? What happens if someone drops a 10,000-word file?
Diff view took the most iteration. I initially skipped it and just showed the output. Turns out, people want to see what changed — not just the result. Once I added a side-by-side comparison with color highlights, the whole thing felt more trustworthy.
Screenshots
Interface details
Dark Mode
Light Mode
More selected work