Merge branch 'staging' into production

This commit is contained in:
Marek Krug 2025-03-02 00:51:18 +01:00
commit 9a92b873da
87 changed files with 1326 additions and 95 deletions

1
.forgejo/CODEOWNERS Normal file
View file

@ -0,0 +1 @@
* @cccb/web

28
.forgejo/dependabot.yml Normal file
View file

@ -0,0 +1,28 @@
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "staging"
schedule:
interval: "weekly"
commit-message:
prefix: "gh-action"
labels:
- "gh-action"
- "dependencies"
reviewers:
- "cccb/web"
- package-ecosystem: "pip"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
commit-message:
prefix: "python"
labels:
- "python"
- "dependencies"
reviewers:
- "cccb/web"

View file

@ -0,0 +1,73 @@
name: Release website
on:
schedule:
- cron: "0 4 * * *"
push:
branches:
- staging
- production
pull_request:
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: 'latest'
- name: Build pages
run: hugo $(cat .hugo-params)
- name: Add de_DE.UTF-8 locale
run: |
sudo apt-get update
sudo apt-get -y install locales
sudo locale-gen de_DE.UTF-8
- name: Setup Python
uses: actions/setup-python@v5
with:
cache: 'pip'
- name: Install dependencies
run: |
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
- name: Generate calendars
run: python tools/merge_cals.py
- name: Copy calendar to output dir
run: cp static/all.ics public/all.ics
- name: Update homepage with latest event
run: upcoming="$(python tools/gen_upcoming.py static/all.ics 20 5 | tr '\n' ' ')" && sed -i "s#CALENDAR#$upcoming#g" public/index.html
- name: Generate timestamp
run: echo "timestamp=$(date -u +'%Y-%m-%dT%H%M%SZ')" >> $GITHUB_ENV
- name: Create Release Archive
uses: thedoctor0/zip-release@0.7.6
with:
type: zip
filename: ../release-${{ github.ref_name }}-${{ env.timestamp }}.zip
directory: public
- name: Create Release
uses: ncipollo/release-action@v1.16.0
with:
tag: ${{ github.ref_name }}-${{ env.timestamp }}
name: Website ${{ github.ref_name }} version ${{ env.timestamp }}
body: Website ${{ github.ref_name }} version ${{ env.timestamp }}
artifacts: release-${{ github.ref_name }}-${{ env.timestamp }}.zip
token: ${{ secrets.GITEA_TOKEN }}

View file

@ -74,7 +74,7 @@ jobs:
needs: [ calendar ]
runs-on: ubuntu-latest
environment: staging
if: github.ref == 'refs/heads/staging' && github.event_name == 'push'
if: (github.ref == 'refs/heads/staging' && github.event_name == 'push') || github.event_name == 'schedule'
steps:
- name: Download pages
uses: actions/download-artifact@v4
@ -90,7 +90,7 @@ jobs:
filename: ../release-staging-${{ env.timestamp }}.zip
directory: public
- name: Create Release
uses: ncipollo/release-action@v1.14.0
uses: ncipollo/release-action@v1.16.0
with:
tag: staging-${{ env.timestamp }}
name: Website staging version ${{ env.timestamp }}
@ -102,7 +102,7 @@ jobs:
needs: [ calendar ]
runs-on: ubuntu-latest
environment: production
if: github.ref == 'refs/heads/production' && github.event_name == 'push'
if: (github.ref == 'refs/heads/production' && github.event_name == 'push') || github.event_name == 'schedule'
steps:
- name: Download pages
uses: actions/download-artifact@v4
@ -118,7 +118,7 @@ jobs:
filename: ../release-production-${{ env.timestamp }}.zip
directory: public
- name: Create Release
uses: ncipollo/release-action@v1.14.0
uses: ncipollo/release-action@v1.16.0
with:
makeLatest: true
tag: production-${{ env.timestamp }}
@ -126,3 +126,4 @@ jobs:
body: Website production version ${{ env.timestamp }}
artifacts: release-production-${{ env.timestamp }}.zip
token: ${{ secrets.GITHUB_TOKEN }}

11
.gitignore vendored
View file

@ -40,7 +40,8 @@ hugo.linux
.LSOverride
# Icon must end with two \r
Icon
Icon
# Thumbnails
._*
@ -92,3 +93,11 @@ $RECYCLE.BIN/
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo
# NixOS:
.envrc
shell.nix
.direnv
# Python
.venv

4
.gitmodules vendored
View file

@ -1,3 +1,7 @@
[submodule "beautifulhugo"]
path = themes/beautifulhugo
url = https://github.com/cccb/beautifulhugo.git
[submodule "themes/blowfish"]
path = themes/blowfish
url = https://github.com/nunocoracao/blowfish.git
branch = main

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

View file

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -4,5 +4,4 @@ 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
sed -i "s#CALENDAR#$upcoming#g" public/index.html

100
config/_default/hugo.toml Normal file
View file

@ -0,0 +1,100 @@
# -- Site Configuration --
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/getting-started/
theme = "blowfish" # UNCOMMENT THIS LINE
baseURL = "https://berlin.ccc.de/"
defaultContentLanguage = "de"
RelativeURLs = true
CanonifyURLs = true
pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
enableRobotsTXT = true
summaryLength = 0
buildDrafts = false
buildFuture = false
enableEmoji = true
# googleAnalytics = "G-XXXXXXXXX"
[pagination]
pagerSize = 100
[imaging]
anchor = 'Center'
[taxonomies]
tag = "tags"
category = "categories"
author = "authors"
series = "series"
[sitemap]
changefreq = 'daily'
filename = 'sitemap.xml'
priority = 0.5
[permalinks]
post = "/post/:year/:month/:day/:title/"
[outputs]
home = ["HTML", "RSS", "JSON"]
section = ["HTML", "Calendar", "RSS", "XML"]
page = ["HTML", "Calendar"]
# Output Formats Configuration
[outputFormats.Calendar]
mediaType = "text/calendar"
baseName = "index"
isPlainText = true
notAlternative = true
[outputFormats.XML]
mediaType = "application/xml"
baseName = "index"
isPlainText = true
[outputFormats.RSS]
mediaType = "application/rss+xml"
# Media Types Configuration
[mediaTypes]
[mediaTypes."text/calendar"]
suffixes = ["ics"]
[mediaTypes."application/rss"]
suffixes = ["rss"]
[mediaTypes."application/xml"]
suffixes = ["xml"]
[related]
threshold = 0
toLower = false
[[related.indices]]
name = "tags"
weight = 100
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "series"
weight = 50
[[related.indices]]
name = "authors"
weight = 20
[[related.indices]]
name = "date"
weight = 10
[[related.indices]]
applyFilter = false
name = 'fragmentrefs'
type = 'fragments'
weight = 10

View file

