1606b492d50f29ac1a26f61340c0475d27bf4e3f
31 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c0a2953bea |
website: the share card's wordmark is the brand's own, with the blue .eu
gates / gates (push) Successful in 6m15s
The old card's lettering was plain white and in some other face. The card now takes assets/logo-wordmark.png - the same file the sidebar shows - scaled to the old lettering's ink height and alpha-composited in its place, so felhom is white, .eu is blue, and the drawn outline is there. The cloud mark beside it is still the old card's pixels, which were always right. og:image ?v=3. |
||
|
|
d328147322 |
website: the share card shows the product, not just the words
gates / gates (push) Successful in 6m13s
The operator went to post the link and found the card out of date: it was the 2026-07-18 design - a headline and two lines of text on a dark field, nothing of the product, and older than everything the site has become since. - og-image.png and og-image-en.png rebuilt around the laptop, with the hero's own poster frame on its screen. - scripts/make_og_card.py: the headline, logo and button are lifted as PIXELS from the previous card and composited with `lighter` onto flat --bg-0, because the site's font is a woff2 and nothing here can draw a glyph with it. A new headline therefore CANNOT be made with this script - new words go back to the design tool and this takes that card as its source. The lede lines are gone; the laptop says what they said. - ?v=2 on every og:image and twitter:image (20 pages): a scraper caches by URL, so a new picture at the old URL would reach nobody. A card already attached to a post still does not change - that post must drop the preview and re-add the link after a re-scrape. |
||
|
|
02be8ea7f0 |
website: the reviewer's findings - consent error, reply time, sitemap, voice, clip
gates / gates (push) Successful in 6m12s
A page-by-page review of the live site (1440px and 390px) found six defects and
two editorial questions. The operator answered three questions; the answers and
the evidence are in REPORT-review-2026-10-12.md.
Fixed:
- The contact form showed its consent error before any submit, on both pages:
#privacyError sits outside any .form-group and the hide rule was scoped to
.form-group. Scoped to the page. Checked: load (none) -> submit unticked
(shown) -> tick (gone), with no message sent.
- The consent checkbox is the site's own control now: 24px box, keyboard focus
ring, and a second <label for="privacy"> at 44x44 round it for touch.
- The contact page promised a reply within 24 hours while /feltetelek 1.1 §4
promises no reply time. Now 1-2 days usually, and no promise during the test.
- sitemap.xml was missing /szolgaltatasok and /en/services: 18 -> 20 URLs.
- The pre-shell mobile-menu script still ran on 20 pages and logged
"[mobile-menu] Missing elements" on every one. Removed.
- The sidebar's tester button was btn-outline while the hero's was btn-primary.
- The home page's "Mit tud a doboz ma?" was three bare links; each card now
carries 2-3 of the services page's own items, word for word.
- A plain Facebook link in the footer of all 22 pages. No script, widget or
pixel: the only external hosts any page refers to are still felhom.eu and
stats.felhom.eu.
Voice (operator ruling: "I" everywhere a person speaks): contact, tester and FAQ
pages in both languages, and the home and services pages that repeat the same
promises. An inclusive "we" (you and I, talking) stays plural, and the legal
texts are untouched. Each FAQ answer exists twice (JSON-LD + visible) and gate 18
holds them equal - it caught the five answers whose markup split the sentence.
Hero clip rebuilt: Immich first, so the poster is a wall of real photographs;
the Jellyfin scene starts after the demo's library wall (eleven pieces of poster
art whose licence cannot be quoted from a first-party source); 1.3s of blank
screen cut from the OnlyOffice scene. The film that plays, Caminandes 3:
Llamigos, is CC BY per Blender's own video platform ("licence": {"id": 1,
"label": "Attribution"}) - NOT public domain as website/CHANGELOG.md said
yesterday. That sentence is corrected in place and the film is credited under
the hero caption.
New gate 24: sitemap.xml lists every public page once, with its twin's hreflang
pair, and lists nothing else. Decoy: site/sitemap-missing-page, the exact shape
the reviewer found by hand.
site.css ?v=30; hero clip and poster ?v=2.
|
||
|
|
25ab47eeaa |
website: the two-tone headings are back, and the home page's sections are ruled apart
gates / gates (push) Failing after 6m59s
Two notes from the operator, 2026-10-12: the white/blue heading split was lost in the M3 switch and should return everywhere, the apps page categories included; and the home page's sections ran into one another. - 41 headings get their <span> back (home 5+5, apps 6+6, FAQ 6+7, services 3+3). The style never went away - site.css has styled `h2 span` blue all along; the M3 rewrite dropped the markup. No text changed: the span wraps words that were already there. The three home headings that predate M3 are split where they were split then. - Apps and FAQ categories are new to the treatment: a name with an & splits there, a phrase on its last words. Five one-word headings stay plain. - The home page's sections get a 1px --line rule with 2.75rem of air on each side, so it sits centred in the gap; the first also parts the hero from the page. Home page only. - Blue on the page background measures 7.9:1 - AA at any size. - site.css ?v=28. |
||
|
|
6b6aca900c |
website: the language menu opened off the left edge of the window
gates / gates (push) Failing after 7m1s
The controller's rule centres the menu on the globe (left: 50% + translateX(-50%)). On the website the globe sits at the far left of the sidebar footer, so 60px of the 120px menu hung outside the window and both labels were cut. Anchored to the button's left edge in site.css instead, opening rightwards into the sidebar; shell.css stays a verbatim copy. Measured after the fix: menu x 24->144 inside a 240px sidebar. site.css ?v=27. |
||
|
|
b0ef27e914 |
website: the laptop screen moves - six real apps behind the cut-out frame
gates / gates (push) Failing after 7m17s
The operator recorded the six scenes and ruled on their length: use them whole, "they had been cut as I liked them". Jellyfin, Tandoor, OnlyOffice, Immich, RomM, Paperless, 0.6s crossfades, 36.6s looping at 904x556. - hero-clip.mp4 (1 134 KB) + hero-clip.webm (1 295 KB) + hero-poster.webp (53 KB), one set for both languages: the recordings are the same on / and /en/. - The hero <video> sits in the frame's cut-out hole at z-index 1, the frame above it at 2. No autoplay attribute: the page's script starts it when the hero is on screen, pauses it when it leaves, and never starts it under prefers-reduced-motion. With JS off the poster stays. - make_hero_clip.py reads each scene's own length (ffprobe) instead of cutting every one to a fixed window, and the xfade offsets count from the running sum minus one fade per transition already made. - site.css ?v=26 on all 22 pages. NOT verified: playback in this workstation's Chrome, whose media pipeline loads nothing at all today (a 1 KB generated WAV blob stalls the same way, with no error) - which rules the clip out as the cause. Geometry, layering and the poster frame were verified in the browser. Jellyfin, Paperless and RomM were filmed on those projects' own public demo sites; the films in the Jellyfin scene are public-domain prints. |
||
|
|
bb69a73330 |
website: four more notes - first person, the globe's well, the touching tables, the submenu label
gates / gates (push) Failing after 5m21s
1. THE HOME PAGE SPOKE ABOUT THE OPERATOR IN THE THIRD PERSON ("Ha irsz, o valaszol")
while the page it links to is in the first ("Ha irsz, en valaszolok"). Both home
pages now read "Nagyfenyvesi Viktor vagyok, a Felhom mogott en allok" / "I am Viktor
Nagyfenyvesi, and I am the one behind Felhom", and the link after it is "Rolam
bovebben" / "More about me" rather than repeating the question the sentence has just
answered. The legal pages keep the formal third-person name, which is their job.
2. 36px OF DEAD SPACE UNDER THE LANGUAGE GLOBE, and most of it was A LEAK GATE 22
COULD NOT SEE. The old chrome's
nav { position: fixed; top/left/right: 0; padding: 20px 0;
backdrop-filter: blur(12px); border-bottom: 1px solid var(--line);
z-index: 200 }
is a BARE ELEMENT selector, so it matched <nav class="sidebar"> too - and .sidebar
declares none of those, so all of them were in force on the sidebar. Scoped
body:not(.shell); the footer row's own padding went 16px -> ~8px.
Gate 22's first half compares selectors present in BOTH stylesheets, and `nav` is not
a selector shell.css ever writes, so this shape was outside its field of view. It now
has a SECOND HALF: an unscoped bare nav/header/main/aside rule in site.css is a
failure, because those elements ARE the shell (<nav class="sidebar">,
<header class="mobile-topbar">, <main class="content">). It convicted a second live
one on its first run: R-903's `@media (max-width:900px) and (scripting: none)
nav { position: static }` had been overriding the sidebar's own position on a phone
with scripting off. `footer` is deliberately NOT on the list, with the reason beside
it: the shell carries the website's own footer.
Decoy site/bare-element-rule-reaches-shell, seen to convict.
3. THE COMPARISON TABLE AND THE TWO CARDS under "Miert a sajatod?" were touching: .vs
ends on its own border and .band opens with a 2px blue rule, so they read as one
block. 2rem between them.
4. "MINDEN ALKALMAZAS" -> "AZ ALKALMAZASOKROL" / "About the apps" on all 22 pages. Every
app is on that one page, so the first submenu item is not a filter - it is the top of
the page, where the intro and the "Fontos tudnivalok" box are. The en-nav-drift decoy
was re-anchored on the new label.
Checked at 390px and 1440px on all 21 pages: no sideways scrolling, footer inside the
content column, the renamed item on every page. site.css?v=25.
|
||
|
|
0ef0b106f6 |
website: the operator's seven notes - a services page, the hero, and 100 dead links
gates / gates (push) Failing after 6m51s
Reported from his own screens. Five defects, two design.
1. THE CATEGORY ANCHORS WERE DEAD - all 100 of them. The sidebar's five app-category
links pointed at #fajlkezeles-irodai and friends; the ids are #fajlkezeles and
friends. The sidebar is copied into every page, so one wrong fragment was wrong
twenty times, and a dead fragment raises no error anywhere: the browser stays put.
New gate 23 resolves every in-site #fragment against the page it names (360 today).
It convicted two more on its first run: the home page's four hero tiles pointed at
/alkalmazasok#immich, which no page had ever carried, and the FAQ's contact button
pointed at a home-page section that had moved out. Every app card now carries its
slug as an id - taken from the card's own logo file, which gate 21 already ties to
the catalog, so the ids cannot drift from it silently.
Decoy site/dead-fragment puts the operator's own bug back and the gate convicts.
2. SZOLGALTATASOK IS A PAGE: /szolgaltatasok + /en/services, registered in TWINS, URL
and SHELL. The ten capability items moved VERBATIM out of the home page; the home
keeps the promise sentence, the three group names as links and a button, and is 345
Hungarian / 434 English words shorter. The .caps rules stopped being .page-index-
scoped, because the block now lives on a page with a different body class.
3. THE HOME HEADLINE is back in the hero column beside the picture, two lines with the
second in --blue-bright at clamp(2.1rem, 4.4vw, 3.2rem). M3 had moved it into
.page-header - the INNER pages' heading - so it shrank to 2.1rem and the domain
badge was stranded beside it.
4. THE HERO PICTURE is the real dashboard in a laptop. The frame is the operator's own
supplied render; the screen is dashboard-start-{hu,en}.webp composited into it, so a
visitor sees a real box's Launcher rather than a drawing of one - the supplied
screens are AI-drawn and misspell app names. 57 KB, named dashboard-laptop-<lang>
so gate 19 holds it to the page's language.
5. .page-lede HAD NO CSS AT ALL on 16 pages: a bare paragraph, full width of the
content column, hard against the box beneath it. 760px measure, centred over the
box, air beneath; left-aligned on /szolgaltatasok, which has no centred box.
6. THE SIDEBAR LOGO: the wordmark shipped at 0.67x the mark's width where the real
lockup (assets/logo.png, measured: mark 492px wide, wordmark 631px) has it at 1.28x.
Mark 112px, wordmark 25px tall, 28px less vertical padding.
7. SCROLLBARS are the page's own now. The first attempt missed the viewport's: it is
painted from <html>, and a `body.shell ::-webkit-...` rule only reaches scrollers
inside the page.
Also: the two Latin font subsets are preloaded. With font-display: swap the page
reflowed after first paint - measured at 1339px on /alkalmazasok#media.
Checked at 390px and 1440px on all 21 pages: no sideways scrolling, footer inside the
content column everywhere, drawer opens with all 13 items. site.css?v=24.
|
||
|
|
5aeb36b5bd |
website: fix the phone menu and the footer column - both live defects
gates / gates (push) Successful in 6m42s
Reported from a real phone. Both were mine, both shipped in the switch. 1. THE PHONE MENU WAS EMPTY. The drawer slid open correctly but had no items in it. site.css's OLD mobile nav was still reaching the shell's sidebar: under @media (max-width: 900px) it sets .nav-links to position:fixed; right:-100%, which parked the menu off-canvas INSIDE the drawer. Measured at 390px and 860px: position fixed, right -280px. The cause is a hole in my own check. At STOP 1 I diffed the two stylesheets' declaration sets and found "exactly six" leaking declarations - but that diff EXCLUDED @media blocks. Re-run media-aware, the real number is FORTY, and the worst of them only apply below 900px, which is why desktop looked right and a phone did not. A check that silently skips part of its subject is not a check; this one reported a confident, wrong number. Fixed at the source rather than per-property: every selector belonging to the website's OLD chrome (nav, .nav-links*, .mobile-overlay, .hamburger, .logo*, .lang-globe-li - 29 occurrences) is now scoped `body:not(.shell)`. Scoped, not deleted, so a future non-shell page still works. .hamburger-box and .hamburger-line are deliberately left unscoped: the shell's burger uses them. Leaks after the fix: 40 -> 0. 2. THE FOOTER RENDERED AS A SECOND COLUMN at the top right on 16 pages. body is a flex row on a shell page, and my insert only moved the footer inside <main> when the page ENDED with </main>; pages with scripts after it fell through and left the footer as a direct child of body, i.e. a flex sibling of the sidebar. Moved inside <main> on all 16, each move asserted to have landed inside. Both are now gated: gate 3b requires every shell page's footer to be INSIDE <main class="content">, red-proofed by putting one outside and watching it convict. site.css?v=23 / shell.css?v=23. |
||
|
|
6059505216 |
website: M3 goes live - the whole site switches to the controller's shell at once
gates / gates (push) Failing after 13m11s
Part D. Every public page now wears the controller's frame around the website's
own content. One commit, as asked: never half old, half new.
20 pages switched (12 Hungarian incl. the hidden prices page, 8 English)
website/preview/ deleted entirely - A, M1, M2 and M3 studies all gone
robots.txt: the Disallow: /preview/ line removed with them
site.css?v=22 / shell.css?v=22 on every page
PROVED before pushing, not after:
* HEAD TAGS: title, meta description, keywords, author, robots, canonical, every
hreflang, all seven Open Graph tags, all four Twitter tags and the JSON-LD
captured on all 19 pages before the switch and compared after. The ONLY
difference anywhere is the dash substitution inside the two FAQ pages'
FAQPage JSON-LD - verified by applying the same substitution to the "before"
copy and getting an exact match. Nothing else moved.
* VISIBLE TEXT: identical to the live pages word for word, legal texts identical
with no substitution permitted at all.
* No page is left noindex (the two download pages' noindex,follow is their own,
pre-existing and unchanged), no page mentions /preview/, every page has a
footer, no page overflows at 390px.
THE HEAD-TAG DIFF EARNED ITS PLACE. The home page was about to ship carrying
`noindex, nofollow` from the preview, and had lost meta keywords, meta author, all
seven Open Graph tags, all four Twitter tags and the LocalBusiness JSON-LD -
because its head was hand-built while every other page carried its live one over.
The diff caught it; nothing on the rendered page would have. The generator now
uses the live head for EVERY page including the home one.
szolgaltatasok-nonpublic.html was converted too. It is in no menu and was not in
the brief's list, but leaving one page on the old chrome would have left the site
half-switched - which is the one thing part D was not allowed to do.
scripts/site_gates.py: SHELL is now the real page set; MOCKUPS is empty; gate 3's
old nav/footer loop keeps working for any page added later WITHOUT the shell, and
skips the ones that have it.
|
||
|
|
91ba50ea2c |
website: the sidebar button fits when the apps group is open
gates / gates (push) Failing after 13m42s
On /alkalmazasok the Alkalmazasok group renders expanded, which gives the sidebar a 16px scrollbar and narrows it from 239 to 224. At .95rem the Hungarian label wrapped to two lines there (the English one still fitted, which is why it showed on one page and not its twin). Sized to the narrow case, measured not guessed. |
||
|
|
f6044dc0a7 |
website: long checksums and URLs no longer scroll a phone sideways
gates / gates (push) Successful in 8m15s
Measured at 390px on the LIVE pages, so this is pre-existing and not something the shell introduced: /letoltes scrollWidth 609 - the 64-character SHA-256 inside <code> /adatkezeles scrollWidth 478 - a long facebook.com legal URL used as link text and the same on their English twins. overflow-wrap: anywhere changes only where the line breaks; selecting and copying still yields the whole unbroken string, which matters for a checksum. The legal pages' words are untouched - this is CSS. Small enough to fix in the session rather than file. |
||
|
|
11242c5110 |
website: AA on the shell's copied button and group label
gates / gates (push) Successful in 6m58s
Measured on the deployed M3 page: .btn-primary 4.01:1 (white on --blue, 13.6px/600) and .nav-group-label 3.14:1 (--text-3), both under the 4.5 floor. This is R-930 arriving a second time by a different route: fixing .cta-button on the website did not fix the CONTROLLER's button, and the shell imports it. Same remedy the operator already chose - 1.2rem/700 puts the label in WCAG's large-text band where 3:1 applies - so --blue stays untouched. The sidebar's own CTA becomes an OUTLINE button rather than a filled one: blue on transparent passes comfortably, and a 19.2px filled button does not fit a 240px sidebar without wrapping. Measured both ways rather than guessed. The controller has both defects on its own surface. Not fixed here - that repo is read-only this session - so it is going to the register. |
||
|
|
cada79e990 |
website: M3 home page has one heading, not two
gates / gates (push) Successful in 7m21s
The page header and the hero both carried a title, which read as two headings stacked. The brief's shape is one: .page-header holds the h1 - and it holds today's indexed headline, 'Sajat felhod, sajat szabalyaid', unchanged - and the hero row below is the lede sentence plus the button beside the dashboard window. |
||
|
|
71df90f9fc |
website: neutralise the six declarations that leak into the shell
gates / gates (push) Successful in 7m3s
shell.css loads after site.css, but later-wins is per PROPERTY, not per rule.
Where site.css declares something the controller's rule does not, the website's
value survives inside the shell. Measured: exactly six declarations, three
selectors, and the first one was visibly broken on the deployed page -
.nav-links display:flex + gap:32px -> the sidebar menu rendered as a
HORIZONTAL row spilling across the content column
.lang-globe-menu top + right -> fought the controller's bottom/left
.page-header padding + text-align -> the website's centred subpage header
fought the controller's left-aligned flex row
Reset in site.css, the website's own file, so shell.css stays a verbatim copy.
Found by diffing the two files' declaration sets per selector rather than by
spotting the one that happened to be visible.
|
||
|
|
bb88e73f9e |
website: the home page's who-mini row sits under the button, not beside it
gates / gates (push) Failing after 6m44s
.close-cta is text-align:center, so an inline-flex row flowed onto the same line as the CTA button and pushed the whole group off-centre. flex + max-width 34rem + margin auto puts it under the button as a centred block, with the hairline above it spanning the row rather than the section. Caught by looking at the deployed page rather than trusting the markup. site.css?v= -> 14. |
||
|
|
fb9fe0808d |
website: "Ki all mogotte" moves to the contact pages; the home page keeps a trace
Operator's call after seeing the preview: the biography sat between the dashboard
gallery and "Hogyan mukodik?", interrupting "what it does" -> "how you get it"
with a life story. And its last sentence, "Ha irsz, en valaszolok", is a contact-
page sentence - it belongs next to "Valaszido", not mid-product-story.
/kapcsolat + /en/contact gain the full block (photo + the five approved
sentences). These are LIVE pages, so the bio and the photograph are public
from this commit. Both halves of the twin move together, as the twin rule
requires; the English promises nothing the Hungarian does not, and uses the
site's established "the box" rather than a new term.
/preview/ loses the section and gains a compact row in the closing call to
action: a 56x70 portrait, one line, and a link to the full block. This is
deliberate, not a compromise - the audit's R-11 finding was "nobody is
behind it" on the HOME page, and deleting every human trace from it would
re-open exactly that. The trace now sits where someone decides to write.
A dedicated /rolam page was considered and rejected: five sentences cannot
carry a page, and the alternative was inventing biography to fill one.
The .who* rules are now UNSCOPED (were .page-index .who*), because the block
lives on two pages and will live on the home page's twin later. Following
69035f4af5's lesson: a genuinely shared pattern goes site-wide rather than being
duplicated per page scope. No existing page uses .who, so nothing else moves.
assets/operator-portrait-small.webp - 160x200, 8.4 KB, cropped from the same
original outside the repo, metadata stripped and verified by read-back (0 EXIF
tags, 0 GPS entries, none of the phone's byte sequences present).
site.css?v= -> 13 on all 21 files.
The preview builder asserted a hardcoded "site.css?v=10" and broke the moment the
site moved to 12. It now follows whatever index.html pins and prints it.
site_gates.py green.
|
||
|
|
43b67283c3 |
website: the footer dash swept site-wide, and the primary CTA meets WCAG AA
gates / gates (push) Failing after 14m58s
Two operator decisions from STOP 3, both independent of the home-page switch, which was NOT approved and has NOT happened. index.html still serves the old design; only the footer line and the button change on it. 1. The footer em dash, on all 21 page files (12 HU + 8 EN + the preview). "(c) 2026 felhom.eu - Sajat felhod..." now uses the spaced en dash, which is the correct Hungarian gondolatjel. Done as one sweep because site_gates.py gate 3 requires every page in a language set to carry an IDENTICAL footer, so this could never have been a one-page edit. Gate green: all 14 still match. Scope, stated honestly: 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, testing 24, teszteles 23, index 17/19, ...). The preview page is the only page at zero. The rest is NEXT.md work, page by page. 2. R-930, the operator's choice of the three offered: white on --blue measures 4.01:1, under WCAG AA's 4.5:1 for body text. .cta-button goes to 1.2rem/700, which is >=18.66px at >=700 weight, so WCAG counts it as LARGE text and the floor becomes 3:1 - which 4.01 clears without touching --blue. Darkening the token was rejected because --blue is shared with the hub and controller UIs. Horizontal padding trimmed 32->26px to protect the one-line rule for the longest label; verified in the browser at 390px, not assumed. .cta-button-secondary is unchanged: it already measures 7.17:1. This reaches the primary button on 16 pages, which is the point - the defect was never the home page's. site.css?v= bumped to 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. site_gates.py green. |
||
|
|
69035f4af5 |
website: the tester pages get the design system, and content links stop turning purple
gates / gates (push) Successful in 6m34s
Root cause of "no formatting for the points": .info-card and .highlight-box are
scoped per page (.page-technologiak / .page-biztonsagimentes) and the new pages
carry .page-teszteles, so NONE of the card chrome applied - the sections were
unstyled text runs. The tester pages now join the technologiak scope, whose h3
is a flex row (these headings carry an icon).
Three more gaps the new pages exposed, all fixed site-wide rather than patched:
- There was no base `a` rule at all, so an inline link in body copy fell back
to the browser default and changed colour once visited. .legal was the only
place this had been fixed. /gyik, /technologiak and /biztonsagimentes each
carry such links and had the same bug.
- `code` was styled only under .legal.
- A <ul> inside an info-card was unstyled: wrong colour, wrong indent.
Justified body copy on the tester pages, as asked. NOTE: no other page
justifies today, so this is deliberately scoped to .page-teszteles and can be
rolled out site-wide or dropped in one edit. hyphens:auto, because Hungarian
sets badly when justified without it.
site.css -> v=10 on all 20 pages.
sitemap.xml: BOM removed. Search Console shows the freshly submitted clean
sitemap as "Sikertelen lekeres" with an empty last-read, and a BOM before the
XML declaration is a known irritant for its parser. The file is otherwise valid
(18 <url>, parses, served 200 as application/xml). No gate covers sitemap.xml
and the BOM rule is for website/*.html only.
Facts corrected - there are NO testers (operator, this evening): "Tester 1" is a
disposable virtual box and "Tester 2" is a friend whose machine is unassembled
and switched off. The page said "Nehany hely mar betoltve", which was untrue; it
now says the test is starting and all 5 places are open. Same correction in
OUTREACH.md (five people needed, not three), CONTEXT.md, and the terms-1.1 mail,
which in practice has one recipient, not two. No scheduled post claimed a
filled place, so none needed editing.
|
||
|
|
ec5605d42c |
register shrink 2026-10-10: 13 rows closed with live evidence (138 -> 125); R-903 phone menu without JS; R-910 pictures; R-912 site gate 21
gates / gates (push) Successful in 6m4s
Closed: R-906 R-907 R-909 R-910 R-911 R-815 R-756 R-570 R-896 R-912 R-903 R-338 R-916. Updated: R-899 (press set up, dated check 2026-10-11), R-243 (the mail is due 2026-10-11 ~16:06Z, dated check), R-782 (homepage live; glance question to the operator), R-904 (the TLS sentence is in 01 s7). Website: site.css v=9 (scripting:none menu), eight dashboard pictures retaken. Evidence: audits/register-shrink-2026-10-10/. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS |
||
|
|
fe80548144 |
website: the header mark had no white fill — wrong source file (and R-916 corrected)
gates / gates (push) Successful in 5m36s
I used assets/logo_notext.svg for the header mark. That file is the LIGHT-BACKGROUND variant: it has SEVEN #00408d fills and ZERO #ffffff, so on the dark nav the cloud rendered as a hollow outline. The operator caught it. logo_notext_white.svg is not the answer either -- it is a white OUTLINE version, also unfilled. Rendered all four candidates side by side on the real nav background to see it rather than infer it: only logo.svg (and logo.png) carry the real artwork -- white cloud, #051343 house and servers, #008ddf swoosh. FIX: assets/logo-mark.svg, cut from logo.svg -- keep <defs>, path6 and g2; drop the five wordmark paths and the two empty <text> elements; viewBox cropped to the mark (70 0 505 295). Vector, correct fills, no text. All 18 pages point at it; site.css cache-bust v7 -> v8. The CSS comment now says which file NOT to swap back in, and why. AND A CORRECTION THAT REMOVES AN OPERATOR TASK (R-916). That row says the project has no usable vector master because logo.svg "sets felhom.eu as live text" in 'M+ 2c'/'Vremena Grotesk', and it waits on "the machine with the fonts". MEASURED today, while cutting the mark out of that very file: - all five wordmark elements are <path> with real d= geometry - NO <text> element has any content; the two present are empty leftovers - the font-family strings the row cites are Inkscape METADATA left on CONVERTED paths (-inkscape-font-specification). A grep for font-family finds them and reads as live text -- the likeliest way the original diagnosis went wrong. - proof from a renderer that lacks both fonts: Chrome draws logo.svg's lettering identical to logo.png's, side by side. NOT re-tested: librsvg specifically -- DooPlex has no rsvg-convert, inkscape or cairosvg installed today, so the original librsvg/DejaVu observation could not be reproduced either way. It does not change the structural fact: there is no font left to substitute. Consequence: the 645x408 PNG is not the only faithful copy and does not cap picture size. R-916 state -> READY with "re-check before doing any work: this may need nothing from the operator at all", rather than closed on my say-so. |
||
|
|
625d38645c |
website: one brand lockup in the header, and footer links that look like links
gates / gates (push) Successful in 5m54s
HEADER. logo.png carries its OWN "felhom.eu" lettering under the mark, so
putting it next to a typed <span class="logo-text"> said the name twice and
squeezed the mark down to 40px to make room. Now:
- the mark alone, bigger: assets/logo_notext.svg at 54px (44px under 600px).
Vector, so it stays crisp. Its two <text> elements are EMPTY, so R-916's
missing-font problem does not apply to this file -- checked, not assumed.
- the name beside it is the brand's OWN lettering, cropped from logo.png to
the new assets/logo-wordmark.png (632x108, tight bbox).
Why an image and not text: the wordmark's face is "M+ 2c"/"Vremena Grotesk"
(R-916). Nothing here has it, and the site deliberately loads NO external
font -- the privacy notice published this morning states exactly that, so
pulling in Google Fonts to match a logo would have made a published claim
false. Using the artwork is also what the Facebook covers already do. The
white/blue split the operator asked for is in the artwork itself.
Accessibility kept: the mark is alt="" aria-hidden (decorative), the wordmark
carries alt="felhom.eu", so the link still has its accessible name.
FOOTER. The legal links were unstyled, so the browser painted them default
blue and PURPLE once visited. They now follow the site's own convention
(.page-kapcsolat .sidebar-card a): --blue-bright, no underline, underline on
hover. :visited is pinned to the same colour deliberately -- a legal link
that changes colour after one read looks like it stopped working. The same
fix applied to .legal a on the two new legal pages, which had --blue instead
of --blue-bright.
18 of 18 pages carry the new lockup; the English pages keep their /en/ logo
href. site.css cache-bust v6 -> v7 on all 18, per the website rules. Verified
rendered in a browser on both a Hungarian and an English page: both images
load, no .logo-text left anywhere, footer links computed rgb(46,168,245).
site_gates OK (nav/footer per language, BOM, cache-busting, twins).
|
||
|
|
30b932bb10 |
website: publish the closed-test legal set (R-813 narrowed)
gates / gates (push) Successful in 5m34s
Two new Hungarian pages, live on push: /adatkezeles (privacy notice) and /feltetelek (what the free closed test is, and is not). Operator rulings of 2026-10-09: no company exists yet, so the operator is named as a PRIVATE PERSON with no postal address and no phone; publish before the lawyer has seen it, because the site was collecting data with no notice at all; the full ASZF, the impresszum and the review wait for the company (R-802, R-809). - All 18 pages carry the operator, info@felhom.eu and both links in the footer. Counted, not assumed: 18 pages found = 18 with both links = 18 structurally valid. English footers say the legal texts are Hungarian. - The contact form stopped claiming something untrue. The old consent said "az adatokat harmadik felnek nem adjuk ki" while Resend, Cloudflare and Google carry the message. Both languages replaced; the link opens in a new tab so a filled form is not lost. - site_gates.py NO_TWIN gains the two pages ON PURPOSE, with the reason in a comment: an unreviewed English legal text would be worse than an honest pointer from the English footer. - documentation/legal/{adatkezelesi-tajekoztato,feltetelek}-1.0.md are the text of record, DERIVED from the published HTML so they cannot drift. The drafts are kept and marked superseded for the closed test. FOUR LOAD-BEARING CLAIMS WERE MEASURED, not copied from a vendor or a README: cookies zero, and no local storage - checked in the browser WITH A POSITIVE CONTROL (a probe cookie WAS visible to the same method) after the tracker fired; no Set-Cookie on any response beacon the exact Umami payload: site id, screen, language, title, url, referrer - no visitor identifier Cloudflare DNS only: the public A record 37.191.56.193 is not a Cloudflare address, so site traffic cannot be proxied fsn1 Falkenstein, Germany (Hetzner's own location list) Also measured: felhom-ep0-copy-gc.timer is installed and RAN SUCCESSFULLY (2026-10-09 08:00, exit 0), so "deleted within 30 days" is true today where on 2026-10-08 it was written but not switched on. Three retentions are stated as having NO deadline, deliberately and with the operator's word: website statistics, web server logs and contact messages have no automatic deletion, and the pages say so instead of promising a date nothing enforces. Every other period is enforced by configuration and cited. No placeholder survived onto either page (0 of "[[", control: the draft still has 36). The impresszum and the full ASZF are NOT published. R-813 -> NARROWED. R-915 unblocked: the operator enters the two URLs in the Meta app's Basic settings; the Live switch stays a separate decision. R-917 and R-920 -> DEFERRED on the operator's (c): park, publish as posts once posting starts. |
||
|
|
79c53b5f1a |
website: one picture viewer (assets/gallery.js) for app and dashboard pictures — declared data-gallery sets, a click on the big picture closes, JS-off still opens the file; site gate 20 + 4 decoys; demo-hp language read back (hu); R-908 (old Resend key in homelab-manifests history); 131 -> 132
gates / gates (push) Successful in 4m25s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb |
||
|
|
aaac24b05c |
website: the dashboard shown — 4 real screenshots per language on the home page, 2 on the technology page (controller 0.303.0, demo-hp household guest, privacy-scanned); site gate 19 (pictures in the page's language) + decoy; R-906, R-907 (dashboard defects seen); 129 -> 131
gates / gates (push) Successful in 4m12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb |
||
|
|
803af4798d |
website: the language switch becomes a globe like the dashboard's (Magyar / English list, current marked, no JS); site.css v3; gate 13 checks the globe from one LANGS list; 5 decoys
gates / gates (push) Successful in 3m54s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb |
||
|
|
67b3fd23d1 |
website refresh: true numbers (56 apps), claims checked against the capability map, ten missing apps, an English twin of every public page (public, choice B), 404 page; site gates 13-18 + 11 decoys; R-902 opened
gates / gates (push) Failing after 13m1s
Part A: claim table documentation/audits/website-refresh-2026-10-08/claims.md; "100% open source" corrected from the licence read; unbacked claims cut (firewall, RAID, snapshots, new-machine restore, self-managed mode, household VPN, "never lost"). Part B: dawarich, docmost, grimmory, homebox, karakeep, mealie, metube, radicale, recipe-importer, sparkyfitness cards; plant-it and wger cut (not offered). Part C: /en/ twins, nav language switch, hreflang both ways, sitemap with xhtml:link, og-image-en.png. Part D: site_gates.py twins/lang/same-apps/no-Hungarian/FAQ-JSON-LD/tail. Operator ruling 9 + choice B in 10-localisation.md §11, §10.7. Register: R-902 (contact mailer source in no repo); R-813, R-784, R-559 annotated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb |
||
|
|
31eeb36e88 |
ISO 1.29.0 PUBLISHED — bilingual console, proven on both menu entries (R-559)
gates / gates (push) Successful in 22s
Live at iso.felhom.eu, sha256 dceacae5da247d76cad065bf6c0d3bbefac8d8a5f8e571 db2fd8449a97e94829, and both download pages now name it. Every gate criterion is recorded with its OBSERVED value in documentation/tests/iso-release-1.29.0-2026-09-18/ — including two proof installs from the published bytes, one per boot-menu entry, each with a first boot AND one reboot: /etc/issue bilingual with zero hits for 8006, pvebanner masked, package 1.29.0 installed, unit enabled and fired, pairing code present, and the installed script byte-identical to repo HEAD. G11: the downloaded bytes hash to the published checksum. A defect was caught BETWEEN builds by looking at the screen rather than at the config: the second menu entry read "Felhom telepítés (szöveges mód) / Install Felhom (text mode)" — 58 characters — and the GRUB menu box cut it at "Instal". The English half was unreadable on the boot screen. Shortened to "… / text" and rebuilt; the published image is the rebuilt one. The Hungarian half is the part that may not change, so the English half is the part that gave. Teardown: VMs 323/324/325 destroyed, the two unclaimed appliance registrations discarded (zero left in `registered`), guest 9201 untouched — 23 containers before and after. The two stale *.rootpw.txt files were shredded from the publish source directory before the upload ran from it (R-587, files gone; the guard that would stop it recurring is still open). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS |
||
|
|
eb1ae37095 |
ISO 1.29.0 source + an English download page (R-559 slice 4, source only)
gates / gates (push) Successful in 23s
THE IMAGE IS NOT BUILT AND NOT PUBLISHED BY THIS COMMIT. Publishing to iso.felhom.eu is public and irreversible and its runbook requires a proof install on BOTH menu entries plus the 16-criterion gate run against the exact uploaded bytes. That is the operator's step. The download pages therefore still name 1.28.0 - the image that is actually published - and a new site gate refuses the two pages naming different files or hashes. Three texts a person meets before any dashboard become bilingual: Hungarian block first, byte for byte as before, then English, inside the same frame. The pairing banner, the bound banner, /etc/issue (and the postinst's byte-coupled copy), plus an English half on the GRUB entries. The Hungarian is a GOLDEN, not a grep: test/golden/*.hu.txt were captured from the script at |
||
|
|
832218dca4 |
ISO 1.28.0 PUBLISHED on the operator's yes; download page and R-535 updated
gates / gates (push) Successful in 20s
Uploaded with env-only credentials and verified by ROUND TRIP: the downloaded bytes checksum to a4cd9b6d…, identical to the built file, and the checksum file is served. 1.27.1 stays in the bucket; nothing was overwritten. The download page now names 1.28.0 with the published checksum (BOM preserved, site gates green). R-535 closes with an honest caveat: the new banner ships byte-identical to repo HEAD and the string is in the published payload, but it was never seen on a screen — the box bound itself while the walk was headless. Also corrected: the 1.27.1 heading still said NOT PUBLISHED although it went out on the big night. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS |
||
|
|
5572216506 |
website: letoltes page for installer 1.27.1 (published and round-trip verified 2026-09-15)
gates / gates (push) Successful in 19s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS |