report + plan: the redesign session's record, and the order for the other pages
gates / gates (push) Successful in 6m31s
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:
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user