@ -0,0 +1,77 @@
disabled = false
languageCode = "de"
languageName = "Deutsch"
weight = 1
title = "Chaos Computer Club Berlin"
[params]
displayName = "DE"
isoCode = "de"
rtl = false
dateFormat = "January 2, 2006"
DateForm = "30.12.2006"
logo = "img/logo.png"
# secondaryLogo = "img/avatar-CCCB-Logo.png"
description = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
copyright = "CCC-BY"
selfHosted = true
mainSections = ["post", "datengarten"]
[params.author]
# name = "Your name here"
email = "mail2025@berlin.ccc.de"
image = "img/logo.png"
# imageQuality = 96
headline = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
# bio = "A little bit about you"
links = [
{ email = "mailto:mail2025@berlin.ccc.de" },
# { link = "https://link-to-some-website.com/" },
# { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" },
# { apple = "https://www.apple.com" },
# { blogger = "https://username.blogspot.com/" },
# { bluesky = "https://bsky.app/profile/username" },
# { codepen = "https://codepen.io/username" },
# { dev = "https://dev.to/username" },
# { discord = "https://discord.gg/invitecode" },
# { dribbble = "https://dribbble.com/username" },
# { facebook = "https://facebook.com/username" },
# { flickr = "https://www.flickr.com/photos/username/" },
# { foursquare = "https://foursquare.com/username" },
{ github = "https://github.com/cccb/" },
{ gitlab = "https://git.berlin.ccc.de/explore/repos" },
# { google = "https://www.google.com/" },
# { hashnode = "https://username.hashnode.dev" },
# { instagram = "https://instagram.com/username" },
# { itch-io = "https://username.itch.io" },
# { keybase = "https://keybase.io/username" },
# { kickstarter = "https://www.kickstarter.com/profile/username" },
# { lastfm = "https://lastfm.com/user/username" },
# { linkedin = "https://linkedin.com/in/username" },
{ mastodon = "https://chaos.social/@clubdiscordia" },
# { irc = "https://webirc.hackint.org/#ircs://irc.hackint.org/#cccb" },
# { medium = "https://medium.com/username" },
# { microsoft = "https://www.microsoft.com/" },
# { orcid = "https://orcid.org/userid" },
# { patreon = "https://www.patreon.com/username" },
# { pinterest = "https://pinterest.com/username" },
# { reddit = "https://reddit.com/user/username" },
# { researchgate = "https://www.researchgate.net/profile/username" },
# { slack = "https://workspace.url/team/userid" },
# { snapchat = "https://snapchat.com/add/username" },
# { soundcloud = "https://soundcloud.com/username" },
# { spotify = "https://open.spotify.com/user/userid" },
# { stack-overflow = "https://stackoverflow.com/users/userid/username" },
# { steam = "https://steamcommunity.com/profiles/userid" },
# { telegram = "https://t.me/username" },
# { threads = "https://www.threads.net/@username" },
# { tiktok = "https://tiktok.com/@username" },
# { tumblr = "https://username.tumblr.com" },
# { twitch = "https://twitch.tv/username" },
# { twitter = "https://twitter.com/username" },
# { x-twitter = "https://twitter.com/username" },
# { whatsapp = "https://wa.me/phone-number" },
# { youtube = "https://youtube.com/username" },
# { ko-fi = "https://ko-fi.com/username" },
# { codeberg = "https://codeberg.org/username"},
]

View file

@ -0,0 +1,13 @@
# -- Markup --
# These settings are required for the theme to function.
[goldmark]
[goldmark.renderer]
unsafe = true
[highlight]
noClasses = false
[tableOfContents]
startLevel = 2
endLevel = 4

View file

@ -0,0 +1,61 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
#[[main]]
# name = "Blog"
# pageRef = "posts"
# weight = 10
[[main]]
name = "Verein"
pageRef = "verein"
weight = 200
[[main]]
name = "Veranstaltungen"
pageRef = "veranstaltungen"
weight = 300
[[main]]
name = "Mitgliedschaft"
pageRef = "mitgliedschaft"
weight = 400
[[main]]
name = "News"
pageRef = "post"
weight = 500
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "Tags"
pageRef = "tags"
weight = 10
[[footer]]
name = "Categories"
pageRef = "categories"
weight = 20
[[footer]]
name = "Impressum"
pageRef = "impressum"
weight = 500
[[footer]]
name = "Privacy"
pageRef = "datenschutz"
weight = 600

172
config/_default/params.toml Normal file
View file

@ -0,0 +1,172 @@
# -- Theme Options --
# These options control how the theme functions and allow you to
# customise the display of your website.
#
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/configuration/#theme-parameters
colorScheme = "fira" # "congo"
defaultAppearance = "dark" # valid options: light or dark
autoSwitchAppearance = false
enableSearch = true
enableCodeCopy = false
replyByEmail = false
# mainSections = ["section1", "section2"]
# robots = ""
[params]
disableImageOptimization = false
disableTextInHeader = false
backgroundImageWidth = 1200
# defaultBackgroundImage = "/img/cccb-im-winter.jpg" # used as default for background images
defaultFeaturedImage = "/img/avatar-CCCB-Logo.png" # used as default for featured images in all articles
# highlightCurrentMenuArea = true
# smartTOC = true
# smartTOCHideUnfocusedChildren = true
giteaDefaultServer = "https://git.fsfe.org"
forgejoDefaultServer = "https://v8.next.forgejo.org"
[header]
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
[footer]
showMenu = true
showCopyright = true
showThemeAttribution = true
showAppearanceSwitcher = true
showScrollToTop = true
[homepage]
layout = "background" # valid options: page, profile, hero, card, background, custom
homepageImage = "img/cccb-im-winter.jpg" # used in: hero, and card
showRecent = true
showRecentItems = 8
showMoreLink = true
showMoreLinkDest = "/post/"
cardView = false
cardViewScreenWidth = false
layoutBackgroundBlur = false # only used when layout equals background
[article]
showDate = true
showViews = false
showLikes = false
showDateOnlyInArticle = false
showDateUpdated = true
showAuthor = false
showAuthorBottom = true
showHero = false
# heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = true
showDraftLabel = true
showEdit = true
editURL = "https://github.com/cccb/www/tree/staging/content/"
editAppendPath = true
seriesOpened = false
showHeadingAnchors = true
showPagination = false
invertPagination = false
showReadingTime = true
showTableOfContents = true
# showRelatedContent = false
# relatedContentLimit = 3
showTaxonomies = true
showAuthorsBadges = false
showWordCount = true
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram"]
showZenMode = false
[list]
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = false
showSummary = false
showViews = false
showLikes = false
showTableOfContents = false
showCards = false
orderByWeight = false
groupByYear = true
cardView = false
cardViewScreenWidth = false
constrainItemsWidth = false
[sitemap]
excludedKinds = ["taxonomy", "term"]
[taxonomy]
showTermCount = true
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = false
cardView = false
category = "categories"
series = "series"
tag = "tags"
[term]
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = true
groupByYear = false
cardView = false
cardViewScreenWidth = false
[firebase]
# apiKey = "XXXXXX"
# authDomain = "XXXXXX"
# projectId = "XXXXXX"
# storageBucket = "XXXXXX"
# messagingSenderId = "XXXXXX"
# appId = "XXXXXX"
# measurementId = "XXXXXX"
[fathomAnalytics]
# site = "ABC12345"
# domain = "llama.yoursite.com"
[umamiAnalytics]
# websiteid = "ABC12345"
# domain = "llama.yoursite.com"
# dataDomains = "yoursite.com,yoursite2.com"
# scriptName = ""
# enableTrackEvent = true
[selineAnalytics]
# token = "XXXXXX"
# enableTrackEvent = true
[buymeacoffee]
# identifier = ""
# globalWidget = true
# globalWidgetMessage = "Hello"
# globalWidgetColor = "#FFDD00"
# globalWidgetPosition = "Right"
[verification]
# google = ""
# bing = ""
# pinterest = ""
# yandex = ""
# fediverse = ""
[rssnext]
# feedId = ""
# userId = ""

View file

