803af4798d
gates / gates (push) Successful in 3m54s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
58 lines
3.5 KiB
Markdown
58 lines
3.5 KiB
Markdown
---
|
||
paths: ["website/**"]
|
||
---
|
||
|
||
# Website — build, deploy, and the encoding fences
|
||
|
||
## Deploy
|
||
|
||
The website **auto-deploys via git-sync from `main`** — just push, live in 1–2 min. No ArgoCD sync,
|
||
no image build. Emergency edits: https://files.felhom.eu.
|
||
|
||
**Do NOT pin the website to the installer tag.** The sparse-checkout used to cover `/website/` and
|
||
`/scripts/` in one sync; pinning that would turn every copy edit into a release. The installer's
|
||
tag-based publishing is a separate mechanism — see the R-110 fence in the repo core `CLAUDE.md`.
|
||
|
||
## Gates
|
||
|
||
Website changes go through `python3 scripts/repo_gates.py`, which runs `site_gates.py`. **A new page
|
||
must be registered in that gate** — in `TWINS` together with its English twin, or by name in `NO_TWIN` —
|
||
or it is unchecked (and the gate's walk refuses it).
|
||
|
||
`site_gates.py` asserts: BOM, emoji, nav/footer consistency **per language set**, analytics, CDN, design
|
||
tokens, no embedded `<style>` blocks, cache-busting, the two download pages agreeing, and since 2026-10-08:
|
||
the **twin gate** (every public Hungarian page has its English twin and back, matching `hreflang`, the nav's
|
||
language switch pointing at its own twin, `canonical` at itself), `lang` per set, the same apps on both apps
|
||
pages, no Hungarian on an English page (accent + ASCII-folded stems, controls printed), the FAQ JSON-LD equal
|
||
to the visible answers, and nothing after `</html>`.
|
||
|
||
## The two languages (operator ruling 2026-10-08, `10-localisation.md` §10.7)
|
||
|
||
- **The Hungarian site is the default** (`x-default`). Every public Hungarian page has an English twin
|
||
under `/en/` (`/alkalmazasok` → `/en/apps`, `/technologiak` → `/en/technology`, `/biztonsagimentes` →
|
||
`/en/backups`, `/gyik` → `/en/faq`, `/kapcsolat` → `/en/contact`, `/letoltes` → `/en/download`).
|
||
Exceptions, by name: `szolgaltatasok-nonpublic.html` (stays Hungarian) and `404.html`.
|
||
- **A new public page needs its twin in the same commit.** A change to a page's claims is made on both
|
||
pages of the pair in the same commit; the English promises nothing the Hungarian does not.
|
||
- English words: the dashboard's (`en.json`: Dashboard, Launcher, Backup); app names and „Felhom" stay;
|
||
no „please"/„kindly"; prices stay in Ft. The English footer says Felhom serves households in Hungary.
|
||
- No Accept-Language redirect and no language cookie — a visitor lands on the page they asked for.
|
||
- **The switch is a globe** (operator ruling 2026-10-08, like the dashboard's): a `<details class="lang-globe">` in
|
||
the nav listing every language in its own name, the current one marked. **A new language = one entry in
|
||
`LANGS` in `scripts/site_gates.py` (and the globe's list) + its twin pages** — nothing else in the switch changes.
|
||
|
||
## The encoding fences
|
||
|
||
- **All `website/` HTML is UTF-8 *with BOM*. Preserve it.** An editor that strips the BOM is a
|
||
silent, whole-file change.
|
||
- **Emoji count is zero.** The design system forbids them; the gate enforces it.
|
||
- Cache-busting: bump the asset query string when CSS or JS changes, or browsers serve the old file
|
||
and the change looks like it did not deploy.
|
||
|
||
## Copy
|
||
|
||
Customer-facing copy is **Hungarian first, with an English twin** (above); tone and terminology rules
|
||
live in the **`felhom-ui-design`** skill — use it rather than inventing phrasing. Every claim must rest on
|
||
a PROVEN-LIVE or IMPLEMENTED row of `00-capability-map.md` (the claim table of the last refresh:
|
||
`documentation/audits/website-refresh-2026-10-08/claims.md`). Operator-facing text is English.
|