report + plan: the redesign session's record, and the order for the other pages
gates / gates (push) Successful in 6m31s

REPORT-redesign-2026-10-10.md (not REPORT.md: that file belongs to the kernel
night session de4a8d20 and is overwritten per session).

NEXT.md - the other pages in order with what each needs, and the traps:
  teszteles/en/testing first (the destination of every CTA, newest page)
  gyik/en/faq second, with the warning that gate 17 requires the FAQPage JSON-LD
    to EQUAL the visible answers, so every copy edit there is a two-place edit
  technologiak third ("Ipari szintu megoldasok" is the exact language the home
    page just removed)
  alkalmazasok is BLOCKED on R-929 - prose 58, page 59 cards, catalog 60
  adatkezeles/feltetelek are reviewed legal texts; a dash sweep there needs the
    operator's word separately and is not ours to take

  It also records the per-page em-dash count: 300 across 19 pages, the preview
  being the only page at zero.

STATUS.md - the operator's one screen, in plain language: the preview is waiting
on him, the two fixes that DID go live, and the two new decisions (R-931 the
missing compression, R-929 the app count).

website/CHANGELOG.md - the footer sweep and R-930, both with their measurements
and with the scope stated rather than implied.

Register 127 -> 129 (R-930, R-931 opened; none closed).
This commit is contained in:
2026-10-11 00:31:14 +02:00
parent 43b67283c3
commit 56c357c074
4 changed files with 301 additions and 3 deletions
+127
View File
@@ -0,0 +1,127 @@
# REPORT — home-page redesign, staged not switched (2026-10-10 → 11)
> Written as `REPORT-<topic>.md`, not `REPORT.md`: the shared file belongs to the kernel-night
> session (`de4a8d20`) and is overwritten per session (`CLAUDE.md` §Workflow).
## In plain words
The website's home page looked like many AI-made sites, and the operator asked for that to be fixed.
It now has a redesigned version **on a hidden test address**, `https://felhom.eu/preview/`. The
operator looked at it and chose to **sit with it**, so **the live home page is unchanged**.
Two other things the operator approved at the same time **are live on every page now**: the dash in
the footer line is the correct Hungarian one, and the blue button is bigger and bolder so it meets
the contrast standard it has never met.
Nothing was published that the operator did not approve, and no claim on the new page is new.
## What was done
**Part 0 — the skill.** `design-taste-frontend` (taste-skill) is installed at
`~/.claude/skills/design-taste-frontend/` as a **verbatim copy** of
`github.com/Leonxlnx/taste-skill` @ `717446e07a78d4e6d7918b1fde1a263378eebac9` (2026-10-09, MIT).
The body was verified **byte-identical line by line**; the only addition is a provenance block, and
the frontmatter still opens on line 1 because a line above `---` would stop the skill loading at all.
The repo holds scripts (`skill.sh`, `scripts/*.mjs`) but **the skill folder holds only `SKILL.md`**,
so no script was copied and none was run; the installer's `npx` path was not used. `LICENSE` sits
beside it. `skills/felhom-web-design/SKILL.md` (137 lines, `check_skills.py` PASS) is the override
layer and names every conflict. `skills/SOURCES.md` records the provenance and the kept/overridden
table.
**Part A — the audit.** `documentation/audits/redesign-2026-10-10/AUDIT.md`, measured against the
**live** site: 12 patterns to retire, each naming the taste-skill rule it breaks, 7 to keep, dial
reading 3/2/4 → 6/3/4, and 8 levers. The operator approved all 8 at STOP 1, chose to leave the
indexed `<title>`/OG/Twitter strings alone, and chose the outdoor photograph.
**Part B — „Ki áll mögötte".** Five sentences, first person, every claim traced in
`ki-all-mogotte.md` together with what was left out and why. The operator's CV was read for one fact
only; employers, address and phone are **not** on the page. Approved at STOP 2.
**Part C — the preview.** `website/preview/index.html`, `noindex` + `Disallow: /preview/`, not in the
sitemap, linked from nowhere.
**Part D — not done.** The operator chose „not yet" at STOP 3. The preview stays up; `NEXT.md` holds
the plan for the other pages.
## Measurements (browser, on the deployed pages)
| | Old home | New preview |
|---|---|---|
| Height, 1440 px | 10 922 px | **6 780 px** (−38%) |
| Height, 390 px | 19 913 px (23.6 screens) | **10 865 px** (12.9 screens, −45%) |
| Initial load, same conditions | 13 requests, 308 KB | **11 requests, 260 KB** |
| Fully loaded | 16 requests, ~540 KB | 15 requests, **~545 KB** |
| Third-party hosts | 0 | **0** |
| Em dashes in the page's own copy | 18 | **0** |
| Layout families | 8 for 11 sections (`why-grid` ×3, `apps-showcase` ×2) | **10 for 10, none repeated** |
| JetBrains Mono | fetched, 31 KB, for 13 characters | **not fetched** |
| Horizontal overflow at 390 px | none | none (`clientWidth == scrollWidth`) |
**The weight claim, stated honestly.** The *first screen* is 48 KB lighter. *Fully scrolled* the page
is about the same: the 93 KB portrait is paid for by dropping the 49 KB decorative `logo.png` and the
31 KB mono font. It is a first-impression win, not a bandwidth win.
## Shipped live (operator-approved at STOP 3)
- **The footer dash**, on all 21 page files. It could never have been a one-page edit: `site_gates.py`
gate 3 requires every page in a language set to carry an identical footer. Verified on all 18 live
URLs: `em=0 en=1` each.
- **R-930, the primary CTA.** `.cta-button` → 1.2rem/700, which is ≥18.66 px at ≥700 weight, so WCAG
counts it as large text and the floor drops to 3:1, which 4.01 clears **without touching `--blue`**
(shared with the hub and controller UIs). Padding trimmed 32→26 px to protect the one-line rule.
Verified in the browser on 11 pages at 390 px and 1440 px: every primary button **one line**, **no
page overflows**.
- `site.css?v=` → 12 on all 21 files. The pages sat at v=10 and the preview at v=11; leaving them
split would have served returning visitors the old stylesheet.
## Things found that were not the task, and what happened to them
- **R-930** (filed, then fixed on the operator's instruction): the primary CTA measured 4.01:1
against a 4.5:1 floor. **Measured identical on the live page**, so pre-existing and site-wide, not
a regression of this redesign.
- **R-931** (filed, not fixed): **felhom.eu serves no compression at all.** `curl` with
`Accept-Encoding: gzip, br` returns no `Content-Encoding` and the same `Content-Length` as a plain
request, for both the stylesheet (94 310 bytes) and the HTML. It is an nginx setting in
`manifests/webpage.yaml`, outside this task's scope. It is worth more than this entire redesign.
- **300 em dashes remain in the other 19 pages' bodies** (gyik 53, en/faq 53, adatkezeles 33, …).
Enumerated per page in `NEXT.md`.
- **A `.cta-button-secondary` wraps to 2 lines at 390 px** on the home page. That class was not
changed; pre-existing, mobile only, noted not filed (the size rule).
## Corrections made to this session's own work
1. **The audit claimed the numbered lists were the only users of JetBrains Mono.** They were ten of
thirteen; the `3`/`2`/`1` of the backup rule were the other three. Retiring the numbered lists
alone would **not** have dropped the font. Corrected in `AUDIT.md` as **R6b**, and the preview
moves the 3-2-1 figures to the UI font, which is what actually took the font off the page.
2. **Three new styles shipped below WCAG AA in the first pass** (3.88 / 3.14 / 3.57). Found by the
contrast check, fixed to `--text-2`, re-measured on the deployed file: **7.56 / 6.12 / 6.96**.
3. **The contrast script itself reported a false failure** of 1.17:1 on the limits callout, by
treating the translucent `--warn-dim` as opaque. Compositing the whole ancestor stack gives the
true **5.67:1**, a pass. The three real failures in the same run were real. Recorded in
`PREFLIGHT.md`: an instrument that can report a wrong number silently is not a measurement.
4. **The page builder first wrote LF** and turned the nav/footer gate red for the preview — exactly
the trap `website/CHANGELOG.md`'s own 2026-10-10 morning entry records. It now writes BOM + CRLF
and asserts both.
## Gates, register, evidence
- `scripts/repo_gates.py --fast` on DooPlex at `94ac6afb`: **all 19 gates OK**. The two failures seen
on the Windows workstation (`instructions`, `script-tests`) are environmental and pre-date this
work: `E:\git\CLAUDE.md` is the deliberate Windows adaptation the gate wants identical, `fcntl`
does not exist on Windows, `relpath` cannot cross `C:`→`E:`, and the cp1250 console kills a gate
mid-verdict (the documented trap, which bit twice in this session and was worked around by printing
escaped output).
- `site_gates.py` green after every website commit. `preview/index.html` registered in `NO_TWIN`,
with the reason in a comment: a preview URL **cannot** be a `TWINS` pair, because gate 3 wants its
nav identical to `index.html`'s (globe → `/` and `/en/`) while the twin check wants the globe
pointing at the pair's own URLs.
- **Register: 127 → 129. Opened 2 (R-930, R-931), closed 0.** `register_shape_gate.py` OK.
- Evidence in `documentation/audits/redesign-2026-10-10/`: `AUDIT.md`, `PREFLIGHT.md`,
`ki-all-mogotte.md`, `NEXT.md`, `body.html`, `before/` (3 shots), `after/` (4 shots), `photo/`.
## Waiting on the operator
1. **Go or no-go on the home page.** The preview is at `https://felhom.eu/preview/`.
2. **R-931**, the compression setting — one nginx block, helps every page.
3. **R-929** blocks the apps page: the prose says 58, the page renders 59 cards, the catalog holds 60.
+29 -3
View File
@@ -1,9 +1,35 @@
# STATUS — what works, what's broken, what's next
# STATUS — what works, what's broken, what's next
**Ready for the first real tester (Tester-2): yes. Tester 2 (a laptop) is off; nothing was sent to it.**
**Updated 2026-10-10 (evening): hub 0.146.0; demo-hp, demo-felhom and Tester 1 run agent 0.154.0 and controller
0.307.0. The open-items list is at 127 (was 126). Reports: `REPORT-testers-2026-10-10.md`, `REPORT-register-shrink-2026-10-10.md`, `REPORT-new-apps-2026-10-10.md`, `REPORT-release-2026-10-10.md`, `REPORT-break-the-circle-2026-10-09.md`, `REPORT-dooplex-survival-2026-10-09.md`, `REPORT-day4-2026-10-09.md`.**
**Updated 2026-10-11: hub 0.146.0; demo-hp, demo-felhom and Tester 1 run agent 0.154.0 and controller
0.307.0. The open-items list is at 129 (was 127). Reports: `REPORT-redesign-2026-10-10.md`, `REPORT-testers-2026-10-10.md`, `REPORT-register-shrink-2026-10-10.md`, `REPORT-new-apps-2026-10-10.md`, `REPORT-release-2026-10-10.md`, `REPORT-break-the-circle-2026-10-09.md`, `REPORT-dooplex-survival-2026-10-09.md`, `REPORT-day4-2026-10-09.md`.**
## Sunday 2026-10-11: a redesigned home page is waiting for you, and two site-wide fixes went live
- **The new home page is at <https://felhom.eu/preview/>.** Open it on your computer and your phone
and compare it with <https://felhom.eu/>. **The live home page is unchanged** — you said you wanted
to sit with it, so nothing was switched. **This is waiting on you.**
It is a third shorter on a computer and **half as long on a phone** (23.6 screens of scrolling down
to 12.9). The hero shows the real dashboard instead of the logo, there is a new **„Ki áll mögötte"**
section with your photo and five sentences in your own words, and the first sentence a visitor
reads is now four facts instead of „Professzionális otthoni szerver telepítés és üzemeltetés".
- **Two things you approved DID go live, on every page:** the footer line now uses the correct
Hungarian dash, and **the blue button is bigger and bolder** so it finally meets the contrast
standard. That button has never met it — it measured the same on the old page — so this was a
real defect on 16 pages, not something the redesign introduced.
- **Your photo:** the original stays outside the repository. Everything identifying was stripped and
then checked by reading the file back: no location, no phone model, no timestamp. (For the record,
that photo never carried a location tag in the first place.)
- **Two new things to decide, both found while checking:**
- **The website compresses nothing.** The stylesheet travels as 94 KB of raw text where it could be
about a fifth of that. One setting, helps every page, worth more than the whole redesign (R-931).
- **The apps page still cannot be touched** until the app count disagreement is settled: the words
say 58, the page shows 59 cards, the catalog holds 60 (R-929).
- **The rest of the site still has 300 of the wrong dash** in its text, mostly in the FAQ (53 in each
language). That is page-by-page work, planned in
`documentation/audits/redesign-2026-10-10/NEXT.md`, and it should wait until you decide on the home
page.
## Saturday 2026-10-10 (evening): the website now asks for testers properly, and five posts are queued
@@ -0,0 +1,117 @@
# The other pages, in order, with what each needs
Written 2026-10-11 at the end of the home-page redesign session. The home page's new design is
**staged at `/preview/` and not live** — the operator chose to sit with it. Nothing below should start
before that decision, because every page inherits whatever the home page settles.
## What already reached every page in this session
Two things were approved at STOP 3 and are **live on all 18 public pages now**:
- The shared footer's em dash became the correct spaced en dash.
- `.cta-button` is 1.2rem/700, which puts it in WCAG's large-text band and clears the 3:1 floor
(R-930). Verified one line and no overflow on every page at 390 px and at 1440 px.
Neither is page-specific work, and neither needs repeating below.
## The measured backlog this session uncovered
**300 em dashes remain in the bodies of the other 19 pages.** The preview is the only page at zero.
Per page, counted 2026-10-11:
| Page | `—` in body | Twin | `—` in twin |
|---|---|---|---|
| `gyik.html` | **53** | `en/faq.html` | **53** |
| `adatkezeles.html` | **33** | none (Hungarian only, R-813) | — |
| `szolgaltatasok-nonpublic.html` | 27 | none (hidden) | — |
| `teszteles.html` | 23 | `en/testing.html` | 24 |
| `index.html` | 17 | `en/index.html` | 19 |
| `technologiak.html` | 8 | `en/technology.html` | 8 |
| `feltetelek.html` | 7 | none (Hungarian only) | — |
| `biztonsagimentes.html` | 5 | `en/backups.html` | 5 |
| `kapcsolat.html` | 5 | `en/contact.html` | 6 |
| `alkalmazasok.html` | 3 | `en/apps.html` | 1 |
| `letoltes.html` | 1 | `en/download.html` | 2 |
A dash sweep is **not** a mechanical find-and-replace. In Hungarian the gondolatjel is a spaced en
dash, but most of these want a colon, a comma or a full stop instead, and `felhom-web-design` §4
rations the en dash to one per paragraph. Each one is a sentence-level decision.
---
## The order, and why
### 1. `/teszteles` + `/en/testing` — do these first
The destination of every call to action on the site, and the newest page, so the least likely to
need structural change.
- **Needs:** the dash sweep (23 + 24). A read against the home page's new voice once that is settled.
- **Watch:** it was styled in `69035f4af5` by joining the `.page-technologiak` scope, and it carries
justified body copy that no other page uses. Do not "tidy" that into the shared rules without
checking both pages.
### 2. `/gyik` + `/en/faq` — the biggest content win and the biggest trap
106 dashes between them, 41 questions each.
- **Needs:** the dash sweep, and the long-list treatment the home page just got. 41 questions in one
flat list is the same defect as the home page's ten equal cards.
- **The trap, stated plainly:** `site_gates.py` gate 17 requires the `FAQPage` JSON-LD to equal the
**visible** questions and answers exactly. Every copy edit is therefore a **two-place edit**, and
the gate will catch a half-done one. Budget for that.
### 3. `/technologiak` + `/en/technology` — the worst remaining marketing language
- **Needs:** „Ipari szintű megoldások, otthoni környezetben" and „Professzionális Technológiák" are
the exact phrasing the home page just removed. Replace with what the box actually runs.
- **Note:** the home page's new band already links here and names Docker, Proxmox, the three backup
tiers and the tunnel. Keep the two consistent.
### 4. `/alkalmazasok` + `/en/apps` — blocked on a number
- **Needs:** only 4 dashes, so the copy work is small.
- **Blocked on R-929:** the prose says **58**, the page renders **59** cards, the catalog holds **60**
templates. The home page's new band says 58, matching every other prose claim on the site. **Do not
touch any app count until R-929 is settled**, or the site will disagree with itself in a new place.
### 5. `/biztonsagimentes` + `/en/backups`
- **Needs:** 10 dashes. The 3-2-1 figure on the home page moved off the mono font (R-6b); check
whether this page uses the same pattern and should follow.
### 6. `/kapcsolat` + `/en/contact`
- **Needs:** 11 dashes. **Do not touch the form's field names, order or endpoint** — the analytics and
the `?tema=` preselect depend on them, and taste-skill §11.F puts form fields behind an explicit
approval anyway.
### 7. `/letoltes` + `/en/download` — smallest, 3 dashes
- **Watch:** `site_gates.py` checks the two download pages agree on the ISO file name and its sha.
A copy edit must not disturb those strings.
### 8. `/adatkezeles` and `/feltetelek` — legal, text frozen
33 and 7 dashes, and **the task that created this plan explicitly excluded their text**. These are
reviewed legal documents with dated records in `documentation/legal/`. A dash sweep here is a change
to a legal text and needs the operator's word, separately. Layout and typography may be improved
without touching a word.
### 9. `/404.html` and `/szolgaltatasok-nonpublic` — last
Neither is in the conversion path. `404.html` has no twin by design; the prices page is hidden and
stays Hungarian.
---
## Two things that will pay more than any page
1. **R-931 — nothing on felhom.eu is compressed.** `site.css` ships as 94 310 raw bytes with no
`Content-Encoding`, even when gzip is offered. Roughly a fifth of that with gzip, on **every**
page. It is an nginx setting in `manifests/webpage.yaml`. This is worth more than the whole
redesign and it is one config block.
2. **The shared stylesheet is now 94 KB and only ever grows.** This session added ~7 KB and every
page pays it uncompressed. Before the next page lands, it is worth asking whether the retired
home-page classes (`.why-grid`, `.problem-grid`, `.service-list`, `.apps-showcase`,
`.process-steps`, `.step-number`, the `float` keyframe) can be deleted — but **only after the
switch**, because until then `index.html` still uses every one of them.
## The method that worked, so nobody re-derives it
`resize_window` does not move `window.innerWidth` on this workstation and DevTools device mode
cannot be driven from the extension. Render the page in a **same-origin iframe** at the width you
want and screenshot that rectangle: the media queries fire on the iframe's width. Two positive
observables prove it is the real mobile layout rather than a squeezed desktop one — the hamburger
computes to `display: block`, and `clientWidth == scrollWidth`. In a **background** tab the lazy-load
observer never fires, so set `loading = 'eager'` and re-assign `src` before measuring or capturing,
or you will photograph a page of empty image boxes. Recorded in `felhom-web-design` §10.
+28
View File
@@ -1,3 +1,31 @@
## 2026-10-11 — the footer dash site-wide, and the primary button meets WCAG AA
Two operator decisions taken at the redesign review. **The home page itself was NOT switched** — the
operator chose to sit with the preview, so `/` still serves the old design. Only these two things
changed on it, and on every other page.
- **The footer's em dash became the correct spaced en dash, on all 21 page files** (12 Hungarian,
8 English, plus the preview). It could never have been a one-page edit: `site_gates.py` gate 3
requires every page in a language set to carry an **identical** footer. Verified on all 18 live
URLs after deploy: `em=0 en=1` on each.
**Scope, stated:** this clears the footer only. **300 em dashes remain in the bodies of the other
19 pages** (`gyik` 53, `en/faq` 53, `adatkezeles` 33, `szolgaltatasok-nonpublic` 27, `teszteles` 23,
`en/testing` 24, `index` 17, `en/index` 19, …). Enumerated per page in
`documentation/audits/redesign-2026-10-10/NEXT.md`. The preview is the only page at zero.
- **R-930 — `.cta-button` is now 1.2rem/700** (was 1rem/600). White on `--blue` measures **4.01:1**,
under WCAG AA's 4.5:1 floor for body text; at ≥ 18.66 px and ≥ 700 weight WCAG counts the label as
**large text**, where the floor is 3:1 and 4.01 clears it. Chosen by the operator over darkening
`--blue`, which is shared with the hub and controller UIs. Horizontal padding trimmed 32→26 px to
protect the one-line rule for the longest label.
**Measured, not assumed:** every primary button renders on **one line** and **no page overflows**,
checked in the browser on 11 pages at both 390 px and 1440 px. The defect was pre-existing and
site-wide — it measured the same 4.01:1 on the live page before any of this work — so the fix
reaches the primary button on 16 pages, which is the point. `.cta-button-secondary` is untouched at
7.17:1.
- **`site.css?v=` → 12 on all 21 files.** The pages sat at `v=10` and the preview at `v=11`; leaving
them split would have served a returning visitor the old stylesheet and the change would have
looked like it did not deploy.
## 2026-10-10 (este) — a redesigned home page, staged at /preview/
- **Why:** the home page read as AI-made — eleven sections but only eight layout families, every