finds.dev← search

// the find

braydoncoyer/braydoncoyer.dev

★ 797 · TypeScript · updated May 2026

My portfolio rebuilt from the ground up using Next.js 15, Tailwind, Supabase, and Framer Motion! Deployed on Vercel ▲

Braydon Coyer's personal portfolio and blog, rebuilt in Next.js 15 App Router with Supabase for auth/data and Framer Motion for animations. It has more moving parts than a typical portfolio: article reactions, a community wall, a stats dashboard pulling GitHub and Lighthouse data, Spotify now-playing, and audio versions of posts. People star it looking for a template; it isn't one.

The stats page is genuinely well-built — it pulls Lighthouse scores, GitHub contribution graphs, site views, and reaction breakdowns all in one place, which is a useful reference for how to wire those APIs together. Server/client Supabase split is handled correctly with separate client instantiation files rather than the common mistake of using the browser client in server components. MDX pipeline with a custom `mdx-content.tsx` renderer and table of contents extraction is solid and reusable. The OG image generation via `/api/og/route.tsx` using `@vercel/og` is a clean pattern worth lifting.

The README is the unmodified `create-next-app` boilerplate — no setup instructions, no explanation of what Supabase tables or RLS policies are required, nothing. Anyone who forks this is on their own. The `.claude` directory with AI implementation plans is committed to the repo, which is an odd artifact to leave in a public codebase. Personal content (photos, connections list, blog posts) is deeply embedded rather than data-driven, so forking it means a surgery pass through dozens of files. No `.env.example` file, so the required Supabase, Spotify, and Cloudinary credentials are only discoverable by grepping the source.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →