The CodeCell++ VESIT website, rebuilt on Next.js (App Router) from the original Vite + React app. It looks and behaves the same, but every page is now pre-rendered to HTML, which is what lets Google and other search engines read it properly.
Pages: / (home), /team, /syrus (Syrus 7.0 hackathon), /code-of-conduct.
npm install
cp .env.example .env.local # then fill in the values
npm run dev # http://localhost:3000
npm run build # static site in ./outNEXT_PUBLIC_* values are baked in at build time, so rebuild after changing them.
(They replace the old VITE_* names: VITE_EMAILJS_SERVICE_ID → NEXT_PUBLIC_EMAILJS_SERVICE_ID, and so on.)
| Path | What |
|---|---|
src/app/ |
Routes, page metadata, sitemap.js, robots.js, manifest.js, 404 page |
src/app/layout.jsx |
Site-wide <head>: title template, description, Open Graph/Twitter cards, site-wide structured data |
src/views/ |
The four page screens (these were pages/ in the Vite app) |
src/components/ |
Same components as before |
src/lib/site.js |
Site name, URL, keywords, address, social links, preview image – edit SEO details here |
src/components/Seo/ |
JSON-LD helper and the plain-text Syrus summary for crawlers |
src/components/SplashGate/ |
The 1-second CodeCell logo splash |
public/ |
Images, fonts, 3D models (served as-is) |
deploy/ |
CloudFront URL-rewrite function for hosting on AWS |
- Server-rendered HTML for every page, with a unique
<title>, description, canonical URL and Open Graph / Twitter preview image. - Structured data (JSON-LD): organisation (with the alternate names CodeCell, CodeCell VESIT, CodeCell++), website,
Eventfor Syrus 7.0,FAQPage, breadcrumbs. /sitemap.xml,/robots.txt, web manifest, 404 page markednoindex.- One
<h1>per page, real<h2>/<h3>headings,alttext on images,lang="en-IN".
After deploying, do these once (this is what actually gets the site listed):
- Open Google Search Console, add the property for
https://codecell-pp-cmpn.vesit.ves.ac.in, verify it (DNS record, or paste the HTML-tag code intoNEXT_PUBLIC_GOOGLE_SITE_VERIFICATIONand redeploy). - Submit
https://codecell-pp-cmpn.vesit.ves.ac.in/sitemap.xml, then use URL inspection → Request indexing for/and/syrus. - Do the same in Bing Webmaster Tools (it can import from Search Console).
- Link to the site from places Google already trusts: the VESIT website, the CodeCell LinkedIn / Instagram / GitHub profiles, Unstop's Syrus page, GDG/IIC pages. Backlinks matter more than anything in this repo for ranking.
Note: ranking #1 for the bare word "CodeCell" can't be promised – other companies and projects use that name. "CodeCell VESIT", "CodeCell++ VESIT" and "Syrus VESIT" are specific enough that the site should lead for them within a few weeks of being indexed.
next build produces plain files in out/.
- Upload
out/to a private S3 bucket (aws s3 sync out/ s3://<bucket> --delete). - Put a CloudFront distribution in front (origin access control to the bucket, ACM certificate in
us-east-1for the domain). - Attach
deploy/cloudfront-url-rewrite.jsas a viewer request CloudFront Function, so/teamservesteam.html. - Custom error responses: 403 and 404 →
/404.htmlwith status 404. - Cache:
_next/static/*can be cached for a year (files are hashed);*.htmlshould be short-lived (or invalidate/*after each deploy). - Point the domain's DNS (CNAME) at the CloudFront domain name.
- Large images in
public/(event photos, gallery, sponsor logos) are served unoptimised. Compressing the biggest ones (sponsors/FalconX.webp,sponsors/PrakharLogo.jpeg,syrus-characters/*.png) would speed up first load. - The
.glb3D models inpublic/spaceship-3d-modelsare normal files here (no Git LFS), so they deploy anywhere, including Vercel. - The loading splash uses
CodecellLogoRevolving.webp(1 MB) instead of the old 58 MB GIF.