Merge branch 'staging' into production
1
.forgejo/CODEOWNERS
Normal file
|
@ -0,0 +1 @@
|
|||
* @cccb/web
|
28
.forgejo/dependabot.yml
Normal 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"
|
73
.forgejo/workflows/release.yml
Normal 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 }}
|
9
.github/workflows/release.yml
vendored
|
@ -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
|
@ -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
|
@ -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
|
||||
|
|
BIN
assets/img/avatar-CCCB-Logo.jpg
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
assets/img/avatar-CCCB-Logo.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
assets/img/cccb-im-winter.jpg
Normal file
After Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
3
build.sh
|
@ -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
|
@ -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
|
77
config/_default/languages.de.toml
Normal 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"},
|
||||
]
|
13
config/_default/markup.toml
Normal 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
|
61
config/_default/menus.de.toml
Normal 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
|
@ -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 = ""
|
56
content/datengarten/111.md
Normal 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 that’s practical and meaningful.
|
||||
|
||||
We call it: **Open Source Political Intelligence**
|
||||
|
||||
At *Datengarten *on **February 5, 2025**, we’ll 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**
|
||||
|
||||
Let’s 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
|
|
@ -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. -->
|
|
@ -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.
|
||||
-->
|
|
@ -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"
|
||||
---
|
||||

|
||||
|
||||
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.
|
|
@ -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...
|
||||
|
||||
|
|
16
content/page/bastelabend.md
Normal 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"
|
||||
---
|
||||
|
||||

|
||||
|
||||
**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.
|
|
@ -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
|
@ -0,0 +1,370 @@
|
|||
---
|
||||
title: "Kalender"
|
||||
subtitle: "Der Kalender des CCCB"
|
||||
date: 2025-02-26T10:00:00+02:00
|
||||
menu:
|
||||
main:
|
||||
parent: "Verein"
|
||||
---
|
||||

|
||||
|
||||
<!-- 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">←</button>
|
||||
<span id="current-month"></span>
|
||||
<button id="next-month">→</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>
|
|
@ -8,7 +8,7 @@ date: 2020-02-27T01:00:00+02:00
|
|||
#location: "CCCB"
|
||||
menu:
|
||||
main:
|
||||
parent: "veranstaltungen"
|
||||
parent: "Veranstaltungen"
|
||||
---
|
||||
|
||||

|
||||
|
|
|
@ -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"
|
||||
---
|
||||
|
||||

|
||||
|
||||
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!
|
||||
|
||||
|
|
|
@ -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"
|
||||
---
|
||||
|
||||

|
||||
|
|
|
@ -4,9 +4,11 @@ subtitle: "Die Vortragsreihe im CCCB"
|
|||
date: 2018-05-17T22:41:48+02:00
|
||||
menu:
|
||||
main:
|
||||
parent: "veranstaltungen"
|
||||
parent: "Veranstaltungen"
|
||||
---
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
|
|
@ -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
|
|
@ -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
|
@ -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
|
|
@ -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
|
@ -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"
|
||||
---
|
||||
|
||||

|
||||
|
||||
**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)
|
|
@ -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**.
|
||||
|
||||
|
|
|
@ -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_
|
||||
|
|
16
content/page/spieleabend.md
Normal 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"
|
||||
---
|
||||
|
||||

|
||||
|
||||
**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
|
@ -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"
|
||||
---
|
||||
|
||||

|
||||
|
||||
**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.
|
13
content/post/tag_des_offenen_hackerspace.md
Normal 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 :-)
|
||||
|
1
layouts/_default/baseof.calendar.html
Normal file
|
@ -0,0 +1 @@
|
|||
{{ block "main" . }}{{ .Content }}{{ end }}
|
21
layouts/_default/list.calendar.html
Normal 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
|
12
layouts/_default/list.xml.html
Normal 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>
|
21
layouts/_default/single.calendar.html
Normal 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
|
|
@ -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">
|
||||
|
|
16
layouts/events/single.html
Normal 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 }}
|
6
layouts/partials/favicons.html
Normal 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" />
|
|
@ -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
After Width: | Height: | Size: 3.7 KiB |
BIN
static/favicon-96x96.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
static/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/favicon.png
Normal file
After Width: | Height: | Size: 28 KiB |
1
static/favicon.svg
Normal file
After Width: | Height: | Size: 14 KiB |
54
static/img/Mastodon_mascot_vector_version.svg
Normal 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
After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 143 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 61 KiB |
BIN
static/img/club/Kochen_in_der_CCCB_Küche.jpg
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
static/img/club/dorfromantik-im-cccb.jpg
Normal file
After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 78 KiB |
21
static/site.webmanifest
Normal 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"
|
||||
}
|
BIN
static/web-app-manifest-192x192.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
static/web-app-manifest-512x512.png
Normal file
After Width: | Height: | Size: 17 KiB |
|
@ -1 +1 @@
|
|||
Subproject commit 3e59df5ca7f034c2ebbeac7ca0962b6e163c09e4
|
||||
Subproject commit 0699f2797d2b8c2da8a6a28da9ef4a8013f5f858
|
1
themes/blowfish
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 96a116a8b0354fc1042c968608a5c1f3001bcbef
|