diff --git a/src/components/EventLanding.js b/src/components/EventLanding.js index f5f915a0e..8cfa23f04 100644 --- a/src/components/EventLanding.js +++ b/src/components/EventLanding.js @@ -56,6 +56,8 @@ export default function EventLanding({ slug }) { ); } + const effectiveEventStatus = event.eventStatus || "EventScheduled"; + const eventJsonLd = { "@context": "https://schema.org", "@type": "Event", @@ -72,6 +74,34 @@ export default function EventLanding({ slug }) { description: pick(locale, event.description), image: bannerUrl ? `${siteConfig.url}${bannerUrl}` : undefined, eventAttendanceMode: "https://schema.org/OfflineEventAttendanceMode", + eventStatus: `https://schema.org/${effectiveEventStatus}`, + organizer: { + "@type": "Organization", + name: "HAMi", + url: "https://project-hami.io/", + }, + ...(event.speaker + ? { + performer: event.speaker + .split(",") + .map((name) => ({ "@type": "Person", name: name.trim() })), + } + : {}), + ...(event.price !== undefined || event.externalUrl + ? { + offers: { + "@type": "Offer", + url: event.externalUrl || `${siteConfig.url}/events/${event.slug}`, + price: event.price ?? "0", + priceCurrency: event.priceCurrency || "USD", + availability: + effectiveEventStatus === "EventScheduled" + ? "https://schema.org/InStock" + : "https://schema.org/SoldOut", + validFrom: event.offerValidFrom || event.date, + }, + } + : {}), }; return ( diff --git a/src/data/events.js b/src/data/events.js index 81c4e049a..68c1bc410 100644 --- a/src/data/events.js +++ b/src/data/events.js @@ -6,6 +6,7 @@ const events = [ zh: "从项目到生产:HAMi 与 Viettel Cloud 亮相 KCD 越南", }, date: "2026-07-25", + speaker: "Reza Jelveh, The Anh Nguyen", location: { en: "Hanoi, Vietnam", zh: "越南 河内", @@ -47,6 +48,7 @@ const events = [ zh: "HAMi 亮相 KubeCon 日本 2026", }, date: "2026-07-28", + speaker: "Jeonghyun Kim, Reza Jelveh", endDate: "2026-07-30", location: { en: "Yokohama, Japan", diff --git a/src/pages/events.module.css b/src/pages/events.module.css index ab1fb41bd..fe3ded28c 100644 --- a/src/pages/events.module.css +++ b/src/pages/events.module.css @@ -295,17 +295,17 @@ } .ctaList { - margin: 0 0 var(--hami-space-32); + margin: 0 auto var(--hami-space-32); padding: 0 0 0 2rem; - display: inline-flex; + display: flex; flex-direction: column; gap: var(--hami-space-8); color: var(--hami-color-muted); font-size: 0.96rem; line-height: 1.6; text-align: left; + max-width: fit-content; } - /* ── dark mode ── */ [data-theme="dark"] .dayCard {