diff --git a/.gitignore b/.gitignore index d3e0a06..6ce6f26 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ next-env.d.ts # Nix flake.lock +.env*.local diff --git a/app/events/page.tsx b/app/events/page.tsx index 33466f7..225eade 100644 --- a/app/events/page.tsx +++ b/app/events/page.tsx @@ -14,7 +14,7 @@ import styles from './Events.module.css' type CompleteEventDetails = EventDetails & { end: number, link: string | null } export type EventFrontmatter = Omit & { event_details: CompleteEventDetails } -async function getEvents() { +export async function getEvents() { const markdownFiles = await generateUnmodifiedSlugsFromMarkdownFiles('app/events') const events: Frontmatter[] = [] for (const { slug } of markdownFiles) { diff --git a/app/page.tsx b/app/page.tsx index b15fb3d..039792f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,12 +1,17 @@ -import { NavItems } from "@/components/NavItems" -import { HomeLoop } from "@/components/HomeLoop" +import { NavItems } from "@/components/NavItems"; +import { HomeLoop } from "@/components/HomeLoop"; +import { HomepageBanner } from "@/components/HomepageBanner"; +import { getEvents } from "./events/page"; -import styles from "./Home.module.css" +import styles from "./Home.module.css"; + +export default async function Home() { + const events = await getEvents(); -export default function Home() { return ( <>
+

compsigh

compsigh is the social computer science club at USFCA for meeting cool @@ -21,5 +26,5 @@ export default function Home() {

- ) + ); } diff --git a/components/HomepageBanner/HomepageBanner.tsx b/components/HomepageBanner/HomepageBanner.tsx new file mode 100644 index 0000000..975b3bd --- /dev/null +++ b/components/HomepageBanner/HomepageBanner.tsx @@ -0,0 +1,52 @@ +"use client"; + +import { EventFrontmatter } from "@/app/events/page"; +import Link from "next/link"; + +function isValidURL(url: string): boolean { + try { + new URL(url); + return true; + } catch { + return false; + } +} + +export function HomepageBanner({ events }: { events: EventFrontmatter[] }) { + const currentTime = Math.floor(new Date().getTime() / 1000); + if (events.length === 0) return <>; + + const updatedEvents: EventFrontmatter[] = [ + ...events, + { + title: "DAVE", + description: "register!", + event_details: { + start: 17665518600, + end: 9999999999999, + location: "The Hive", + cover_image: "/events/2025-11-07/deploy25.png", + pictures: [], + link: "/", + }, + slug: "events/2025-11-07/deploy25", + }, + ]; + + const upcomingEvents: EventFrontmatter[] = []; + for (const event of updatedEvents) + if (currentTime < event.event_details.start) upcomingEvents.push(event); + + if (upcomingEvents.length === 0) return <>; + const nearestUpcomingEvent = upcomingEvents[0]; + const title = nearestUpcomingEvent.title; + const eventLink = nearestUpcomingEvent.event_details.link!; + + if (!isValidURL(eventLink)) return <>; + + return ( + +

"{title}" is coming up.

+ + ); +} diff --git a/components/HomepageBanner/index.ts b/components/HomepageBanner/index.ts new file mode 100644 index 0000000..086986a --- /dev/null +++ b/components/HomepageBanner/index.ts @@ -0,0 +1 @@ +export { HomepageBanner } from './HomepageBanner' \ No newline at end of file