feat: add SEO metadata, llms.txt, and markdown page mirrors
Centralize site metadata and social URLs for JSON-LD, expose llmstxt.org content and per-page .md routes for LLM crawlers, and refactor blog/FAQ/events pages with shared components. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -52,6 +52,27 @@ export function getMeetupStartUtc(dateStr: string, timeStr: string): Date {
|
||||
return new Date(Date.UTC(year, month - 1, day, utcStartH, startM, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the event end instant in UTC when the time string carries a range
|
||||
* (e.g. "18:00 - 21:00"), otherwise null. Used for schema.org Event.endDate.
|
||||
*/
|
||||
export function getMeetupEndUtc(dateStr: string, timeStr: string): Date | null {
|
||||
const key = normalizeMeetupDateKey(dateStr);
|
||||
if (!key) return null;
|
||||
const parts = key.split("-").map(Number);
|
||||
const year = parts[0];
|
||||
const month = parts[1];
|
||||
const day = parts[2];
|
||||
if (!year || !month || !day) return null;
|
||||
|
||||
const timeParts = (timeStr?.trim() || "").split(/\s*[-–]\s*/);
|
||||
if (timeParts.length < 2 || !timeParts[1]?.trim()) return null;
|
||||
|
||||
const { h: endH, m: endM } = parseLocalTime(timeParts[1]);
|
||||
const utcEndH = endH - BRUSSELS_OFFSET_HOURS;
|
||||
return new Date(Date.UTC(year, month - 1, day, utcEndH, endM, 0));
|
||||
}
|
||||
|
||||
const UTC_CAL_OPTS = { timeZone: "UTC" } as const;
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user