Engineering

Building a Personal Site with Next.js 15 and Supabase

June 1, 2026

When I started building nold.dev, I had one constraint: ship fast without compromising on design. I landed on Next.js 15 with the App Router for the framework, Supabase for the backend, and Vercel for deployment. The stack is minimal — no ORM, no CMS, just direct Supabase queries behind typed helper functions. The biggest challenge was the server/client boundary. Next.js 15 is strict: components that use cookies or browser APIs must be Client Components. I learned this the hard way when generateStaticParams broke because my Supabase server client called cookies() at build time. The fix was simple — a separate static client using the anon key directly, no cookie jar needed. Public data doesn't need auth. Design-wise, I kept the palette to a single accent color (#6366f1) against a near-black background. High contrast, fast to scan, nothing competing for attention. The admin panel lives at /nold-admin, protected by Supabase Auth. No third-party auth service — just email/password and Row Level Security doing the heavy lifting. Total build time: two focused evenings.