Part C. The live home page is NOT touched: every CSS rule added is a new class
under .page-index, so index.html renders byte-for-byte as before.
website/preview/index.html (BOM + CRLF, noindex, Disallow: /preview/)
Ten sections, ten different layout families. The three repeats the audit found
are gone: why-grid ran 3x and apps-showcase 2x.
- hero: a real dashboard screenshot instead of the logo, sized by its content
instead of a forced 100vh band, no infinite float animation, and a sentence
made of four facts instead of "Professzionalis ... telepites es uzemeltetes".
- the ten capability cards become three labelled clusters. Their TEXT is
verbatim: the audit's own finding was that the writing is right and the
layout is wrong, so only the layout moved. Every hedge ("ha van") survives.
- NEW "Ki all mogotte" with the operator's photo and five approved sentences.
- the 3 cloud-problem cards + the 4 own-server cards merge into ONE two-column
comparison. No new claim about any competitor: all four left-hand sentences
already existed on the page.
- the two tile walls (10 + 7 tiles duplicating pages that already exist) shrink
to a two-item band that keeps the app names and the links.
- section headers are left-aligned and varied, not 11x centred-two-words-plus-
one-blue-word.
Em dashes in the page's own copy: 18 -> 0. Deliberately kept: the 6 in <title>,
meta description, OG, Twitter and JSON-LD (operator decision at STOP 1 - indexed
strings deserve their own pass), and 1 in the shared footer, which gate 3 requires
to be identical across all 14 pages. Both stated, neither swept silently.
JetBrains Mono is no longer fetched. Exactly 13 characters were loading 31 KB:
the 1..5 process badges, the 01..05 service numbers, and - the audit missed this
at first and it is corrected in the file - the 3/2/1 of the backup rule.
assets/operator-portrait.webp 720x900, 93 KB
Cropped from an original that stays OUTSIDE this public repo. All metadata
stripped and VERIFIED BY READ-BACK: 0 EXIF tags, 0 GPS IFD entries, and none of
EXIF/XMP/ICCP/samsung/SM-A705FN/2023:10:18 appear anywhere in the bytes. Built by
re-writing the pixels into a fresh image, so the source info dict cannot travel.
Honest correction to the brief's premise: this photo had NO GPS tag to begin with.
scripts/site_gates.py
preview/index.html registered in NO_TWIN, with the reason. It cannot go in TWINS:
gate 3 wants its nav identical to index.html's (globe -> / and /en/) while the
twin check wants a pair's globe pointing at the pair's own URLs. The English twin
is written in the same commit as the switch, as a real twin. Everything else still
runs on the preview - BOM, emoji, nav/footer, globe, analytics, CDN, tokens,
cache-busting, dash-language, viewer, tail.
site_gates.py green. The builder (kept in the session scratchpad) writes BOM + CRLF
and asserts both: it first wrote LF and turned the nav/footer gate red for the
preview, which is exactly the trap this CHANGELOG's morning entry records.
15 KiB
Home-page redesign — the audit before anything is touched
Date: 2026-10-10 · Scope: website/index.html (+ its English twin website/en/index.html)
· Baseline: felhom.eu main @ 7ff64f40ed, clean, in sync with origin/main
· Method: taste-skill §11.B, run against the live site, not the file on disk.
Companion skill files written in the same session: skills/felhom-web-design/SKILL.md (the override
layer) and skills/SOURCES.md (provenance of the vendored design-taste-frontend).
A. Design read (taste-skill §0.B)
Reading this as: a redesign-preserve of a trust-first consumer landing page, for Hungarian households who are considering handing their family photographs to a box in their own hall, with a plain-spoken technical language, leaning toward the existing Felhom v2 token set plus real product photography.
The audience is the thing most of the current page gets wrong. It is not a procurement panel and not a self-hosting hobbyist. It is a household that has to decide whether to trust a person. The page currently contains no person, no box, and no evidence that either exists.
B. How the measurements were taken
Claude in Chrome cannot resize this workstation's Chrome: resize_window returns success and
window.innerWidth stays at 1920. Chrome DevTools device mode (R-918's recipe) could not be driven
either, because the extension's keystrokes reach the page, not the browser chrome.
What worked, and why it is faithful: the page was rendered inside a same-origin iframe of the chosen CSS width. The site frames itself, so the iframe's own width drives the media queries. Two positive observables confirm the layout really is the mobile one rather than a squeezed desktop one:
- at 390 px the hamburger computes to
display: block(it isnoneon desktop), and document.documentElement.clientWidth === scrollWidth === 375— the viewport minus the scrollbar, with no horizontal overflow.
Both the desktop and the phone figures below come from that harness. Screenshots are cropped to the iframe's rectangle, so what is shown is the page at that width and nothing else.
C. Brand tokens in use (preserve)
| Token | Value | Note |
|---|---|---|
--bg-0 / --bg-1 / --bg-2 |
#0A1220 / #0F1B2E / #16263F |
One locked dark theme. No prefers-color-scheme block anywhere in site.css |
--text-1 / --text-2 |
#EDF2F9 / #94A6BF |
Measured 16.67:1 and 7.56:1 against --bg-0. AAA, not merely AA |
--blue / --blue-bright |
#0083D8 / #2EA8F5 |
One accent, used consistently. §4.2's Color Consistency Lock already passes |
--radius |
2px |
§4.4's Shape Consistency Lock already passes. box-shadow is in the gate's BANNED list |
--font-ui |
Plus Jakarta Sans, self-hosted | Latin + latin-ext, 48 KB |
--font-data |
JetBrains Mono, self-hosted | 31 KB — see finding R6 |
The token layer is in good shape and is not what makes the page look AI-made. Nothing in §C is proposed for change.
D. Information architecture and conversion paths (preserve)
Nav: Szolgáltatások · Alkalmazások · Technológiák · Mentések · GYIK · Kapcsolat + language globe.
One line at desktop, hamburger below 900 px. §4.7's nav rules already pass.
Conversion path: home → /teszteles (primary CTA, twice) → /kapcsolat. Secondary paths to
/alkalmazasok, /technologiak, /biztonsagimentes.
No URL, nav label, anchor ID or form field is proposed for change (§11.F).
E. The page as it stands, measured
| Desktop 1440 | Phone 390 | |
|---|---|---|
| Full page height | 10 922 px | 19 913 px |
| Screens of scrolling | ≈ 11.6 | ≈ 23.6 |
| Sections | 11 + footer | same |
| Requests / weight | 16 requests, 533 KB, hosts: felhom.eu 13, stats.felhom.eu 2 |
— |
Em dashes (—) in rendered text |
18 | — |
Section inventory, in page order, with the layout family each uses:
| # | Heading | Layout family | Items | Height |
|---|---|---|---|---|
| 1 | (hero) | hero-content |
2 | 900 |
| 2 | Mit tud a doboz ma? | why-grid |
10 | 1732 |
| 3 | Így néz ki a vezérlőpult | dash-grid |
4 | 1120 |
| 4 | Miért ne a felhőszolgáltatók? | problem-grid |
3 | 610 |
| 5 | Miért válaszd a saját szervered? | why-grid again |
4 | 755 |
| 6 | Hogyan működik? | process-steps |
5 | 715 |
| 7 | Mit kapsz tőlünk? | service-list |
5 | 1010 |
| 8 | Telepíthető Alkalmazások | apps-showcase |
10 | 939 |
| 9 | Professzionális Technológiák | apps-showcase again |
7 | 939 |
| 10 | Adataid biztonságban | backup-content |
2 | 519 |
| 11 | Zárt teszt | why-grid a third time |
3 | 1056 |
| 12 | Érdekel? Beszéljünk! | contact-box |
2 | 500 |
F. Patterns to keep
- The token layer and the contrast wins (§C). Honour them; §11.C.
- "Mit tud a doboz ma?" — the content is the best thing on the site. Ten concrete, hedged, honest facts. The layout is wrong, the writing is right.
- "Ismert korlátok" — naming the shared household password and the missing DLNA is the single most trust-building paragraph on the page. It stays, and it should be easier to find.
- The four real dashboard screenshots. Real product images, already vendored, already with captions that are claims. They are the asset the hero is missing.
- The picture viewer (
gallery.js), and its JS-off behaviour. - The whole SEO head block (§H).
- The nav, the footer and both CTAs' wording.
Jelentkezem tesztelőnekis one label for one intent, used twice — §4.5's No-Duplicate-CTA-Intent already passes.
G. Patterns to retire
Each row names the taste-skill rule it breaks.
| # | Pattern | Where | Rule broken |
|---|---|---|---|
| R1 | The hero's "visual" is the logo (logo.png, 49 KB), beside a claim that states nothing. The real product pictures sit three sections lower |
hero | §4.8 "Hero needs a real visual"; a logo fills the slot without showing the product |
| R2 | Hero content floats in the middle of a 900 px band, roughly 300 px of empty space above it; on the phone the logo takes the top half and pushes the CTA to the fold | hero | §4.7 HERO TOP PADDING CAP — "reads as a layout bug, not as intentional space" |
| R3 | "Professzionális otthoni szerver telepítés és üzemeltetés" as the one-line value proposition. Also "Ipari szintű megoldások", "Professzionális Technológiák", "Kulcsrakész megoldások, professzionális kivitelezéssel" | hero + §7 + §9 | §9.D filler verbs; felhom-web-design §5 — an empty word with no fact beside it |
| R4 | The same section header shape 11 times out of 11: centred h2 of two words with a blue-coloured tail in a <span>, then a centred grey sub-line |
every section | §4.3 anti-centre bias; the templated rhythm the operator describes |
| R5 | Three layout families carry five sections. why-grid runs three times, apps-showcase twice |
§2, §5, §11 / §8, §9 | §4.7 Section-Layout-Repetition Ban — a family may appear once |
| R6 | process-steps numbered 1–5 and service-list numbered 01–05. |
§6, §7 | §9.F "NO generic step labels"; "NO section-number eyebrows" |
| R6b | JetBrains Mono (31 KB) is loaded for 13 characters. Exactly 13 elements on the page use --font-data: the ten numbers in R6, plus the 3 / 2 / 1 of the backup rule. Retiring R6 alone therefore does not drop the font — the 3-2-1 figures must also move to the UI font, which they do not need |
§6, §7, §10 | page weight; §4.9 (mono is for data, and these are not data) |
| R7 | problem-grid is three equal feature cards |
§4 | §9.C — banned outright |
| R8 | A ten-card grid under "Mit tud a doboz ma?", 1732 px tall, every card the same weight | §2 | §4.9 "Long lists need a different UI component, not a longer list" (> 5 items) |
| R9 | 18 em dashes in the rendered text | throughout | §9.G, kept in full; in Hungarian the gondolatjel is – anyway |
| R10 | Two sections are a catalogue of someone else's logos in words — app names and technology names as plain text in identical tiles | §8, §9 | §4.9 content density; they duplicate /alkalmazasok and /technologiak, which both already exist |
| R11 | Nobody is behind it. The only human trace on the page is "Üzemeltető: Nagyfenyvesi Viktor" in the legal footer line | whole page | The brief's core finding; §0.A audience |
| R12 | "Miért ne a felhőszolgáltatók?" argues against Google before the page has said what Felhom is | §4 | §4.9 — the fourth section is too early for a competitor argument |
H. SEO baseline — carried over unchanged
From audits/seo-2026-10-10/ (6 indexed, 7 not indexed, nothing wrong with the home page) and the
file itself. These exact strings are preserved unless the operator says otherwise:
<title>Felhom.eu — Saját felhőd, saját szabályaid | Otthoni szerver szolgáltatás</title>meta description(the "58 telepíthető alkalmazás, háromszintű automatikus mentés…" line)canonicalhttps://felhom.eu/;hreflanghu / en / x-default- All Open Graph and Twitter tags, and the
LocalBusinessJSON-LD block h1text: Saját felhőd, saját szabályaid
One conflict to settle at STOP 1. The
<title>and three OG/Twitter titles contain an em dash, and the JSON-LDdescriptioncontains "Professzionális". R3 and R9 would change them, the SEO-keep rule says do not. Recommendation: leave all four alone this round. They are the strings Google has indexed, the em dash is invisible to a visitor in a browser tab, and a title change is worth doing deliberately on its own, not as a side effect of a layout change.
I. Dial reading (taste-skill §1)
| Dial | Current site | Proposed | Why |
|---|---|---|---|
DESIGN_VARIANCE |
3 — every section is a centred header over a symmetric grid | 6 | §1.A "redesign - preserve" says match existing; 3 is what causes R4 and R5. 6 buys asymmetry and a real hero without touching the brand |
MOTION_INTENSITY |
2 — CSS hover only, prefers-reduced-motion block already present |
3 | Trust-first audience (§1.A row 5 reads 2-3). Deliberately below 4 so §6.B's mandate and the no-JS-library fence never collide |
VISUAL_DENSITY |
4 | 4 | Unchanged. The density is not the problem; the repetition is |
Mode: redesign — preserve.
J. The levers, in priority order (taste-skill §11.D)
Each is one plain sentence. This is the list the operator approves, changes or cuts at STOP 1.
- Give the hero a real picture and a sentence that says something. Replace the logo with the Indítópult screenshot, and "Professzionális otthoni szerver telepítés és üzemeltetés" with a concrete sentence drawn from the facts already on the page. (R1, R2, R3)
- Put a face and a name on the page. A new "Ki áll mögötte" section with the operator's photograph and three or four sentences in his own words. (R11)
- Break the eleven-times-identical section header. Vary alignment and shape so that no two consecutive sections open the same way. (R4)
- Give each section its own layout family. Split the ten-card grid into a short scannable list,
and stop reusing
why-gridandapps-showcase. (R5, R7, R8) - Re-order so the page answers "what is it" before "why not Google". (R12)
- Drop the two word-catalogue sections to a single line each with the link they already carry. (R10)
- Retire the numbered step and service lists, and move the 3-2-1 figures off the mono font, which together take JetBrains Mono (31 KB) off the home page. (R6, R6b)
- Sweep every em dash out of the rendered text. (R9)
Levers deliberately NOT proposed: no new colour, no new font, no light mode, no animation library, no nav change, no URL change, no change to the four SEO strings in §H.
K. Known risks when this ships
site_gates.pywalks every*.htmlunderwebsite/at any depth (R-423) and fails on a page that is in neitherTWINSnorNO_TWIN. The preview page must be registered before the gate can pass, and a registered Hungarian page must carry a nav and footer byte-identical toindex.html's after normalisation — which is a second, independent reason not to touch the nav.site.cssis shared by every page, and scoping it has already bitten in both directions. A base-element change made for the home page leaks into/gyik,/tesztelesand the legal pages; but69035f4af5(2026-10-10) is the opposite failure —.info-cardand.highlight-boxwere scoped to.page-technologiak/.page-biztonsagimentes, so the new.page-tesztelespages got no card chrome at all and rendered as unstyled text runs. That commit's own conclusion was to fix base rules site-wide rather than patch per page. So the rule here is not "always scope": a genuinely shared improvement (a basea,ulorcoderule) goes site-wide on purpose; only a rule that is specifically the home page's new composition hides underbody.page-index. Either way the mitigation is the same and is not optional — every other page is screenshotted at 1440 before the switch, which is step D.3.- The English twin must move in the same commit, or the twin gate fails.
- One em dash cannot be swept from one page alone. The shared footer reads
© 2026 felhom.eu — Saját felhőd, saját szabályaid, and gate 3 requires every Hungarian page's<footer>to be identical toindex.html's. So "zero em dashes" is achievable on the home page's own copy, but that last one needs the same edit on all 14 pages at once. It is a one-character change per file and mechanical, but it is a site-wide change, not a home-page one. Carried as a separate decision for the operator at STOP 3, not done silently. - A preview page cannot be registered as a twin pair. Gate 3 requires the nav to be identical to
index.html's (whose language globe points at/and/en/), while the twin gate requires aTWINSpair's globe to point at the pair's own two URLs. Forpreview/those two demands contradict each other. The Hungarian preview therefore goes inNO_TWIN(where nav, globe structure, BOM, emoji, analytics, dash-language and viewer checks all still run, and only the twin-specific canonical/hreflang checks do not), and the English twin is written in Part D, in the same commit as the switch, where the twin gate does its real job on two public pages. - The
?v=cache-bust onsite.cssmust be bumped, or the change looks like it did not deploy.
L. Register
Nothing here is filed as an OPEN-ITEMS.md row yet: the whole list is this session's work and will
be closed in it. Anything on the list that the operator cuts at STOP 1, or that is not finished by
the end of the session, becomes a row before the session ends.