Skip to content
Draft
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ next-env.d.ts

# Nix
flake.lock
.env*.local
2 changes: 1 addition & 1 deletion app/events/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import styles from './Events.module.css'
type CompleteEventDetails = EventDetails & { end: number, link: string | null }
export type EventFrontmatter = Omit<Frontmatter, 'event_details'> & { event_details: CompleteEventDetails }

async function getEvents() {
export async function getEvents() {
const markdownFiles = await generateUnmodifiedSlugsFromMarkdownFiles('app/events')
const events: Frontmatter[] = []
for (const { slug } of markdownFiles) {
Expand Down
15 changes: 10 additions & 5 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<>
<div id={styles.content}>
<HomepageBanner events={events} />
<h1 id={styles.title}>compsigh</h1>
<p id={styles.description}>
compsigh is the social computer science club at USFCA for meeting cool
Expand All @@ -21,5 +26,5 @@ export default function Home() {
<HomeLoop />
</div>
</>
)
);
}
52 changes: 52 additions & 0 deletions components/HomepageBanner/HomepageBanner.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<Link href={eventLink}>
<h1>&quot;{title}&quot; is coming up.</h1>
</Link>
);
}
1 change: 1 addition & 0 deletions components/HomepageBanner/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { HomepageBanner } from './HomepageBanner'