The Client
Delivery. We write reports in Markdown and still need a URL a client can open without an account. Toolshed only. Not a /built product. Not a CMS.
The app lives at viewer.pacing.agency on Cloudflare Pages. Current usage is on the free tier, £0 in the stack note.
The Brief
Paste markdown, preview it, share a link. The draft has to travel in the URL so we are not storing client copy on a server. Export MD, HTML, or PDF when the handover needs a file.
Cursor should be able to mint the same link through the viewer-share MCP.
The Approach
Everything runs in the browser. marked, DOMPurify, highlight.js, MathJax, Mermaid, pako for compression. The share payload is compressed into the URL hash. View mode can be editor, split, or preview. Older share links should keep working when the format changes.
1. Write
Markdown in Cursor or the editor
2. Encode
Compressed into the URL hash
3. Share
No login, client opens the link
4. Export
MD, HTML, or PDF
Technical Implementation
Static app. No runtime API. Deploy is Git-connected Pages from main, or Wrangler when someone needs a manual push. There is an optional Neutralino desktop build for offline use. Do not put secrets in a share URL. The hash is the document.
| Piece | Does |
|---|---|
| Share link | Markdown compressed into the hash |
| View modes | editor, split, preview |
| Mermaid / maths | Diagrams and MathJax in preview |
| MCP | viewer-share generate_viewer_share_link |
| Registry | Optional local JSONL of saved links |
| Hosting | Cloudflare Pages, £0 at current use |
- MCP: generate_viewer_share_link from content or a file path. list_viewer_share_links reads the local registry.
- Sanitise: DOMPurify is why we can preview HTML-ish markdown without treating the viewer as a host for scripts.
- Not a CMS: If it needs a permanent page, it belongs in docs or Webflow. This is a share link.
Results & Impact
- A report can leave Cursor as a URL the same afternoon.
- Clients do not need an account to read it.
- Export covers the cases where they want a file, not a hash.
If the URL is too long, that is the draft, not the host. Shorten the markdown or export a PDF.
Preview is also where Mermaid and maths get a real browser, which is the point of sharing from Cursor instead of mailing a .md file that renders differently on every machine.
Why It Worked
We already write in Markdown. The missing piece was a public preview that does not create a user table.
- Hash, not a database: Nothing to GDPR-request from the viewer itself.
- MCP from Cursor: The link is part of the writing loop, not a separate upload step.
- Toolshed: Useful in delivery. Not a homepage tile.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.






