))
From 1d2b1aaba7018e6314fe70858b5f0130ae8907a7 Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Fri, 10 Jul 2026 17:31:52 +0200
Subject: [PATCH 03/11] feat: display end and start date
---
src/components/events/EventsGrid.astro | 36 ++++++++++++++++++++++++--
src/data/index.ts | 1 +
src/data/real/events.ts | 1 +
src/data/test/events.ts | 3 +++
4 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/src/components/events/EventsGrid.astro b/src/components/events/EventsGrid.astro
index 922b706c..22fdd8a7 100644
--- a/src/components/events/EventsGrid.astro
+++ b/src/components/events/EventsGrid.astro
@@ -7,6 +7,7 @@ interface Props {
const { events } = Astro.props;
const TODAY = new Date();
+const CURRENT_YEAR = TODAY.getFullYear();
function relativeDate(date: Date): 'Demnächst' | 'Vorbei' {
if (date < TODAY) {
@@ -14,6 +15,38 @@ function relativeDate(date: Date): 'Demnächst' | 'Vorbei' {
}
return 'Demnächst';
}
+
+function formatRange(start: Date, end?: Date): string {
+ const startDay = start.getDate();
+ const startMonth = start.toLocaleString('de-DE', { month: 'short' });
+ const startYearStr = String(start.getFullYear()).slice(-2);
+
+ // No end date (or same day): show a single date.
+ if (!end || end.toDateString() === start.toDateString()) {
+ const suffix = start.getFullYear() !== CURRENT_YEAR ? ` ${startYearStr}` : '';
+ return `${startDay}. ${startMonth}${suffix}`;
+ }
+
+ const endDay = end.getDate();
+ const endMonth = end.toLocaleString('de-DE', { month: 'short' });
+ const endYearStr = String(end.getFullYear()).slice(-2);
+
+ const sameYear = start.getFullYear() === end.getFullYear();
+ const showYear = sameYear ? start.getFullYear() !== CURRENT_YEAR : true;
+
+ if (startMonth === endMonth && sameYear) {
+ // 2. - 5. Jun
+ return `${startDay}. - ${endDay}. ${endMonth}${showYear ? ` ${endYearStr}` : ''}`;
+ }
+
+ if (sameYear) {
+ // 30. Mai - 3. Jun [YY]
+ return `${startDay}. ${startMonth} - ${endDay}. ${endMonth}${showYear ? ` ${endYearStr}` : ''}`;
+ }
+
+ // Spans multiple years: include both years.
+ return `${startDay}. ${startMonth} ${startYearStr} - ${endDay}. ${endMonth} ${endYearStr}`;
+}
---
@@ -35,8 +68,7 @@ function relativeDate(date: Date): 'Demnächst' | 'Vorbei' {
{event.description}
- {event.date.getDate()}. {event.date.toLocaleString('de-DE', { month: 'short' })}{' '}
- {event.date.getFullYear()}
+ {formatRange(event.date, event.end)}
{event.link && Mehr Infos >
}
diff --git a/src/data/index.ts b/src/data/index.ts
index 3c752caa..90800fce 100644
--- a/src/data/index.ts
+++ b/src/data/index.ts
@@ -9,6 +9,7 @@ import { testInstagramData } from './test/instagram.ts';
export interface EventCalendarEntry {
date: Date;
+ end?: Date;
description: string;
image: { alt: string; src: GetImageResult };
link?: string;
diff --git a/src/data/real/events.ts b/src/data/real/events.ts
index ada1d48d..dcf51429 100644
--- a/src/data/real/events.ts
+++ b/src/data/real/events.ts
@@ -76,6 +76,7 @@ export async function get3CalendarEntries(): Promise<
}
const optimizedEvents = events.map(async (event) => ({
date: new Date(event.start),
+ end: new Date(event.end),
description: event.shortDescription,
image: await getEventImage(event.calendarCover.value).then(async (r) => ({
alt: r!.alt,
diff --git a/src/data/test/events.ts b/src/data/test/events.ts
index 28238628..f5374a5f 100644
--- a/src/data/test/events.ts
+++ b/src/data/test/events.ts
@@ -35,6 +35,7 @@ export async function get3CalendarEntries(): Promise<
return [
{
date: new Date(1999, 6, 10),
+ end: new Date(1999, 6, 13),
description: 'This event covers the test case for past events',
image: {
alt: '',
@@ -45,6 +46,7 @@ export async function get3CalendarEntries(): Promise<
},
{
date: new Date(2999, 10, 2),
+ end: new Date(2999, 10, 5),
description: 'This event will always (until the year 2999) be in the future.',
image: {
alt: '',
@@ -55,6 +57,7 @@ export async function get3CalendarEntries(): Promise<
},
{
date: new Date(3024, 0, 28),
+ end: new Date(3024, 1, 3),
description: 'This is test data. Test 1 2 3. Test test.',
image: {
alt: '',
From bb53c67c0d8b7428111f14e0ca3d17f9460b64ee Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Mon, 13 Jul 2026 20:40:56 +0200
Subject: [PATCH 04/11] chore: lint
---
src/components/events/EventsGrid.astro | 13 ++-----------
src/components/events/NextEvents.astro | 26 +++++++++++++-------------
src/components/footer/Footer.svelte | 2 +-
src/data/index.ts | 2 +-
src/data/real/events.ts | 2 +-
src/data/test/events.ts | 6 +++---
6 files changed, 21 insertions(+), 30 deletions(-)
diff --git a/src/components/events/EventsGrid.astro b/src/components/events/EventsGrid.astro
index 22fdd8a7..8eaa76a8 100644
--- a/src/components/events/EventsGrid.astro
+++ b/src/components/events/EventsGrid.astro
@@ -9,13 +9,6 @@ const { events } = Astro.props;
const TODAY = new Date();
const CURRENT_YEAR = TODAY.getFullYear();
-function relativeDate(date: Date): 'Demnächst' | 'Vorbei' {
- if (date < TODAY) {
- return 'Vorbei';
- }
- return 'Demnächst';
-}
-
function formatRange(start: Date, end?: Date): string {
const startDay = start.getDate();
const startMonth = start.toLocaleString('de-DE', { month: 'short' });
@@ -66,10 +59,8 @@ function formatRange(start: Date, end?: Date): string {
{event.title}
{event.description}
-
-
- {formatRange(event.date, event.end)}
-
+
+ {formatRange(event.date, event.end)}
{event.link && Mehr Infos >
}
diff --git a/src/components/events/NextEvents.astro b/src/components/events/NextEvents.astro
index db0862be..5f6649a9 100644
--- a/src/components/events/NextEvents.astro
+++ b/src/components/events/NextEvents.astro
@@ -13,18 +13,18 @@ const events = await eventData.get3CalendarEntries();
-
-
Unsere nächsten Veranstaltungen
-
- Trau dich! Wir wissen, es ist nicht so leicht, an Orte zu kommen, wo du niemanden kennst. Aber
- auch, wenn du bisher noch keinen Kontakt mit YoungVision hattest, bist du ganz herzlich
- eingeladen, zu kommen wie du bist. Du kannst dir sicher sein, wir fangen dich auf und halten den
- Raum für dich und deinen Prozess.
-
-
-
-
-
+
+
Unsere nächsten Veranstaltungen
+
+ Trau dich! Wir wissen, es ist nicht so leicht, an Orte zu kommen, wo du niemanden kennst. Aber
+ auch, wenn du bisher noch keinen Kontakt mit YoungVision hattest, bist du ganz herzlich
+ eingeladen, zu kommen wie du bist. Du kannst dir sicher sein, wir fangen dich auf und halten
+ den Raum für dich und deinen Prozess.
+
+
+
+
+
-
+
diff --git a/src/components/footer/Footer.svelte b/src/components/footer/Footer.svelte
index 4dcb480a..570d28e9 100644
--- a/src/components/footer/Footer.svelte
+++ b/src/components/footer/Footer.svelte
@@ -36,7 +36,7 @@
name="email"
id="email"
autocomplete="email"
- class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 shadow-xs ring-1 ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
+ class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 ring-1 shadow-xs ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
placeholder="you@example.com"
/>
diff --git a/src/data/index.ts b/src/data/index.ts
index 90800fce..b06c16fb 100644
--- a/src/data/index.ts
+++ b/src/data/index.ts
@@ -9,8 +9,8 @@ import { testInstagramData } from './test/instagram.ts';
export interface EventCalendarEntry {
date: Date;
- end?: Date;
description: string;
+ end?: Date;
image: { alt: string; src: GetImageResult };
link?: string;
title: string;
diff --git a/src/data/real/events.ts b/src/data/real/events.ts
index dcf51429..48504555 100644
--- a/src/data/real/events.ts
+++ b/src/data/real/events.ts
@@ -76,8 +76,8 @@ export async function get3CalendarEntries(): Promise<
}
const optimizedEvents = events.map(async (event) => ({
date: new Date(event.start),
- end: new Date(event.end),
description: event.shortDescription,
+ end: new Date(event.end),
image: await getEventImage(event.calendarCover.value).then(async (r) => ({
alt: r!.alt,
src: await getImage({
diff --git a/src/data/test/events.ts b/src/data/test/events.ts
index f5374a5f..6a2b373b 100644
--- a/src/data/test/events.ts
+++ b/src/data/test/events.ts
@@ -35,8 +35,8 @@ export async function get3CalendarEntries(): Promise<
return [
{
date: new Date(1999, 6, 10),
- end: new Date(1999, 6, 13),
description: 'This event covers the test case for past events',
+ end: new Date(1999, 6, 13),
image: {
alt: '',
src: await getImage({ src: thirdEventImage }),
@@ -46,8 +46,8 @@ export async function get3CalendarEntries(): Promise<
},
{
date: new Date(2999, 10, 2),
- end: new Date(2999, 10, 5),
description: 'This event will always (until the year 2999) be in the future.',
+ end: new Date(2999, 10, 5),
image: {
alt: '',
src: await getImage({ src: calendarCoverImage }),
@@ -57,8 +57,8 @@ export async function get3CalendarEntries(): Promise<
},
{
date: new Date(3024, 0, 28),
- end: new Date(3024, 1, 3),
description: 'This is test data. Test 1 2 3. Test test.',
+ end: new Date(3024, 1, 3),
image: {
alt: '',
src: await getImage({ src: pastEvent }),
From c1ea2ad1c67881b73d92b66a12b38f189c7d42ec Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Mon, 13 Jul 2026 20:45:14 +0200
Subject: [PATCH 05/11] feat: better layout for impressum, datenschutz
---
src/pages/datenschutz.astro | 2 +-
src/pages/impressum.astro | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/pages/datenschutz.astro b/src/pages/datenschutz.astro
index 682eccb3..16c7dbb1 100644
--- a/src/pages/datenschutz.astro
+++ b/src/pages/datenschutz.astro
@@ -3,7 +3,7 @@ import Layout from '@layouts/Layout.astro';
---
-
+
Datenschutzerklärung
1. Datenschutz auf einen Blick
diff --git a/src/pages/impressum.astro b/src/pages/impressum.astro
index d86b2628..bd65e160 100644
--- a/src/pages/impressum.astro
+++ b/src/pages/impressum.astro
@@ -3,7 +3,7 @@ import Layout from '@layouts/Layout.astro';
---
-
+
Impressum
Angaben gemäß § 5 TMG:
YoungVision e.V. Am bhf 4, 16307 Mescherin Deutschland
From 46c0aeb696f2bb603dfa29b8a3f0f16c876621ee Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Mon, 13 Jul 2026 20:45:28 +0200
Subject: [PATCH 06/11] chore: update impressum
---
src/pages/datenschutz.astro | 2 +-
src/pages/impressum.astro | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/pages/datenschutz.astro b/src/pages/datenschutz.astro
index 16c7dbb1..a890dfd0 100644
--- a/src/pages/datenschutz.astro
+++ b/src/pages/datenschutz.astro
@@ -3,7 +3,7 @@ import Layout from '@layouts/Layout.astro';
---
-
+
Datenschutzerklärung
1. Datenschutz auf einen Blick
diff --git a/src/pages/impressum.astro b/src/pages/impressum.astro
index bd65e160..9a30c0b6 100644
--- a/src/pages/impressum.astro
+++ b/src/pages/impressum.astro
@@ -3,7 +3,7 @@ import Layout from '@layouts/Layout.astro';
---
-
+
Impressum
Angaben gemäß § 5 TMG:
YoungVision e.V. Am bhf 4, 16307 Mescherin Deutschland
@@ -31,7 +31,7 @@ import Layout from '@layouts/Layout.astro';
Registereintrag
-
Registergericht: Amtsgericht Charlottenburg Registernummer: VR 32815 B
+
Registergericht: Amtsgericht Neuruppin
Registernummer: VR 5579 NP
Date: Mon, 13 Jul 2026 20:50:45 +0200
Subject: [PATCH 07/11] feat: use new EventGrid on main page
---
src/components/index/Events.astro | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/index/Events.astro b/src/components/index/Events.astro
index 45d26b50..102252e5 100644
--- a/src/components/index/Events.astro
+++ b/src/components/index/Events.astro
@@ -1,6 +1,6 @@
---
import Button from '@components/Button.astro';
-import Calendar from '@components/Calendar.svelte';
+import EventsGrid from '@components/events/EventsGrid.astro';
import { eventData } from '@data';
const events = await eventData.get3CalendarEntries();
---
@@ -10,7 +10,7 @@ const events = await eventData.get3CalendarEntries();
Unsere Events
-
+
From 17e2eaf1c9ccec8ac362c1f3abf735214a813f36 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 19:10:13 +0000
Subject: [PATCH 08/11] [autofix.ci] apply automated fixes
---
src/components/footer/Footer.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/footer/Footer.svelte b/src/components/footer/Footer.svelte
index 570d28e9..4dcb480a 100644
--- a/src/components/footer/Footer.svelte
+++ b/src/components/footer/Footer.svelte
@@ -36,7 +36,7 @@
name="email"
id="email"
autocomplete="email"
- class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 ring-1 shadow-xs ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
+ class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 shadow-xs ring-1 ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
placeholder="you@example.com"
/>
From a679391d8f3a5317abbdde173b925b3d073e40b9 Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Mon, 13 Jul 2026 23:22:23 +0200
Subject: [PATCH 09/11] fix: fetching draft events
---
src/components/events/EventsGrid.astro | 2 +-
src/components/footer/Footer.svelte | 2 +-
src/data/real/events.ts | 12 ++++++++++++
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/components/events/EventsGrid.astro b/src/components/events/EventsGrid.astro
index 8eaa76a8..c36dd3e3 100644
--- a/src/components/events/EventsGrid.astro
+++ b/src/components/events/EventsGrid.astro
@@ -59,7 +59,7 @@ function formatRange(start: Date, end?: Date): string {
{event.title}
{event.description}
-
+
{formatRange(event.date, event.end)}
{event.link && Mehr Infos >
}
diff --git a/src/components/footer/Footer.svelte b/src/components/footer/Footer.svelte
index 4dcb480a..570d28e9 100644
--- a/src/components/footer/Footer.svelte
+++ b/src/components/footer/Footer.svelte
@@ -36,7 +36,7 @@
name="email"
id="email"
autocomplete="email"
- class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 shadow-xs ring-1 ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
+ class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 ring-1 shadow-xs ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
placeholder="you@example.com"
/>
diff --git a/src/data/real/events.ts b/src/data/real/events.ts
index 48504555..2d497692 100644
--- a/src/data/real/events.ts
+++ b/src/data/real/events.ts
@@ -25,8 +25,10 @@ type EventRequest = {
sort?: `-${keyof EventCMS}` | keyof EventCMS;
where: {
[key in keyof EventCMS]?: {
+ equals?: EventCMS[key];
greater_than?: EventCMS[key];
less_than?: EventCMS[key];
+ not_equals?: EventCMS[key];
};
};
};
@@ -48,6 +50,11 @@ export async function get3CalendarEntries(): Promise<
},
},
};
+ if (!DRAFT) {
+ request.where._status = {
+ equals: 'published',
+ };
+ }
console.log(request);
console.log(`${process.env.CMS_URL}/api/events?${qs.stringify(request)}`);
const response = await fetch(`${process.env.CMS_URL}/api/events?${qs.stringify(request)}`);
@@ -65,6 +72,11 @@ export async function get3CalendarEntries(): Promise<
},
},
};
+ if (!DRAFT) {
+ request2.where._status = {
+ equals: 'published',
+ };
+ }
const pastEventsResponse = await fetch(
`${process.env.CMS_URL}/api/events?${qs.stringify(request2)}`,
);
From ed11836ae3f604bdb3e15551ed0e5c8ce8063d85 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Mon, 13 Jul 2026 21:30:13 +0000
Subject: [PATCH 10/11] [autofix.ci] apply automated fixes
---
src/components/footer/Footer.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/footer/Footer.svelte b/src/components/footer/Footer.svelte
index 570d28e9..4dcb480a 100644
--- a/src/components/footer/Footer.svelte
+++ b/src/components/footer/Footer.svelte
@@ -36,7 +36,7 @@
name="email"
id="email"
autocomplete="email"
- class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 ring-1 shadow-xs ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
+ class="block w-full rounded-md border-0 bg-white px-2 py-1.5 text-lg text-gray-900 shadow-xs ring-1 ring-gray-300 ring-inset placeholder:text-gray-400 focus:ring-2 focus:ring-indigo-600 focus:ring-inset sm:text-sm sm:leading-6"
placeholder="you@example.com"
/>
From 09a5fb8fb3b4ce5c19b83f9c6403b23a22d630d3 Mon Sep 17 00:00:00 2001
From: Han2-Ro <127860003+Han2-Ro@users.noreply.github.com>
Date: Mon, 13 Jul 2026 23:50:01 +0200
Subject: [PATCH 11/11] fix: for real
---
src/data/real/events.ts | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/data/real/events.ts b/src/data/real/events.ts
index 2d497692..8421168c 100644
--- a/src/data/real/events.ts
+++ b/src/data/real/events.ts
@@ -26,6 +26,7 @@ type EventRequest = {
where: {
[key in keyof EventCMS]?: {
equals?: EventCMS[key];
+ exists?: boolean;
greater_than?: EventCMS[key];
less_than?: EventCMS[key];
not_equals?: EventCMS[key];
@@ -104,11 +105,23 @@ export async function get3CalendarEntries(): Promise<
}
export async function getAllPages(): Promise {
- const response = await fetch(`${process.env.CMS_URL}/api/events?draft=${DRAFT}`);
+ const request: EventRequest = {
+ draft: DRAFT,
+ where: {
+ slug: {
+ exists: true,
+ },
+ },
+ };
+ if (!DRAFT) {
+ request.where._status = {
+ equals: 'published',
+ };
+ }
+ const response = await fetch(`${process.env.CMS_URL}/api/events?${qs.stringify(request)}`);
const data = await response.json();
const events = data.docs as EventCMS[];
- const eventsWithSlug = events.filter((event) => event.slug);
- const promises = eventsWithSlug.map(async (event) => ({
+ const promises = events.map(async (event) => ({
...event,
end: new Date(event.end),
heroImage: await getEventImage(event.heroImage?.value),