From f908c9526f256810f0aac56fff4e9c4fb154fe1c Mon Sep 17 00:00:00 2001 From: xengi Date: Thu, 5 Mar 2026 17:59:13 +0100 Subject: [PATCH 1/9] Update .forgejo/workflows/deploy.yaml Signed-off-by: xengi --- .forgejo/workflows/deploy.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 414eea3..1b6cc42 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -1,6 +1,8 @@ name: deploy blog on: workflow_dispatch: + schedule: + - cron: '0 10 * * 3' # at 10:00 on wednesday push: branches: - staging From 89f6c9198dd6e9298e3ecb049b4b8b552688b1ea Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 15:41:05 +0200 Subject: [PATCH 2/9] Korrigiere Datum des Neujahrsempfangs und entferne kaputte rrule. Der dtstart stand auf 2025 statt 2026, und die rrule "FREQ=MOTHLY" enthielt einen Tippfehler, sodass das Event nicht im Kalender auftauchte. Der Neujahrsempfang ist ein Einzeltermin und braucht keine rrule. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- content/veranstaltungen/neujahresempfang.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/content/veranstaltungen/neujahresempfang.md b/content/veranstaltungen/neujahresempfang.md index 6bcd354..9a97796 100644 --- a/content/veranstaltungen/neujahresempfang.md +++ b/content/veranstaltungen/neujahresempfang.md @@ -2,9 +2,8 @@ title: "Neujahresempfang" subtitle: "#NJE 26" date: 2025-03-05T18:00:00+02:00 -dtstart: 20250523T180000 -dtend: 20250524T100000 -rrule: "FREQ=MOTHLY;BYDAY=4SA;WKST=MO" +dtstart: 20260523T180000 +dtend: 20260524T100000 menu: main: parent: "Veranstaltungen" From b27b3899ce42250ba2a19af30354b4da12f649b2 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 15:37:32 +0200 Subject: [PATCH 3/9] Korrigiere Link auf Club Discordia und Rechtschreibfehler. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- content/veranstaltungen/bastelabend.md | 4 ++-- content/veranstaltungen/spieleabend.md | 4 ++-- content/veranstaltungen/subbotnik.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/veranstaltungen/bastelabend.md b/content/veranstaltungen/bastelabend.md index 5f3d995..c787c17 100644 --- a/content/veranstaltungen/bastelabend.md +++ b/content/veranstaltungen/bastelabend.md @@ -26,7 +26,7 @@ draft: true {{< alert "circle-info" >}} -Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/page/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. +Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/veranstaltungen/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. -Generell sind aber alle, die schonmal im Club waren, herzlich eingeladen, an den Bastelabenden vorbeizukommen. +Generell sind aber alle, die schon mal im Club waren, herzlich eingeladen, an den Bastelabenden vorbeizukommen. {{< /alert >}} diff --git a/content/veranstaltungen/spieleabend.md b/content/veranstaltungen/spieleabend.md index e1122f9..ab3d120 100644 --- a/content/veranstaltungen/spieleabend.md +++ b/content/veranstaltungen/spieleabend.md @@ -16,7 +16,7 @@ tag: ["Veranstaltung"] **Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.** {{< alert "circle-info" >}} -Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/page/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. +Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/veranstaltungen/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. -Generell sind aber alle, die schonmal im Club waren, herzlich eingeladen, an den Spieleabenden vorbeizukommen. +Generell sind aber alle, die schon mal im Club waren, herzlich eingeladen, an den Spieleabenden vorbeizukommen. {{< /alert >}} diff --git a/content/veranstaltungen/subbotnik.md b/content/veranstaltungen/subbotnik.md index 5e86aa2..a520035 100644 --- a/content/veranstaltungen/subbotnik.md +++ b/content/veranstaltungen/subbotnik.md @@ -23,8 +23,8 @@ Der Begriff [Subbotnik](https://de.wikipedia.org/wiki/Subbotnik) ist eine in Sow --- {{< alert "circle-info" >}} -Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/page/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. +Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/veranstaltungen/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. -Generell sind aber alle, die schonmal im Club waren, herzlich eingeladen am Subbotnik vorbeizukommen und mitzuhelfen. +Generell sind aber alle, die schon mal im Club waren, herzlich eingeladen am Subbotnik vorbeizukommen und mitzuhelfen. {{< /alert >}} From aebd59d283308838cc3e99cadfe7d946b5632880 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 15:12:22 +0200 Subject: [PATCH 4/9] =?UTF-8?q?OpenWrt=20Stammtisch:=20Stelle=20auf=20vier?= =?UTF-8?q?telj=C3=A4hrlichen=20Rhythmus=20um.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Treffen findet ab November 2025 nur noch jeden 3. Mittwoch im Februar, Mai, August und November statt. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- content/veranstaltungen/openwrt.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/veranstaltungen/openwrt.md b/content/veranstaltungen/openwrt.md index c2e66e8..282c130 100644 --- a/content/veranstaltungen/openwrt.md +++ b/content/veranstaltungen/openwrt.md @@ -2,9 +2,9 @@ title: "OpenWrt" subtitle: "OpenWrt Stammtisch" date: 2025-01-08T20:00:00+02:00 -dtstart: 20250115T200000 -dtend: 20250115T230000 -rrule: "FREQ=MONTHLY;BYDAY=3WE;WKST=MO" +dtstart: 20251119T200000 +dtend: 20251119T230000 +rrule: "FREQ=MONTHLY;INTERVAL=3;BYDAY=3WE;WKST=MO" menu: main: parent: "Veranstaltungen" @@ -13,7 +13,7 @@ tag: ["Veranstaltung"] ![Verschiedene Platinen im CCCB](/img/club/42300970272_667569d239.jpg) -**Jeden 3. Mittwoch im Monat ab 20 Uhr** treffen sich die OpenWrt begeisterten und die es werden wollen zum OpenWrt Stammtisch im CCCB. +**Jeden 3. Mittwoch im Februar, Mai, August und November ab 20 Uhr** treffen sich die OpenWrt begeisterten und die es werden wollen zum OpenWrt Stammtisch im CCCB. Das OpenWrt Meetup richtet sich an alle die OpenWrt benutzen oder benutzen wollen aber auch Leute die an OpenWrt entwickeln. From 0b67ad4cfb42c83500b1703c7cd74cffa4ca9ffa Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 16:35:17 +0200 Subject: [PATCH 5/9] =?UTF-8?q?Kalender-UI:=20Ber=C3=BCcksichtige=20INTERV?= =?UTF-8?q?AL=20und=20DTSTART=20bei=20monatlichen=20RRULEs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der JS-RRULE-Parser im Kalender ignorierte bisher INTERVAL=, sodass z.B. FREQ=MONTHLY;INTERVAL=3 als reines monatliches Event angezeigt wurde. Außerdem wurden monatliche Events auch in Monaten vor ihrem DTSTART angezeigt. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- assets/js/calendar.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/js/calendar.js b/assets/js/calendar.js index 5aa9d6b..ffb3c7e 100644 --- a/assets/js/calendar.js +++ b/assets/js/calendar.js @@ -131,6 +131,12 @@ document.addEventListener('DOMContentLoaded', function() { else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) { const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/); if (bydayMatch) { + const intervalMatch = rruleStr.match(/INTERVAL=(\d+)/); + const interval = intervalMatch ? parseInt(intervalMatch[1]) : 1; + const monthsFromStart = (year - startDate.getFullYear()) * 12 + (month - startDate.getMonth()); + if (monthsFromStart < 0 || monthsFromStart % interval !== 0) { + return []; + } const bydays = bydayMatch[1].split(','); const dayMap = { 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0 From c145161bc4e4447123633e92ad34f270f8ab8855 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 16:42:30 +0200 Subject: [PATCH 6/9] =?UTF-8?q?README:=20Erkl=C3=A4re,=20wie=20man=20den?= =?UTF-8?q?=20Kalender=20lokal=20sieht.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `hugo serve` rendert die Tabelle „Nächste Veranstaltungen" auf der Startseite nicht — die wird erst durch `./build.sh` per sed in `public/index.html` eingefügt. Die README beschreibt jetzt den Build-und-Servieren-Workflow inklusive Python-Abhängigkeiten und benötigtem Locale. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 86698bc..3b0af0f 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,24 @@ This is the website of the CCCB. 5. Point your browser to: -To ready your site for upload, run `./build.sh`, which also generates `all.ics` -and adds the calendar table to `index.html`. -Every change you make on the project will be reflected in your browser -as long as `hugo serve` is running. +Every change you make on the project will be reflected in your browser as long +as `hugo serve` is running. + +The *"Nächste Veranstaltungen"* table on the home page is generated by +post-processing in `./build.sh`, not by Hugo, so it is **not** visible under +`hugo serve`. To preview the fully-built site (including the home-page +calendar), or to ready the site for upload, run: + +```shell +./build.sh +python3 -m http.server -d public 1313 +``` + +`build.sh` generates `all.ics` and replaces the `CALENDAR` placeholder in +`index.html` with the upcoming-events table. It depends on Python with the +`icalendar`, `python-dateutil`, and `pytz` packages, plus a `de_DE.UTF-8` +locale (used to format weekday names). Inside `nix develop` these are +provided automatically. To build with *nix*: `nix build '.?submodules=1#production-content'` From 430662fa4465c00b942ea7bd6c5a27c54b6b21d6 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 3 May 2026 15:56:32 +0200 Subject: [PATCH 7/9] =?UTF-8?q?F=C3=BCge=20DI.Day=20als=20Veranstaltung=20?= =?UTF-8?q?hinzu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Berliner Di.Day (Digital Independence Day) findet jeden ersten Sonntag im Monat im Wechsel zwischen CCCB (ungerade Monate) und xHain (gerade Monate) statt. Im Kalender erscheinen nur die CCCB-Termine. Co-Authored-By: Claude Opus 4.7 (1M context) Signed-off-by: Hauke Mehrtens --- content/veranstaltungen/didit.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/veranstaltungen/didit.md diff --git a/content/veranstaltungen/didit.md b/content/veranstaltungen/didit.md new file mode 100644 index 0000000..707fe52 --- /dev/null +++ b/content/veranstaltungen/didit.md @@ -0,0 +1,20 @@ +--- +title: "Di.Day" +subtitle: "Digital Independence Day im CCCB" +date: 2026-01-04T12:23:00+01:00 +dtstart: 20260104T122300 +dtend: 20260104T174200 +rrule: "FREQ=MONTHLY;INTERVAL=2;BYDAY=1SU;WKST=MO" +menu: + main: + parent: "Veranstaltungen" +tag: ["Veranstaltung"] +--- + +**Jeden ersten Sonntag im Monat von 12:23 bis 17:42 Uhr** findet der Berliner Digital Independence Day statt. Der Veranstaltungsort wechselt monatlich zwischen den Räumen des CCCB (in den ungeraden Monaten Januar, März, Mai, …) und dem [xHain](https://x-hain.de/) (in den geraden Monaten). + +Der CCCB und das xHain beteiligen sich gemeinsam an der internationalen [Digital Independence Day](https://diday.org)-Initiative. Diese Graswurzelbewegung ruft dazu auf, zu demokratiefreundlichen digitalen Alternativen zu wechseln, um die Abhängigkeit von großen Technologiekonzernen zu verringern. + +Vor Ort gibt es praktische Hilfe beim Wechsel zu datenschutzfreundlichen Diensten, beim Einrichten von Linux oder beim Betrieb von Smartphones ohne große Tech-Konzerne. Egal ob Anfänger:in oder Fortgeschrittene:r. Kommt vorbei und bringt eure Geräte und Fragen mit. + +Weitere Informationen gibt es im [Ankündigungsbeitrag](https://berlin.ccc.de/post/2026/02/22/berlin-%23didit/). From f82df9e156fccefe27f270b5070adca9e2459e22 Mon Sep 17 00:00:00 2001 From: xengi Date: Sat, 9 May 2026 22:37:55 +0200 Subject: [PATCH 8/9] Update .forgejo/workflows/deploy.yaml Signed-off-by: xengi --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 1b6cc42..edc6f77 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -2,7 +2,7 @@ name: deploy blog on: workflow_dispatch: schedule: - - cron: '0 10 * * 3' # at 10:00 on wednesday + - cron: '0 10 * * *' # at 10:00 on wednesday push: branches: - staging From 8e280c350b1806bbb4e2f1f355bf64ca15e0921b Mon Sep 17 00:00:00 2001 From: xengi Date: Sun, 10 May 2026 15:18:56 +0200 Subject: [PATCH 9/9] Update .forgejo/workflows/deploy.yaml Signed-off-by: xengi --- .forgejo/workflows/deploy.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 414eea3..b0b9a6c 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -1,6 +1,8 @@ name: deploy blog on: workflow_dispatch: + schedule: + - cron: '0 10 * * *' # daily at 10:00 push: branches: - staging