Day 1: zero to deployed
From empty folder to live SaaS on a real domain — auth, database, admin panel, feedback widget, transactional email. What shipped, what broke, and the Docker lessons that saved the afternoon.

I went from nothing to a live, deployed web app in a matter of hours. Not a landing page. A real Next.js app on Google Cloud Run at a real domain: watchdeck.co. Auth. Database. Admin panel. Feedback widget. Transactional email. Mobile-responsive. All of it.
This is the first entry in a running build log — a daily journal of what I'm actually shipping and what breaks in the process. The goal isn't polished retrospectives. It's the unfiltered version: lessons learned, new tools discovered, decisions made, progress shipped.
The Idea
The thesis behind WatchDeck is simple. Streaming subscriptions have gotten out of control. Most people are paying for three or four services and have no idea what's leaving, what's new, or whether anything on their watchlist is actually available to them right now. A dashboard that tracks your streaming services, surfaces what's leaving soon, and manages your watchlist across everything is obviously useful. Nobody's built the version of it that actually works.
What Actually Shipped
The first commit today was just scaffolding — a Next.js app, Prisma, Postgres. Nothing exciting. But by midnight I had:
- The app running on Google Cloud Run
- A real domain with HTTPS
- Auth wired up (NextAuth v5)
- An admin section with user management, service config, and sub-navs for models and tiers
- A mobile UX pass with proper responsive layouts
- A new-user onboarding checklist
- A floating feedback widget with an admin inbox
- Transactional email through Resend
In a single day. Alone.
Docker Build Lessons
Getting the deployment right took most of the afternoon. The first few builds failed on what turned out to be obvious stuff:
- Dev dependencies not installed in the Docker build stage — because I'd copied the install command from a Dockerfile that assumed
NODE_ENV=development - Stripe trying to initialize before the environment was loaded — because the secret key check ran at module load, not lazily
- Missing
Suspensewrapper arounduseSearchParams— Next.js is strict about that one, and the error message is not particularly helpful
Every one of those failures was a five-minute fix once I understood what was actually happening. But they stack up fast. By the time I had a green build I'd pushed seven times.
Lesson: Docker build failures are almost always one of three things — missing env vars, wrong Node version assumptions, or forgetting that node_modules doesn't copy your local env. Write your Dockerfile defensively from day one. Specifically: install production and dev deps separately, load env vars explicitly before any module-level side effects, and test the build in a clean environment before you push.
The Moment It Got Real
The thing that actually made me feel like this was a real product: replacing the text logo with an image logo and updating the NEXTAUTH_URL to the production domain. Small stuff, but seeing watchdeck.co in the browser URL and a proper logo in the nav — that's the moment it stops feeling like a side project.
The admin panel was similar. I built it because I'd need it eventually, and I figured doing it on day one meant I wouldn't have to go back and retrofit it later. Ten minutes after it was live, I was using it to manage the test users I'd seeded. It changed the product from "demo on my machine" to "thing I'm operating."
Why Day One Matters
Most side projects die between "idea" and "deployed." The gap is what kills them. You want to build the thing, you don't want to do the Docker work. You want to style the hero, you don't want to set up auth. Four weekends in, you have a beautiful homepage that can't do anything.
The inverted order — deploy the skeleton first, styling last — means day one produces something real. Auth works. The DB is there. Transactional email sends. Everything past that point is adding product on top of infrastructure that already exists.
The thing you ship on day one is going to be ugly. It's going to be rough. But it's going to be deployed.
Big Win
watchdeck.co is live.
That's it. That's the win.
Follow-up entries: Email Deliverability Is Its Own Discipline. For how I run this kind of build cadence solo, see the pillar on Claude Code + Obsidian as an unfair advantage.
Want to talk through something you’re working on?
I take on a small number of consulting and build engagements each quarter. If something in this piece maps to a problem you’re trying to solve, reach out.