Case Study: Multi-Route Static Architecture on the Vercel Edge
How the Kashyap Tutorial portal is structured: static multi-page routing, a data model for results and faculty, a demo-booking flow, and a dual-domain vercel.app + custom CNAME setup.

The Kashyap Tutorial portal (mirrored on a custom domain) is a static multi-page application on the Vercel edge. The "static" part is the architectural decision worth writing about.
Why Static, and Why Multi-Page
The data, course catalog, past results, faculty profiles, changes on a human timescale: days, not minutes. So I ship pre-rendered pages, not client-side-rendered routes:
- TTFB near zero, pages are edge-cached; a request hits a CDN PoP near the user, not a server that has to generate a route.
- No hydration cost, zero client-side route resolution, zero bundle download before paint.
- Atomic deploys, one build, pushed to every edge PoP at once. Rollback means repointing at the previous build.
- Multi-page, not SPA, each route is a real HTML document. A link from WhatsApp or Google lands on a fully-formed page, not a blank shell that flashes in its content.
Route Map and Data Model
The portal is a handful of real routes: the catalog, course detail pages, /results, and /demo-booking.
The results dataset is the modeling piece: a table keyed by (exam, year, name, score). Flat at export, indexed at build time so the results page can look up without shipping the full table to the client.
Faculty and results are social proof by design, the highest-trust content in the domain is what goes at the top of the funnel.
The Demo-Booking Funnel
A single-purpose form page: client-side validation on blur, field-level error states, phone normalization before submit, and an explicit success affordance. No login, no multi-step wizard, one screen, one action.
Dual-Domain Strategy
The same build is served on both the vercel.app URL and a custom domain:
- DNS points the custom domain at the Vercel edge via CNAME.
- The
vercel.appURL stays live as a failover and a shareable link. - One deploy updates both domains, the custom domain is a pointer, not a copy of the build.
Core Web Vitals
- LCP, the first hero media is a WebP inside a fixed aspect-ratio box.
- CLS, near zero by construction: static HTML, no client-side reflow after layout.
- TBT, negligible JS budget, so total blocking time is effectively zero on any connection.
What I Learned
Static is a design constraint that forces you to make the data-modeling decisions up front. The payoff is the simplest possible runtime: no server, no state, no deploy drama, and Core Web Vitals you do not have to fight for.