Before moonpath, Aleyiah and I built a Grammy prediction leaderboard on Bubble. It was our pilot: a simple app, a deadline, a real audience. Bubble required passwords. The Grammys were a few days after launch. By the time the ceremony aired, half our users had forgotten theirs.
We filed that away.
When we started building seasons of your life on our own stack, we had a choice. Supabase supports magic links natively. Users get an email, click it, they're in. No password to forget, no friction at the moment you actually want someone to use the thing you built. It also fit the architecture: Spotify data processes client-side, nothing sensitive lives on a server tied to a user account. The main reason a persistent identity matters is access — across devices, your subscription status follows you. Your Spotify data doesn't, you'd still re-upload it, but your access to premium features and their share sheets does.
So we used magic links.
The other decision was the waitlist. Everyone who signed up waited three days before getting access. Partly anticipation, partly practical: processing and analyzing years of Spotify data takes time anyway. The system ran on pg_cron, checking hourly and sending access emails via Resend at exactly the right time. Seven edge functions holding the whole thing together. 100% email delivery.
It worked.
And then we cut the waitlist. But we didn't just remove the friction, we replaced it. When users log in now, they see sample data right away. They can explore the product, get familiar with what their results will look like, get excited about it, and by the time their actual data arrives, they already know what they're looking at.
The system still runs. The wait is just more useful now.