Compare commits

...
Author SHA1 Message Date
9be6287a68 Delete .forgejo/workflows/test.yaml 2026-08-22 15:22:52 +02:00
df7add59ee Add .forgejo/workflows/test.yaml 2026-08-21 22:32:15 +02:00
e93b399854 Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-08-21 21:36:22 +02:00
f6b5413d19 Delete .forgejo/workflows/miau.yaml 2026-08-12 02:26:23 +02:00
2696f0af4e python is not needed anymore
Signed-off-by: xengi <cccb-git@xengi.de>
2026-08-12 02:06:53 +02:00
b9739ca58c Merge branch 'production' into staging 2026-08-12 02:05:42 +02:00
facc7d15bf Merge pull request 'switch to ics files; make calendars work; fix some minor issues' (#53) from caldav into staging
Reviewed-on: cccb-website-team/www#53
2026-08-12 02:03:34 +02:00
c28f04c6e8
switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
1dcc6c473b Merge pull request 'staging' (#52) from staging into production
Reviewed-on: cccb-website-team/www#52
2026-08-11 23:32:50 +02:00
5368e75240 Add .forgejo/workflows/miau.yaml 2026-08-11 23:31:40 +02:00
b1ff3727c8 Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-08-11 23:21:32 +02:00
4e2c358668 Merge pull request 'fu github pipelines' (#51) from staging into production
Reviewed-on: cccb-website-team/www#51
2026-08-11 23:15:28 +02:00
e690426b3f Merge branch 'production' into staging 2026-08-11 23:15:14 +02:00
7689abaf3e Update .forgejo/workflows/deploy.yaml 2026-08-11 23:13:51 +02:00
bafe2bcb81 Update .forgejo/workflows/deploy.yaml 2026-08-11 23:05:26 +02:00
bac896e60f Update .forgejo/workflows/deploy.yaml 2026-08-11 22:57:01 +02:00
87e1230301
unfix pipeline 2026-08-11 22:45:17 +02:00
f839b1b01a Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-08-11 22:37:45 +02:00
2ba5b8cfa8
fix pipeline 2026-08-11 22:29:30 +02:00
96919a7188
fix pipeline 2026-08-11 22:20:30 +02:00
dfae28d575 Update .forgejo/workflows/deploy.yaml 2026-08-11 22:10:47 +02:00
c2a2f6e160 Update .forgejo/workflows/deploy.yaml 2026-08-11 22:07:01 +02:00
d3fd2ec8a7 Update .forgejo/workflows/deploy.yaml 2026-08-11 22:05:43 +02:00
c18cce53f8 Update .forgejo/workflows/deploy.yaml 2026-08-11 22:05:13 +02:00
9cca35810f Merge pull request 'staging' (#50) from staging into production
Reviewed-on: cccb-website-team/www#50
2026-08-11 21:42:16 +02:00
5f603574e3 :nerd: minor spelling mistake ❇️
Signed-off-by: aprl <aprl@noreply.git.berlin.ccc.de>
2026-08-11 21:41:01 +02:00
3afd801344 Merge pull request '2026_08_23_Aktionstag_gegen_Ueberwachung' (#49) from aprl/www:2026_08_23_Aktionstag_gegen_Ueberwachung into staging
Reviewed-on: cccb-website-team/www#49
2026-08-11 21:39:38 +02:00
April John
9b8fbc0106 Text natürlicher formuliert, Gedankenstriche entfernt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 21:34:13 +02:00
April John
8b4f6d3c95 Aktionstag gegen Überwachung 2026-08-23: Veranstaltung + Ankündigungspost
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 21:16:19 +02:00
43ae6bc869 Update .forgejo/workflows/deploy.yaml 2026-07-22 22:11:21 +02:00
c67560bd94 Merge pull request 'staging' (#48) from staging into production
Reviewed-on: cccb-website-team/www#48
2026-07-05 00:38:00 +02:00
42f999443f Merge pull request 'diday-end-recurrence' (#47) from hauke/www:diday-end-recurrence into staging
Reviewed-on: cccb-website-team/www#47
2026-07-05 00:18:48 +02:00
d8773f4f6f Weise auf Ausfall des DI.Day am 5. Juli im CCCB hin
Der DI.Day findet am 5. Juli 2026 nicht im Chaos Computer Club Berlin
statt. Der neue Blog-Eintrag informiert darüber und verweist auf die
alternativen Berliner DI.Day-Veranstaltungen (c-base, Stadtschloss
Moabit).

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-07-04 23:41:25 +02:00
ba76280a3f Merge pull request 'staging' (#46) from staging into production
Reviewed-on: cccb-website-team/www#46
2026-07-04 23:40:44 +02:00
e2a5fce03b Merge pull request 'fix typo' (#45) from 2026_07_05_DiDay_im_Club into staging
Reviewed-on: cccb-website-team/www#45
2026-07-04 23:37:47 +02:00
Bruno Ranieri
0318a0496a fix typo 2026-07-04 23:37:19 +02:00
1130d7eef0 Beende die Di.Day-Reihe nach dem 3. Mai 2026
Der Digital Independence Day findet ab Juli 2026 nicht mehr im
zweimonatlichen Turnus statt. Mit UNTIL in der RRULE endet die
Wiederholung nach dem letzten Termin am 3. Mai 2026, sodass keine
künftigen Instanzen mehr in den Kalendern (all.ics,
veranstaltungen/index.ics) und in der Terminübersicht erscheinen.

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-07-04 23:35:50 +02:00
64ff74e5d2 Behebe Terminübersicht bei Wiederholungen mit UNTIL
gen_upcoming.py normalisiert dtstart auf naive lokale Zeit, reichte die
laut RFC 5545 in UTC anzugebende UNTIL-Zeit der RRULE aber tz-aware an
dateutil weiter. Die Mischung aus naivem dtstart und tz-awarer UNTIL
lässt dateutil.rrule mit "RRULE UNTIL values must be specified in UTC
when DTSTART is timezone-aware" abbrechen -- der Build schlägt fehl,
sobald ein wiederkehrender Termin ein UNTIL enthält.

Mit ignoretz=True wird die UNTIL-Zeit ebenfalls naiv behandelt,
konsistent zur restlichen Verarbeitung. Für Termine ohne UNTIL ist das
ein No-Op.

Fixes: 2e3a02af0c ("refacture all the things!")
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-07-04 23:35:50 +02:00
aaf48ee2f7 Merge pull request 'remove did-post and update did-page' (#44) from 2026_07_05_DiDay_im_Club into staging
Reviewed-on: cccb-website-team/www#44
2026-07-04 23:34:43 +02:00
Bruno Ranieri
bf1de4633b remove did-post and update did-page 2026-07-04 23:32:57 +02:00
11893e9cb1 Merge pull request 'staging' (#43) from staging into production
Reviewed-on: cccb-website-team/www#43
2026-07-04 22:27:08 +02:00
09b3535525 Merge pull request 'Behebe Layoutauswahl unter aktuellem Hugo.' (#34) from hauke/www:hugo-tempate-fixes into staging
Reviewed-on: cccb-website-team/www#34
2026-07-04 22:24:32 +02:00
9363618157 Behebe Layoutauswahl unter aktuellem Hugo.
Die layouts/_default/*.calendar.html-Vorlagen werden in Hugo
≥0.158 fälschlich für die HTML-Ausgabe ausgewählt, sodass alle
Sektions- und Einzelseiten VCALENDAR- statt HTML-Inhalt
enthielten. Die Vorlagen waren ohnehin nie funktionsfähig
(Warnung „found no layout file for calendar"); die ICS-Feeds
liefern die abschnittsspezifischen Vorlagen unter
layouts/{veranstaltungen,datengarten,page}/.

list.xml.html bekommt aus demselben Grund die korrekte Endung
.xml.

tools/gen_upcoming.py vergleicht Datumsangaben jetzt
zeitzonenneutral, damit Events mit Z-Suffix keinen TypeError
auslösen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-07-04 22:22:53 +02:00
476bf0d6d9 Merge pull request 'wip 1' (#42) from 2026_07_05_DiDay_im_Club into staging
Reviewed-on: cccb-website-team/www#42
2026-06-19 01:41:55 +02:00
Bruno Ranieri
175c15be11 wip 1 2026-06-19 01:37:32 +02:00
b88cb169c6 Merge pull request 'Post DiDay 2026-07-05' (#41) from 2026_07_05_DiDay_im_Club into staging
Reviewed-on: cccb-website-team/www#41
2026-06-19 01:32:19 +02:00
c250009473 Merge branch 'staging' into 2026_07_05_DiDay_im_Club 2026-06-19 01:29:48 +02:00
Bruno Ranieri
5cbeeab329 figure definition 2026-06-19 01:28:39 +02:00
Bruno Ranieri
5f565f769c Merge branch '2026_07_05_DiDay_im_Club' into staging 2026-06-19 01:15:38 +02:00
Bruno Ranieri
781bda1674 Post DiDay 2026-07-05 2026-06-19 01:07:53 +02:00
4ad46ab774 Merge pull request 'staging' (#39) from staging into production
Reviewed-on: cccb-website-team/www#39
2026-06-18 21:56:00 +02:00
fe85bebb59 Merge remote-tracking branch 'origin/staging' into production 2026-06-18 21:13:25 +02:00
8e280c350b Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-05-10 15:18:56 +02:00
991e9f1622 Merge pull request 'Update .forgejo/workflows/deploy.yaml' (#37) from xengi-patch-1 into production
Reviewed-on: cccb-website-team/www#37
2026-05-09 22:38:30 +02:00
f82df9e156 Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-05-09 22:37:55 +02:00
3261862f52 Merge pull request 'Korrigiere Link auf Club Discordia und Rechtschreibfehler.' (#31) from hauke/www:fix-discordia-links into staging
Reviewed-on: cccb-website-team/www#31
2026-05-07 09:29:47 +02:00
1cda263641 Merge pull request 'Korrigiere Datum des Neujahrsempfangs und entferne kaputte rrule.' (#32) from hauke/www:fix-nje-date into staging
Reviewed-on: cccb-website-team/www#32
2026-05-07 09:29:28 +02:00
e36b498092 Merge pull request 'Füge DI.Day als Veranstaltung hinzu.' (#33) from hauke/www:diday into staging
Reviewed-on: cccb-website-team/www#33
2026-05-07 09:29:02 +02:00
0f27c16b64 Merge pull request 'README: Erkläre, wie man den Kalender lokal sieht.' (#35) from hauke/www:improve-readme into staging
Reviewed-on: cccb-website-team/www#35
2026-05-07 09:27:43 +02:00
8d66fffcf0 Merge branch 'staging' into improve-readme 2026-05-07 09:27:07 +02:00
f744215c13 Merge pull request 'Kalender-UI: Berücksichtige INTERVAL und DTSTART bei monatlichen RRULEs.' (#36) from hauke/www:support-calender-interval into staging
Reviewed-on: cccb-website-team/www#36
2026-05-07 09:26:52 +02:00
654e53e8f5 Merge branch 'staging' into improve-readme 2026-05-07 09:26:10 +02:00
e43f3ccda9 Merge branch 'staging' into support-calender-interval 2026-05-07 09:25:43 +02:00
4896fee8d2 Merge pull request 'OpenWrt Stammtisch: Stelle auf vierteljährlichen Rhythmus um.' (#29) from hauke/www:openwrt-date into staging
Reviewed-on: cccb-website-team/www#29
2026-05-07 09:25:07 +02:00
430662fa44 Füge DI.Day als Veranstaltung hinzu.
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) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-06 02:01:22 +02:00
c145161bc4 README: Erkläre, wie man den Kalender lokal sieht.
`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) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 16:54:15 +02:00
0b67ad4cfb Kalender-UI: Berücksichtige INTERVAL und DTSTART bei monatlichen RRULEs.
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) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 16:53:50 +02:00
aebd59d283 OpenWrt Stammtisch: Stelle auf vierteljährlichen Rhythmus um.
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) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 15:42:35 +02:00
b27b3899ce Korrigiere Link auf Club Discordia und Rechtschreibfehler.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 15:41:51 +02:00
89f6c9198d 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) <noreply@anthropic.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-03 15:41:23 +02:00
74229708d2 Merge pull request 'Füge Datengarten 116 wirklich hinzu.' (#28) from staging into production
Reviewed-on: cccb-website-team/www#28
2026-04-14 17:03:44 +02:00
de5369ac2b Merge pull request 'Änderungsantrag: Füge Datengarten 116 hinzu.' (#27) from staging into production
Reviewed-on: cccb-website-team/www#27
2026-04-14 16:47:26 +02:00
417f5c73b7 Merge pull request 'trying imgur...' (#26) from staging into production
Reviewed-on: cccb-website-team/www#26
2026-03-22 18:48:44 +01:00
db91e8d7d3 Merge pull request 'NJE' (#25) from staging into production
Reviewed-on: cccb-website-team/www#25
2026-03-21 15:57:43 +01:00
fba9457d44 Merge pull request 'removed date from NJE pending plenum' (#24) from staging into production
Reviewed-on: cccb-website-team/www#24
2026-03-10 16:40:55 +01:00
289d8b9642 Merge pull request 'added NJE calendar event' (#23) from staging into production
Reviewed-on: cccb-website-team/www#23
2026-03-06 12:16:33 +01:00
5242c3c2a3 Merge pull request 'added NJE' (#22) from staging into production
Reviewed-on: cccb-website-team/www#22
2026-03-06 11:52:49 +01:00
f908c9526f Update .forgejo/workflows/deploy.yaml
Signed-off-by: xengi <cccb-git@xengi.de>
2026-03-05 17:59:13 +01:00
5e9ac72fb0 Merge pull request 'staging' (#21) from staging into production
Reviewed-on: cccb-website-team/www#21
2026-02-22 20:00:04 +01:00
32 changed files with 476 additions and 310 deletions

View file

@ -9,11 +9,6 @@ charset = utf-8
end_of_line = lf end_of_line = lf
insert_final_newline = true insert_final_newline = true
[*.py] [*.{js,yaml}]
indent_style = space
indent_size = 4
[*.yaml]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2

View file

@ -1,6 +1,9 @@
name: deploy blog name: deploy blog
on: on:
workflow_dispatch: workflow_dispatch:
schedule:
- cron: '0 10 * * *' # daily at 10:00
push: push:
branches: branches:
- staging - staging
@ -8,46 +11,44 @@ on:
jobs: jobs:
deploy: deploy:
runs-on: ubuntu-latest runs-on: alpine-latest
steps: steps:
- name: Install dependencies - name: Install dependencies
run: apk --no-cache add hugo python3 py3-pip git openssh-client rsync run: apk --no-cache add hugo git openssh-client rsync
- name: Check versions - name: Check versions
run: | run: |
cat /etc/os-release cat /etc/os-release
git version git version
hugo version hugo version
python --version rsync --version
ssh -V
- name: Set envionment vars
run: echo "GIT_BRANCH=${{ forgejo.event_name == 'schedule' && 'production' || forgejo.ref_name }}" >> "$FORGEJO_ENV"
- name: Checkout repository - name: Checkout repository
run: | run: |
git clone -b ${{ forgejo.ref_name }} --recursive https://git.berlin.ccc.de/cccb-website-team/www.git . git clone -b $GIT_BRANCH --recursive https://git.berlin.ccc.de/cccb-website-team/www.git .
git status git status
- name: Install Python depenndencies
run: python -m pip install -r requirements.txt --break-system-packages
- name: Render site - name: Render site
run: ./build.sh run: ./build.sh
- name: Setup SSH - name: Setup SSH
env:
SSH_PRIVATE_KEY: ${{ forgejo.ref_name == 'production' && secrets.SSH_PRIVATE_KEY_PRODUCTION || secrets.SSH_PRIVATE_KEY_STAGING }}
run: | run: |
mkdir -p ~/.ssh mkdir -p ~/.ssh
printf "%s" "${{ secrets.KNOWN_HOSTS }}" | base64 -d > ~/.ssh/known_hosts printf "%s" "${{ secrets.KNOWN_HOSTS }}" | base64 -d > ~/.ssh/known_hosts
printf "%s" "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_ed25519 printf "%s" "${{ env.GIT_BRANCH == 'production' && secrets.SSH_PRIVATE_KEY_PRODUCTION || secrets.SSH_PRIVATE_KEY_STAGING }}" | base64 -d > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519
ssh-keygen -f ~/.ssh/id_ed25519 -y > ~/.ssh/id_ed25519.pub ssh-keygen -f ~/.ssh/id_ed25519 -y > ~/.ssh/id_ed25519.pub
cat ~/.ssh/id_ed25519.pub cat ~/.ssh/id_ed25519.pub
- name: Rsync rendered site - name: Rsync rendered site
env:
DEPLOY_DIR: ${{ forgejo.ref_name == 'production' && '/srv/http/www/' || '/srv/http/www-staging/' }}
# TODO: add --delete # TODO: add --delete
run: rsync -var -e 'ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes' ./public/ deploy@www.berlin.ccc.de:$DEPLOY_DIR run: rsync -var -e 'ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes' ./public/ deploy@www.berlin.ccc.de:${{ env.GIT_BRANCH == 'production' && '/srv/http/www/' || '/srv/http/www-staging/' }}
- name: Cleanup - name: Cleanup
if: ${{ always() }} if: ${{ always() }}
run: rm -rf ~/.ssh run: rm -rf ~/.ssh

1
.gitattributes vendored
View file

@ -1 +0,0 @@
*.ics text eol=crlf

133
.gitignore vendored
View file

@ -1,8 +1,9 @@
static/all.ics # Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo,pycharm+all,vim,direnv
# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,hugo,pycharm+all,vim,direnv
### direnv ###
.direnv
.envrc .envrc
*.swp
# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo
# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,hugo
### Hugo ### ### Hugo ###
# Generated files by hugo # Generated files by hugo
@ -43,7 +44,6 @@ hugo.linux
# Icon must end with two \r # Icon must end with two \r
Icon Icon
# Thumbnails # Thumbnails
._* ._*
@ -67,6 +67,114 @@ Temporary Items
# iCloud generated files # iCloud generated files
*.icloud *.icloud
### PyCharm+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### PyCharm+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
### Windows ### ### Windows ###
# Windows thumbnail cache files # Windows thumbnail cache files
Thumbs.db Thumbs.db
@ -93,17 +201,4 @@ $RECYCLE.BIN/
# Windows shortcuts # Windows shortcuts
*.lnk *.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo # End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo,pycharm+all,vim,direnv
# NixOS:
.envrc
shell.nix
.direnv
# Python
.venv
# murmeldin
overview.md
/result

View file

@ -1 +0,0 @@
3.11

View file

@ -27,10 +27,20 @@ This is the website of the CCCB.
5. Point your browser to: <http://localhost:1313/> 5. Point your browser to: <http://localhost:1313/>
To ready your site for upload, run `./build.sh`, which also generates `all.ics` Every change you make on the project will be reflected in your browser as long as `hugo serve` is running.
and adds the calendar table to `index.html`.
Every change you make on the project will be reflected in your browser The *"Nächste Veranstaltungen"* table on the home page is generated by post-processing in `./build.sh`, not by Hugo, so
as long as `hugo serve` is running. 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` 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'` To build with *nix*: `nix build '.?submodules=1#production-content'`
@ -41,7 +51,8 @@ To build with *nix*: `nix build '.?submodules=1#production-content'`
3. Commit (and push) your change. 3. Commit (and push) your change.
4. ~~GitHub Actions is running the release workflow.~~ 4. ~~GitHub Actions is running the release workflow.~~
- If successful, check [Staging Website](https://staging.berlin.ccc.de/) if change is correct. - If successful, check [Staging Website](https://staging.berlin.ccc.de/) if change is correct.
5. Create merge request to merge changes from `staging` to `production` branch. Ask somebody to check merge request or if small change, merge yourself. 5. Create a merge request to merge changes from `staging` to `production` branch. Ask somebody to check merge request or
if small change, merge yourself.
6. ~~GitHub Actions is running the release workflow.~~ 6. ~~GitHub Actions is running the release workflow.~~
- If successfull, check [Website](https://berlin.ccc.de/) if change is correct. - If successfull, check [Website](https://berlin.ccc.de/) if change is correct.
7. Profit! 7. Profit!
@ -50,9 +61,12 @@ To build with *nix*: `nix build '.?submodules=1#production-content'`
- After entering the shell with `nix develop`, hugo is available and `hugo serve` should work - After entering the shell with `nix develop`, hugo is available and `hugo serve` should work
- Python including required packages will be available, so the `build.sh` should work without a venv - Python including required packages will be available, so the `build.sh` should work without a venv
- You can build the staging and production builds with `nix build .#staging-content` and `nix build .#production-content` - You can build the staging and production builds with `nix build .#staging-content` and
- Do not update the nixpkgs branch - 25.05 contains a newer hugo version that is incompatible with the theme (last checked June 2025) `nix build .#production-content`
- Do not update the nixpkgs branch - 25.05 contains a newer hugo version that is incompatible with the theme (last
checked June 2025)
--- ---
Made with ❤️ and [Hugo](https://gohugo.io). Made with ❤️ and [Hugo](https://gohugo.io).

View file

@ -131,6 +131,12 @@ document.addEventListener('DOMContentLoaded', function() {
else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) { else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) {
const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/); const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/);
if (bydayMatch) { 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 bydays = bydayMatch[1].split(',');
const dayMap = { const dayMap = {
'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0
@ -425,7 +431,7 @@ document.addEventListener('DOMContentLoaded', function() {
} }
// ICS-Datei abrufen und Events verarbeiten // ICS-Datei abrufen und Events verarbeiten
fetch('/all.ics') fetch('/calendars/all.ics')
.then(response => response.text()) .then(response => response.text())
.then(data => { .then(data => {
events = parseICS(data); events = parseICS(data);
@ -436,9 +442,7 @@ document.addEventListener('DOMContentLoaded', function() {
currentMonth = today.getMonth(); currentMonth = today.getMonth();
// Process events for current month // Process events for current month
updateEventsForMonth(currentYear, currentMonth);
updateEventsForMonth(currentYear, currentMonth);
}) })
.catch(err => console.error('Fehler beim Laden der ICS-Datei:', err)); .catch(err => console.error('Fehler beim Laden der ICS-Datei:', err));
})(); })();

View file

@ -9,11 +9,11 @@ function timeDistanceDE(pastDate) {
const hours = Math.floor(minutes / 60) const hours = Math.floor(minutes / 60)
const days = Math.floor(hours / 24) const days = Math.floor(hours / 24)
if (days = 1) return `since ${days}d` if (days === 1) return `since ${days}d`
if (days > 1) return `since ${days}d` if (days > 1) return `since ${days}d`
if (hours = 1) return `since ${hours}h` if (hours === 1) return `since ${hours}h`
if (hours > 1) return `since ${hours}h` if (hours > 1) return `since ${hours}h`
if (minutes = 1) return `since ${minutes}min` if (minutes === 1) return `since ${minutes}min`
if (minutes > 1) return `since ${minutes}min` if (minutes > 1) return `since ${minutes}min`
return `gerade eben` return `gerade eben`
} }

View file

@ -1,12 +1,7 @@
#!/bin/sh #!/bin/sh
set -e set -ex
set -x
rm -rf public/ # delete old generated files rm -rf public/ # delete old generated files
hugo $(cat .hugo-params) hugo $(cat .hugo-params)
./tools/merge_cals.py
upcoming="$(tools/gen_upcoming.py static/all.ics 20 5 | tr '\n' ' ')"
cp static/all.ics public/all.ics
sed -i "s#CALENDAR#$upcoming#g" public/index.html

View file

@ -28,7 +28,7 @@ filename = "sitemap.xml"
priority = 0.5 priority = 0.5
[permalinks] [permalinks]
post = "/post/:year/:month/:day/:title/" post = "/post/:year/:month/:day/:slug/"
[outputs] [outputs]
home = ["html", "rss", "json"] home = ["html", "rss", "json"]

View file

@ -25,6 +25,9 @@ description: "Startseite CCCB mit Kurzkalender"
### Nächste Veranstaltungen ### Nächste Veranstaltungen
CALENDAR <table id="upcoming" class="table table-condensed">
</table>
Weitere Termine findest du im [Veranstaltungskalender](/verein/calendar/). Weitere Termine findest du im [Veranstaltungskalender](/verein/calendar/).
<script type="module" src="/js/upcoming.js"></script>

View file

@ -0,0 +1,15 @@
---
title: "Kein DI.Day am 5. Juli im CCCB"
date: 2026-07-04T12:00:00+02:00
showHero: false
tags: ["di.day", "Ankündigung"]
---
**Kurzfristige Änderung:** Der [Digital Independence Day](/veranstaltungen/didit/) findet am **Sonntag, dem 5. Juli 2026, nicht** im Chaos Computer Club Berlin (Marienstraße 11) statt.
Wer trotzdem am DI.Day teilnehmen und den Weg in die digitale Unabhängigkeit weitergehen möchte, ist herzlich bei den anderen Berliner Veranstaltungen willkommen:
- [„Let's DID it!" mit Linux & Sommerfest der BELUG](https://f.termine.di.day/events/ee48fdda-a134-4f27-932e-b87c7a9fa24a) in der c-base
- [DI.Day im Stadtschloss Moabit](https://f.termine.di.day/events/41ab17fe-05ab-4308-9abb-d38d9485fd4f)
Weitere Termine und Orte findet ihr wie immer auf [termine.di.day](https://termine.di.day/).

View file

@ -0,0 +1,57 @@
---
title: "Aktionstag gegen Überwachung"
date: 2026-08-11T12:00:00+02:00
showHero: false
tags: ["Überwachung", "Ankündigung"]
---
### Was?
KI-gestützte Überwachungskameras sollen jetzt auch nach Berlin kommen.
Das [im Dezember 2025 verschärfte Berliner Polizeigesetz](https://www.beck-aktuell.de/heute-im-recht/rechtspolitik-gesetzgebung/berlin-verschaerfung-polizeigesetz-2025-12-04) erlaubt der Polizei, solche Kameras an öffentlichen Plätzen aufzuhängen. Erste Versuche laufen schon.
Darüber wollen wir reden.
Deshalb laden wir am 23. August zum Aktionstag gegen Überwachung in den Club ein.
### Worum geht es?
Die KI-Videoüberwachung soll [ein Jahr lang an sechs sogenannten „kriminalitätsbelasteten Orten" getestet werden](https://taz.de/KI-Videoueberwachung-in-Berlin/!6160851/), darunter am Alexanderplatz, am Roten Rathaus und am Alten Stadthaus. Vor dem Abgeordnetenhaus kommt mobile Technik dazu.
Diese Kameras zeichnen nicht nur auf. Sogenannte Verhaltensscanner sollen automatisch melden, wenn sich jemand „auffällig" verhält. Trainiert wird das Ganze [mit den Daten von Passant:innen, die einfach nur vorbeilaufen](https://netzpolitik.org/2026/ki-gestuetzte-videoueberwachung-in-berlin-so-wehrt-man-sich-gegen-verhaltensscanner/).
In Mannheim läuft so ein System seit 2018, in Hamburg seit 2023. Dort hält die Software [eine Umarmung schon mal für einen Ringkampf](https://taz.de/Kuenstliche-Intelligenz-im-Einsatz/!6099559/). In Mannheim gab es laut Polizei [jeden Tag Fehlalarme im „niedrigen zweistelligen Bereich"](https://netzpolitik.org/2023/intelligente-videoueberwachung-polizei-hamburg-will-ab-juli-verhalten-automatisch-scannen/). Wer sich hinlegt oder taumelt, löst Alarm aus. Was überhaupt als „auffällig" gilt, entscheidet der Algorithmus. Warum das [Menschen diskriminieren kann, erklärt der Verfassungsblog](https://verfassungsblog.de/berlin-asog-novelle-kbos/).
Die Kameras sind außerdem nur ein Teil der Gesetzesänderung. Das neue ASOG erlaubt auch [längere Datenspeicherung und weitere Überwachungsbefugnisse](https://www.telepolis.de/article/Berliner-Polizeigesetz-Koalition-weitet-Ueberwachung-aus-11083345.html). Die Berliner Datenschutzbeauftragte hat das kritisiert. Wir auch: Der CCC war dazu bereits im Innenausschuss des Abgeordnetenhauses.
Ihr braucht kein Vorwissen. Kommt einfach vorbei.
### Programm
**13:00 Uhr: Open Space** \
Wir fangen mit offenem Austausch an. Bringt eure Fragen mit, egal ob ihr euch schon lange mit dem Thema beschäftigt oder gerade zum ersten Mal davon hört.
**15:00 Uhr: Vortrag** \
Was in Berlin geplant ist, was die Technik wirklich kann und was das für uns alle heißt.
**16:00 Uhr: Podiumsdiskussion** \
Danach diskutieren wir auf dem Podium, wie wir uns gegen die KI-Videoüberwachung wehren können. Fragen aus dem Publikum sind ausdrücklich erwünscht.
### Wo?
📍 **Chaos Computer Club Berlin, Marienstraße 11, 10117 Berlin**
🚈 Etwa 5 Minuten ab dem S-Bahnhof Friedrichstraße
### Wann?
**📆 Sonntag, 23. August 2026** \
**ab 13:00 Uhr**
### Zum Weiterlesen
- taz: [KI-Videoüberwachung in Berlin: Verhaltensscanner bald auch vor dem Abgeordnetenhaus](https://taz.de/KI-Videoueberwachung-in-Berlin/!6160851/)
- netzpolitik.org: [So wehrt man sich gegen Verhaltensscanner](https://netzpolitik.org/2026/ki-gestuetzte-videoueberwachung-in-berlin-so-wehrt-man-sich-gegen-verhaltensscanner/) (mit Tools und Material für die Zivilgesellschaft)
- Verfassungsblog: [„Try harder hilft selten": die ASOG-Novelle verfassungsrechtlich eingeordnet](https://verfassungsblog.de/berlin-asog-novelle-kbos/)
- taz: [Reform des Berliner Polizeigesetzes: Riskantes Manöver](https://taz.de/Reform-des-Berliner-Polizeigesetzes/!6096087/)
- Telepolis: [Berliner Polizeigesetz: Koalition weitet Überwachung aus](https://www.telepolis.de/article/Berliner-Polizeigesetz-Koalition-weitet-Ueberwachung-aus-11083345.html)
- beck-aktuell: [Kameras und KI-Einsatz: Berlin verschärft Polizeigesetz](https://www.beck-aktuell.de/heute-im-recht/rechtspolitik-gesetzgebung/berlin-verschaerfung-polizeigesetz-2025-12-04)

View file

@ -1,5 +1,6 @@
--- ---
title: "Der Neujahresempfang 2026 #NJE26" title: "Der Neujahresempfang 2026 #NJE26"
slug: "neujahresempfang-2026"
date: 2026-03-05T12:00:00+01:00 date: 2026-03-05T12:00:00+01:00
showHero: false showHero: false
tags: ["NJE", "Ankündigung"] tags: ["NJE", "Ankündigung"]

View file

@ -0,0 +1,23 @@
---
title: "Aktionstag gegen Überwachung"
subtitle: "KI-Überwachungskameras in Berlin: Vortrag, Podium und Austausch"
date: 2026-08-11T12:00:00+02:00
dtstart: 20260823T130000
dtend: 20260823T180000
menu:
main:
parent: "Veranstaltungen"
tag: ["Veranstaltung"]
---
**Am 23. August lädt der Chaos Computer Club Berlin zum Aktionstag gegen Überwachung.**
KI-gestützte Überwachungskameras sollen jetzt auch nach Berlin kommen. Das neue Berliner Polizeigesetz erlaubt es, sie an öffentlichen Plätzen aufzuhängen. Erste Versuche laufen schon, Verhaltenstracking inklusive. Darüber wollen wir reden.
Das Programm:
- **13:00 Uhr:** Open Space, offener Austausch untereinander
- **15:00 Uhr:** Vortrag zu den KI-Kameras und dem neuen Berliner Polizeigesetz
- **16:00 Uhr:** Podiumsdiskussion
📍 Chaos Computer Club Berlin, Marienstraße 11, 10117 Berlin

View file

@ -26,7 +26,7 @@ draft: true
{{< alert "circle-info" >}} {{< 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 >}} {{< /alert >}}

View file

@ -0,0 +1,22 @@
---
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;UNTIL=20260503T235959Z"
menu:
main:
parent: "Veranstaltungen"
tag: ["Veranstaltung"]
---
In Berlin wird der [Digital Independence Day](https://diday.org) an verschiedenen Orten von einer breiten Zahl von Initiativen getragen.
Der CCCB beteiligt sich an dieser Graswurzelbewegung und ruft dazu auf, zu demokratiefreundlichen digitalen Alternativen zu wechseln, um die Abhängigkeit von großen Technologiekonzernen zu verringern.
Am ersten Sonntag im Monat 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.
Die Aktiven im CCCB unterstützen dabei auf verschiedenen Veranstaltungen in Berlin.
Weitere Informationen zu konkreten Veranstaltungen gibt es im Terminkalender unter [https://events.diday.org/](https://events.diday.org/) bzw [https://events.diday.org/organisation/cccb](https://events.diday.org/organisation/cccb).

View file

@ -2,13 +2,12 @@
title: "Neujahresempfang" title: "Neujahresempfang"
subtitle: "#NJE 26" subtitle: "#NJE 26"
date: 2025-03-05T18:00:00+02:00 date: 2025-03-05T18:00:00+02:00
dtstart: 20250523T180000 dtstart: 20260523T180000
dtend: 20250524T100000 dtend: 20260524T100000
rrule: "FREQ=MOTHLY;BYDAY=4SA;WKST=MO"
menu: menu:
main: main:
parent: "Veranstaltungen" parent: "Veranstaltungen"
tag: ["Veranstaltung"] tag: ["Veranstaltung"]
--- ---
Am 23. Mai lädt der Chaos Computer Club Berlin zum Neujahresempfang. [Hier geht es zur Infoseite!](https://berlin.ccc.de/post/2026/03/05/der-neujahresempfang-2026-%23nje26/) Am 23. Mai lädt der Chaos Computer Club Berlin zum Neujahresempfang. [Hier geht es zur Infoseite!](https://berlin.ccc.de/post/2026/03/05/neujahresempfang-2026/)

View file

@ -2,9 +2,9 @@
title: "OpenWrt" title: "OpenWrt"
subtitle: "OpenWrt Stammtisch" subtitle: "OpenWrt Stammtisch"
date: 2025-01-08T20:00:00+02:00 date: 2025-01-08T20:00:00+02:00
dtstart: 20250115T200000 dtstart: 20251119T200000
dtend: 20250115T230000 dtend: 20251119T230000
rrule: "FREQ=MONTHLY;BYDAY=3WE;WKST=MO" rrule: "FREQ=MONTHLY;INTERVAL=3;BYDAY=3WE;WKST=MO"
menu: menu:
main: main:
parent: "Veranstaltungen" parent: "Veranstaltungen"
@ -13,7 +13,7 @@ tag: ["Veranstaltung"]
![Verschiedene Platinen im CCCB](/img/club/42300970272_667569d239.jpg) ![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. Das OpenWrt Meetup richtet sich an alle die OpenWrt benutzen oder benutzen wollen aber auch Leute die an OpenWrt entwickeln.

View file

@ -16,7 +16,7 @@ tag: ["Veranstaltung"]
**Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.** **Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.**
{{< alert "circle-info" >}} {{< 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 >}} {{< /alert >}}

Some files were not shown because too many files have changed in this diff Show more