GRV-Summit-Site/lib/calendar.ts
kirukib 03d439e97b
Some checks failed
Deploy to Cloudflare Workers (OpenNext) / deploy (push) Has been cancelled
Update hero alumni strip, 2027 dates, and Antebas font loading.
Add a bottom cut-out panel with larger winner cards (four visible), move summit dates to Feb 21–22 2027, and limit demo Antebas to letters so symbols render via DM Sans.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 00:25:43 +03:00

58 lines
1.7 KiB
TypeScript

import { site } from "@/content/site";
/** Event times in Addis Ababa (EAT, UTC+3) */
const EVENT_START = "20270221T080000";
const EVENT_END = "20270222T180000";
function formatIcsDate(iso: string) {
return iso.replace(/[-:]/g, "").split(".")[0] + "Z";
}
export function buildGoogleCalendarUrl() {
const params = new URLSearchParams({
action: "TEMPLATE",
text: site.name,
dates: `${EVENT_START}/${EVENT_END}`,
details: `${site.tagline}\n\nPresented by ${site.presentedBy}.\n${site.links.legacySite}`,
location: `${site.venue.name}, ${site.venue.address}`,
ctz: "Africa/Addis_Ababa",
});
return `https://calendar.google.com/calendar/render?${params.toString()}`;
}
export function buildOutlookCalendarUrl() {
const params = new URLSearchParams({
path: "/calendar/action/compose",
rru: "addevent",
subject: site.name,
startdt: "2027-02-21T08:00:00",
enddt: "2027-02-22T18:00:00",
body: site.tagline,
location: `${site.venue.name}, ${site.venue.address}`,
});
return `https://outlook.live.com/calendar/0/deeplink/compose?${params.toString()}`;
}
export function buildIcsFileContent() {
const uid = `grv-summit-${site.dates.start}@grvsummit.com`;
const now = formatIcsDate(new Date().toISOString());
return [
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//GRV Summit//EN",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
`UID:${uid}`,
`DTSTAMP:${now}`,
`DTSTART;TZID=Africa/Addis_Ababa:20270221T080000`,
`DTEND;TZID=Africa/Addis_Ababa:20270222T180000`,
`SUMMARY:${site.name}`,
`DESCRIPTION:${site.tagline.replace(/\n/g, "\\n")}`,
`LOCATION:${site.venue.name}, ${site.venue.address}`,
"END:VEVENT",
"END:VCALENDAR",
].join("\r\n");
}