@ -0,0 +1,56 @@
---
categories: ["Datengarten"]
tags: ["Open Politics", "Political Science", "Engineering", "Machine Learning"]
series: "Datengarten"
title: "Datengarten 111"
no: 111
subtitle: "Open Source Political Intelligence - What is it and why does it matter?"
speaker: "Jim-Vincent Wagner"
date: 2025-01-23T19:00:00+01:00
event:
start: 2025-02-05T19:00:00+01:00
end: 2025-02-05T20:30:00+01:00
location: CCCB
language: en
streaming: true
recording: https://streaming.media.ccc.de/datengarten/cccb
---
> 🇬🇧 English Version
#### **Open Politics Collaborative Tools for Open Political Data**
Politics is complex, and making sense of it requires access to good information. The **Open Politics Project **is working on and operationalising open-source tools that help analyse political structures, decisions, and developments—so that journalists, researchers, activists, and engaged citizens can better understand and interpret them.
Our goal is to make political data more accessible and useful. We bring together existing methods from data analysis, political science, and AI, while also experimenting with new approaches—always in the open, documented, and improved through collaboration. From user-friendly visualisations to structured databases, we explore ways to work with political data in a way thats practical and meaningful.
We call it: **Open Source Political Intelligence**
At *Datengarten *on **February 5, 2025**, well share our latest progress, discuss challenges, and give a behind-the-scenes look at our work.
📍**Chaos Computer Club Berlin (CCCB), Marienstraße 11, 10117 Berlin**
Lets talk about how we can make political information more open and useful for everyone.
🔗 Open Politics Project: https://open-politics.org/about, https://github.com/open-politics/open-politics, https://github.com/open-politics/opol
***
> 🇧🇪 German Version
#### **Open Politics Offene Werkzeuge für politische Daten**
Politik ist oft schwer durchschaubar aber mit den richtigen Werkzeugen lassen sich Strukturen, Entscheidungen und Entwicklungen besser verstehen. Das **Open Politics Project **entwickelt und operationalisiert Open-Source-Methoden zur Analyse politischer Daten, um Journalist:innen, Forschenden, Aktivist:innen und interessierten Bürger:innen den Zugang zu politischen Informationen zu erleichtern.
Unser Ziel ist es, politische Daten verständlich und nutzbar zu machen. Wir verbinden bestehende Ansätze aus Datenanalyse, Politikwissenschaft und KI, probieren neue Methoden aus und dokumentieren alles offen, um es gemeinsam weiterzuentwickeln. Von interaktiven Visualisierungen bis zu strukturierten Datensammlungen wir experimentieren mit Wegen, politische Informationen alltagstauglicher zu gestalten.
We call it: **Open Source Political Intelligence**
Beim *Datengarten *am **05. Februar 2025 **sprechen wir über unseren aktuellen Stand, diskutieren Herausforderungen und geben einen Einblick in unsere Arbeit.
📍**Chaos Computer Club Berlin (CCCB), Marienstraße 11, 10117 Berlin**
Lasst uns gemeinsam überlegen, wie politische Informationen offener und zugänglicher werden können.
🔗 Open Politics Project: https://open-politics.org/about, https://github.com/open-politics/open-politics, https://github.com/open-politics/opol

View file

