furtka/website
Daniel Maksymilian Syrnicki b77ef80b56
All checks were successful
CI / lint (pull_request) Successful in 1m2s
CI / test (pull_request) Successful in 1m19s
CI / validate-json (pull_request) Successful in 55s
CI / markdown-links (pull_request) Successful in 27s
feat(website): legal pages (Impressum/Datenschutz) + auto-deploy on push-to-main
Two coupled changes that make sense to land together:

1. Legal pages required under German law
   - /imprint/ + /de/impressum/ — §5 DDG disclosure (contact is email
     plus Forgejo-Issues as the second quick-contact channel, per ECJ
     C-298/07 no phone number required)
   - /privacy/ + /de/datenschutz/ — Art. 13 GDPR minimum: server-log
     processing (IP, UA, URL, retention ≤30 days), no cookies, no
     tracking, no third-party embeds. RLP Landesbeauftragter as the
     competent supervisory authority.
   - Footer partial linked from every page, localized per language.
   - DE versions are legally binding; EN versions are courtesy
     translations noting that.

2. Auto-deploy wired up
   - New workflow .forgejo/workflows/deploy-site.yml fires on
     push-to-main with paths under website/**. Runs on the self-hosted
     runner, which *is* forge-runner-01 — so "deploy" is just a local
     rsync into /srv/furtka-site and a hugo build into
     /var/www/furtka.org. No SSH, no secrets.
   - website/deploy-ci.sh is the SSH-free counterpart of deploy.sh,
     invoked by the workflow.
   - compose.yml bind-mounts /srv/furtka-site and /var/www/furtka.org
     into the runner container at matching paths so the workflow can
     reach them. Requires a one-time `docker compose up -d` on the
     runner host to pick the mounts up.
   - deploy.sh is kept for out-of-band manual deploys (testing from a
     local branch, CI outage) but gets a header comment pointing at
     the CI path as the normal flow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 12:10:06 +02:00
..
assets/css feat: publish public website at furtka.org 2026-04-14 10:27:51 +02:00
content feat(website): legal pages (Impressum/Datenschutz) + auto-deploy on push-to-main 2026-04-18 12:10:06 +02:00
layouts feat(website): legal pages (Impressum/Datenschutz) + auto-deploy on push-to-main 2026-04-18 12:10:06 +02:00
static feat: publish public website at furtka.org 2026-04-14 10:27:51 +02:00
deploy-ci.sh feat(website): legal pages (Impressum/Datenschutz) + auto-deploy on push-to-main 2026-04-18 12:10:06 +02:00
deploy.sh feat(website): legal pages (Impressum/Datenschutz) + auto-deploy on push-to-main 2026-04-18 12:10:06 +02:00
hugo.toml feat: publish public website at furtka.org 2026-04-14 10:27:51 +02:00
README.md feat: publish public website at furtka.org 2026-04-14 10:27:51 +02:00

website/ — furtka.org

Hugo source for furtka.org. Intentionally minimal while the project is pre-alpha: a single idea page in English and German, nothing more. More pages will come back when there's something real to show.

Local build

cd website
hugo server        # http://localhost:1313

Requires Hugo extended ≥ 0.140.

Deploy

Hosted on forge-runner-01 (Proxmox VM, Ubuntu 24.04). Hugo runs on the VM; nginx serves the built output from /var/www/furtka.org. TLS is terminated by an upstream openresty reverse proxy — the VM itself only speaks plain HTTP.

First time only, on the VM:

ssh forge-runner
sudo /srv/furtka-site/ops/nginx/setup-vm.sh   # or copy the script over first

From then on, deploy from your dev machine:

./website/deploy.sh

The script rsyncs website/ to /srv/furtka-site/ on the VM and runs hugo --minify into /var/www/furtka.org.

Structure

hugo.toml            Hugo config (multilingual: en default, de)
content/             Markdown pages
  _index.md          Home (EN)
  _index.de.md       Home (DE)
layouts/             Custom inline theme — no external theme or framework
  _default/          baseof, single, list
  partials/          head, header, footer, gate SVG, lang switcher
  index.html         Home-only layout with editorial hero
assets/css/main.css  Stylesheet (fingerprinted + minified on build)
static/favicon.svg   Gate mark in crimson
deploy.sh            Rsync + remote Hugo build

Design

Modern-minimal on paper-white light / near-black dark. System-UI sans (no webfonts — zero external requests, matches the self-hosting ethos). Deep crimson accent, prefers-color-scheme switch.

The gate SVG is the one brand mark — a small wicket-gate glyph repeated in the header, footer, and favicon.