• v4.0.0 22694da6fe

    v4.0.0
    All checks were successful
    deploy / build-and-push (release) Successful in 1m9s
    CI / check (push) Successful in 1m55s
    Stable

    clarity released this 2026-09-09 20:57:59 +00:00 | 1 commits to main since this release

    Breaking

    • The web UI is gone. The info-beamer package (package-buergerschule) renders the
      schedule itself from GET /api/events, and package-display-controller, the consumer
      of /api/hours, is retired. Nothing renders the HTML pages any more, so /,
      /wochenplan, /no-zoom and /logo.png no longer exist; a kiosk browser still
      pointed at them gets a JSON 404. Next.js, React and Tailwind are removed with them.
      What remains is an API-only service on a plain node:http server: /api/events,
      /api/hours and the new /api/health.

    • The container healthcheck target changed from /logo.png to /api/health.
      The quadlet unit in deploy/podman/event-display.container carries the new
      HealthCmd. A host still probing /logo.png will mark the new image unhealthy and
      podman-auto-update will roll back to v3.2.0 in a loop — see the upgrade notes.

    • [frontend], calendar.refreshInterval and calendar.timeout have no meaning any
      more. They are still accepted and ignored, so an existing config.toml keeps
      validating unchanged.

    Changed

    • /api/events fetches each calendar once per request instead of once per day.
      A poll of the default 7-day feed used to send one CalDAV REPORT per calendar per
      day — 84 requests against Nextcloud for 12 calendars, about 2.5 s, every minute. One
      REPORT per calendar now spans the whole window and the days are derived locally, so
      a poll costs 12 requests and well under a second. The response is unchanged.

    • A single unreachable calendar no longer takes the whole feed down. A calendar
      that times out (20 s), answers with an error status or returns an unparseable
      response is logged on stderr as calendar <name>: … and left out of that response;
      the other rooms are served normally with HTTP 200. Only when no calendar at all
      could be read do /api/events and /api/hours answer 502, which makes the
      info-beamer package keep its cached copy. Previously any single failure was a 502
      that did not name the calendar.

    • The image is smaller (about 182 MB instead of 211 MB) and runs node dist/server.js
      as user app; the port, CONFIG_PATH and the bind-mounted config.toml work as
      before.

    Upgrade notes

    Update the quadlet unit on the host before the new image is pulled: replace the
    HealthCmd line in ~/.config/containers/systemd/event-display.container with the one
    from deploy/podman/event-display.container (/api/health instead of /logo.png),
    then systemctl --user daemon-reload. Without that, the auto-update healthcheck fails
    and the host rolls back to v3.2.0.

    No changes to config.toml are required. The [frontend] section and the
    refreshInterval / timeout keys can be deleted at leisure; they do nothing now.

    If a kiosk browser or bookmark still opens / or /wochenplan, retire it: the
    schedule is rendered by the info-beamer package now. /api/events and /api/hours
    keep their query parameters and response shapes.

    Downloads