GitHub-as-CDN Pipeline: Engineered an upload flow that commits files to a public repo and returns commit-pinned jsDelivr URLs that stay online forever.
Project 06
CloudSnap
Upload anything. Get a CDN URL.
A free media-hosting web app that uploads images and videos to GitHub and returns permanent jsDelivr CDN links in seconds.
Try it

Why this exists.
An image URL should not vanish, and a CDN should not require a credit card. CloudSnap exists so developers can drop a file, own the GitHub repo it lives in, and get a commit-pinned jsDelivr link that still works after the file is gone.
Inside the build
Thought through, end to end.
Full File Browser: Built drag-and-drop multi-file uploads, folder management, inline image/video previews, and one-click copy for CDN and raw links.
Developer API: Shipped public and private REST endpoints for upload, list, delete, and folder creation — usable from cURL, JS, or Python.
Edge Deployment: Designed for Cloudflare Pages with PIN login, API key auth, and support for images up to 100MB and videos up to 500MB.
UI/UX: Built a neo-brutalist yellow-and-black interface focused on speed and clarity for developers hosting media without paid CDNs.
The hard parts
Constraints I designed around.
The features that look effortless were the ones that fought back.
- 01
Links that outlive the file
The obstacle
Branch-based CDN URLs break the moment someone deletes or overwrites the asset. Imgur and friends disappear later.
How I solved it
Commit-pin every upload. The jsDelivr URL points at a git SHA, so the bytes stay on the edge even if the repo moves on.
- 02
GitHub is not a media library
The obstacle
The GitHub API speaks commits and blobs — not folders, previews, and copy-paste CDN links.
How I solved it
Built a full file browser: drag-and-drop, rename, folders, inline image and video preview, and one-click copy for CDN and raw URLs.
- 03
UI for humans, API for scripts
The obstacle
A pretty uploader is useless if you cannot automate it; a raw API is useless if you have to curl from a phone.
How I solved it
Shipped public (bring-your-own token) and private (API key) REST endpoints next to a PIN-protected Cloudflare Pages UI — 100MB images, 500MB video, no origin server.
Product tour
A closer look inside.
Swipe through the real product screens and the details that make the experience feel complete.


Product in motion
See how it feels.
A real walkthrough of the product, interactions, and complete flow.
