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>
|
||
|---|---|---|
| .. | ||
| assets/css | ||
| content | ||
| layouts | ||
| static | ||
| deploy-ci.sh | ||
| deploy.sh | ||
| hugo.toml | ||
| README.md | ||
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.