Featured Projects

Whimsy Gossip
Entertainment / Fantasy Podcast & Fan Film ProductionWeb Application

Whimsy Gossip

A fantasy podcast and fan film site I built twice: first in React 18 / Vite as an SPA, then migrated to Next.js 15 App Router when the content-driven architecture started creating real friction for SEO and maintenance.

Next.js 15TypeScriptApp RouterReact 18Tailwind CSSSanity CMSISRVercelResendVercel AnalyticsGoogle Analytics 4Cloudflare TurnstylePlaywright
  • 11 Sanity data context providers (~3,500 lines of useEffect → fetch → setState plumbing) replaced by direct server-side fetch() calls in server components
  • generateMetadata() per route replaces react-helmet-async: OG tags and JSON-LD are in the initial HTML, not injected after hydration
L Vega Animations
Animation / Motion Graphics / Studio ArtMarketing Website

L Vega Animations

A portfolio site built with Next.js, Sanity v3, Tailwind CSS, Framer Motion, and Vercel, for an animation and motion graphics artist targeting studio and agency job applications.

Next.jsSanity v3Tailwind CSSFramer MotionResendVercel
F.L.O.S.S. — Youth & Young Adult Empowerment
Youth Development NonprofitRedesign

F.L.O.S.S. — Youth & Young Adult Empowerment

A four-week redesign of a youth-development nonprofit's site on Next.js 15 (App Router), React 19, and TypeScript, with Sanity driving age-based pathway content and an interactive age-finder routing visitors to the right stage.

Next.js 15 (App Router)React 19TypeScript 5 (strict)Tailwind CSS 3Sanity CMSFramer MotionResendZodVercel
  • Age-finder maps a numeric input to one of four pathway ranges client-side, with explicit below-range and above-range messaging instead of a dead end
  • Pathway content modeled as a first-class Sanity collection, so the homepage cards, the /services Pathway Explorer, and the age-finder all read from one source