CCCB Website (https://berlin.ccc.de/)
  • JavaScript 52.7%
  • HTML 29%
  • CSS 12.6%
  • Nix 4.6%
  • Shell 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Hauke Mehrtens cd39842ac0 Show event times in Berlin time
`toLocaleString()` was given the German locale but no time zone, so it printed
the time in whatever zone the browser of the visitor is set to. The events
happen in Berlin, so this is only correct for visitors who are in Berlin.
Somebody reading the start page from Sydney was told the Plenum of Tuesday
20:00 takes place on Wednesday at 04:00.

Format in Europe/Berlin explicitly. For an event that names a point in time
only the printing was wrong, picking and sorting work on absolute points in
time and were not affected.

An all day event carries a date, and a date has neither a time nor a zone: its
digits are the day itself. `toJSDate()` reads them as midnight in the zone of
the browser, so the point in time that is then printed in Berlin time is off by
the offset between the two, which puts a bogus time of day on the entry and,
far enough east or west, the wrong day. An event on 30.08. was announced as:

  Berlin       Sonntag, 30.08., 00:00 Uhr
  Los Angeles  Sonntag, 30.08., 09:00 Uhr
  Tokio        Samstag, 29.08., 17:00 Uhr

Keep the digits of the date and read them as UTC, which no browser setting
moves, and print an all day event in UTC and without a time of day. Berlin,
Tokyo, Los Angeles and Kiritimati all say "Sonntag, 30.08." now, while a timed
event keeps saying "Sonntag, 30.08., 19:00 Uhr" everywhere. Sorting improves
with it, an all day event no longer changes its place in the list depending on
where the visitor sits.

The published calendar has no all day events today, they can be created in the
CalDAV calendar the export comes from.

Drop the two replacements around the formatted date while touching it. The
first removes the comma after the weekday and the second puts it back, so they
cancel each other out:

  "Samstag, 22.08., 17:00" -> "Samstag 22.08., 17:00" -> "Samstag, 22.08., 17:00"

Fixes: c28f04c6e8 ("switch to ics files; make calendars work; fix some minor issues")
Assisted-by: Claude:claude-opus-5
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-08-23 01:07:25 +02:00
.forgejo/workflows Delete .forgejo/workflows/test.yaml 2026-08-22 15:22:52 +02:00
archetypes Move out datengartens into their own section 2018-05-21 18:31:39 +02:00
assets switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
config/_default switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
content switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
i18n fix 404 2025-06-06 18:39:07 +02:00
layouts Behebe Layoutauswahl unter aktuellem Hugo. 2026-07-04 22:22:53 +02:00
static Show event times in Berlin time 2026-08-23 01:07:25 +02:00
themes add optional nix flake 2025-06-05 21:51:31 +02:00
tools switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
.editorconfig switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
.gitignore README: describe the calendar as it is built today 2026-08-22 21:22:02 +02:00
.gitmodules removed old beautifulhugo theme 2025-03-12 12:50:25 +01:00
.hugo-params improved calendar and fixed url temporarily 2025-03-12 16:06:29 +01:00
build.sh switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
devShells.nix split flake into multiple files 2025-06-07 15:40:38 +02:00
flake.lock switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
flake.nix switch to ics files; make calendars work; fix some minor issues 2026-08-12 02:01:58 +02:00
LICENSE Add LICENSE 2018-08-14 23:11:06 +02:00
old_config.yaml.txt new images, new content, new theme almost finished 2025-02-27 00:21:42 +01:00
packages.nix flake lib.mkWwwContent 2025-06-07 19:22:56 +02:00
README.md README: describe the calendar as it is built today 2026-08-22 21:22:02 +02:00
TODO.md update readme, markdown lint 2025-06-07 15:35:43 +02:00

CCCB Website

This is the website of the CCCB.

CCCB logo

Getting started

  1. Get Hugo: https://gohugo.io/getting-started/installing

  2. Clone this repo (--recursive is needed to check out submodules)

    git clone --recursive https://git.berlin.ccc.de/cccb-website-team/www.git cccb-website
    
  3. Switch directory

    cd cccb-website
    
  4. Run hugo webserver

    hugo serve
    
  5. Point your browser to: http://localhost:1313/

Every change you make on the project will be reflected in your browser as long as hugo serve is running.

The "Nächste Veranstaltungen" table on the home page and the calendar under /verein/calendar/ are rendered in the browser by static/js/upcoming.js and assets/js/calendar.js. Both fetch /calendars/all.ics, which is not generated by Hugo and is not part of this repo — it is published separately on the web server. Without it both tables stay empty. Download the published calendar into static/, which Hugo serves under the same path, and they work locally, under hugo serve as well as in a built site:

mkdir -p static/calendars
curl -o static/calendars/all.ics https://berlin.ccc.de/calendars/all.ics

The file is only there to look at the site, it is not checked in. Download it again whenever you want the events that are currently published.

Hugo does generate an .ics feed per section (for example /veranstaltungen/index.ics) from the dtstart, dtend and rrule front matter of the pages in content/veranstaltungen/, using the .ics templates under layouts/.

To build the site for upload, run:

./build.sh

This deletes public/ and runs hugo with the parameters from .hugo-params. To build with nix instead: nix build '.?submodules=1#production-content'

Making a change

  1. Use your local dev setup (see Getting started) or via the Forgejo editor.
  2. Make your change in staging branch.
  3. Commit (and push) your change.
  4. GitHub Actions is running the release workflow.
  5. Create a merge request to merge changes from staging to production branch. Ask somebody to check merge request or if small change, merge yourself.
  6. GitHub Actions is running the release workflow.
    • If successfull, check Website if change is correct.
  7. Profit!

Nix stuff

  • After entering the shell with nix develop, hugo is available and hugo serve and ./build.sh should work
  • You can build the staging and production builds with nix build .#staging-content and nix build .#production-content
  • Do not update the nixpkgs branch - 25.05 contains a newer hugo version that is incompatible with the theme (last checked June 2025)

Made with ❤️ and Hugo.