mdreader
MD Reader — a static-hosted markdown reader/editor, served at the site root. The app
(HTML/CSS/JS) lives at the top level (index.html, css/, js/);
public share links are rendered by the serverless functions in api/. Deployed on
Vercel (static + serverless functions).
Layout
index.html,css/,js/,images/,icons/,sounds/— the reader app (served at/).manifest.webmanifest,sw.js— PWA installability + OS file handling (scoped to/).api/— serverless functions:view.js(share pages at/s/{id}),share.js,sitemap.js.stamp-version.sh— VercelbuildCommand: stamps__BUILD__asset URLs, minifiesjs/+css/, verifies SRI pins.vercel.json— rewrites (/s/:id→api/view,/sitemap.xml→api/sitemap) and cache headers.
Clearing shared links
Shared links (/s/{id}) are stored one JSON blob per share in Vercel Blob undershares/{id}.json and never expire — a share lives until it is explicitly deleted.
The store only grows, so clear it periodically.
Delete a single share — no server access needed. Whoever created it deletes it
from the share dialog in the app (it holds the one-time delete token). This 404s the
page within the cache TTL.Bulk / owner cleanup — needs
BLOB_READ_WRITE_TOKENin the environment. Any of:Vercel dashboard: Storage → your Blob store → browse
shares/→ delete.Vercel CLI:
vercel blob lsto list,vercel blob del <url>to remove.Script (delete shares older than N days, default 90):
node scripts/clear-shares.mjs 90