drops.codes
SaaS platform — full-stack TypeScript application deployed on Vercel with Supabase backend.
PROBLEM
File sharing is solved badly in both directions. Consumer tools put signup walls and premium upsells in front of a 200MB transfer, then give you a link that renders nothing — the recipient downloads a PDF they could have read in the browser. Developer-grade tools solve storage but not presentation. And almost none of them let the shared thing be software — a small site you want to hand someone as a URL.
The gap I went after: get a file from A to B with zero friction, and then actually render it — for the dozen file types people actually share.
APPROACH
Friction first: no account required to upload, files up to 500MB by drag-drop or paste, a link and a QR code per share, optional password protection and auto-delete expiry, view/download tracking. Then the differentiator — 12+ built-in viewers rendering PDFs, spreadsheets, code with syntax highlighting, DOCX, video, audio, EPUB, torrent contents, ZIP archives, and markdown directly in the browser, no download needed. On top of sharing, a Build & Host editor: write HTML/CSS/JS in the browser and publish instantly to a live URL — no build step, no deployment pipeline.
Revenue is wired but honest: Dodo billing is live with Pro ($7/mo) and Team ($19/mo) tiers, and the stated revenue is $0 — a live product with no paid users yet.
ARCHITECTURE
Next.js 16 App Router over Supabase (Postgres + Auth + Storage), with Backblaze B2 in eu-central-003 as the S3-compatible object store — European region on purpose, since uploads are the trust-critical path. A public API v1 exposes exactly 8 RESTful handlers — upload, download, list, delete and friends — documented with OpenAPI at /docs/api, so integrations are programmatic rather than screen-scraped. Auth is OAuth via GitHub and Google; teams get shared workspaces, an analytics dashboard, and cross-file search.
The viewer layer is a dispatcher over 11 viewer components, each owning one format family — so adding a format is one component, not a fork of the upload path. The design language is deliberate brutalism: pure black and white, JetBrains Mono, zero border-radius, a CRT scanline overlay — the terminal aesthetic is the brand, not decoration.
PROOF
- 8 public-API-v1 handlers — measured as exactly 8 handler exports under
src/app/api/v1; the API surface is small enough to audit at a glance and documented enough to integrate against. - 12+ viewers shipped — verified as 11 viewer components plus the dispatcher, covering the format list above without a single paid third-party rendering service.
- 500MB uploads live behind drag-drop, click, or paste, with password protection and expiry as first-class options.
- Billing is live — Dodo Payments integrated with real tiers — and the honest number is $0 revenue: no paid users yet. The README says so in the status table.
STACK
Next.js 16 (App Router, Turbopack) · Supabase (Postgres + Auth + Storage) · Backblaze B2 (eu-central-003) · Dodo Payments · OAuth (GitHub/Google) · OpenAPI-documented public API v1 · Vercel · brutalist design system (JetBrains Mono, zero-radius, scanline overlay).
WHAT I'D DO DIFFERENTLY
I built the viewers before the API and the API before the docs; in hindsight the OpenAPI contract should have come first — it would have kept the viewer components and the v1 surface honest against each other. I'd also treat the free tier's storage economics as a product decision from day one rather than an operations afterthought: 500MB anonymous uploads plus EU-region storage is a real monthly bill, and the pricing tiers should have been derived from that number instead of competitor benchmarks. The Build & Host feature ships, but sandbox hardening for user-authored pages deserves a dedicated pass before it ever sees untrusted traffic.