Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ ENTRY_PASS_ENCRYPTION_KEY=

# Optional (public). The ONE canonical origin of the site (src/config/site.ts), no trailing slash. Used for canonical
# URLs, Open Graph URLs, robots.txt, sitemap.xml and structured data, and as the site Google sign-in returns to
# (local dev on localhost always returns to localhost). Defaults to https://project-spacex-seven.vercel.app.
# When the custom domain goes live: set it here AND in Vercel (Production), add it under Supabase -> Authentication ->
# (local dev on localhost always returns to localhost). Defaults to https://www.innonitrkl.com.
# To move to another domain: set it here AND in Vercel (Production), add it under Supabase -> Authentication ->
# URL Configuration, then redeploy (metadata, robots.txt and sitemap.xml are built at deploy time).
# NEXT_PUBLIC_SITE_URL=https://project-spacex-seven.vercel.app
# NEXT_PUBLIC_SITE_URL=https://www.innonitrkl.com

# Optional (server-only). Google Search Console "HTML tag" verification: only the token, i.e. the content="..." value
# of the <meta name="google-site-verification"> tag Search Console gives you. Unset: no tag is rendered.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ git-ignored, so never commit secrets. Anything prefixed `NEXT_PUBLIC_` is bundle
| `NEXT_PUBLIC_SUPABASE_URL` | yes | Supabase project URL. |
| `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` | yes | Publishable (anon) key. Safe in the browser because RLS is enforced. |
| `SUPABASE_SERVICE_ROLE_KEY` | prod (secret) | Backend API routes. Bypasses RLS and signs staff links to payment proofs. Server only. |
| `NEXT_PUBLIC_SITE_URL` | optional | Canonical origin for SEO, sitemap and the sign-in return URL. Defaults to the Vercel URL. |
| `NEXT_PUBLIC_SITE_URL` | optional | Canonical origin for SEO, sitemap and the sign-in return URL. Defaults to `https://www.innonitrkl.com`. |
| `GOOGLE_SITE_VERIFICATION` | optional | Google Search Console verification token. |
| `DATABASE_URL` | local tools only | Direct Postgres connection for running SQL from your machine. Never add it to Vercel. |

Expand Down
2 changes: 1 addition & 1 deletion src/app/events/[world]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export function generateStaticParams() {
}

/** Meta description: which world, of which fest, and its tagline (short enough not to be cut off in results). */
const description = (w: World) => `${w.name} at INNOVISION 2026, the techno-management festival of NIT Rourkela, Odisha. ${w.tagline}`;
const description = (w: World) => `${w.name} at INNOVISION 2026, Eastern India's largest techno-management fest, hosted by NIT Rourkela, Odisha. ${w.tagline}`;

