forked from cccb-website-team/www
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9be6287a68 | |||
| df7add59ee | |||
| e93b399854 | |||
| f6b5413d19 | |||
| 2696f0af4e | |||
| b9739ca58c | |||
| facc7d15bf | |||
|
c28f04c6e8 |
|||
| 1dcc6c473b | |||
| 5368e75240 | |||
| b1ff3727c8 | |||
| 4e2c358668 | |||
| e690426b3f | |||
| 7689abaf3e | |||
| bafe2bcb81 | |||
| bac896e60f | |||
|
87e1230301 |
|||
| f839b1b01a | |||
|
2ba5b8cfa8 |
|||
|
96919a7188 |
|||
| dfae28d575 | |||
| c2a2f6e160 | |||
| d3fd2ec8a7 | |||
| c18cce53f8 | |||
| 9cca35810f | |||
| 5f603574e3 | |||
| 3afd801344 | |||
|
|
9b8fbc0106 | ||
|
|
8b4f6d3c95 | ||
| 43ae6bc869 | |||
| c67560bd94 | |||
| 42f999443f | |||
| d8773f4f6f | |||
| ba76280a3f | |||
| e2a5fce03b | |||
|
|
0318a0496a | ||
| 1130d7eef0 | |||
| 64ff74e5d2 | |||
| aaf48ee2f7 | |||
|
|
bf1de4633b | ||
| 11893e9cb1 | |||
| 09b3535525 | |||
| 9363618157 | |||
| 476bf0d6d9 | |||
|
|
175c15be11 | ||
| b88cb169c6 | |||
| c250009473 | |||
|
|
5cbeeab329 | ||
|
|
5f565f769c | ||
|
|
781bda1674 | ||
| 4ad46ab774 | |||
| fe85bebb59 | |||
| 8e280c350b | |||
| 991e9f1622 | |||
| f82df9e156 | |||
| 3261862f52 | |||
| 1cda263641 | |||
| e36b498092 | |||
| 0f27c16b64 | |||
| 8d66fffcf0 | |||
| f744215c13 | |||
| 654e53e8f5 | |||
| e43f3ccda9 | |||
| 4896fee8d2 | |||
| 430662fa44 | |||
| c145161bc4 | |||
| 0b67ad4cfb | |||
| aebd59d283 | |||
| b27b3899ce | |||
| 89f6c9198d | |||
| 74229708d2 | |||
| de5369ac2b | |||
| 417f5c73b7 | |||
| db91e8d7d3 | |||
| fba9457d44 | |||
| 289d8b9642 | |||
| 5242c3c2a3 | |||
| f908c9526f | |||
| 5e9ac72fb0 |
32 changed files with 476 additions and 310 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
1
.gitattributes
vendored
|
|
@ -1 +0,0 @@
|
||||||
*.ics text eol=crlf
|
|
||||||
133
.gitignore
vendored
133
.gitignore
vendored
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
3.11
|
|
||||||
28
README.md
28
README.md
|
|
@ -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).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -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`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
build.sh
7
build.sh
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -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"]
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
15
content/post/2026-07-04-kein-diday-im-cccb/index.md
Normal file
15
content/post/2026-07-04-kein-diday-im-cccb/index.md
Normal 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/).
|
||||||
57
content/post/2026-08-23-aktionstag-ueberwachung/index.md
Normal file
57
content/post/2026-08-23-aktionstag-ueberwachung/index.md
Normal 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)
|
||||||
|
|
@ -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"]
|
||||||
|
|
|
||||||
23
content/veranstaltungen/aktionstag-ueberwachung.md
Normal file
23
content/veranstaltungen/aktionstag-ueberwachung.md
Normal 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
|
||||||
|
|
@ -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 schon mal 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 >}}
|
||||||
|
|
|
||||||
22
content/veranstaltungen/didit.md
Normal file
22
content/veranstaltungen/didit.md
Normal 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).
|
||||||
|
|
@ -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/)
|
||||||
|
|
@ -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"]
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**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.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 schon mal 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
Loading…
Reference in a new issue