diff --git a/src/components/RelatedEvents/index.astro b/src/components/RelatedEvents/index.astro
new file mode 100644
index 00000000..7f010cd7
--- /dev/null
+++ b/src/components/RelatedEvents/index.astro
@@ -0,0 +1,29 @@
+---
+import EventCard from "@/components/EventCard/index.astro";
+import TiltedCard from "@/components/TiltedCard";
+import type { EventComputed } from "@/lib/events";
+
+interface Props {
+ currentEvent: EventComputed;
+ relatedEvents: EventComputed[];
+}
+
+const { currentEvent, relatedEvents } = Astro.props;
+---
+
+{
+ relatedEvents.length > 0 && currentEvent.data._computed.city?.data.name && (
+
+
+ More Events in {currentEvent.data._computed.city.data.name}
+
+
+ {relatedEvents.map((event) => (
+
+
+
+ ))}
+
+
+ )
+}
diff --git a/src/pages/events/[id]/index.astro b/src/pages/events/[id]/index.astro
index f32dfbc7..22145624 100644
--- a/src/pages/events/[id]/index.astro
+++ b/src/pages/events/[id]/index.astro
@@ -40,21 +40,37 @@ import dayjs from "dayjs";
import TiltedCard from "@/components/TiltedCard";
import { lunalink } from "@bearstudio/lunalink";
import { ROUTES } from "@/routes.gen";
+import RelatedEvents from "@/components/RelatedEvents/index.astro";
export async function getStaticPaths() {
- const events = await getEventsCollection();
+ const allEvents = await getEventsCollection();
return Promise.all(
- events.map(async (event) => ({
- params: { id: event.id },
- props: {
- event,
- },
- })),
+ allEvents.map(async (event) => {
+ const relatedEvents = allEvents
+ .filter(
+ (e) =>
+ e.id !== event.id &&
+ event.data._computed.city?.id !== undefined &&
+ e.data._computed.city?.id === event.data._computed.city?.id &&
+ (dayjs(e.data.date).isAfter(dayjs()) ||
+ dayjs(e.data.date).isAfter(dayjs().subtract(30, "day"))),
+ )
+ .sort((a, b) => dayjs(a.data.date).diff(dayjs(b.data.date)))
+ .slice(0, 3);
+
+ return {
+ params: { id: event.id },
+ props: {
+ event,
+ relatedEvents,
+ },
+ };
+ }),
);
}
-const { event } = Astro.props;
+const { event, relatedEvents } = Astro.props;
const partners = await getEntries(event.data.partners ?? []);
const speakers = await getEntries(event.data._computed.speakers ?? []);
@@ -64,7 +80,6 @@ const coOrganizers = (await getEntries(event.data.coOrganizers ?? [])).filter(
const sponsors = await getEntries(
(event.data.sponsors ?? []).map((s) => s.slug),
);
-
const navItems = await getEventNavItems(event.id);
const { Content } = await render(event);
@@ -646,6 +661,8 @@ const ctaEventMetadata = {
+
+