diff --git a/apps/web/src/app/admin/events/edit/[slug]/page.tsx b/apps/web/src/app/admin/events/edit/[slug]/page.tsx index f49cbaaf..a92ce261 100644 --- a/apps/web/src/app/admin/events/edit/[slug]/page.tsx +++ b/apps/web/src/app/admin/events/edit/[slug]/page.tsx @@ -2,6 +2,8 @@ import { getEventById } from "db/functions"; import { notFound } from "next/navigation"; import EditEventForm from "@/components/events/admin/EditEventForm"; +export const dynamic = "force-dynamic"; + export default async function EditEventPage({ params, }: { diff --git a/apps/web/src/app/admin/events/page.tsx b/apps/web/src/app/admin/events/page.tsx index bb2e5f9c..2577ffb9 100644 --- a/apps/web/src/app/admin/events/page.tsx +++ b/apps/web/src/app/admin/events/page.tsx @@ -1,5 +1,3 @@ -"use server"; - import { EventDataTable } from "@/components/events/shared/EventDataTable"; import { columns } from "@/components/events/shared/EventColumns"; import { Button } from "@/components/shadcn/ui/button"; @@ -8,6 +6,8 @@ import Link from "next/link"; import { getAllEvents, getUser } from "db/functions"; import { auth, redirectToSignIn } from "@clerk/nextjs/server"; +export const dynamic = "force-dynamic"; + export default async function Page() { const { userId } = auth(); if (!userId) { diff --git a/apps/web/src/app/admin/points/page.tsx b/apps/web/src/app/admin/points/page.tsx index 19806013..d96dd6ac 100644 --- a/apps/web/src/app/admin/points/page.tsx +++ b/apps/web/src/app/admin/points/page.tsx @@ -1,3 +1,5 @@ +export const dynamic = "force-dynamic"; + export default function Points() { return (
diff --git a/apps/web/src/app/admin/toggles/dashboard/page.tsx b/apps/web/src/app/admin/toggles/dashboard/page.tsx index b5443e2d..bcc615f7 100644 --- a/apps/web/src/app/admin/toggles/dashboard/page.tsx +++ b/apps/web/src/app/admin/toggles/dashboard/page.tsx @@ -1,3 +1,5 @@ +export const dynamic = "force-dynamic"; + export default function Page() { return

Coming soon

; } \ No newline at end of file diff --git a/apps/web/src/app/admin/toggles/page.tsx b/apps/web/src/app/admin/toggles/page.tsx index e31adc45..d9f0552f 100644 --- a/apps/web/src/app/admin/toggles/page.tsx +++ b/apps/web/src/app/admin/toggles/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; export default async function Page() { return (
diff --git a/apps/web/src/app/register/page.tsx b/apps/web/src/app/register/page.tsx index 3e84834a..ed4a9506 100644 --- a/apps/web/src/app/register/page.tsx +++ b/apps/web/src/app/register/page.tsx @@ -1,128 +1,80 @@ import c from "config"; -import RegisterForm from "@/components/registration/RegisterForm"; -import { auth, currentUser } from "@clerk/nextjs"; -import { redirect } from "next/navigation"; import Navbar from "@/components/shared/Navbar"; import Link from "next/link"; -import { Redis } from "@upstash/redis"; -import { parseRedisBoolean } from "@/lib/utils/server/redis"; import { Button } from "@/components/shadcn/ui/button"; -import { getUser } from "db/functions"; import Image from "next/image"; +import React from "react"; -const redis = new Redis({ - url: process.env.UPSTASH_REDIS_REST_URL, - token: process.env.UPSTASH_REDIS_REST_TOKEN, -}); +export default function Page() { + return ( + <> + {/* Top Navigation Brand Logo Bar */} +
+
+
+
+ + {c.hackathonName + +
+
+
+
-export default async function Page() { - const { userId } = auth(); - if (!userId) return redirect("/sign-up"); + {/* Main Center-Aligned 2027 Season Notice Layout */} +
+
+ + {/* Header Title */} +

+ WEHack 2027 +

- const user = await currentUser(); - if (!user) return redirect("/sign-up"); + {/* Styled Separator line matching brand guidelines */} +
+ + {/* Required Structural Update Copy */} +

+ More information about WEHack 2027 will come out soon. In the meantime, + fill out our interest form to get updates from us. +

- const registration = await getUser(userId); - if (registration) return redirect("/dash"); + {/* Live MLH Registration Interest Form Link Button Action */} +
+ + + - const [defaultRegistrationEnabled, defaultSecretRegistrationEnabled]: ( - | string - | null - )[] = await redis.mget( - `${process.env.HK_ENV}_config:registration:registrationEnabled`, - `${process.env.HK_ENV}_config:registration:secretRegistrationEnabled`, - ); + + + +
- if (parseRedisBoolean(defaultRegistrationEnabled, true) === true) { - return ( - <> -
-
-
-
- - {c.hackathonName - -
-
-
-
-
-
-

- Register -

-

- Welcome Hacker!{" "} - Please fill out the form below to complete your - registration for {c.hackathonName}. -

-

- Please complete your registration form in one sitting to not lose your progress! - You must click "Submit" at the end for your registration to be officially submitted. -

-

-

Once your form is submitted, you will NOT be able to change your responses, so please answer wisely.

-

- Psttt... Running into a issue? Please let us know by - emailing wehackutd@gmail.com -

- -
-
- - ); - } - - return ( -
-
-

{c.hackathonName}

- {/* Why is this not a component? This same code is in here and insideo of sign-up */} -

- Registration -

-
-

- Registration Is Currently Closed - {/* More Information Coming Soon! */} -

-

- If you believe this is a mistake or have any questions, feel - free to reach out to us at {c.issueEmail}! - {/* More information about WEHack 2026 will come out soon. In the meantime, fill out our interest form to get updates from us. */} -

- {/* - - */} - - - - -

- Already registered? - - Sign-in. - -

-
-
- ); + {/* Operational Support Contact Point footer */} +

+ Running into an issue? Reach out to us at wehackutd@gmail.com +

+
+
+ + ); } -export const runtime = "edge"; +export const runtime = "edge"; \ No newline at end of file diff --git a/apps/web/src/app/sections/Donations/Donations.tsx b/apps/web/src/app/sections/Donations/Donations.tsx index f00279d5..5205c934 100644 --- a/apps/web/src/app/sections/Donations/Donations.tsx +++ b/apps/web/src/app/sections/Donations/Donations.tsx @@ -1,79 +1,21 @@ import React from 'react'; -import Image from 'next/image'; -import './Donations.css'; -const LOGO_SHAKESHACK = '/img/static/images/donors/Shake-Shack_Logo.png'; -const LOGO_NAMI = '/img/static/images/donors/Nami_Illustrations.png'; -const LOGO_CIDERCADE = '/img/static/images/donors/Cidercade.png'; -const LOGO_JENIS = '/img/static/images/donors/Jenis.png'; -const LOGO_FIREFLY = '/img/static/images/donors/SweetFirefly.png'; -const LOGO_BAZARIA = '/img/static/images/donors/Bazaria.png'; -const LOGO_EILAND = '/img/static/images/donors/Eiland.png'; -const LOGO_BUNDT = '/img/static/images/donors/NothingBundtCakes.png'; - -const SHAKESHACK_LINK = 'https://www.shakeshack.com/'; -const NAMI_LINK = 'https://namimatcha.com/'; -const CIDERCADE_LINK = 'https://www.cidercade.com/'; -const JENIS_LINK = 'https://www.jenis.com/'; -const FIREFLY_LINK = 'https://sweetfirefly.com/'; -const BAZARIA_LINK = 'https://thebazaria.com/'; -const EILAND_LINK = 'https://www.eilandcoffee.com/'; -const BUNDT_LINK = 'https://www.nothingbundtcakes.com/'; - -interface GridItem { - id: number; - imagePath: string; - link: string; -} - -const donations: GridItem[] = [ - { id: 1, imagePath: LOGO_CIDERCADE, link: CIDERCADE_LINK }, - { id: 2, imagePath: LOGO_SHAKESHACK, link: SHAKESHACK_LINK }, - { id: 3, imagePath: LOGO_NAMI, link: NAMI_LINK }, - { id: 4, imagePath: LOGO_JENIS, link: JENIS_LINK }, - { id: 5, imagePath: LOGO_FIREFLY, link: FIREFLY_LINK }, - { id: 6, imagePath: LOGO_BAZARIA, link: BAZARIA_LINK }, - { id: 7, imagePath: LOGO_EILAND, link: EILAND_LINK }, - { id: 8, imagePath: LOGO_BUNDT, link: BUNDT_LINK }, -]; - -const Donations: React.FC = () => { +export default function Donations() { return ( -
-
-

Donations

-
+
+
+ + {/* Your original donations title */} +

+ Donations +

+ + {/* Clean, updated outreach message as plain, borderless text */} +

+ Interested in donating or supporting our mission? Contact us at wehackutd@gmail.com +

-
-
- {donations.map((item) => ( - -
- {`Donation -
-
- ))} -
); -}; - -export default Donations; +} \ No newline at end of file diff --git a/apps/web/src/app/sections/Jumbotron/Jumbotron.tsx b/apps/web/src/app/sections/Jumbotron/Jumbotron.tsx index 8564d780..8346324c 100644 --- a/apps/web/src/app/sections/Jumbotron/Jumbotron.tsx +++ b/apps/web/src/app/sections/Jumbotron/Jumbotron.tsx @@ -7,13 +7,19 @@ function Jumbotron() {
-

WEHack 2026 Presents

-

The Night at the Museum

-

April 11th-12th

+

WEHack 2027 Presents

+

WEHack 2027 Coming Soon

+

Spring 2027

- {/*
diff --git a/apps/web/src/app/sections/Sponsor/Sponsor.tsx b/apps/web/src/app/sections/Sponsor/Sponsor.tsx index b6bd5646..5c9dc456 100644 --- a/apps/web/src/app/sections/Sponsor/Sponsor.tsx +++ b/apps/web/src/app/sections/Sponsor/Sponsor.tsx @@ -1,224 +1,19 @@ import React from 'react'; -import './Sponsor.css'; -// --- VASE ASSET PATHS (absolute to avoid 404s on nested routes) --- -// Include both webp and png so older browsers that lack webp support still render. - -const VASE_A2 = { - webp: '/img/static/images/sponsor_vases/A2-trimmed.webp', - png: '/img/static/images/sponsor_vases/A2-trimmed.png' -}; -const VASE_A3 = { - webp: '/img/static/images/sponsor_vases/A3-trimmed.webp', - png: '/img/static/images/sponsor_vases/A3-trimmed.png' -}; -const VASE_A4 = { - webp: '/img/static/images/sponsor_vases/A4-trimmed.webp', - png: '/img/static/images/sponsor_vases/A4-trimmed.png' -}; -const VASE_A5 = { - webp: '/img/static/images/sponsor_vases/A5-trimmed.webp', - png: '/img/static/images/sponsor_vases/A5-trimmed.png' -}; -const VASE_A6 = { - webp: '/img/static/images/sponsor_vases/A6-trimmed.webp', - png: '/img/static/images/sponsor_vases/A6-trimmed.png' -}; -const VASE_A7 = { - webp: '/img/static/images/sponsor_vases/A7-trimmed.webp', - png: '/img/static/images/sponsor_vases/A7-trimmed.png' -}; -const VASE_A8 = { - webp: '/img/static/images/sponsor_vases/A8-trimmed.webp', - png: '/img/static/images/sponsor_vases/A8-trimmed.png' -}; - -const LOGO_STATEFARM = { - webp: '/img/static/images/sponsors/statefarm_bronze.webp', - png: '/img/static/images/sponsors/statefarm_bronze.png' -}; -const LOGO_CBRE = { - webp: '/img/static/images/sponsors/cbre_gold.webp', - png: '/img/static/images/sponsors/cbre_gold.png' -}; -const LOGO_FIDELITY = { - // Fidelity art is already PNG only. - webp: '/img/static/images/sponsors/fidelity_logo_white.png', - png: '/img/static/images/sponsors/fidelity_logo_white.png' -}; -const LOGO_CAPITAL_ONE = { - webp: '/img/static/images/sponsors/capital_one_silver.webp', - png: '/img/static/images/sponsors/capital_one_silver.png' -}; - -// Define grid item structure -interface GridItem { - id: number; - type: 'vase' | 'box'; - imagePath: { - webp: string; - png: string; - }; - vaseClass?: string; -} - -// Row tier labels -const rowTitles: Record = { - 1: "GOLD SPONSORS", - 2: "SILVER SPONSOR", - 3: "BRONZE SPONSORS", - 4: null -}; - -// --- GRID ITEMS --- -const dummySponsors: GridItem[] = [ - { id: 2, type: 'vase', imagePath: VASE_A5, vaseClass: 'vase-style-6' }, - { id: 4, type: 'box', imagePath: LOGO_CBRE }, - { id: 5, type: 'box', imagePath: LOGO_FIDELITY }, - { id: 3, type: 'box', imagePath: LOGO_STATEFARM }, - { id: 1, type: 'vase', imagePath: VASE_A7, vaseClass: 'vase-style-6' }, - - { id: 6, type: 'vase', imagePath: VASE_A6, vaseClass: 'vase-style-6' }, - { id: 10, type: 'vase', imagePath: VASE_A2, vaseClass: 'vase-style-6' }, - { id: 9, type: 'box', imagePath: LOGO_CAPITAL_ONE }, - { id: 7, type: 'vase', imagePath: VASE_A3, vaseClass: 'vase-style-6' }, - { id: 8, type: 'vase', imagePath: VASE_A8, vaseClass: 'vase-style-6' }, -]; - -// Size rules -const getBoxSizeClass = (id: number, type: 'vase' | 'box'): string => { - const row = Math.ceil(id / 5); - - if (type === 'box') { - switch (row) { - case 1: - return 'h-64 md:h-72 lg:h-64 w-72'; - - case 2: - return 'h-48 md:h-56 lg:h-64 w-72'; - - default: - return 'h-20'; - } - } - - if (type === 'vase') { - switch (row) { - case 1: return 'h-48 md:h-64 lg:h-80'; - case 2: return 'h-44 md:h-60 lg:h-72'; - default: return 'h-48 md:h-64'; - } - } - - return ''; -}; - -// Group items into rows -const groupedSponsors = dummySponsors.reduce((acc, item) => { - const row = Math.ceil(item.id / 5); - if (!acc[row]) acc[row] = []; - acc[row].push(item); - return acc; -}, {} as Record); - -const Sponsor: React.FC = () => { - return ( - - ); -}; - -export default Sponsor; +export default function Sponsors() { + return ( +
+
+ {/* Section Title */} +

+ Our Sponsors +

+ + {/* Clean Center-Aligned Outreach Line */} +

+ Coming Soon. Interested in sponsoring? Contact us at wehackutd@gmail.com +

+
+
+ ); +} \ No newline at end of file diff --git a/apps/web/src/components/landing/MLHBadge.tsx b/apps/web/src/components/landing/MLHBadge.tsx index c0942cc6..3ac21ec1 100644 --- a/apps/web/src/components/landing/MLHBadge.tsx +++ b/apps/web/src/components/landing/MLHBadge.tsx @@ -2,45 +2,45 @@ import Link from "next/link"; import Image from "next/image"; export default function MLHBadge() { - return ( - <> -
- - Major League Hacking 2026 Hackathon Season - -
-
- - Major League Hacking 2026 Hackathon Season - -
- - ); -} + return ( + <> + {/* Dark Mode Badge Asset Container */} +
+ + Major League Hacking 2027 Hackathon Season + +
+ + {/* Light Mode Badge Asset Container */} +
+ + Major League Hacking 2027 Hackathon Season + +
+ + ); +} \ No newline at end of file diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index 44326ed1..0507f90a 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -3,47 +3,46 @@ import { NextResponse } from "next/server"; import { publicRoutes } from "config"; export default authMiddleware({ - publicRoutes, - beforeAuth: (req) => { - console.log(`Incoming request: ${req.method} ${req.nextUrl.pathname}`); - if (publicRoutes.includes(req.nextUrl.pathname)) { - console.log(`${req.nextUrl.pathname} is a Public route`); - } + // Combines the original configuration array with the direct string literal path override + publicRoutes: [...publicRoutes, "/register"], + + beforeAuth: (req) => { + console.log(`Incoming request: ${req.method} ${req.nextUrl.pathname}`); + + // Updated this array check as well so console strings evaluate accurately + if ([...publicRoutes, "/register"].includes(req.nextUrl.pathname)) { + console.log(`${req.nextUrl.pathname} is a Public route`); + } - // if (req.nextUrl.pathname === "/api/uploadthing") { - // console.log("Excluding /api/uploadthing from authMiddleware"); - // return NextResponse.next(); - // } - if (req.nextUrl.pathname.startsWith("/@")) { - return NextResponse.rewrite( - new URL( - `/user/${req.nextUrl.pathname.replace("/@", "")}`, - req.url, - ), - ); - } - if (req.nextUrl.pathname.startsWith("/~")) { - return NextResponse.rewrite( - new URL( - `/team/${req.nextUrl.pathname.replace("/~", "")}`, - req.url, - ), - ); - } - return NextResponse.next(); - }, - afterAuth: (req) => { - const user = req.userId; - if (user) { - console.log(`Authenticated user: ${user}`); - } else { - console.log(`Reject reason: Unauthorized - No user found`); - } - return NextResponse.next(); - }, + if (req.nextUrl.pathname.startsWith("/@")) { + return NextResponse.rewrite( + new URL( + `/user/${req.nextUrl.pathname.replace("/@", "")}`, + req.url, + ), + ); + } + if (req.nextUrl.pathname.startsWith("/~")) { + return NextResponse.rewrite( + new URL( + `/team/${req.nextUrl.pathname.replace("/~", "")}`, + req.url, + ), + ); + } + return NextResponse.next(); + }, + afterAuth: (req) => { + const user = req.userId; + if (user) { + console.log(`Authenticated user: ${user}`); + } else { + console.log(`Reject reason: Unauthorized - No user found`); + } + return NextResponse.next(); + }, }); export const config = { - matcher: ["/((?!.*\\..*|_next).*)", "/"], -}; -//"/(api|trpc)(.*)" \ No newline at end of file + matcher: ["/((?!.*\\..*|_next).*)", "/"], +}; \ No newline at end of file