@ -1,12 +0,0 @@
<!-- ---
title: "Amateurfunkkurs Klasse A"
subtitle: "Teil 2"
date: 2018-05-17T22:41:48+02:00
dtstart: 20190110T180000
dtend: 20190110T203000
rrule: "FREQ=WEEKLY;BYDAY=MO;INTERVAL=1;COUNT=14"
---
Nach einer kleinen Verschnaufpause über Weihnachten und dem Chaos Communication Congress machen wir mit dem Lehrgang zur Vorbereitung auf die Klasse A weiter. Der Zeitraum ist vom 7. Januar 2019 bis zum 8. April 2019.
Die genauen Inhalte pro Einheit sind ebenso im [Unterrichtsplan A](https://www.chaoswelle.de/Lehrgang_Berlin_2019/Unterrichtsplan_A) detaillierter aufgelistet. -->

View file

@ -1,15 +0,0 @@
<!-- ---
title: "Amateurfunkkurs Klasse E"
subtitle: "Teil 2"
date: 2018-05-17T22:41:48+02:00
dtstart: 20180910T180000
dtend: 20180910T203000
rrule: "FREQ=WEEKLY;BYDAY=MO;INTERVAL=1;COUNT=15"
---
Im ersten Teil wird für die Prüfung Klasse E vorbereitet. Der Zeitraum ist vom 17. September bis zum 17. Dezember.
An einem Termin werden neben dem großen Teil der zu erlernenden Technik immer Themen aus dem Bereich Betriebstechnik und Vorschriften behandelt. Diese sind für die Prüfung notwendig, aber leider etwas trockener. Durch die Abwechslung sollte der Spaß nicht verloren gehen.
Die genauen Inhalte pro Einheit sind im [Unterrichtsplan E](https://www.chaoswelle.de/Lehrgang_Berlin_2018/Unterrichtsplan_E) detaillierter aufgelistet.
-->

View file

@ -1,38 +1,14 @@
<!-- ---
---
title: "Amateurfunk"
subtitle: "Funken und Löten im CCCB"
date: 2018-05-17T22:41:48+02:00
menu:
main:
parent: "veranstaltungen"
---
![Logo der Chaoswelle](/img/chaoswelle.png "Logo der Chaoswelle")
Im Moment finden keine Amateurfunktreffen mehr im CCCB statt
Früher trafen sich Funkamateure oder Interessierte
rund um drahtlose Kommunikation im Chaos Computer Club Berlin im Rahmen des
[Club Discordia]({{< ref "clubdiscordia.md" >}}). Manchmal gibt es Vorträge
oder Workshops, die dann im Kalender separat angezeigt werden. Gelegentlich
halten wir Amateurfunkkurse ab, um für die Prüfung zum Funkamateur vorzubereiten.
Das Treffen ist Nahe zur [Interessensgemeinschaft
Vor einiger Zeit fanden gelegentlich Amateurfunkkurse im CCCB statt. Im Zusammenhang damit trafen sich Funkamateure und Interessierte rund um drahtlose Kommunikation auch an den offenen Abenden. Das Treffen war Nahe zur [Interessensgemeinschaft
Chaoswelle](http://chaoswelle.de), die sich im DARC e.V. Ortsverband D23
organisiert. Funkamateure oder Interessierte rund um die Funktechnik sind dazu
Willkommen! Ankündigungen und Diskussionen finden auf einer [offenen
organisiert. Ankündigungen und Diskussionen zu diesen Themen finden auf einer [offenen
Mailingliste](http://lists.chaoswelle.de/listinfo/berlin) statt.
Für Fragen kannst Du Dich an Lars (Rufzeichen DC4LW) unter <dc4lw@darc.de>
wenden.
## Kurse
In 14 Unterrichtseinheiten ab Mitte September 2018 bis zum Jahresende werden
die nötigen [Inhalte für die Klasse E]({{< ref "afu-kurs-e.md" >}})
vermittelt, das ist der erster Teil des Lehrgangs. In vierzehn weiteren
Einheiten des zweiten Teils kommen im Winter 2019 die zusätzlichen [Inhalte für
die Klasse A]({{< ref "afu-kurs-e.md" >}}) an die Reihe. Wir treffen uns
wöchentlich am Montagabend im Zeitraum von 18:00 Uhr bis 20:30 Uhr (mit kurzen
Pausen zwischendurch).
Details gibt es auf der Seite der [Chaoswelle](https://www.chaoswelle.de/Lehrgang_Berlin_2018). -->
Für Fragen kannst Du Dich auch an Lars (Rufzeichen DC4LW) unter <dc4lw@darc.de>
wenden.

View file

@ -3,7 +3,7 @@ title: "Anfahrt"
date: 2018-05-17T23:04:10+02:00
menu:
main:
parent: "verein"
parent: "Verein"
---
# Allgemeine Hinweise
@ -12,7 +12,11 @@ Die Clubräume liegen im Hinterhof der **Marienstr. 11, 10117 Berlin** ([Google]
# Nahbereichskarte
{{< figure src="/img/anfahrt.jpg" title="Anfahrtskarte CCCB (Daten von OpenStreetMap - Veröffentlicht unter ODbL)" >}}
{{< figure
src="/img/Weg_zum_CCCB.png"
title="Fußweg vom S Friedrichstraße zum CCCB"
alt="Fußweg vom S Friedrichstraße zum CCCB"
>}}
# Ich reise an...

View file

@ -0,0 +1,16 @@
---
title: "Bastelabend"
subtitle: "Der Bastelabend jeden 1. und 3. Samstag im Monat"
date: 2025-01-08T20:00:00+02:00
dtstart: 20250118T170000
dtend: 20250118T230000
rrule: "FREQ=MONTHLY;BYDAY=1SA,3SA;WKST=MO"
menu:
main:
parent: "Veranstaltungen"
---
![Lötkolben im CCCB](/img/club/27481933907_f240f4232d.jpg)
**Jeden 1. und 3. Samstag im Monat ist ab 17 Uhr Bastelabend im Club.**
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. Generell sind aber alle herzlich eingeladen, an den Spieleabenden vorbeizukommen.

View file

@ -2,6 +2,9 @@
title: "Beitragsordnung"
subtitle: "Chaos Computer Club Berlin / CCC(B) e.V."
date: 2020-01-19T10:00:00+02:00
menu:
main:
parent: "Mitgliedschaft"
---
_Stand: 19. Januar 2020_

370
content/page/calendar.md Normal file
View file

@ -0,0 +1,370 @@
---
title: "Kalender"
subtitle: "Der Kalender des CCCB"
date: 2025-02-26T10:00:00+02:00
menu:
main:
parent: "Verein"
---
![Ein Schild im CCCB mit der Aufschrift "Closed at Night"](/img/club/42303247602_56716d8704.jpg)
<!-- Kalender-Widget -->
<style>
.calendar-container {
display: flex;
flex-wrap: wrap;
width: 100%;
gap: 20px;
}
#calendar {
flex: 1;
min-width: 300px;
}
#event-panel {
flex: 1;
min-width: 300px;
background-color: var(--color-bg-secondary);
padding: 15px;
border-radius: 5px;
min-height: 300px;
display: none;
}
#calendar-controls {
text-align: center;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}
#calendar-controls button {
background: none;
border: none;
font-size: 2em;
cursor: pointer;
padding: 5px 15px;
}
#calendar-table {
width: 100%;
border-collapse: collapse;
}
#calendar-table th, #calendar-table td {
border: 1px solid var(--color-border);
padding: 5px;
text-align: center;
vertical-align: top;
height: 60px;
width: 14.28%;
}
#calendar-table th {
background-color: var(--color-bg-secondary);
}
#calendar-table td {
background-color: var(--color-bg-primary);
position: relative;
cursor: pointer;
}
#calendar-table td:hover {
background-color: var(--color-bg-hover);
}
.event-dot {
height: 8px;
width: 8px;
background-color: greenyellow;
border-radius: 50%;
display: block;
margin: 5px auto 0;
}
.has-event {
background-color: var(--color-bg-secondary) !important;
}
.selected-day {
background-color: var(--color-bg-hover) !important;
font-weight: bold;
}
#event-date {
font-size: 1.2em;
margin-bottom: 15px;
}
.event-item {
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: 1px solid var(--color-border);
}
.event-title {
font-weight: bold;
margin-bottom: 5px;
}
.event-time, .event-description {
font-size: 0.9em;
margin-bottom: 5px;
}
.no-events {
font-style: italic;
color: var(--color-text-secondary);
}
</style>
<div class="calendar-container">
<div id="calendar">
<div id="calendar-controls">
<button id="prev-month">&larr;</button>
<span id="current-month"></span>
<button id="next-month">&rarr;</button>
</div>
<table id="calendar-table">
<thead>
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
</thead>
<tbody id="calendar-body"></tbody>
</table>
</div>
<div id="event-panel">
<div id="event-date"></div>
<div id="event-details"></div>
</div>
</div>
<script>
(function(){
let events = [];
let eventsByDate = {};
// Funktion zum Parsen der ICS-Datei
function parseICS(icsText) {
let events = [];
let lines = icsText.split(/\r?\n/);
let event = null;
lines.forEach(line => {
if (line.startsWith("BEGIN:VEVENT")) {
event = {};
} else if (line.startsWith("END:VEVENT")) {
if (event) events.push(event);
event = null;
} else if (event) {
let colonIndex = line.indexOf(":");
if (colonIndex > -1) {
let key = line.substring(0, colonIndex);
let value = line.substring(colonIndex + 1);
if (key.startsWith("DTSTART")) {
event.start = value;
} else if (key.startsWith("DTEND")) {
event.end = value;
} else if (key.startsWith("SUMMARY")) {
event.summary = value;
} else if (key.startsWith("DESCRIPTION")) {
event.description = value;
}
}
}
});
return events;
}
// Hilfsfunktion: Parst einen ICS-Datum-String ins Format "YYYY-MM-DD"
function parseDateString(icsDateStr) {
// Erwartet entweder ganztägige Daten (YYYYMMDD) oder Datum+Zeit (YYYYMMDDTHHmmssZ)
if (icsDateStr.length === 8) {
let year = icsDateStr.substring(0, 4);
let month = icsDateStr.substring(4, 6);
let day = icsDateStr.substring(6, 8);
return `${year}-${month}-${day}`;
} else if (icsDateStr.length >= 15) {
let year = icsDateStr.substring(0, 4);
let month = icsDateStr.substring(4, 6);
let day = icsDateStr.substring(6, 8);
return `${year}-${month}-${day}`;
}
return null;
}
// Kalender initialisieren
let currentYear, currentMonth;
const currentMonthElem = document.getElementById("current-month");
const calendarBody = document.getElementById("calendar-body");
const eventPanel = document.getElementById("event-panel");
const eventDateElem = document.getElementById("event-date");
const eventDetailsElem = document.getElementById("event-details");
document.getElementById("prev-month").addEventListener("click", function(){
currentMonth--;
if (currentMonth < 0) {
currentMonth = 11;
currentYear--;
}
renderCalendar(currentYear, currentMonth);
});
document.getElementById("next-month").addEventListener("click", function(){
currentMonth++;
if (currentMonth > 11) {
currentMonth = 0;
currentYear++;
}
renderCalendar(currentYear, currentMonth);
});
function renderCalendar(year, month) {
// Setze die Monatsbeschriftung (in Deutsch)
const monthNames = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
currentMonthElem.textContent = monthNames[month] + " " + year;
calendarBody.innerHTML = "";
let firstDay = new Date(year, month, 1);
let firstDayIndex = (firstDay.getDay() + 6) % 7; // Montag = 0, Dienstag = 1, etc.
let daysInMonth = new Date(year, month + 1, 0).getDate();
let row = document.createElement("tr");
// Leere Zellen vor dem 1. Tag
for (let i = 0; i < firstDayIndex; i++){
let cell = document.createElement("td");
row.appendChild(cell);
}
// Tage hinzufügen
for (let day = 1; day <= daysInMonth; day++){
if (row.children.length === 7) {
calendarBody.appendChild(row);
row = document.createElement("tr");
}
let cell = document.createElement("td");
cell.innerHTML = "<strong>" + day + "</strong>";
let dayStr = day < 10 ? "0" + day : day;
let monthStr = (month + 1) < 10 ? "0" + (month + 1) : (month + 1);
let dateKey = year + "-" + monthStr + "-" + dayStr;
if (eventsByDate[dateKey]) {
let eventDot = document.createElement("div");
eventDot.className = "event-dot";
cell.appendChild(document.createElement("br"));
cell.appendChild(eventDot);
cell.dataset.dateKey = dateKey;
cell.addEventListener("click", function() {
// Clear previous selections
document.querySelectorAll('.selected-day').forEach(el => {
el.classList.remove('selected-day');
});
cell.classList.add('selected-day');
showEventDetails(dateKey);
});
}
row.appendChild(cell);
}
// Falls die letzte Zeile nicht komplett ist
while (row.children.length < 7) {
let cell = document.createElement("td");
row.appendChild(cell);
}
calendarBody.appendChild(row);
}
function createEventLink(eventTitle) {
if (eventTitle.startsWith("Datengarten")) {
// Extract the number after "Datengarten "
const match = eventTitle.match(/Datengarten\s+(\d+)/i);
if (match && match[1]) {
return `https://berlin.ccc.de/datengarten/${match[1]}/`;
}
}
// For other titles, convert to lowercase and use as path
const slug = eventTitle.toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, '');
return `https://berlin.ccc.de/page/${slug}/`;
}
function showEventDetails(dateKey) {
const events = eventsByDate[dateKey];
eventDateElem.textContent = formatDate(dateKey);
eventDetailsElem.innerHTML = "";
if (events && events.length > 0) {
events.forEach(ev => {
let eventItem = document.createElement("div");
eventItem.className = "event-item";
let eventTitle = document.createElement("div");
eventTitle.className = "event-title";
// Create a link for the event title
let titleLink = document.createElement("a");
titleLink.textContent = ev.summary;
titleLink.href = createEventLink(ev.summary);
titleLink.target = "_blank";
eventTitle.appendChild(titleLink);
eventItem.appendChild(eventTitle);
let eventTime = document.createElement("div");
eventTime.className = "event-time";
eventTime.textContent = `Start: ${formatTime(ev.start)}, End: ${formatTime(ev.end)}`;
eventItem.appendChild(eventTime);
if (ev.description) {
let eventDescription = document.createElement("div");
eventDescription.className = "event-description";
eventDescription.textContent = ev.description;
eventItem.appendChild(eventDescription);
}
eventDetailsElem.appendChild(eventItem);
});
} else {
let noEvents = document.createElement("div");
noEvents.className = "no-events";
noEvents.textContent = "Keine Veranstaltungen an diesem Tag.";
eventDetailsElem.appendChild(noEvents);
}
eventPanel.style.display = "block";
}
function formatDate(dateStr) {
// Convert YYYY-MM-DD to DD.MM.YYYY
const parts = dateStr.split("-");
return `${parts[2]}.${parts[1]}.${parts[0]}`;
}
function formatTime(icsTimeStr) {
// Format time for display
if (icsTimeStr.length === 8) {
// All-day event
return "Ganztägig";
} else if (icsTimeStr.length >= 15) {
// Time-specific event
const hour = icsTimeStr.substring(9, 11);
const minute = icsTimeStr.substring(11, 13);
return `${hour}:${minute}`;
}
return icsTimeStr;
}
// ICS-Datei abrufen und Events verarbeiten
fetch('/all.ics')
.then(response => response.text())
.then(data => {
events = parseICS(data);
events.forEach(ev => {
let dateKey = parseDateString(ev.start);
if (dateKey) {
if (!eventsByDate[dateKey]) {
eventsByDate[dateKey] = [];
}
eventsByDate[dateKey].push(ev);
}
});
let today = new Date();
currentYear = today.getFullYear();
currentMonth = today.getMonth();
renderCalendar(currentYear, currentMonth);
})
.catch(err => console.error('Fehler beim Laden der ICS-Datei:', err));
})();
</script>

