56c357c074
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).
128 lines
8.0 KiB
Markdown
128 lines
8.0 KiB
Markdown
# 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.
|