Every document that described the biography as a home-page section would now be
wrong, so each is corrected rather than left:
ki-all-mogotte.md gains 'Where it ended up' with the operator's reasoning, the
rejected /rolam option, and why the home page keeps a trace
AUDIT.md lever 2 carries a dated revision note (the audit itself is a
record of what was found, so it is annotated, not rewritten)
PREFLIGHT.md re-measured on the deployed page after the move:
1440: 6 780 -> 6 385 px (42% shorter than the old page)
390: 10 865 -> 10 145 px (49% shorter, 23.6 -> 12.0 screens)
sections 10 -> 9, layout families 10 -> 9, still no repeat
eyebrow allowance 4 -> 3, still 0 used
website/CHANGELOG the live change, with the layout bug that the deployed page
revealed and the markup did not
REPORT + STATUS what is live vs what is still waiting on the operator
The numbers moved because a whole section left the page; leaving the old ones in
place would have been a quiet overclaim in the other direction.
9.7 KiB
REPORT — home-page redesign, staged not switched (2026-10-10 → 11)
Written as
REPORT-<topic>.md, notREPORT.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". (Placement revised 2026-10-11: the full block lives on
/kapcsolat + /en/contact, which are LIVE; the home page keeps a portrait, one line and a link in
its closing call to action. See the last section.) 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 385 px (−42%) |
| Height, 390 px | 19 913 px (23.6 screens) | 10 145 px (12.0 screens, −49%) |
| 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) |
9 for 9, 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.pygate 3 requires every page in a language set to carry an identical footer. Verified on all 18 live URLs:em=0 en=1each. - 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.
curlwithAccept-Encoding: gzip, brreturns noContent-Encodingand the sameContent-Lengthas a plain request, for both the stylesheet (94 310 bytes) and the HTML. It is an nginx setting inmanifests/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-secondarywraps 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
- The audit claimed the numbered lists were the only users of JetBrains Mono. They were ten of
thirteen; the
3/2/1of the backup rule were the other three. Retiring the numbered lists alone would not have dropped the font. Corrected inAUDIT.mdas R6b, and the preview moves the 3-2-1 figures to the UI font, which is what actually took the font off the page. - 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. - The contrast script itself reported a false failure of 1.17:1 on the limits callout, by
treating the translucent
--warn-dimas 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 inPREFLIGHT.md: an instrument that can report a wrong number silently is not a measurement. - 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 --faston DooPlex at94ac6afb: 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.mdis the deliberate Windows adaptation the gate wants identical,fcntldoes not exist on Windows,relpathcannot crossC:→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.pygreen after every website commit.preview/index.htmlregistered inNO_TWIN, with the reason in a comment: a preview URL cannot be aTWINSpair, because gate 3 wants its nav identical toindex.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.pyOK. - 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
- Go or no-go on the home page. The preview is at
https://felhom.eu/preview/. - R-931, the compression setting — one nginx block, helps every page.
- R-929 blocks the apps page: the prose says 58, the page renders 59 cards, the catalog holds 60.
Added 2026-10-11 — the biography moved, and it is live
The operator looked at the preview and said the „Ki áll mögötte" section did not belong on the home page. He was right, and the reason is precise: it sat between the dashboard gallery and „Hogyan működik?", interrupting what it does → how you get it. Its closing sentence, „Ha írsz, én válaszolok", is a contact-page sentence.
/kapcsolatand/en/contactnow carry the full block. These are live pages, so the photograph and the five sentences are public from that commit. Both halves of the twin moved together.- The home page preview keeps a compact trace: a 56×70 portrait, one line, a link. R-11 („nobody is behind it”) was a home-page finding, so removing every human trace would have re-opened it.
- A dedicated
/rolampage was rejected: five sentences cannot carry one, and filling it would have meant inventing biography. .who*unscoped from.page-index, per69035f4af5's lesson about shared patterns.- One layout bug found and fixed by looking at the deployed page:
.who-miniwasinline-flexinside a centred block and flowed beside the button instead of under it. - Re-measured after the move: preview 6 385 px at 1440 and 10 145 px at 390, 9 sections, 9
layout families. No horizontal overflow at 390 on
/preview/,/kapcsolator/en/contact; every image loads;site.css?v=→ 14.