Files
windy-git/deploy/branding/README.md
Grant Whitmer eae1bff50b
All checks were successful
check / gate (push) Successful in 19s
canary / probe (push) Successful in 8s
G2.3: Windy Git branding — and get it out of one host's disk into the repo
The front end was 100% stock Gitea: green teacup, "Gitea: Git with a cup of
tea", "A painless, self-hosted Git service". G2.3 was specified in the plan with
an acceptance test and never executed, and nothing enforced it.

Now: Windy Git name, wind-mark logo, brand-blue accent, and a landing page that
says what this actually is. Uses Gitea's SUPPORTED surface (custom templates +
public assets) so upstream upgrades keep arriving — no source modified (D-2/I-1).

Two traps this cost, both now documented and tested:

1. GITEA__DEFAULT__APP_NAME does not work. Gitea reads APP_NAME from the TOP
   LEVEL of app.ini; the env var created a literal [default] section that Gitea
   ignores, so the installer's stock APP_NAME kept winning while the config
   looked correct. The env-to-ini pass also APPENDED a second APP_NAME rather
   than replacing the first — a new variant of the documented G4A.3 trap.

2. Cloudflare caches /assets/* for 6h and no token in this stack can purge, so
   the new logo and CSS were invisible while being correct at origin. Brand
   assets now carry a VERSION IN THE FILENAME; bump it on every change.

Committed with an idempotent apply.sh, because applying it straight to Veron's
disk first was itself the config-drift trap this project documents: a rebuild
would have silently reverted to stock Gitea.

85 tests green.

Co-Authored-By: Claude (Fable 5) <noreply@anthropic.com>
2026-08-14 09:08:48 -04:00

1.4 KiB

Windy Git branding (G2.3)

Gitea's supported customisation surface: custom templates and public assets. No Gitea source is modified, so upstream upgrades keep arriving (D-2, I-1).

deploy/branding/  →  $GITEA_CUSTOM (/data/gitea) in the container
                  →  /srv/windygit/git/gitea/ on Veron 1

Apply with ./deploy/branding/apply.sh.

Two traps this cost, both worth knowing

1. GITEA__DEFAULT__APP_NAME does not work. Gitea reads APP_NAME from the top level of app.ini (before any [section]). The env var instead created a literal [default] section, which Gitea ignores — and the installer's stock APP_NAME kept winning, so the site said "Gitea: Git with a cup of tea" while the config looked correct. Worse, the env-to-ini pass appended a second APP_NAME rather than replacing the first. apply.sh sets it at the top level directly.

2. Cloudflare caches /assets/* for 6 hours and no token in this stack can purge. Editing a fixed filename leaves the old bytes live for hours — the new logo and CSS were both invisible while being correct at origin. Version the filename (theme-windy.v2.css) on every brand change; a ?query is not enough because some caches ignore it.

The nav logo is swapped in CSS rather than by overriding Gitea's navbar template — a one-line rule instead of a forked template that would drift.