● refactoringbuildingsamridhlimbu.com/projects/krishnaveni · v0.1
Krishnaveni
● live · freelanceFull school marketing website for Krishnaveni School, India — 13 section types, Sanity v5 CMS, and a section-driven architecture so staff manage all content without developer involvement. Delivered with a full handover doc.

krishnavenischool.co.in — homepage
Context
Freelance. The school was running on a static HTML site — any content change required a developer. Delivered a Next.js 15 monorepo with 13 section types, a Sanity v5 CMS, and a custom content pipeline that bakes CMS data into the bundle at build time. Staff manage pages, announcements, gallery posts, and facilities entirely through Studio. Handed over with a full handover doc.
Timeline
2025
Client brief
School was running on a static HTML site. Any content change — a new post, updated gallery, announcement — required emailing a developer. The brief: give non-technical staff full content control.
2026
Architecture decision
Chose Sanity v5 for structured content with typed GROQ queries. Designed a polymorphic section architecture — 13 section types rendered by SectionRenderer — so any page layout can be assembled in Studio without code changes.
2026
Content pipeline
Built a custom data pipeline: fetch-sanity.mjs pulls a CMS snapshot, generate-data.mjs converts it into a static TypeScript file. The site runs without a live CMS connection at runtime — content is baked into the bundle.
2026
Live at krishnavenischool.co.in
Deployed and handed over with a full handover doc. Staff independently manage all pages, posts, and facilities through Sanity Studio with no developer involvement.
Key technical decisions
01sanity v5 › wordpress
Schema-first CMS with typed GROQ queries. The Studio UI is clean and opinionated — staff adopted it without training docs. Schema-first model validates all content before it reaches the frontend.
02section-driven architecture › hardcoded page layouts
Page body is an array of typed section objects. SectionRenderer maps each _type to its component. Adding a new page section requires a data definition and a component — no routing changes, no rebuild required.
03static data pipeline › live sanity connection at runtime
fetch-sanity.mjs → generate-data.mjs → lib/data/index.ts bakes CMS data into the bundle. Site has zero runtime CMS dependency. Trade-off: requires a script re-run and redeploy to pick up content changes.
04next.js 15 + tailwind v4 › cms theme
Full control over layout, typography, and performance. GSAP for scroll animations, Radix UI for accessible accordion FAQs and video lightbox dialogs. No theme constraints after handoff.
Stack
FrontendNext.js 15 · React 19 · TypeScript · Tailwind v4 · GSAP · Radix UI
BackendSanity v5
InfraVercel · Sanity CDN
What I'd do differently
Performance sits at 72 desktop / 69 mobile — the bottleneck is TBT from GSAP and LCP from Sanity CDN image delivery. I'd add priorityhints on above-the-fold images, lazy-load GSAP until after first paint, and set up a Vercel revalidation webhook so content changes don't require a manual script re-run. CLS is 0 and SEO is 92, which are the signals that matter most for a school marketing site — but the performance gap is the honest thing to flag.
In their words
“We’re not a technical team — we gave Samridh the brief and he handled everything else. What we asked for, he delivered. Then he delivered more.”
Krishnaveni School · India