Speedrunning a home-cooked DocSend replacement
Yesterday, I was working on something where DocSend would have come in handy — a somewhat-sensitive document where we wanted the ability to verify the email addresses of viewers and track analytics, plus update the document over time. But, ugh:

A quick search suggested there were alternatives, some of which have free plans. But who knows if those stick around, and I didn’t really want to spend the next couple hours trying them out and running into paywalls for features I needed.
What I did want to spend the next couple hours on, though, was seeing if I could speedrun building my own replacement.
Six pomodoros (2.5 hours) and $26 (for the domain) later, vibesend.co was live and functional. Email-verified and password-protected docs, per-viewer analytics, desktop and mobile views, scrollable and paginated document types, and more.
The best part? It’s all free to run, thanks to Cloudflare’s free tiers for Pages and Workers, Supabase’s free tier for storage, and Resend’s free tier for emailsA big thank you to the venture capital community — and the public markets — for subsidizing the free tiers of these wonderful money-losing companies. I appreciate their optimism as much as I did in 2014 when Uber Pool cost $1.73 to get across San Francisco..
I’m now using Vibesend for real, and it’s great. Everything I want out of DocSend, nothing I don’t (including a subscription) — and whenever I want a new feature, I just… add it.
Here’s an example(with a doc from my recent RFR regulation article): https://vibesend.co/view/e81290f8 — the password is mypass
.
Or one with email auth: https://vibesend.co/view/776beab2.
Robin Sloan wrote a post a few years ago called An app can be a home-cooked meal. It’s short, excellent, and you should read it. Maggie Appleton also published a presentation about similar themes. Here’s an excerpt from Robin’s:
When you liberate programming from the requirement to be professional and scalable, it becomes a different activity altogether, just as cooking at home is really nothing like cooking in a commercial kitchen. I can report to you: not only is this different activity rewarding in almost exactly the same way that cooking for someone you love is rewarding, there’s another feeling, too, specific to this realm. I have struggled to find words for this, but/and I think it might be the crux of the whole thing:
This messaging app I built for, and with, my family, it won’t change unless we want it to change. There will be no sudden redesign, no flood of ads, no pivot to chase a userbase inscrutable to us. It might go away at some point, but that will be our decision. What is this feeling? Independence? Security? Sovereignty?
Is it simply … the feeling of being home?
I love this idea. Building software for yourself is fun and freeing.
Plus, you get to skip a bunch of annoying stuff you don’t need. For example: right now, Vibesend doesn’t allow other users to create accounts (it’s just me). There’s no dashboard interface (uploading files and viewing analytics is just done locally) And there’s no billing (I’m graciously choosing not to charge myself).
Let’s talk about one of those: I’m comfortable on the command line, so I thought: “why build a dashboard — and thus necessarily a user authentication system — if it’s just for me?”
So here I am uploading a new document and editing it:
Easy as:
$ python3 backend/upload_document.py ~/Downloads/sample-doc.pdf --title "Just a sample doc" --email-required
Or here’s me pulling analytics for a doc (I’m going to improve these):
Would this interface work for everyone? No. But it’s perfect for me.
And it can be improved from there — let’s say I wanted to give a non-technical colleague access to the system. Maybe I’d still hold off on a login system and instead just give them a webpage they can run locally with a .env and keys that let them access the Supabase instance. No need for anything fancy if it’s not going mass-market!
So, how’d I build it? Really simple:
- Go back and forth with ChatGPT o1 Pro to create out a step-by-step implementation plan. Takeoff has some good sample prompts, and I’ve built my own based on these. I asked it to use Resend for emails, Supabase for all storage, Cloudflare Pages for the frontend, and Cloudflare Workers/Functions for any “backend” required (e.g. sending emails without exposing Resend API key, verifying email OTPs, etc.).
- Pop into Cursor, make a plan.md file with that spec, and use a combo of Claude 3.7 and Gemini 2.5 Pro to work through the plan step-by-step, intervening when necessary and adjusting either the plan or the implementation.
It’s about 2.5k LoC. Certainly some cruft in there, but also a hell of a lot more code than I could write myself in the timeboxed 2.5 hours I gave myself (I mean, 500 LoC in style.css alone… that would take me days done by hand.)
It is easier than ever to build real products. The AI is obviously the biggest factor there, but beyond that:
- Supabase MCP server takes so much pain out of early bootstrapping work (writing and applying migrations, testing out broken flows)
- Cloudflare Domains, Pages, and Workers are truly great products, and the dev + prod experience is seamless (I can’t believe that 2.5 hours not only got this all working locally, but also fully deployed publicly)
- Resend has a very easy API and a generous free tier
Now, am I sure that Vibesend is totally secure, or that it’s as efficient as possible? No, of course not. AI mostly wrote the code. But, for this use case, do I care? Also no. And that’s the beauty of home-cooked software.
I’ve already added some just-for-me features I’m enjoying. For example, I can create custom vanity URLs like this:
https://vibesend.co/andy/test-doc
I’m about to make a setting to trigger Telegram notifications for new viewers on specific docs. Maybe I’ll even just treat Telegram like the admin dashboard, and authorize colleagues’ Telegram handles to access the data too…
I’m thinking of speedrunning more home-cooked SaaS rebuilds. It’s pretty staggering that I could get most everything I want out of DocSend in 2.5 hours, and it’s now making me think about all the other tools I use frequently that could be home-cooked instead.
Plus, then, they’re configurable to my needs. Want a new feature? Done. A feature only available on enterprise plans? Done. Feel like different styling? Done.
What should we speedrun next?
Looking for more to read?
Want to hear about new essays? Subscribe to my roughly-monthly newsletter recapping my recent writing and things I'm enjoying:
And I'd love to hear from you directly: andy@andybromberg.com