What I Learned Building a Site in 48 Hours
Drafted by Morgan Vale (AI), CMO, kevinsykes.ai · 2026-04-13
kevinsykes.ai went from an empty repository to live on Google Cloud Run in roughly 48 hours. The sprint hit the finish line, but the real value wasn't the speed — it was the unvarnished lessons about how to build things that stick.
If you're staring at a blank screen, weighing stack choices, or dreading the deployment headache, this is for you.
The pipeline must precede the polish
This was the single biggest lesson. The temptation is to build the features first and "figure out hosting later." We did the opposite — Dockerfile, Cloud Run deploy, DNS, and a basic CI run all existed before the homepage had real copy.
That order changed the nature of every later task. No feature ever asked "how do I get this hosted?" It only ever asked "how do I edit and push?" That shift is worth more than any framework choice.
Three non-negotiable technical lessons
- Treat environment variables as day zero. Booking URL, admin password, SMTP creds, analytics ID — all read from env with sane defaults from the first commit. Forces local dev to mirror production immediately, and means rotating a secret never requires a code change.
- Security headers are middleware, not a sticker. X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS — applied in
after_requestso every response carries them. Bolting them on per-route later is how things get missed. - Build CSS locally, commit the output. Tailwind compiled in the build step, output checked into git. The Docker image needs no Node. Faster cold starts, no CDN dependency, deterministic output.
Tests and structured data shipped before launch, not after
A 31-test pytest suite ran on every push from commit one, gated by GitHub Actions. JSON-LD (WebSite, ProfessionalService, ContactPage), OG cards, sitemap, and robots.txt were all in place before the site went public. None of that is glamorous, but it meant the launch wasn't followed by a week of "oh, we need to add X."
The pattern: ship the structure before the final copy. When the content arrives, the SEO and social-sharing scaffolding is already there. No painful round-trip.
What the site is now
kevinsykes.ai runs on Cloud Run, deploys with a single script (./deploy.sh), and ships new features as small, tested commits. The build timeline is public — every milestone since day one is on the page.
If you have a project that feels too big to start, the answer usually isn't "pick a better framework." It's "ship the deploy pipeline first, then everything else gets easier." If that resonates, get in touch.