View file

@ -8,7 +8,7 @@ date: 2020-02-27T01:00:00+02:00
#location: "CCCB"
menu:
main:
parent: "veranstaltungen"
parent: "Veranstaltungen"
---
![Chaosradio logo](/img/chaosradio.png)

View file

@ -3,22 +3,28 @@ title: "Club Discordia"
subtitle: "Die offenen Abende im CCCB"
date: 2018-05-17T22:59:56+02:00
dtstart: 20220616T190000
#dtend: 20180704T000000
dtend: 20220616T230000
#rrule_excludes:
# - 20190815T190000
rrule: "FREQ=WEEKLY;BYDAY=TH;INTERVAL=1"
menu:
main:
parent: "veranstaltungen"
parent: "Veranstaltungen"
---
![Kochen in der CCCB Küche](/img/club/Kochen_in_der_CCCB_Küche.jpg)
Der **Club Discordia** ist ein öffentliches Treffen in den Clubräumen des CCC Berlin. Jeder, der Lust hat, ist eingeladen, **Donnerstags so ab ca. 19 Uhr bis 24 Uhr** vorbeizukommen. Wer will, kann seinen Computer mitbringen und sollte das auch tun, sonst ist es langweilig wenn die Nerds erstmal nicht mit einem reden oder wenig los ist.
In den Clubräumen gibt es performantes Internet mit WLAN und etwas zwischenmenschliche Kommunikation. Vor allem ohne Traffic Shaping immer wieder ein Genuss: Das kommunikative Spiel **Findet den Sauger!**.
In den Clubräumen gibt es performantes Internet mit WLAN und etwas zwischenmenschliche Kommunikation.
Hin und wieder wurde auch beobachtet, dass im Club gekocht wurde, die notwendige Hardware steht zur Verfügung.
Hin und wieder wurde auch beobachtet, dass im Club gekocht wurde, die notwendige Hardware steht zwar zur Verfügung, aber momentan nur begrenzt, da die Küche gerade umgebaut wird:
Im Rahmen des Club Discordia findet auch gelegentlich unsere öffentliche Vortrags-/Workshopveranstaltung, der Datengarten statt.
https://chaos.social/@nd/114050233067773396
Im Rahmen des Club Discordia findet auch gelegentlich unsere öffentliche Vortrags-/Workshopveranstaltung, der [Datengarten](/page/datengarten/) statt.
Außerdem gibt es im Memberbereich ein E-Lab mit 3D-Drucker, Lötstation und vielen anderen nützlichen Werkzeugen zum Basteln, die ihr mit Erlaubnis auch benutzen dürft.
Bis zum nächsten Donnerstag. Viel Spaß am Gerät!

View file

@ -7,7 +7,7 @@ date: 2018-05-18T01:11:54+02:00
#rrule: "FREQ=MONTHLY;BYSETPOS=1;BYDAY=TH;INTERVAL=1"
menu:
main:
parent: "veranstaltungen"
parent: "Veranstaltungen"
---
![Chaos Macht Schule Logo](/img/cms-logo.jpg "Chaos Macht Schule Logo")

View file

