/COLOPHON
HOW THIS SITE
IS BUILT.
The studio site, end to end. Same engineering decisions we make on client work.
/FRONT-END
- Next.js 16 (App Router, Turbopack) — server components by default, client islands where interactivity is needed (forms, the scope quiz, the ROI calc).
- React 19 — concurrent rendering, Suspense streaming.
- TypeScript in strict mode. No
anyin shipped code. - Tailwind CSS 4 — utility-first, no separate component library.
- Framer Motion for the homepage scroll animations.
- Helvetica system stack — no web fonts. Faster LCP, no FOUT.
/BACK-END
- Single API route at
/api/leadhandles all form submissions (contact, newsletter, booking). - Supabase for lead storage. Postgres + auth, even though we don't use the auth layer here.
- Telegram for real-time lead notifications. Bot pings me directly the second a form goes through.
- Cal.com self-hosted on Contabo for the booking subdomain. Calendly alternative we own.
/HOSTING
- Vercel Production — git-connected to
enochodu1/enoch-odu-studios. Push to main triggers an auto-deploy in ~30-60 seconds. - Vercel Edge for the OG image generators (15+ per-route dynamic OG images using next/og).
- Cloudflare DNS in front of Vercel. Cloudflare gives us API-rate-limited DNS history and lower-cost hostname caching.
/SEO + DISCOVERABILITY
- 5–8 JSON-LD schemas per page — Organization, WebSite, ProfessionalService, Service, BreadcrumbList, BlogPosting, FAQ, ItemList, HowTo, OfferCatalog, AggregateOffer.
- 14 AI crawlers explicitly allow-listed in robots.ts (GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, etc.).
- /llms.txt and /llms-full.txt served as static text/plain at the root. AI agent citation surface.
- IndexNow verified for instant Bing + Yandex + Naver indexing. Pinged on every meaningful sitemap change.
- Hand-authored content only — no programmatic SEO templating, no city × service combo pages. Every URL is unique.
/PERFORMANCE
- Static prerendering for all marketing routes. CDN-edge cached.
- Strict CSP — default-src self, frame-ancestors none, object-src none, locked-down permissions policy.
- HSTS preload — max-age 2 years.
- preconnect + dns-prefetch for Cal.com host and GA endpoints.
/THE THINGS WE'D DO DIFFERENTLY
- The homepage uses
next/dynamicfor almost every section — useful for above-the-fold but probably overkill for components below the hero. Will simplify. - No proper CMS yet. Blog posts are TSX files, which is fine for 8 posts and painful at 80.
- Newsletter signup writes to Supabase + Telegram but doesn't actually send a double-opt-in confirmation email. Will wire to Resend or Loops.