/work/[id] and /services/[id] are statically generated from the database at build time. The /contact page has an embedded Calendly booking widget and a working contact form./admin dashboard handles full CRUD for case studies and services, media uploads via Vercel Blob, and contact form submission viewing. Session-based auth via middleware gates access behind a signed cookie.@neondatabase/serverless. REST-ish route handlers back the admin panel (/api/case-studies, /api/services, /api/contact, /api/upload, /api/admin/login). Auth checks passwords against an env var set in Vercel, never committed to the repo.sitemap.ts and robots.ts that include every case study and service page. Per-page metadata and JSON-LD markup (Organization, Service, CreativeWork, FAQPage) throughout. An llms.txt route serves a machine-readable site summary for AI crawlers, generated live from the database.motion.ts module handles prefersReducedMotion() checks and a debounced resize-refresh helper so GSAP's pinned sections stay in sync on mobile. Admin routes deliberately skip Lenis (native scroll only) since Lenis doesn't track dynamically-growing content well.
Posted Jul 3, 2026
Custom-built agency portfolio on Next.js , React , Tailwind CSS, Scroll-driven GSAP animations REST APIs, and full SEO with JSON-LD deployed on Vercel.
0
0
Half Crescent Design Agency LLC