@ -4,9 +4,11 @@ subtitle: "Die Vortragsreihe im CCCB"
date: 2018-05-17T22:41:48+02:00
menu:
main:
parent: "veranstaltungen"
parent: "Veranstaltungen"
---
![Technische Geräte unbekannten Hersprungs im CCCB](/img/club/27481915157_3cde02aaa3.jpg)
Der **Datengarten** ist eine Vortrags- und Projektreihe im Rahmen des [Club
Discordia](/page/clubdiscordia/). Regelmäßige Datengärten finden an
jedem 2. Dienstag im Monat ab 20 Uhr statt (der Dienstag nach dem

View file

@ -1,9 +1,38 @@
---
title: "Fotos"
title: "Fotogalerie"
date: 2018-07-01T14:19:22+04:00
menu:
main:
parent: "verein"
parent: "Verein"
---
{{< gallery dir="/img/club/" caption-position="none"/>}}
{{< gallery >}}
<img src="/img/club/27480379957_c09e86189b.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/27479845037_9e4ece985c.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/27481915157_3cde02aaa3.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/27481933907_f240f4232d.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/27481964727_04959aa83b.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/27481969187_a23cf0c7ab.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/28476390838_3684d048ef.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/28476394828_1ed64af4f5.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/40542196560_f22e53153c.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/40544370280_1703903e06.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/41447101455_c6ace71115.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/41447109945_3ab5a6e7ef.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/41627141884_48e4bb4dec.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/41627160174_4d494549a2.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/41629042814_df533c84e0.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42300970272_667569d239.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42301473062_cdcea7912f.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42301482072_7092c55ef0.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42303237782_7107fcf7c7.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42303241962_665df39b87.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42303247602_56716d8704.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42349449581_3c634b4245.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42349465201_9fff7450d4.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42349973551_9f1a404c0f.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42350001481_48a8be981e.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
<img src="/img/club/42351605711_6d40412b75.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
{{< /gallery >}}
Fotos aus den Räumen des Chaos Computer Club Berlin aus 2018

View file

@ -24,7 +24,7 @@ Postfach 64 02 36
10048 Berlin
```
E-Mail: <mail2024@berlin.ccc.de>
E-Mail: <mail2025@berlin.ccc.de>
Eingetragen im Vereinsregister des Amtsgerichts Berlin Charlottenburg unter der Vereinsregisternummer 16058.

25
content/page/mastodon.md Normal file
View file

@ -0,0 +1,25 @@
---
title: "Mastodon"
subtitle: "Der Online-Auftritt des CCCB"
date: 2025-02-26T10:00:00+02:00
menu:
main:
parent: "Verein"
---
Der CCCB betreibt einen eigenen Mastodon-Account auf chaos.social, dem ihr hier gerne folgen könnt:
https://chaos.social/@clubdiscordia
{{< figure
src="/img/Mastodon_mascot_vector_version.svg"
alt="Mastodon Maskottchen - Bild von WikiMedia Commons (GNU AGPL)"
width=50%
>}}
_Mastodon Maskottchen - Bild von WikiMedia Commons (GNU AGPL)_
Wir hatten früher einen Bluesky- und einen Twitter-Account, aber da wir diese beiden Plattformen aber nicht unterstützen wollen, sind wir nur noch auf Mastodon. Aus Archivierungsgründen sind sie aber noch online:
https://x.com/clubdiscordia
https://bsky.app/profile/clubdiscordia.bsky.social

View file

@ -1,10 +1,10 @@
---
title: "Mitgliedschaft"
title: "Allgemeine Infos zur Mitgliedschaft"
subtitle: "Alles rund ums Mitmachen beim CCCB"
date: 2018-05-17T22:18:59+02:00
menu:
main:
parent: "verein"
parent: "Mitgliedschaft"
---
Bitte beachte, dass Chaos Computer Club Berlin e.V. (kurz: CCCB) und Chaos Computer Club e.V. (kurz: CCC) zwei verschiedene Vereine sind: In diesem Text wird in einigen Sätzen von beiden Vereinen die Rede sein.

21
content/page/openwrt.md Normal file
View file

@ -0,0 +1,21 @@
---
title: "OpenWrt"
subtitle: "OpenWrt Stammtisch"
date: 2025-01-08T20:00:00+02:00
dtstart: 20250115T200000
dtend: 20250115T230000
rrule: "FREQ=MONTHLY;BYDAY=3WE;WKST=MO"
menu:
main:
parent: "Veranstaltungen"
---
![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.
Das OpenWrt Meetup richtet sich an alle die OpenWrt benutzen oder benutzen wollen aber auch Leute die an OpenWrt entwickeln.
Die Veranstaltung ist öffentlich, jeder mit Interesse kann ohne Anmeldung teilnehmen.
Matrix Raum: [#openwrt-berlin:matrix.org](https://matrix.to/#/#openwrt-berlin:matrix.org)

View file

@ -1,19 +1,15 @@
---
title: "Plenum"
title: "Plenum (club closed, members only)"
subtitle: "Instrument der internen Konsensfindung"
date: 2018-05-18T01:11:54+02:00
draft: true
dtstart: 20180704T200000
dtend: 20180704T220000
rrule: "FREQ=MONTHLY;BYSETPOS=1;BYDAY=WE;INTERVAL=1"
menu:
main:
parent: "verein"
rrule: "FREQ=MONTHLY;BYDAY=2TU,4TU;INTERVAL=1;WKST=MO"
---
Das Plenum findet in der Regel am ersten Mittwoch des Monats ab 20:00 Uhr in den Clubräumen
Das Plenum findet in der Regel am 2. und 4. Dienstag im Monat ab 20:00 Uhr in den Clubräumen
des CCCB statt.
Als Instrument der internen Konsensbildung, bei dem Interna diskutiert werden,
richtet sich das Plenum aussließlich an Mitglieder oder explizit eingeladene Gäste.
richtet sich das Plenum **aussließlich an Mitglieder oder explizit eingeladene Gäste**.

View file

@ -4,7 +4,7 @@ subtitle: "Chaos Computer Club Berlin e. V. / CCCB e. V."
date: 2019-05-14T10:00:00+02:00
menu:
main:
parent: "verein"
parent: "Mitgliedschaft"
---
_Stand: 16. April 2023_

View file

@ -0,0 +1,16 @@
---
title: "Spieleabend"
subtitle: "Der Spieleabend jeden 2. und 4. Samstag im Monat"
date: 2025-01-08T20:00:00+02:00
dtstart: 20250125T170000
dtend: 20250125T230000
rrule: "FREQ=MONTHLY;BYDAY=2SA,4SA;WKST=MO"
menu:
main:
parent: "Veranstaltungen"
---
![Dorfromantik spielen im CCCB](/img/club/dorfromantik-im-cccb.jpg)
**Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.**
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. Generell sind aber alle herzlich eingeladen, an den Bastelabenden vorbeizukommen.

21
content/page/subbotnik.md Normal file
View file

@ -0,0 +1,21 @@
---
title: "Subbotnik"
subtitle: "Der Subbotnik jeden 5. Samstag im Monat"
date: 2025-01-08T20:00:00+02:00
dtstart: 20241130T170000
dtend: 20241130T230000
rrule: "FREQ=MONTHLY;BYDAY=5SA;WKST=MO"
menu:
main:
parent: "Veranstaltungen"
---
![Ein possierlicher Nager im CCCB](/img/club/41627141884_48e4bb4dec.jpg)
**Jeden 5. Samstag im Monat ist ab 17 Uhr Subbotnik im Club.**
Ungefähr jedes viertel Jahr wird im CCCB von den Mitgliedern einmal richtig durchgeputzt, damit der Club danach wieder schön aussieht.
Der Begriff [Subbotnik](https://de.wikipedia.org/wiki/Subbotnik) ist eine in Sowjetrussland entstandene Bezeichnung für einen unbezahlten Arbeitseinsatz am Sonnabend, der in den Sprachgebrauch in der DDR und daraufhin auch in den Sprachgebrauch der CCCB-Mitglieder übernommen wurde.
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. Generell sind aber alle herzlich eingeladen, am Subbotnik vorbeizukommen und mitzuhelfen.

View file

@ -0,0 +1,13 @@
---
title: "Tag Des Offenen Hackerspace"
subtitle: "Der CCCB lädt ein zum kennenlernen und entdecken."
date: 2025-02-10T12:00:00+02:00
dtstart: 20250329T130000
dtend: 20250329T200000
---
Der [Tag des offenen Hackerspace](https://events.ccc.de/2024/02/23/tag-des-offenen-hackspace-einladung/) findet dieses Jahr auch im CCCB statt.
Es wird Führungen durch die Räume geben und Möglichkeiten zum kennenlernen und Spaß am Gerät.
- Programm folgt :-)

View file

@ -0,0 +1 @@
{{ block "main" . }}{{ .Content }}{{ end }}

View file

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CCCB//Calendar//DE
{{ with .Title }}
X-WR-CALNAME:{{ . }}
{{ end }}
CALSCALE:GREGORIAN
METHOD:PUBLISH
{{ range .Pages }}
{{ if .Date }}
BEGIN:VEVENT
UID:{{ .File.UniqueID }}@berlin.ccc.de
DTSTAMP:{{ .Date.Format "20060102T150405Z" }}
DTSTART:{{ .Date.Format "20060102T150405Z" }}
SUMMARY:{{ .Title }}
DESCRIPTION:{{ .Summary | plainify }}
URL:{{ .Permalink }}
END:VEVENT
{{ end }}
{{ end }}
END:VCALENDAR

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<events>
{{ range .Pages }}
<event>
<title>{{ .Title }}</title>
<link>{{ .Permalink }}</link>
<date>{{ .Date.Format "2006-01-02" }}</date>
<description>{{ .Summary | plainify }}</description>
{{ with .Params.location }}<location>{{ . }}</location>{{ end }}
</event>
{{ end }}
</events>

View file

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CCCB//Calendar//DE
{{ with .Title }}
X-WR-CALNAME:{{ . }}
{{ end }}
CALSCALE:GREGORIAN
METHOD:PUBLISH
{{ if .Date }}
BEGIN:VEVENT
UID:{{ .File.UniqueID }}@berlin.ccc.de
DTSTAMP:{{ .Date.Format "20060102T150405Z" }}
DTSTART:{{ .Date.Format "20060102T150405Z" }}
{{ with .Params.event.end }}DTEND:{{ dateFormat "20060102T150405Z" . }}{{ end }}
SUMMARY:{{ .Title }}
DESCRIPTION:{{ .Summary | plainify }}
URL:{{ .Permalink }}
{{ with .Params.location }}LOCATION:{{ . }}{{ end }}
END:VEVENT
{{ end }}
END:VCALENDAR

View file

@ -3,8 +3,20 @@
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<article role="main" class="blog-post">
{{ partial "talk-infobox" . }}
{{ .Content }}
<article class="max-w-prose mx-auto">
<h1 class="text-2xl font-bold">{{ .Title }}</h1>
{{ if .Params.subtitle }}
<h2 class="text-xl">{{ .Params.subtitle }}</h2>
{{ end }}
<div class="mt-4 border p-4 bg-secondary-bg rounded">
{{ partial "talk-infobox" . }}
</div>
<div class="mt-4 content">
{{ .Content }}
</div>
</article>
{{ if .Params.tags }}
<div class="blog-tags">

View file

@ -0,0 +1,16 @@
{{ define "main" }}
<article class="max-w-prose mx-auto">
<h1 class="text-2xl font-bold">{{ .Title }}</h1>
{{ if .Params.subtitle }}
<h2 class="text-xl">{{ .Params.subtitle }}</h2>
{{ end }}
<div class="mt-4 border p-4 bg-secondary-bg rounded">
{{ partial "talk-infobox" . }}
</div>
<div class="mt-4 content">
{{ .Content }}
</div>
</article>
{{ end }}

View file

@ -0,0 +1,6 @@
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<meta name="apple-mobile-web-app-title" content="CCCB" />
<link rel="manifest" href="/site.webmanifest" />

View file

@ -1,13 +1,13 @@
languageCode: "de-de"
title: "Chaos Computer Club Berlin"
theme: "beautifulhugo"
# title: "Chaos Computer Club Berlin"
theme: "blowfish"
RelativeURLs: true
CanonifyURLs: true
Params:
license: "CC-BY"
subtitle: "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin."
logo: "img/logo.png"
logo: "img/avatar-CCCB-Logo.png"
favicon: "img/favicon.ico"
dateFormat: "January 2, 2006"
commit: false
@ -29,7 +29,7 @@ permalinks:
Author:
twitter: "clubdiscordia"
email: "mail2024@berlin.ccc.de"
email: "mail2025@berlin.ccc.de"
mastodon: "chaos.social/@clubdiscordia"
irc: "https://webirc.hackint.org/#ircs://irc.hackint.org/#cccb"

BIN
static/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
static/favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

1
static/favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 611.097 622.985" xmlns="http://www.w3.org/2000/svg">
<g stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4">
<path class="st6" d="m332.227 546.857s1 40 2 51 3 16 20 17 41-2 50-4 16-6 14-29-4-51-4-51" fill="#e09c5c"/>
<path class="st2" d="m417.227 599.657-0.1-0.6c-1.5-5.7-4.5-7-8-6.3-4.8 1-6.1 7.7-6.9 16.7 0 0.4-0.1 0.8-0.1 1.3l0.7 0.3c0.4-0.1 0.9-0.2 1.3-0.3 5.9-1.2 10.9-3.4 13.1-11.1z" fill="#fbc16c"/>
<path class="st2" d="m423.827 227.857c46-5 79-28 84-32 0 0-14-12-3-20s18 2 18 2 23.5-29.9 43.5-13.9 27.5 32.9 20.5 48.9-52 72-147 85" fill="#fbc16c"/>
</g>
<path class="st4" d="m152.827 525.857c-16 15-41 23-54 5-13-18-4-26-7-30s-21 8-13 31 54 48 97 14" fill="#e09c5c"/>
<path class="st2" d="m413.227 189.957s34.6 70.9 43.1 175.4c7.2 89 15 139-46 168s-142 24-180 25c-38 1-78-4-88-47s0.5-76.5 0.5-76.5 1.4-71.2-2.1-82.7-9.2-28.7-9.2-28.7-5.7 40.1-35.5 53.6c-29.8 13.6-56.1 0.8-53.9-36.5 0 0-25.5-42.6-37.6-79.9-12.1-37.3 19.8-73.9 78.3-58.8 2-71 63.6-130.7 149.1-137.7 85.4-7.1 106.3 38.7 151.9 40.7 44 2 75-12 98-35s70-53 107-29c0 0 18-6 20 10s-7 16-12 19c0 0 7 22-7 25s-12-18-12-18-23-3-42 27c-19 30-47.2 70.2-122.6 86.1-16.1 1.4-29.5-3.9-29.5-3.9" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path class="st6" d="m172.827 532.857c0 23-4 53-5 64s3 22.4 21 23c28 1 82 5 87-12 6.3-21.6 5-58 0-70" fill="#e09c5c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<g fill="#fbc16c">
<g stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4">
<path class="st2" d="m208.027 620.557c0.8-9.7 1.8-15.7 6.8-16.7s8.8 3.1 8.9 17.1"/>
<path class="st2" d="m224.027 620.557c0.8-9.7 1.8-15.7 6.8-16.7s8.8 3.1 8.9 17.1"/>
<path class="st2" d="m239.827 620.857c0.8-9.7 2-17 6.99999-18 5-1 8.9 2.1 9 16"/>
</g>
<path d="m245.627 574.657h-15.4c-7.8 0-14.2-6.4-14.2-14.2s6.4-14.2 14.2-14.2h15.4c7.79999 0 14.2 6.4 14.2 14.2s-6.4 14.2-14.2 14.2z"/>
</g>
<path class="st4" d="m40.0272 262.057c7.3 9.1 20.6 38.2 19.8 61-0.9 22.9 23.8 32.8 36.8 13 13-19.8 16.6-58.4 7.6-77.2-9-18.9-13.9-26-13.9-26s-4.9 9-17.5 10.8-13-3.1-17.3-9.8c0 0 0.6 7.4-10.6 11.5-11.2 4.2-14.8-5-14.8-5s2.7 12.7 9.9 21.7z" fill="#e09c5c"/>
<path class="st4" d="m222.327 556.457c-21.3 0-36.8-2.7-48.9-8.4-15.4-7.3-25-19.4-29.1-37.2-9.8-42 0.4-75.1 0.5-75.4l0.1-0.3v-0.3s0.1-3.7 0.1-9.7c13.9 0.5 33.3 2.8 50.3 10.8 16.8 7.9 27.4 19.6 31.6 34.6 9.3 33.4 33.5 49.6 74.1 49.6 12.6 0 27-1.5 43.9-4.6 8.6-1.6 17.1-2.8 25.3-4 38.7-5.6 72.8-10.5 87.9-47.9-3.3 28.9-14.8 51.7-48.6 67.8-51.3 24.4-116.2 24.5-159.1 24.6-7.69999 0-14.3 0-20.1 0.2-2.9 0.1-5.5 0.2-8 0.2z" fill="#e09c5c"/>
<path d="m330.827 218.257c1.3-8.5 2-14.7-7.8-12.6s-69.8 18-80.5 20.3c-10.8 2.3-8.7 12.1 1.8 18 10.5 5.9 39.7 23.2 51.7 21.6s22.7-3.8 27.6-19.2c4.9-15.3 7.2-28.1 7.2-28.1z" fill="#2e2314" stroke="#2b2011" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<g transform="translate(-164.173 -156.043)">
<path d="m458.6 419.7c-11.4 0-36.3-14.2-46.9-20.2l-2.2-1.3c-5.1-2.9-8.4-7.1-7.9-10.2 0.3-2 2.3-3.4 5.5-4.1 5.5-1.2 24-5.9 41.8-10.5l3.8-1c15.9 4.2 28.4 14.9 33.4 28.7l-0.2 0.7c-4.5 14-13.6 16.2-25.9 17.8-0.5 0.1-0.9 0.1-1.4 0.1z" fill="#ad4949"/>
</g>
<g transform="translate(-164.173 -156.043)">
<path class="st33" d="m404 397c-3.6-2.6-5.6-6.3-5-9.5 0.5-2.8 2.7-4.7 6.3-5.4 5.8-1.2 25.1-6.2 43.7-11 8.9-2.3 17.5-4.5 24.3-6.2l3.4 15z" fill="#fff"/>
<path class="st42" d="m471.9 367.4 2.5 11.1-70 16.4c-2.5-2.1-3.9-4.7-3.5-6.9 0.5-2.6 3.2-3.5 4.8-3.9 5.8-1.2 25.1-6.2 43.8-11 8.2-2.1 16-4.1 22.4-5.7m3-4.9c-20.4 5.1-61.2 15.8-70 17.7-10.3 2.2-10.6 13-1.3 19l75.6-17.8z" fill="#7d7d65"/>
</g>
<path class="st2" d="m128.627 148.057c-20.7 3.4-36.9-0.3-43.7-27.4-6.8-27.1 17-58.9 51.2-71.3s68-2.3 68-2.3 9.5-22.5 12.8-35.5c3.3-13 13.3-14.1 23.6 5.2 0 0 28.8-4.1 32.3 26.8 3.6 30.9-20.7 46.4-20.7 46.4" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path class="st2" d="m240.627 16.6571c4.3 10.3 2.9 22.9 2.7 27" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<g transform="translate(-164.173 -156.043)">
<path d="m358.6 376.9c2.2 5.7 6.2 9.9 8.9 8.3s2.9-5.7 0.4-12.4c-2.4-6.6-13.6-29.8-16.6-34.3s-6.4-5.8-9.1-4.2-1.9 5.5-0.1 9.2c1.9 3.8 16.5 33.4 16.5 33.4z"/>
</g>
<g transform="translate(-164.173 -156.043)">
<path class="st33" d="m387.3 470.6c-4.3 0-8.8-0.5-13.2-1.6-21.2-5.2-32.9-21.5-36.5-34-2.3-8-1.6-14.9 2-18.5 3.2-3.3 6.7-5 10.2-5 7.5 0 14.4 7.2 17.8 11.5 7.6 9.5 14.8 14.3 21.4 14.3 5.3 0 9.9-3 13.7-9 10-15.4 12.7-34.1 8.2-55.4-1.5-7.1 0.3-11.2 2.1-13.4 1.8-2.3 4.5-3.6 7.3-3.6 1.6 0 3 0.4 4.2 1.2 18.2 11.8 20.2 52 13.6 74.4-5.6 18.8-23.9 39.1-50.8 39.1z" fill="#fff"/>
<path class="st42" d="m420.2 357.9c1.2 0 2.2 0.3 3.1 0.9 7.6 4.9 13 16 15.2 31.2 2 13.6 1 29.3-2.5 41-2.9 9.9-9.1 19.2-17.3 26-9.1 7.6-20 11.6-31.5 11.6-4.2 0-8.4-0.5-12.7-1.6-20.4-5-31.6-20.7-35-32.6-2.1-7.2-1.5-13.5 1.5-16.5 2.9-2.9 5.8-4.4 8.8-4.4 6.9 0 13.7 7.5 16.3 10.7 8 10 15.7 15 22.9 15 6 0 11.2-3.3 15.4-9.9 10.3-15.9 13.1-35 8.4-56.9-1.1-4.9-0.5-9.1 1.7-11.7 1.5-1.8 3.6-2.8 5.7-2.8m0-4c-6.7 0-14.1 6.4-11.3 19.4 3.6 16.6 3.6 36-7.9 53.8-3.8 5.9-8 8.1-12.1 8.1-8.2 0-16.1-8.8-19.8-13.5-3.8-4.8-11.1-12.2-19.4-12.2-3.8 0-7.7 1.5-11.7 5.6-11 11.3 2 47.6 35.5 55.8 4.7 1.2 9.3 1.7 13.7 1.7 26.7 0 46.6-19.8 52.7-40.5 7.1-24 4.6-64.4-14.4-76.7-1.5-1-3.4-1.5-5.3-1.5z" fill="#7d7d65"/>
</g>
<path d="m203.127 285.457c6.5 1.7 19.4 2 29.8-6.6" fill="none" stroke="#7d7d65" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path d="m86.3272 236.957c-3.7 5-10.1 7.9-16.3 7.2-6.2-0.6-11.9-4.7-14.5-10.4-1.1 5.4-5.3 10.2-10.6 11.5-5.3 1.3-11.4-0.7-14.8-5 1.6 13 12 22.7 16.5 35" fill="none" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path d="m176.327 248.157-17.1 6.5c-5 1.9-10.6-0.6-12.4-5.6-1.9-5 0.6-10.6 5.6-12.4l17.1-6.5c5-1.9 10.6 0.6 12.4 5.6 1.9 4.9-0.6 10.5-5.6 12.4z" fill="#e68a4c"/>
<g fill="none" stroke="#fbd7a3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4">
<path class="st34" d="m538.327 46.6571c7.3-2.8 14.1-4.3 19.2-3.8"/>
<path class="st34" d="m474.327 95.7571c11.7-11.4 21.9-20.7 31.6-29.6 3.9-3.5 8.7-7.1 13.9-10.3"/>
<path class="st34" d="m384.227 121.257c15.7 1.4 33.6-0.1 52.7-6.6"/>
<path class="st34" d="m274.627 78.9571c19.9 3.5 36.4 12.2 56.1 23.6"/>
</g>
<g transform="translate(-164.173 -156.043)">
<path class="st2" d="m311 486.9c-48 22-68 37-57 78s59 41 59 41-8 25 18 28 55-5 56-41-20-61-63-65" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path class="st2" d="m313 605.9c10 2 25 2 25 2" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
<path d="m354.2 548.6 6.5 6.8c4.9 5.1 4.7 13.3-0.4 18.2l-1.9 1.8c-5.1 4.9-13.3 4.7-18.2-0.4l-6.5-6.8c-4.9-5.1-4.7-13.3 0.4-18.2l1.9-1.8c5.1-4.9 13.3-4.7 18.2 0.4z" fill="#fdd06e"/>
</g>
<path d="m309.827 254.457-6.5 2.6c-4.9 1.9-10.5-0.5-12.4-5.4l-0.7-1.8c-1.9-4.9 0.5-10.5 5.4-12.4l6.5-2.6c4.9-1.9 10.5 0.5 12.4 5.4l0.7 1.8c2 4.9-0.5 10.5-5.4 12.4z" fill="#b9655a"/>
<path class="st2" d="m131.527 323.357c1.8-14 0.6-22.1 0.6-22.1" fill="#fbc16c" stroke="#946f3a" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="4"/>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
static/img/Weg_zum_CCCB.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

21
static/site.webmanifest Normal file
View file

@ -0,0 +1,21 @@
{
"name": "CCCB",
"short_name": "CCCB",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ca392f",
"background_color": "#ca392f",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@ -1 +1 @@
Subproject commit 3e59df5ca7f034c2ebbeac7ca0962b6e163c09e4
Subproject commit 0699f2797d2b8c2da8a6a28da9ef4a8013f5f858

1
themes/blowfish Submodule

@ -0,0 +1 @@
Subproject commit 96a116a8b0354fc1042c968608a5c1f3001bcbef