Back to the weekly digest

Boring Hannover

W41 · 2026

How boringhannover.de is built

BoringHannover turns the listings of Hannover's venues into a fast static site. A Python scraper collects and publishes the data, CI builds, scans and attests the images, and a single VPS serves them. There's no application database and nothing to run at request time. Select any part to see how it works.

1 1 2 2 3 3 4 4 5 5 6 6 A A B B C C D D GitHub · third party VPS · managed by Coolify Maintainer git push · PRs .github/dependabot.yml GitHub repo master · web_events.json github_sync.py GitHub Actions buildx · Trivy · attest .github/workflows/deploy.yml GHCR backend · frontend images ghcr.io Venue sites HTML · JSON · iCal sources/ Backend Python 3.14 · httpx · uv boringhannover.main Coolify scheduler · deploy API Object storage S3 API · write-once backup.py Umami analytics · Postgres nginx.conf Frontend nginx :8080 · Astro static Dockerfile.web Caddy reverse proxy · TLS Coolify proxy Cloudflare DNS · TLS · cache Visitors browsers 1 2 3 4 1 2 3 4 5 6 1 2 3 4

Dashed boxes are trust boundaries. The Caddy, Cloudflare and nginx log lines are paraphrased, not captured output.

  • 01Movie listings
    21
  • 02Concerts & events
    104
  • 03City occasions
    5
52.3759° N · 9.7320° E

Boring Hannover · MIT · Source · Made by Sia · Open source, for Hannover.

Maschsee · 78 ha · dug 1934–36