export async function generateMetadata({ params }: PageProps<'/events/[world]'>): Promise<Metadata> {
const w = worldBySlug((await params).world);
Expand Down
5 changes: 3 additions & 2 deletions src/app/events/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { jsonLdScript, listPageJsonLd, pageMetadata } from '@/lib/seo';
export const revalidate = 300;

const DESCRIPTION =
'Explore the events of INNOVISION 2026, the techno-management festival of NIT Rourkela: Flagship, Standout, Main, and DTS and Fun Events.';
"Explore the events of INNOVISION 2026 by NIT Rourkela, Eastern India's largest techno-management fest: Flagship, Standout, Main, and DTS and Fun Events.";

export const metadata = pageMetadata({ title: 'Events', description: DESCRIPTION, path: '/events', ownImage: true });

Expand Down Expand Up @@ -39,7 +39,8 @@ export default async function EventsPage() {
<p className={styles.kicker}>INNOVISION 2026 · NIT ROURKELA</p>
<h1 className={styles.title}>Innovision 2026 Events</h1>
<p className={styles.lead}>
Innovision is the techno-management festival of NIT Rourkela, Odisha. Its 2026 edition, The Celestial Odyssey,
Hosted by NIT Rourkela, Odisha, Innovision is Eastern India&apos;s largest techno-management fest. Its 2026
edition, The Celestial Odyssey,
charts four worlds: <b>Flagship Events</b> for the technical arena, <b>Standout Events</b> for the signature
showcases, <b>Main Events</b> for workshops and talks, and <b>DTS and Fun Events</b> for the games, quizzes and
showcases where the fest peaks.
Expand Down
2 changes: 1 addition & 1 deletion src/app/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { pageMetadata } from '@/lib/seo';

export const metadata = pageMetadata({
title: 'Privacy Policy',
description: 'How INNOVISION 2026, the techno-management festival of NIT Rourkela, collects, uses and protects your personal data.',
description: "How INNOVISION 2026, Eastern India's largest techno-management fest, hosted by NIT Rourkela, collects, uses and protects your personal data.",
path: '/privacy',
});

Expand Down
4 changes: 2 additions & 2 deletions src/app/register/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ export const metadata = pageMetadata(
REGISTRATIONS_OPEN
? {
title: 'Register',
description: 'Register for Innovision 2026: The Celestial Odyssey, the techno-management fest of NIT Rourkela, Odisha.',
description: "Register for Innovision 2026: The Celestial Odyssey, Eastern India's largest techno-management fest, hosted by NIT Rourkela, Odisha.",
path: '/register',
}
: {
title: 'Registrations Opening Soon',
description: 'Registrations for Innovision 2026: The Celestial Odyssey, the techno-management fest of NIT Rourkela, Odisha, open soon.',
description: "Registrations open soon for Innovision 2026: The Celestial Odyssey, Eastern India's largest techno-management fest, hosted by NIT Rourkela, Odisha.",
path: '/register',
}
);
Expand Down
2 changes: 1 addition & 1 deletion src/app/terms/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { pageMetadata } from '@/lib/seo';

export const metadata = pageMetadata({
title: 'Terms and Conditions',
description: 'The terms for registering for and attending INNOVISION 2026, the techno-management festival of NIT Rourkela.',
description: "The terms for registering for and attending INNOVISION 2026, Eastern India's largest techno-management fest, hosted by NIT Rourkela.",
path: '/terms',
});

Expand Down
2 changes: 1 addition & 1 deletion src/components/innovision/AboutPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default function AboutPanel({ v }: { v: V }) {
</nav>
<p style={{ margin: "0", fontSize: "13px", letterSpacing: ".3em", color: "oklch(0.8 0.12 85)" }}>MISSION BRIEFING</p>
<h2 style={{ margin: "10px 0 24px", fontFamily: "var(--font-display)", fontWeight: "400", fontSize: "clamp(40px,5vw,64px)", lineHeight: "1" }}>INNOVISION</h2>
<p style={{ margin: "0 0 16px" }}>Innovision is the techno-management fest of NIT Rourkela: a few days where the campus turns into a launch pad for builders, thinkers and makers from across the country.</p>
<p style={{ margin: "0 0 16px" }}>Innovision is NIT Rourkela&apos;s techno-management fest and the largest in Eastern India: a few days where the campus turns into a launch pad for builders, thinkers and makers from across the country.</p>
<p style={{ margin: "0" }}>Pick your world. <b>Flagship Events</b> for the technical arena, <b>Standout Events</b> for the signature showcases, <b>Main Events</b> for workshops and talks, or <b>DTS and Fun Events</b> for the games, quizzes and showcases where the fest peaks.</p>
<div style={{ margin: "28px 0 36px", borderTop: "1px solid rgba(236,232,223,.15)" }}>
<div style={{ display: "grid", gridTemplateColumns: "110px minmax(0,1fr)", gap: "16px", padding: "14px 0", borderBottom: "1px solid rgba(236,232,223,.15)" }}>
Expand Down
2 changes: 1 addition & 1 deletion src/components/innovision/HomeView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export default function HomeView({ v }: { v: V }) {
))}
</h2>
<div data-reveal="" style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit,minmax(min(100%,380px),1fr))", gap: "clamp(32px,5vw,80px)", marginTop: "clamp(48px,8vh,96px)", paddingTop: "28px", borderTop: "1px solid rgba(20,19,18,.18)" }}>
<p style={{ margin: "0", maxWidth: "60ch", fontSize: "18px", lineHeight: "1.65", color: "#2b2926", textWrap: "pretty" }}>Innovision is the techno-management fest of NIT Rourkela. This year it charts a Celestial Odyssey across four worlds: <b>Flagship Events</b> for the technical arena, <b>Standout Events</b> for the signature showcases, <b>Main Events</b> for workshops and talks, and <b>DTS and Fun Events</b> for the games, quizzes and showcases where the fest peaks.</p>
<p style={{ margin: "0", maxWidth: "60ch", fontSize: "18px", lineHeight: "1.65", color: "#2b2926", textWrap: "pretty" }}>Hosted by NIT Rourkela, Innovision is Eastern India&apos;s largest techno-management fest. This year it charts a Celestial Odyssey across four worlds: <b>Flagship Events</b> for the technical arena, <b>Standout Events</b> for the signature showcases, <b>Main Events</b> for workshops and talks, and <b>DTS and Fun Events</b> for the games, quizzes and showcases where the fest peaks.</p>
<dl style={{ display: "grid", gridTemplateColumns: "repeat(3,minmax(0,1fr))", margin: "0", alignSelf: "start" }}>
{[['HOST', 'NIT Rourkela, Odisha'], ['WORLDS', 'Four, each with its own line-up'], ['CREW', 'Students, makers & dreamers']].map(([dt, dd]) => (
<div key={dt} style={{ display: "flex", flexDirection: "column", gap: "10px", padding: "0 18px", borderLeft: "1px dashed rgba(20,19,18,.3)" }}>
Expand Down
18 changes: 12 additions & 6 deletions src/config/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
* per-deployment vercel.app URL or a spoofed Host never becomes the canonical address.
*/

// The current (temporary) production address. When the final domain is confirmed, set NEXT_PUBLIC_SITE_URL in Vercel
// (or change this one line): every canonical URL, og:url, robots.txt, sitemap.xml and JSON-LD URL follows it.
const DEFAULT_SITE_URL = 'https://project-spacex-seven.vercel.app';
// The production address. The www host is the primary one: innonitrkl.com (the apex) 308-redirects to it on Vercel.
// Every canonical URL, og:url, robots.txt, sitemap.xml and JSON-LD URL follows it. NEXT_PUBLIC_SITE_URL overrides it.
const DEFAULT_SITE_URL = 'https://www.innonitrkl.com';

/** Origin of NEXT_PUBLIC_SITE_URL (no trailing slash), or the default if it is unset or not an http(s) URL. */
function siteOrigin(value: string | undefined): string {
Expand All @@ -20,8 +20,8 @@ function siteOrigin(value: string | undefined): string {
}

/**
* Canonical origin. Set NEXT_PUBLIC_SITE_URL to the custom domain once it is live (and add it under Supabase ->
* Authentication -> URL Configuration, since Google sign-in returns here too).
* Canonical origin. Google sign-in returns here too, so it must be listed under Supabase -> Authentication ->
* URL Configuration.
*/
export const SITE_URL = siteOrigin(process.env.NEXT_PUBLIC_SITE_URL);

Expand All @@ -31,8 +31,14 @@ export const SITE_NAME = 'INNOVISION 2026 | NIT ROURKELA';
/** Home page title. Other pages use the "%s – INNOVISION 2026 | NIT ROURKELA" template from the root layout. */
export const SITE_TITLE = SITE_NAME;

/** The fest's official social profiles (the footer's links), for the Organization's sameAs in structured data. */
export const SOCIAL_PROFILES = [
'https://www.instagram.com/inno.nitr_official/',
'https://www.linkedin.com/company/innovision-nitrkl/',
];

export const SITE_DESCRIPTION =
'Official website of INNOVISION 2026, the techno-management festival of NIT Rourkela, Odisha. Explore the Flagship, Standout, Main, and DTS and Fun Events.';
"Official website of INNOVISION 2026 by NIT Rourkela, Eastern India's largest techno-management fest. Explore the Flagship, Standout, Main, and DTS and Fun Events.";

/**
* Whether search engines may index this deployment. Only Vercel's production deployment is indexable: preview and
Expand Down
11 changes: 6 additions & 5 deletions src/lib/seo.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { Metadata } from 'next';
import { SITE_NAME, SITE_URL, SITE_DESCRIPTION, SITE_TITLE } from '@/config/site';
import { SITE_NAME, SITE_URL, SITE_DESCRIPTION, SITE_TITLE, SOCIAL_PROFILES } from '@/config/site';

/** Title template for every page except the home page, which uses SITE_TITLE as is. */
export const TITLE_TEMPLATE = '%s – INNOVISION 2026 | NIT ROURKELA';

/** The home page's link-preview card, drawn by src/app/opengraph-image.tsx (served at /opengraph-image and /twitter-image). */
export const OG_IMAGE = {
alt: 'INNOVISION 2026 | NIT ROURKELA: The Celestial Odyssey, the techno-management festival of NIT Rourkela',
alt: "INNOVISION 2026 | NIT ROURKELA: The Celestial Odyssey, Eastern India's largest techno-management fest, hosted by NIT Rourkela",
width: 1200,
height: 630,
type: 'image/png',
Expand Down Expand Up @@ -46,8 +46,8 @@ const ORGANIZATION_ID = `${HOME}#organization`;
/**
* Schema.org JSON-LD for the home page: the website and the fest's organising identity under NIT Rourkela.
* Deliberately no Event entries: the events table has no dates (Event requires startDate) and the line-ups and
* schedule in data.ts are placeholders. No sameAs (the social links in the footer are placeholders, not the fest's
* accounts) and no logo (the only logo file is white on transparent, which search engines show on white).
* schedule in data.ts are placeholders. No logo (the only logo file is white on transparent, which search engines show
* on white).
*/
export function homeJsonLd() {
return {
Expand All @@ -71,7 +71,8 @@ export function homeJsonLd() {
name: 'Innovision, NIT Rourkela',
alternateName: 'Innovision',
url: HOME,
description: 'Innovision is the techno-management festival of the National Institute of Technology Rourkela, Odisha.',
description: "Innovision is Eastern India's largest techno-management fest, hosted by the National Institute of Technology Rourkela, Odisha.",
sameAs: SOCIAL_PROFILES,
parentOrganization: {
'@type': 'CollegeOrUniversity',
name: 'National Institute of Technology Rourkela',
Expand Down
Loading