website: the redesigned home page, staged at /preview/ (noindex)
gates / gates (push) Failing after 14m33s
gates / gates (push) Failing after 14m33s
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.
This commit is contained in:
@@ -113,7 +113,8 @@ Each row names the taste-skill rule it breaks.
|
||||
| **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.** These 13 elements are also the **only** users of JetBrains Mono on the page: retiring them drops a 31 KB font | §6, §7 | §9.F "NO generic step labels"; "NO section-number eyebrows" |
|
||||
| **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 |
|
||||
@@ -164,7 +165,8 @@ Each is one plain sentence. This is the list the operator approves, changes or c
|
||||
5. **Re-order so the page answers "what is it" before "why not Google".** *(R12)*
|
||||
6. **Drop the two word-catalogue sections to a single line each with the link they already carry.**
|
||||
*(R10)*
|
||||
7. **Retire the numbered step and service lists**, which also removes a 31 KB font. *(R6)*
|
||||
7. **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)*
|
||||
8. **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
|
||||
@@ -187,6 +189,19 @@ library, no nav change, no URL change, no change to the four SEO strings in §H.
|
||||
composition hides under `body.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.
|
||||
3. **The English twin** must move in the same commit, or the twin gate fails.
|
||||
5. **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** to `index.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.
|
||||
6. **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 a
|
||||
`TWINS` pair's globe to point at the pair's own two URLs. For `preview/` those two demands
|
||||
contradict each other. The Hungarian preview therefore goes in `NO_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.
|
||||
4. **The `?v=` cache-bust** on `site.css` must be bumped, or the change looks like it did not deploy.
|
||||
|
||||
## L. Register
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
<section class="lede">
|
||||
<div class="container">
|
||||
<div class="lede-grid">
|
||||
<div class="lede-text">
|
||||
<h1>Saját felhőd,<br><span>saját szabályaid</span></h1>
|
||||
<p>Egy kis gép az otthonodban: a fényképeid, a dokumentumaid, a filmjeid. Minden éjjel mentés készül. Mi figyeljük, te használod.</p>
|
||||
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
|
||||
</div>
|
||||
<figure class="lede-shot">
|
||||
<img src="/assets/dashboard-start-hu.webp" alt="A Felhom vezérlőpult indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" fetchpriority="high">
|
||||
<figcaption>A vezérlőpult indítópultja egy éles Felhom dobozon.</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="mit-tud">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Mit tud <span>a doboz ma?</span></h2>
|
||||
<p>Nem terv és nem ígéret: ezek ma működő funkciók egy éles Felhom dobozon.</p>
|
||||
</div>
|
||||
<div class="caps">
|
||||
<div class="caps-group">
|
||||
<h3>Amit nap mint nap használsz</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-camera"/></svg> Fényképek, dokumentumok, média</h4>
|
||||
<p>A telefonod fotói automatikusan feltöltődnek a saját gépedre. A beszkennelt papírjaidat a rendszer felismeri és kereshetővé teszi. A filmjeid, zenéid böngészőből és mobil appból is mennek.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-folder"/></svg> Hálózati megosztás</h4>
|
||||
<p>A doboz mappái megjelennek a Windows Intézőben és a Mac Finderben: úgy húzod rájuk a fájlokat, mint bármelyik másik mappára. Megosztásonként beállítható, hogy csak olvasható legyen.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-package"/></svg> 58 telepíthető alkalmazás</h4>
|
||||
<p>A vezérlőpultból telepíthetők, pár kattintással, parancssor nélkül. Szinte mind nyílt forráskódú (a kivételeket az alkalmazások oldalán jelöljük), és mind a te gépeden fut.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg> Magyarul vagy angolul</h4>
|
||||
<p>A vezérlőpult magyarul és angolul is használható. A nyelvet a háztartás választja, és a dobozról érkező e-mailek is ezt a nyelvet követik.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="caps-group">
|
||||
<h3>Ami a háttérben véd</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-shield-check"/></svg> Háromszintű automatikus mentés</h4>
|
||||
<p>Minden éjjel készül egy mentés a dobozon, egy másodpéldány egy második meghajtóra (ha van), és egy titkosított másolat egy távoli tárhelyre. A megosztott mappáid a második meghajtón és a távoli másolatban is benne vannak.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-lock"/></svg> Helyreállítási kód, amit csak te ismersz</h4>
|
||||
<p>A távoli mentésed titkosításának kulcsa egy helyreállítási kód, ami pontosan egyszer jelenik meg: a te képernyődön. Mi nem ismerjük, és nem tudjuk visszaállítani. Ez azt is jelenti, hogy a kód nélkül a távoli mentés nekünk sem olvasható: tedd el jól.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Visszaállítás, ha baj van</h4>
|
||||
<p>Egy törölt fájl visszahozható a mentésből. Ha maga a doboz megy tönkre, az újratelepített rendszerre a titkosított távoli mentésből visszahozhatók az alkalmazásaid adatai, a helyreállítási kóddal.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-home"/></svg> Internetkimaradáskor is működik</h4>
|
||||
<p>A doboz az otthonodban van. Ha elmegy a net, az otthoni hálózaton továbbra is eléred a fotóidat és a fájljaidat: nem egy távoli szolgáltató engedélyétől függenek.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="caps-group">
|
||||
<h3>Amiről mi gondoskodunk</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-stethoscope"/></svg> Távoli felügyelet, automatikus frissítés</h4>
|
||||
<p>Figyeljük a doboz állapotát. A vezérlőpult magától frissül a legutóbbi kiadásra, és a doboz rendszere is megkapja a biztonsági frissítéseket. Neked nem kell csinálnod semmit. Ha valami elromlik, mi látjuk.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Óvatos alkalmazásfrissítés</h4>
|
||||
<p>Egy alkalmazás új verziója csak akkor jut el hozzád, ha előbb kipróbáltuk. Frissítés előtt friss mentés készül, és ha az új verzió nem indul el rendesen, a doboz magától visszaállítja az előzőt, az adataiddal együtt.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="vezerlopult">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Így néz ki <span>a vezérlőpult</span></h2>
|
||||
<p>Valódi képek egy Felhom dobozról. Kattints rájuk a teljes mérethez.</p>
|
||||
</div>
|
||||
<div class="dash-grid">
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-start-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-start-hu.webp" alt="A vezérlőpult Indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Indítópult</strong>: minden alkalmazásod egy kattintásra.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-apps-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-apps-hu.webp" alt="Az Alkalmazások oldal: telepített és telepíthető alkalmazások kártyái, állapottal" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Alkalmazások</strong>: telepítés pár kattintással, és látod, mi fut és mi naprakész.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-app-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-app-hu.webp" alt="Egy alkalmazás saját oldala: mire jó, képek, és az első lépések" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Egy alkalmazás oldala</strong>: mire jó, hova tedd a fájlokat, és hogyan kezdj hozzá.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-backups-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-backups-hu.webp" alt="A mentések oldala: minden alkalmazás adatbázisának éjszakai mentése, ellenőrizve" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Mentések</strong>: minden éjjel minden alkalmazás adatbázisa mentésre kerül, és ellenőrizzük.</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="ki-all-mogotte">
|
||||
<div class="container">
|
||||
<div class="who">
|
||||
<figure class="who-photo">
|
||||
<img src="/assets/operator-portrait.webp" alt="Nagyfenyvesi Viktor, a Felhom üzemeltetője" width="720" height="900" loading="lazy">
|
||||
</figure>
|
||||
<div class="who-text">
|
||||
<h2>Ki áll <span>mögötte</span></h2>
|
||||
<p><strong>Nagyfenyvesi Viktor vagyok.</strong> Tíz éve tervezek hálózatokat és infrastruktúrát, ma DevOps mérnökként dolgozom, otthon pedig évek óta megy a saját szerverem; a mostani nagyjából egy éve fut.</p>
|
||||
<p>A Felhom onnan indult, hogy ilyen szolgáltatást itthon nem találtam. Saját szervert sokan meg tudnak építeni, de utána menteni, frissíteni és figyelni is kell valakinek. Ezt a részét vállalom át.</p>
|
||||
<p>Ha írsz, én válaszolok, és nem ígérek olyat, amit a doboz ma nem tud.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="hogyan-mukodik">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Hogyan <span>működik?</span></h2>
|
||||
<p>Az első beszélgetéstől a működő rendszerig.</p>
|
||||
</div>
|
||||
<div class="flow">
|
||||
<div class="flow-step">
|
||||
<h3>Egyeztetés</h3>
|
||||
<p>Megbeszéljük az igényeidet: milyen alkalmazásokra van szükséged, és mekkora tárhelyet szeretnél.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Hardver kiválasztás</h3>
|
||||
<p>Segítünk megtalálni a legjobb ár-érték arányú gépet, ami az igényeidnek megfelel.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Telepítés</h3>
|
||||
<p>Feltelepítjük és bekonfiguráljuk az alkalmazásokat, a mentéseket, és a monitoringot.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Átadás</h3>
|
||||
<p>Bemutatjuk a rendszert, segítünk áthozni a meglévő adataidat, és válaszolunk minden kérdésedre.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Üzemeltetés</h3>
|
||||
<p>Figyeljük a rendszert, frissítünk, mentéseket ellenőrzünk. Te csak használod.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="mentesek">
|
||||
<div class="container">
|
||||
<div class="backup-content">
|
||||
<div class="backup-text">
|
||||
<h2>Adataid <span>biztonságban</span></h2>
|
||||
<p>A nagy felhőszolgáltatók milliókat költenek arra, hogy az adataid ne vesszenek el. De tudtad, hogy ugyanezt az otthoni szerveredről is elérheted?</p>
|
||||
<p>A 3-2-1 mentési szabályt követve professzionális szintű adatbiztonságot építünk fel – egy katasztrófa után is marad egy titkosított másolat, távol az otthonodtól.</p>
|
||||
<a href="/biztonsagimentes" class="cta-button-secondary">
|
||||
Mentési stratégia részletei →
|
||||
</a>
|
||||
</div>
|
||||
<div class="backup-visual">
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">3</span>
|
||||
<div class="rule-text">
|
||||
<h4>Három másolat</h4>
|
||||
<p>Eredeti + két biztonsági mentés</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">2</span>
|
||||
<div class="rule-text">
|
||||
<h4>Két tárolótípus</h4>
|
||||
<p>Különböző eszközökön tárolva</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">1</span>
|
||||
<div class="rule-text">
|
||||
<h4>Egy távoli helyen</h4>
|
||||
<p>Offsite backup a biztonság érdekében</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="miert">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Miért a <span>sajátod?</span></h2>
|
||||
<p>Ugyanaz a kényelem, más feltételekkel.</p>
|
||||
</div>
|
||||
<div class="vs">
|
||||
<div class="vs-head">
|
||||
<div>Felhőszolgáltatónál</div>
|
||||
<div>Saját dobozon</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>Havonta fizetsz a tárhelyért és a prémium funkciókért, és az árak csak nőnek idővel.</div>
|
||||
<div><strong>A gép a tiéd, örökre.</strong> Nincs tárhely-előfizetés, ami évről évre drágul: az áramot fizeted, és ha kéred, az üzemeltetést.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>A fotóid, dokumentumaid, személyes adataid idegen szervereken vannak, idegen kezekben.</div>
|
||||
<div><strong>Az adataid az otthonodban maradnak</strong>, nem a Google vagy a Microsoft szerverein. A távoli mentésbe csak titkosítva kerülnek.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>A tárhely fogy, és ha betelt, megint fizetsz.</div>
|
||||
<div><strong>Nincs 15GB-os limit.</strong> Bővítheted ahogy nőnek az igényeid, TB-okkal, ha kell.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>Nem te döntöd el, milyen szolgáltatásokat használsz, és mikor szűnnek meg.</div>
|
||||
<div><strong>Te döntöd el, milyen szolgáltatásokat futtatsz.</strong> Te vagy a főnök, nem a szolgáltató.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="szolgaltatasok">
|
||||
<div class="container">
|
||||
<div class="band">
|
||||
<div class="band-item" id="alkalmazasok">
|
||||
<h3>Amit telepíthetsz</h3>
|
||||
<p>Fájlkezelés, fotók és média, dokumentumok, jelszókezelés, okosotthon, fejlesztői eszközök. Nextcloud, Immich, Jellyfin, Paperless-ngx, Vaultwarden, Home Assistant és még 52 másik: <strong>58 alkalmazás</strong>, szinte mind nyílt forráskódú.</p>
|
||||
<a href="/alkalmazasok" class="cta-button-secondary">Összes alkalmazás megtekintése →</a>
|
||||
</div>
|
||||
<div class="band-item" id="technologiak">
|
||||
<h3>Ami alatta fut</h3>
|
||||
<p>Docker konténerek egy Proxmox alapon, háromszintű mentés, titkosított alagút nyitott port nélkül, magyar vagy angol vezérlőpult. Az igényeidhez igazítjuk, a <strong>legegyszerűbbtől a legkomolyabbig</strong>.</p>
|
||||
<a href="/technologiak" class="cta-button-secondary">Technológiákról bővebben →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="zart-teszt">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Zárt <span>teszt</span></h2>
|
||||
<p>Néhány magyar háztartással most kezdjük el élesben használni a rendszert.</p>
|
||||
</div>
|
||||
<div class="test-grid">
|
||||
<div class="test-note">
|
||||
<h3>Valódi használat</h3>
|
||||
<p>Nem demó: a doboz nálad marad, és az igazi fényképeidet, dokumentumaidat teszed rá. Segítünk a telepítésben és az átállásban, utána te használod a mindennapokban.</p>
|
||||
</div>
|
||||
<div class="test-note">
|
||||
<h3>Visszajelzés</h3>
|
||||
<p>Cserébe azt kérjük, hogy mondd el, mi zavaró, mi érthetetlen, mi nem működik. Egy „ezt a gombot nem találtam" ér nekünk a legtöbbet: abból tudjuk, mit kell kijavítani.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="limits">
|
||||
<h3>Ismert korlátok, őszintén</h3>
|
||||
<p>A vezérlőpulthoz jelenleg <strong>egy közös háztartási jelszó</strong> tartozik, külön családtagi fiókok még nincsenek (az egyes alkalmazásoknak viszont saját felhasználóik lehetnek). A <strong>TV-re streamelés (DLNA)</strong> még nincs: egyelőre böngészőből és mobil appból megy a médiatár. És mivel ez teszt, számíts arra, hogy találsz hibát: ez a lényege.</p>
|
||||
</div>
|
||||
<div class="close-cta">
|
||||
<p>Ha ez érdekel, írj. <strong>Nem kötelez semmire</strong>, először csak beszélgetünk.</p>
|
||||
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="contact" id="kapcsolat">
|
||||
<div class="container">
|
||||
<div class="contact-box">
|
||||
<h2>Érdekel? <span>Beszéljünk!</span></h2>
|
||||
<div class="contact-methods">
|
||||
<a href="/kapcsolat" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-message-square"/></svg> Kapcsolatfelvételi űrlap</a>
|
||||
<a href="mailto:info@felhom.eu" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-mail"/></svg> info@felhom.eu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,72 @@
|
||||
# „Ki áll mögötte" — the draft text, and where each sentence comes from
|
||||
|
||||
**STOP 2 artifact.** Nothing here reaches a page before the operator approves this file.
|
||||
|
||||
## The draft
|
||||
|
||||
> ### Ki áll mögötte
|
||||
>
|
||||
> Nagyfenyvesi Viktor vagyok. Tíz éve tervezek hálózatokat és infrastruktúrát, ma DevOps mérnökként
|
||||
> dolgozom, otthon pedig évek óta megy a saját szerverem; a mostani nagyjából egy éve fut.
|
||||
>
|
||||
> A Felhom onnan indult, hogy ilyen szolgáltatást itthon nem találtam. Saját szervert sokan meg
|
||||
> tudnak építeni, de utána menteni, frissíteni és figyelni is kell valakinek. Ezt a részét vállalom át.
|
||||
>
|
||||
> Ha írsz, én válaszolok, és nem ígérek olyat, amit a doboz ma nem tud.
|
||||
|
||||
Five sentences, first person, informal `te`. No em dash. No word from the banned list
|
||||
(`professzionális`, `ipari szintű`, `megoldás`, …).
|
||||
|
||||
## Where every claim comes from
|
||||
|
||||
| Sentence | Source | Check |
|
||||
|---|---|---|
|
||||
| „Nagyfenyvesi Viktor vagyok." | Already public in the site footer (`Üzemeltető: Nagyfenyvesi Viktor`) | no new disclosure |
|
||||
| „Tíz éve tervezek hálózatokat és infrastruktúrát" | CV: Network/Voice operator 2016-2018 → Senior Network Designer 2018-2022 → Network Architect 2022- . A continuous ten-year run | **deliberately not "20+ év informatika"** — the CV has a 2008-2015 shop-manager stretch, so the larger number would not survive a careful reader |
|
||||
| „ma DevOps mérnökként dolgozom" | Operator's own words, confirmed by the CV's most recent role | kept employer-free |
|
||||
| „otthon pedig évek óta megy a saját szerverem" | Operator: „Running home-server as a hobby for years now" | — |
|
||||
| „a mostani nagyjából egy éve fut" | Operator: „Latest server is running since about a year now" | — |
|
||||
| „ilyen szolgáltatást itthon nem találtam" | Operator: „maybe this is a service which doesn't exist yet" | softened from a market claim to a personal observation, which is what he can actually vouch for |
|
||||
| „menteni, frissíteni és figyelni is kell valakinek. Ezt a részét vállalom át." | The service the site already describes (nightly backup, cautious app updates, remote monitoring) | every part already claimed on today's page |
|
||||
| „nem ígérek olyat, amit a doboz ma nem tud" | The existing „Ismert korlátok" card | reinforces a promise already made |
|
||||
|
||||
## Deliberately left out
|
||||
|
||||
- **Employer names** (Deutsche Telekom, BT, IBM, Copyguru, Eastron). Not authorised, and a household
|
||||
does not care.
|
||||
- **Address, phone number, e-mail from the CV.** The page already has `info@felhom.eu`.
|
||||
- **The certification list** (CKA, AWS SA, CCNA, VCP, Azure). See decision 3.
|
||||
- **k3s / DooPlex / homelab-manifests.** True, and meaningless to the audience this page is for.
|
||||
- **Anything about his family or what is stored on his own server.** He did not say it, so it is not
|
||||
written.
|
||||
|
||||
## Three things the operator must settle
|
||||
|
||||
1. **„Ha írsz, én válaszolok" is a NEW promise.** Today's site promises support but never that one
|
||||
named person answers. It is the most trust-building sentence in the draft and the easiest to
|
||||
regret at 30 customers. Keep, soften, or cut.
|
||||
2. **`én` here vs `mi` everywhere else.** The rest of the page says „mi segítünk", „Figyeljük a doboz
|
||||
állapotát". A first-person section sitting inside a first-person-plural page is normal for a
|
||||
one-person business and is not dishonest, but it is a visible seam. Recommendation: **leave the
|
||||
service copy as `mi`** and let this one section be `én`; switching the whole page to `én` is a
|
||||
bigger copy change than this round should carry.
|
||||
3. **A credential line, or none.** One sentence could be added, e.g. „Kubernetes rendszergazdai
|
||||
vizsgám van (CKA)". Recommendation: **leave it out.** For a household it reads as a CV, and the
|
||||
ten-year sentence already does the work.
|
||||
|
||||
## The photograph
|
||||
|
||||
`photo/operator-portrait.webp` — 720 × 900, 93 KB, WebP q78.
|
||||
|
||||
- Source: `E:\felhom-photos\20231018_173058.jpg`, 3264 × 2448. **The original stays outside the
|
||||
repo.**
|
||||
- Crop box `(340, 131) → (2047, 2265)`, 4:5, head and shoulders, resized to 720 wide.
|
||||
- **Metadata:** the original carried **no GPS tag** (GPS IFD: 0 entries). It did carry the phone make
|
||||
and model (`samsung SM-A705FN`), the firmware build and the exact timestamp. The brief's premise
|
||||
that the phone photo would carry a location turned out not to hold for this file; everything was
|
||||
stripped regardless.
|
||||
- **Verified by read-back** of the written file: `0` EXIF tags, `0` GPS IFD entries, info keys only
|
||||
`['background', 'loop']` (WebP container defaults), and none of the byte sequences `EXIF`, `XMP `,
|
||||
`ICCP`, `samsung`, `SM-A705FN`, `2023:10:18` appear anywhere in the file.
|
||||
- Built by re-writing the pixels into a fresh `Image` object rather than saving the decoded original,
|
||||
so nothing from the source's `info` dict can travel with it.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
+10
-1
@@ -81,7 +81,16 @@ URL = {"index.html": "/", "alkalmazasok.html": "/alkalmazasok", "technologiak.ht
|
||||
# Hungarian only, and every English page's footer says so and links the Hungarian page. A twin would
|
||||
# be an English legal text nobody has reviewed — worse than an honest pointer. If an English version
|
||||
# is ever written and reviewed, move them into TWINS and add both URLs above.
|
||||
NO_TWIN = {"szolgaltatasok-nonpublic.html", "404.html", "adatkezeles.html", "feltetelek.html"}
|
||||
# preview/index.html (2026-10-10) is the redesigned home page, staged at /preview/ for the operator
|
||||
# to compare before it replaces /. It is noindex + Disallow:/preview/, and it goes in NO_TWIN rather
|
||||
# than TWINS because the two gates contradict each other for a preview URL: gate 3 requires its <nav>
|
||||
# to be IDENTICAL to index.html's (whose globe points at / and /en/), while the twin check requires a
|
||||
# TWINS pair's globe to point at the pair's own two URLs. Everything that matters still runs on it
|
||||
# here - BOM, emoji, nav/footer, globe structure, analytics, CDN, tokens, cache-busting, dash-lang,
|
||||
# viewer, tail. BOTH this entry and the file are removed in the same commit as the switch, and the
|
||||
# English twin is written then, as a twin.
|
||||
NO_TWIN = {"szolgaltatasok-nonpublic.html", "404.html", "adatkezeles.html", "feltetelek.html",
|
||||
os.path.join("preview", "index.html")}
|
||||
|
||||
PAGES = list(TWINS) + list(TWINS.values()) + sorted(NO_TWIN)
|
||||
EN_PAGES = set(TWINS.values())
|
||||
|
||||
@@ -1,3 +1,42 @@
|
||||
## 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
|
||||
section header the same centred two-word-plus-blue-tail shape, the hero showing the **logo** where the
|
||||
product belongs, and a value proposition („Professzionális otthoni szerver telepítés és
|
||||
üzemeltetés") that says nothing. Measured audit, against the live site:
|
||||
`documentation/audits/redesign-2026-10-10/AUDIT.md`.
|
||||
- **`website/preview/index.html`** — the new home page, `noindex` + `Disallow: /preview/`, not in the
|
||||
sitemap, linked from nowhere. It becomes `index.html` only on the operator's go.
|
||||
- **New: „Ki áll mögötte"** with the operator's photograph and five sentences in his own words.
|
||||
Every claim traced in `audits/redesign-2026-10-10/ki-all-mogotte.md`. The photo
|
||||
(`assets/operator-portrait.webp`) is cropped from an original that **stays outside the repo**, and all
|
||||
metadata is stripped and **verified by read-back** (0 EXIF tags, 0 GPS entries, and none of the phone's
|
||||
identifying byte sequences survive). The original carried no GPS tag to begin with; it did carry the
|
||||
phone model and the timestamp.
|
||||
- **Ten sections, ten different layout families.** `why-grid` no longer runs three times and
|
||||
`apps-showcase` no longer twice: the ten capability cards become three labelled clusters, the three
|
||||
cloud-problem cards and the four own-server cards merge into **one two-column comparison**, and the two
|
||||
tile walls shrink to a two-item band that keeps the app names and links to the pages that already list
|
||||
them.
|
||||
- **The hero** shows a real dashboard screenshot instead of the logo, is sized by its content instead of a
|
||||
forced `100vh` band, and drops the infinite float animation. Its sentence is now four concrete facts.
|
||||
- **Numbers off the mono font.** The `1..5` process badges and `01..05` service numbers are gone
|
||||
(taste-skill §9.F), and the 3-2-1 figures move to the UI font — together these were the **only** 13
|
||||
characters on the page loading JetBrains Mono, so the page no longer fetches it.
|
||||
- **Em dashes: 18 → 0** in the page's own copy. The `<title>`, meta description, Open Graph, Twitter and
|
||||
JSON-LD keep theirs by operator decision (they are indexed strings; changing them deserves its own
|
||||
pass). **One remains in the shared footer**, which gate 3 requires to be identical on all 14 pages —
|
||||
a site-wide edit, carried as a separate decision.
|
||||
- **CSS: additions only.** Every new rule is a new class under `.page-index`; nothing existing was
|
||||
modified, so `index.html` and every other page render exactly as before while the preview exists.
|
||||
`site.css?v=11` on the preview page only.
|
||||
- **Gate:** `preview/index.html` is registered in `site_gates.py` `NO_TWIN`, with the reason in a comment
|
||||
— a preview URL **cannot** go in `TWINS`, because gate 3 wants its nav identical to `index.html`'s
|
||||
(globe pointing at `/` and `/en/`) while the twin check wants the globe pointing at the pair's own URLs.
|
||||
The English twin is written in the same commit as the switch, as a real twin.
|
||||
- **CRLF, again.** The page builder wrote LF and the nav/footer gate went red for the preview exactly as
|
||||
the 2026-10-10 morning entry above describes. Builder now writes **BOM + CRLF** and asserts both.
|
||||
|
||||
## 2026-10-10 — a tester recruitment page, and terms 1.1 (the domain)
|
||||
|
||||
- **New page pair: `/teszteles` + `/en/testing`** — the website asked for testers without saying what a
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
@@ -2206,3 +2206,136 @@ footer a:hover, footer a:focus-visible { text-decoration: underline; }
|
||||
.legal-version { padding: 12px 16px; border: 1px solid var(--line); border-radius: var(--radius); }
|
||||
.legal-callout { padding: 16px; border: 1px solid var(--blue); border-radius: var(--radius); }
|
||||
.nowrap { white-space: nowrap; }
|
||||
|
||||
/* ================= page: index — 2026-10-10 redesign =================
|
||||
NEW classes only. Nothing above this block is modified, so index.html renders
|
||||
exactly as before until it is switched over. Audit + rationale:
|
||||
documentation/audits/redesign-2026-10-10/AUDIT.md
|
||||
Dials: DESIGN_VARIANCE 6, MOTION_INTENSITY 3, VISUAL_DENSITY 4. Motion is CSS
|
||||
hover/focus only; nothing animates on load, so there is nothing for
|
||||
prefers-reduced-motion to undo beyond the global rule already in this file. */
|
||||
|
||||
/* --- section heads: left-aligned, no centred two-word-plus-blue-tail rhythm --- */
|
||||
.page-index .sec-head { max-width: 46rem; margin-bottom: 44px; }
|
||||
.page-index .sec-head h2 {
|
||||
font-size: clamp(1.7rem, 3.2vw, 2.2rem); font-weight: 700;
|
||||
letter-spacing: -0.02em; margin-bottom: 12px;
|
||||
}
|
||||
.page-index .sec-head p { color: var(--text-2); font-size: 1.05rem; max-width: 42rem; }
|
||||
.page-index .sec-head.is-wide { max-width: none; }
|
||||
|
||||
/* --- lede (replaces .hero): content-sized, not a forced 100vh band --- */
|
||||
.page-index .lede { padding: 128px 0 72px; }
|
||||
.page-index .lede-grid {
|
||||
display: grid; grid-template-columns: 1fr 1.15fr; gap: 56px; align-items: center;
|
||||
}
|
||||
.page-index .lede-text h1 {
|
||||
font-size: clamp(2.3rem, 4.6vw, 3.3rem); font-weight: 700; line-height: 1.1;
|
||||
letter-spacing: -0.03em; margin-bottom: 20px;
|
||||
}
|
||||
.page-index .lede-text p { font-size: 1.15rem; color: var(--text-2); margin-bottom: 28px; max-width: 30rem; }
|
||||
.page-index .lede-shot { margin: 0; }
|
||||
.page-index .lede-shot img {
|
||||
width: 100%; height: auto; display: block;
|
||||
border: 1px solid var(--line); border-radius: var(--radius);
|
||||
}
|
||||
.page-index .lede-shot figcaption { margin-top: 10px; font-size: 0.85rem; color: var(--text-3); }
|
||||
|
||||
/* --- capabilities, grouped into three clusters instead of ten equal cards --- */
|
||||
.page-index .caps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px 36px; }
|
||||
.page-index .caps-group h3 {
|
||||
font-size: 0.95rem; font-weight: 700; color: var(--text-1);
|
||||
padding-bottom: 10px; margin-bottom: 20px; border-bottom: 1px solid var(--line);
|
||||
}
|
||||
.page-index .caps-list { list-style: none; display: grid; gap: 22px; }
|
||||
.page-index .caps-item h4 {
|
||||
display: flex; gap: 10px; align-items: flex-start;
|
||||
font-size: 1.02rem; font-weight: 600; color: var(--text-1); margin-bottom: 6px;
|
||||
}
|
||||
.page-index .caps-item h4 svg { flex: 0 0 auto; margin-top: 3px; color: var(--blue-bright); }
|
||||
.page-index .caps-item p { color: var(--text-2); font-size: 0.93rem; line-height: 1.65; }
|
||||
|
||||
/* --- who is behind it --- */
|
||||
.page-index .who { display: grid; grid-template-columns: 300px 1fr; gap: 48px; align-items: start; }
|
||||
.page-index .who-photo { margin: 0; }
|
||||
.page-index .who-photo img {
|
||||
width: 100%; height: auto; display: block;
|
||||
border: 1px solid var(--line); border-radius: var(--radius);
|
||||
}
|
||||
.page-index .who-text h2 { font-size: clamp(1.7rem, 3.2vw, 2.2rem); font-weight: 700; margin-bottom: 20px; letter-spacing: -0.02em; }
|
||||
.page-index .who-text p { color: var(--text-2); font-size: 1.05rem; line-height: 1.75; margin-bottom: 16px; max-width: 38rem; }
|
||||
.page-index .who-text p:last-child { margin-bottom: 0; }
|
||||
.page-index .who-text strong { color: var(--text-1); font-weight: 600; }
|
||||
|
||||
/* --- the process, as a flow without number badges --- */
|
||||
.page-index .flow { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0; }
|
||||
.page-index .flow-step { padding: 0 20px; border-left: 1px solid var(--line); }
|
||||
.page-index .flow-step:first-child { padding-left: 0; border-left: 0; }
|
||||
.page-index .flow-step h3 { font-size: 1.02rem; font-weight: 600; color: var(--text-1); margin-bottom: 8px; }
|
||||
.page-index .flow-step p { color: var(--text-2); font-size: 0.9rem; line-height: 1.6; }
|
||||
|
||||
/* --- the comparison that replaces problem-grid + the second why-grid --- */
|
||||
.page-index .vs { border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
|
||||
.page-index .vs-head, .page-index .vs-row { display: grid; grid-template-columns: 1fr 1fr; }
|
||||
/* deliberately NOT uppercase + tracked: that is the eyebrow signature taste-skill
|
||||
S4.7 rations, and Hungarian accented capitals read badly. */
|
||||
.page-index .vs-head > div {
|
||||
padding: 16px 24px; font-size: 0.92rem; font-weight: 700; background: var(--bg-2);
|
||||
}
|
||||
.page-index .vs-head > div:first-child { color: var(--text-3); }
|
||||
.page-index .vs-head > div:last-child { color: var(--blue-bright); }
|
||||
.page-index .vs-row { border-top: 1px solid var(--line-soft); }
|
||||
.page-index .vs-row > div { padding: 20px 24px; font-size: 0.97rem; line-height: 1.6; }
|
||||
.page-index .vs-row > div:first-child { color: var(--text-3); }
|
||||
.page-index .vs-row > div:last-child { color: var(--text-2); border-left: 1px solid var(--line-soft); }
|
||||
.page-index .vs-row strong { color: var(--text-1); font-weight: 600; }
|
||||
|
||||
/* --- the compact band that replaces the two tile walls --- */
|
||||
.page-index .band { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
|
||||
.page-index .band-item { border-left: 2px solid var(--blue); padding-left: 24px; }
|
||||
.page-index .band-item h3 { font-size: 1.1rem; font-weight: 600; margin-bottom: 10px; color: var(--text-1); }
|
||||
.page-index .band-item p { color: var(--text-2); font-size: 0.95rem; line-height: 1.65; margin-bottom: 16px; }
|
||||
.page-index .band-item strong { color: var(--blue-bright); font-weight: 600; }
|
||||
|
||||
/* --- closed test: two notes plus the limits, which get the weight --- */
|
||||
.page-index .test-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 28px; }
|
||||
.page-index .test-note { border: 1px solid var(--line); border-radius: var(--radius); padding: 24px; background: var(--bg-1); }
|
||||
.page-index .test-note h3 { font-size: 1.05rem; font-weight: 600; margin-bottom: 10px; color: var(--text-1); }
|
||||
.page-index .test-note p { color: var(--text-2); font-size: 0.93rem; line-height: 1.65; }
|
||||
.page-index .limits {
|
||||
border: 1px solid var(--warn); border-radius: var(--radius);
|
||||
background: var(--warn-dim); padding: 24px 28px;
|
||||
}
|
||||
.page-index .limits h3 { font-size: 1.05rem; font-weight: 700; color: var(--text-1); margin-bottom: 12px; }
|
||||
.page-index .limits p { color: var(--text-2); font-size: 0.95rem; line-height: 1.7; }
|
||||
.page-index .limits strong { color: var(--text-1); font-weight: 600; }
|
||||
|
||||
/* --- the 3-2-1 figures, off the mono font (R6b: 13 characters were loading 31 KB) --- */
|
||||
.page-index .rule-num {
|
||||
font-family: var(--font-ui); font-size: 2rem; font-weight: 700;
|
||||
min-width: 50px; color: var(--blue-bright);
|
||||
}
|
||||
|
||||
/* --- one closing call to action --- */
|
||||
.page-index .close-cta { text-align: center; }
|
||||
.page-index .close-cta p { font-size: 1.05rem; color: var(--text-2); margin-bottom: 24px; }
|
||||
.page-index .close-cta p strong { color: var(--text-1); font-weight: 600; }
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.page-index .lede { padding: 104px 0 56px; }
|
||||
.page-index .lede-grid { grid-template-columns: 1fr; gap: 36px; }
|
||||
.page-index .lede-text p { max-width: none; }
|
||||
.page-index .caps { grid-template-columns: 1fr; gap: 36px; }
|
||||
.page-index .who { grid-template-columns: 1fr; gap: 28px; }
|
||||
.page-index .who-photo { max-width: 260px; }
|
||||
.page-index .flow { grid-template-columns: 1fr; gap: 20px; }
|
||||
.page-index .flow-step { padding: 0 0 0 20px; border-left: 1px solid var(--line); }
|
||||
.page-index .flow-step:first-child { padding-left: 20px; border-left: 1px solid var(--line); }
|
||||
.page-index .band { grid-template-columns: 1fr; }
|
||||
.page-index .test-grid { grid-template-columns: 1fr; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.page-index .vs-head > div, .page-index .vs-row > div { padding: 14px 16px; font-size: 0.9rem; }
|
||||
.page-index .limits { padding: 20px; }
|
||||
}
|
||||
.page-index .close-cta { text-align: center; margin-top: 40px; }
|
||||
|
||||
@@ -0,0 +1,444 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="hu">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<meta name="description" content="Otthoni szerver a saját otthonodban: fényképek, dokumentumok, médiatár. 58 telepíthető alkalmazás, háromszintű automatikus mentés, magyar vagy angol nyelvű vezérlőpult. Most zárt teszt indul.">
|
||||
<title>Felhom.eu — Saját felhőd, saját szabályaid | Otthoni szerver szolgáltatás</title>
|
||||
|
||||
<!-- SEO meta -->
|
||||
<meta name="keywords" content="otthoni szerver, saját felhő, self-hosting, Google Drive alternatíva, iCloud alternatíva, adatvédelem, nyílt forráskódú, szerver telepítés, szerver üzemeltetés, Nextcloud, Immich, Magyarország">
|
||||
<meta name="author" content="Felhom.eu">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<!-- PREVIEW ONLY. This file becomes website/index.html at the switch; this noindex
|
||||
line and robots.txt's Disallow: /preview/ are removed in that same commit. -->
|
||||
<link rel="canonical" href="https://felhom.eu/">
|
||||
<link rel="alternate" hreflang="hu" href="https://felhom.eu/">
|
||||
<link rel="alternate" hreflang="en" href="https://felhom.eu/en/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://felhom.eu/">
|
||||
|
||||
<!-- Open Graph (Facebook, LinkedIn) -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://felhom.eu/">
|
||||
<meta property="og:title" content="Felhom.eu — Saját felhőd, saját szabályaid">
|
||||
<meta property="og:description" content="Otthoni szerver a te otthonodban: fényképek, dokumentumok, médiatár — automatikus mentéssel, és egy helyreállítási kóddal, amit csak te ismersz. Most zárt teszt indul.">
|
||||
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta property="og:image:alt" content="Felhom.eu — Saját felhőd, saját szabályaid. Zárt teszt indul.">
|
||||
<meta property="og:locale" content="hu_HU">
|
||||
<meta property="og:site_name" content="Felhom.eu">
|
||||
|
||||
<!-- Twitter/X Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Felhom.eu — Saját felhőd, saját szabályaid">
|
||||
<meta name="twitter:description" content="Otthoni szerver a te otthonodban: fényképek, dokumentumok, médiatár — automatikus mentéssel, és egy helyreállítási kóddal, amit csak te ismersz.">
|
||||
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
|
||||
|
||||
<!-- Structured Data (JSON-LD) -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "LocalBusiness",
|
||||
"name": "Felhom.eu",
|
||||
"description": "Professzionális otthoni szerver telepítés és üzemeltetés Magyarországon.",
|
||||
"url": "https://felhom.eu",
|
||||
"logo": "https://felhom.eu/assets/logo.png",
|
||||
"email": "info@felhom.eu",
|
||||
"areaServed": {
|
||||
"@type": "Country",
|
||||
"name": "Magyarország"
|
||||
},
|
||||
"serviceType": ["Szerver telepítés", "Szerver üzemeltetés", "Self-hosting"],
|
||||
"knowsLanguage": ["hu", "en"],
|
||||
"sameAs": []
|
||||
}
|
||||
</script>
|
||||
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
|
||||
<link rel="stylesheet" href="/assets/site.css?v=11">
|
||||
<link rel="icon" type="image/png" href="/assets/logo_favicon_2.svg">
|
||||
<script defer src="/assets/gallery.js?v=2"></script>
|
||||
<script defer src="https://stats.felhom.eu/script.js" data-website-id="d419db57-5e1c-48df-bdb3-c29f25fb1661"></script>
|
||||
</head>
|
||||
<body class="page-index">
|
||||
<nav>
|
||||
<div class="container">
|
||||
<a href="/" class="logo">
|
||||
<img class="logo-mark" src="/assets/logo-mark.svg" alt="" aria-hidden="true">
|
||||
<img class="logo-word" src="/assets/logo-wordmark.png" alt="felhom.eu">
|
||||
</a>
|
||||
<ul class="nav-links">
|
||||
<li><a href="/#szolgaltatasok">Szolgáltatások</a></li>
|
||||
<li><a href="/alkalmazasok">Alkalmazások</a></li>
|
||||
<li><a href="/technologiak">Technológiák</a></li>
|
||||
<li><a href="/biztonsagimentes">Mentések</a></li>
|
||||
<li><a href="/gyik">GYIK</a></li>
|
||||
<li><a href="/kapcsolat">Kapcsolat</a></li>
|
||||
<li class="lang-globe-li"><details class="lang-globe"><summary class="lang-globe-btn" aria-label="Nyelv" title="Nyelv"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg></summary><ul class="lang-globe-menu"><li><a href="/" lang="hu" hreflang="hu" class="lang-globe-item current" aria-current="true">Magyar</a></li><li><a href="/en/" lang="en" hreflang="en" class="lang-globe-item">English</a></li></ul></details></li>
|
||||
</ul>
|
||||
<button class="hamburger" id="hamburger" aria-label="Menü megnyitása" aria-expanded="false">
|
||||
<span class="hamburger-box">
|
||||
<span class="hamburger-line"></span>
|
||||
<span class="hamburger-line"></span>
|
||||
<span class="hamburger-line"></span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-overlay" id="mobileOverlay"></div>
|
||||
|
||||
<section class="lede">
|
||||
<div class="container">
|
||||
<div class="lede-grid">
|
||||
<div class="lede-text">
|
||||
<h1>Saját felhőd,<br><span>saját szabályaid</span></h1>
|
||||
<p>Egy kis gép az otthonodban: a fényképeid, a dokumentumaid, a filmjeid. Minden éjjel mentés készül. Mi figyeljük, te használod.</p>
|
||||
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
|
||||
</div>
|
||||
<figure class="lede-shot">
|
||||
<img src="/assets/dashboard-start-hu.webp" alt="A Felhom vezérlőpult indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" fetchpriority="high">
|
||||
<figcaption>A vezérlőpult indítópultja egy éles Felhom dobozon.</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="mit-tud">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Mit tud <span>a doboz ma?</span></h2>
|
||||
<p>Nem terv és nem ígéret: ezek ma működő funkciók egy éles Felhom dobozon.</p>
|
||||
</div>
|
||||
<div class="caps">
|
||||
<div class="caps-group">
|
||||
<h3>Amit nap mint nap használsz</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-camera"/></svg> Fényképek, dokumentumok, média</h4>
|
||||
<p>A telefonod fotói automatikusan feltöltődnek a saját gépedre. A beszkennelt papírjaidat a rendszer felismeri és kereshetővé teszi. A filmjeid, zenéid böngészőből és mobil appból is mennek.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-folder"/></svg> Hálózati megosztás</h4>
|
||||
<p>A doboz mappái megjelennek a Windows Intézőben és a Mac Finderben: úgy húzod rájuk a fájlokat, mint bármelyik másik mappára. Megosztásonként beállítható, hogy csak olvasható legyen.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-package"/></svg> 58 telepíthető alkalmazás</h4>
|
||||
<p>A vezérlőpultból telepíthetők, pár kattintással, parancssor nélkül. Szinte mind nyílt forráskódú (a kivételeket az alkalmazások oldalán jelöljük), és mind a te gépeden fut.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg> Magyarul vagy angolul</h4>
|
||||
<p>A vezérlőpult magyarul és angolul is használható. A nyelvet a háztartás választja, és a dobozról érkező e-mailek is ezt a nyelvet követik.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="caps-group">
|
||||
<h3>Ami a háttérben véd</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-shield-check"/></svg> Háromszintű automatikus mentés</h4>
|
||||
<p>Minden éjjel készül egy mentés a dobozon, egy másodpéldány egy második meghajtóra (ha van), és egy titkosított másolat egy távoli tárhelyre. A megosztott mappáid a második meghajtón és a távoli másolatban is benne vannak.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-lock"/></svg> Helyreállítási kód, amit csak te ismersz</h4>
|
||||
<p>A távoli mentésed titkosításának kulcsa egy helyreállítási kód, ami pontosan egyszer jelenik meg: a te képernyődön. Mi nem ismerjük, és nem tudjuk visszaállítani. Ez azt is jelenti, hogy a kód nélkül a távoli mentés nekünk sem olvasható: tedd el jól.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Visszaállítás, ha baj van</h4>
|
||||
<p>Egy törölt fájl visszahozható a mentésből. Ha maga a doboz megy tönkre, az újratelepített rendszerre a titkosított távoli mentésből visszahozhatók az alkalmazásaid adatai, a helyreállítási kóddal.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-home"/></svg> Internetkimaradáskor is működik</h4>
|
||||
<p>A doboz az otthonodban van. Ha elmegy a net, az otthoni hálózaton továbbra is eléred a fotóidat és a fájljaidat: nem egy távoli szolgáltató engedélyétől függenek.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="caps-group">
|
||||
<h3>Amiről mi gondoskodunk</h3>
|
||||
<ul class="caps-list">
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-stethoscope"/></svg> Távoli felügyelet, automatikus frissítés</h4>
|
||||
<p>Figyeljük a doboz állapotát. A vezérlőpult magától frissül a legutóbbi kiadásra, és a doboz rendszere is megkapja a biztonsági frissítéseket. Neked nem kell csinálnod semmit. Ha valami elromlik, mi látjuk.</p>
|
||||
</li>
|
||||
<li class="caps-item">
|
||||
<h4><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rotate-cw"/></svg> Óvatos alkalmazásfrissítés</h4>
|
||||
<p>Egy alkalmazás új verziója csak akkor jut el hozzád, ha előbb kipróbáltuk. Frissítés előtt friss mentés készül, és ha az új verzió nem indul el rendesen, a doboz magától visszaállítja az előzőt, az adataiddal együtt.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="vezerlopult">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Így néz ki <span>a vezérlőpult</span></h2>
|
||||
<p>Valódi képek egy Felhom dobozról. Kattints rájuk a teljes mérethez.</p>
|
||||
</div>
|
||||
<div class="dash-grid">
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-start-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-start-hu.webp" alt="A vezérlőpult Indítópultja: az otthon telepített alkalmazások csempéi" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Indítópult</strong>: minden alkalmazásod egy kattintásra.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-apps-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-apps-hu.webp" alt="Az Alkalmazások oldal: telepített és telepíthető alkalmazások kártyái, állapottal" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Alkalmazások</strong>: telepítés pár kattintással, és látod, mi fut és mi naprakész.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-app-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-app-hu.webp" alt="Egy alkalmazás saját oldala: mire jó, képek, és az első lépések" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Egy alkalmazás oldala</strong>: mire jó, hova tedd a fájlokat, és hogyan kezdj hozzá.</figcaption>
|
||||
</figure>
|
||||
<figure class="dash-shot">
|
||||
<a href="/assets/dashboard-backups-hu.webp" data-gallery="dashboard"><img src="/assets/dashboard-backups-hu.webp" alt="A mentések oldala: minden alkalmazás adatbázisának éjszakai mentése, ellenőrizve" width="1440" height="900" loading="lazy"></a>
|
||||
<figcaption><strong>Mentések</strong>: minden éjjel minden alkalmazás adatbázisa mentésre kerül, és ellenőrizzük.</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="ki-all-mogotte">
|
||||
<div class="container">
|
||||
<div class="who">
|
||||
<figure class="who-photo">
|
||||
<img src="/assets/operator-portrait.webp" alt="Nagyfenyvesi Viktor, a Felhom üzemeltetője" width="720" height="900" loading="lazy">
|
||||
</figure>
|
||||
<div class="who-text">
|
||||
<h2>Ki áll <span>mögötte</span></h2>
|
||||
<p><strong>Nagyfenyvesi Viktor vagyok.</strong> Tíz éve tervezek hálózatokat és infrastruktúrát, ma DevOps mérnökként dolgozom, otthon pedig évek óta megy a saját szerverem; a mostani nagyjából egy éve fut.</p>
|
||||
<p>A Felhom onnan indult, hogy ilyen szolgáltatást itthon nem találtam. Saját szervert sokan meg tudnak építeni, de utána menteni, frissíteni és figyelni is kell valakinek. Ezt a részét vállalom át.</p>
|
||||
<p>Ha írsz, én válaszolok, és nem ígérek olyat, amit a doboz ma nem tud.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="hogyan-mukodik">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Hogyan <span>működik?</span></h2>
|
||||
<p>Az első beszélgetéstől a működő rendszerig.</p>
|
||||
</div>
|
||||
<div class="flow">
|
||||
<div class="flow-step">
|
||||
<h3>Egyeztetés</h3>
|
||||
<p>Megbeszéljük az igényeidet: milyen alkalmazásokra van szükséged, és mekkora tárhelyet szeretnél.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Hardver kiválasztás</h3>
|
||||
<p>Segítünk megtalálni a legjobb ár-érték arányú gépet, ami az igényeidnek megfelel.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Telepítés</h3>
|
||||
<p>Feltelepítjük és bekonfiguráljuk az alkalmazásokat, a mentéseket, és a monitoringot.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Átadás</h3>
|
||||
<p>Bemutatjuk a rendszert, segítünk áthozni a meglévő adataidat, és válaszolunk minden kérdésedre.</p>
|
||||
</div>
|
||||
<div class="flow-step">
|
||||
<h3>Üzemeltetés</h3>
|
||||
<p>Figyeljük a rendszert, frissítünk, mentéseket ellenőrzünk. Te csak használod.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="mentesek">
|
||||
<div class="container">
|
||||
<div class="backup-content">
|
||||
<div class="backup-text">
|
||||
<h2>Adataid <span>biztonságban</span></h2>
|
||||
<p>A nagy felhőszolgáltatók milliókat költenek arra, hogy az adataid ne vesszenek el. De tudtad, hogy ugyanezt az otthoni szerveredről is elérheted?</p>
|
||||
<p>A 3-2-1 mentési szabályt követve professzionális szintű adatbiztonságot építünk fel – egy katasztrófa után is marad egy titkosított másolat, távol az otthonodtól.</p>
|
||||
<a href="/biztonsagimentes" class="cta-button-secondary">
|
||||
Mentési stratégia részletei →
|
||||
</a>
|
||||
</div>
|
||||
<div class="backup-visual">
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">3</span>
|
||||
<div class="rule-text">
|
||||
<h4>Három másolat</h4>
|
||||
<p>Eredeti + két biztonsági mentés</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">2</span>
|
||||
<div class="rule-text">
|
||||
<h4>Két tárolótípus</h4>
|
||||
<p>Különböző eszközökön tárolva</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="backup-rule-mini">
|
||||
<span class="rule-num">1</span>
|
||||
<div class="rule-text">
|
||||
<h4>Egy távoli helyen</h4>
|
||||
<p>Offsite backup a biztonság érdekében</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="miert">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Miért a <span>sajátod?</span></h2>
|
||||
<p>Ugyanaz a kényelem, más feltételekkel.</p>
|
||||
</div>
|
||||
<div class="vs">
|
||||
<div class="vs-head">
|
||||
<div>Felhőszolgáltatónál</div>
|
||||
<div>Saját dobozon</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>Havonta fizetsz a tárhelyért és a prémium funkciókért, és az árak csak nőnek idővel.</div>
|
||||
<div><strong>A gép a tiéd, örökre.</strong> Nincs tárhely-előfizetés, ami évről évre drágul: az áramot fizeted, és ha kéred, az üzemeltetést.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>A fotóid, dokumentumaid, személyes adataid idegen szervereken vannak, idegen kezekben.</div>
|
||||
<div><strong>Az adataid az otthonodban maradnak</strong>, nem a Google vagy a Microsoft szerverein. A távoli mentésbe csak titkosítva kerülnek.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>A tárhely fogy, és ha betelt, megint fizetsz.</div>
|
||||
<div><strong>Nincs 15GB-os limit.</strong> Bővítheted ahogy nőnek az igényeid, TB-okkal, ha kell.</div>
|
||||
</div>
|
||||
<div class="vs-row">
|
||||
<div>Nem te döntöd el, milyen szolgáltatásokat használsz, és mikor szűnnek meg.</div>
|
||||
<div><strong>Te döntöd el, milyen szolgáltatásokat futtatsz.</strong> Te vagy a főnök, nem a szolgáltató.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section" id="szolgaltatasok">
|
||||
<div class="container">
|
||||
<div class="band">
|
||||
<div class="band-item" id="alkalmazasok">
|
||||
<h3>Amit telepíthetsz</h3>
|
||||
<p>Fájlkezelés, fotók és média, dokumentumok, jelszókezelés, okosotthon, fejlesztői eszközök. Nextcloud, Immich, Jellyfin, Paperless-ngx, Vaultwarden, Home Assistant és még 52 másik: <strong>58 alkalmazás</strong>, szinte mind nyílt forráskódú.</p>
|
||||
<a href="/alkalmazasok" class="cta-button-secondary">Összes alkalmazás megtekintése →</a>
|
||||
</div>
|
||||
<div class="band-item" id="technologiak">
|
||||
<h3>Ami alatta fut</h3>
|
||||
<p>Docker konténerek egy Proxmox alapon, háromszintű mentés, titkosított alagút nyitott port nélkül, magyar vagy angol vezérlőpult. Az igényeidhez igazítjuk, a <strong>legegyszerűbbtől a legkomolyabbig</strong>.</p>
|
||||
<a href="/technologiak" class="cta-button-secondary">Technológiákról bővebben →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section alt-bg" id="zart-teszt">
|
||||
<div class="container">
|
||||
<div class="sec-head">
|
||||
<h2>Zárt <span>teszt</span></h2>
|
||||
<p>Néhány magyar háztartással most kezdjük el élesben használni a rendszert.</p>
|
||||
</div>
|
||||
<div class="test-grid">
|
||||
<div class="test-note">
|
||||
<h3>Valódi használat</h3>
|
||||
<p>Nem demó: a doboz nálad marad, és az igazi fényképeidet, dokumentumaidat teszed rá. Segítünk a telepítésben és az átállásban, utána te használod a mindennapokban.</p>
|
||||
</div>
|
||||
<div class="test-note">
|
||||
<h3>Visszajelzés</h3>
|
||||
<p>Cserébe azt kérjük, hogy mondd el, mi zavaró, mi érthetetlen, mi nem működik. Egy „ezt a gombot nem találtam" ér nekünk a legtöbbet: abból tudjuk, mit kell kijavítani.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="limits">
|
||||
<h3>Ismert korlátok, őszintén</h3>
|
||||
<p>A vezérlőpulthoz jelenleg <strong>egy közös háztartási jelszó</strong> tartozik, külön családtagi fiókok még nincsenek (az egyes alkalmazásoknak viszont saját felhasználóik lehetnek). A <strong>TV-re streamelés (DLNA)</strong> még nincs: egyelőre böngészőből és mobil appból megy a médiatár. És mivel ez teszt, számíts arra, hogy találsz hibát: ez a lényege.</p>
|
||||
</div>
|
||||
<div class="close-cta">
|
||||
<p>Ha ez érdekel, írj. <strong>Nem kötelez semmire</strong>, először csak beszélgetünk.</p>
|
||||
<a href="/teszteles" class="cta-button">Jelentkezem tesztelőnek →</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="contact" id="kapcsolat">
|
||||
<div class="container">
|
||||
<div class="contact-box">
|
||||
<h2>Érdekel? <span>Beszéljünk!</span></h2>
|
||||
<div class="contact-methods">
|
||||
<a href="/kapcsolat" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-message-square"/></svg> Kapcsolatfelvételi űrlap</a>
|
||||
<a href="mailto:info@felhom.eu" class="contact-link"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-mail"/></svg> info@felhom.eu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>© 2026 felhom.eu — Saját felhőd, saját szabályaid</p>
|
||||
<p class="footer-legal">Üzemeltető: Nagyfenyvesi Viktor · <a href="mailto:info@felhom.eu">info@felhom.eu</a> · <a href="/adatkezeles">Adatkezelési tájékoztató</a> · <a href="/feltetelek">Feltételek</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
<script>
|
||||
(function() {
|
||||
const hamburger = document.getElementById('hamburger');
|
||||
const navLinks = document.querySelector('.nav-links');
|
||||
const overlay = document.getElementById('mobileOverlay');
|
||||
const body = document.body;
|
||||
|
||||
if (!hamburger || !navLinks || !overlay) {
|
||||
console.warn('[mobile-menu] Missing elements:', {
|
||||
hamburger: !!hamburger,
|
||||
navLinks: !!navLinks,
|
||||
overlay: !!overlay
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
function openMenu() {
|
||||
hamburger.classList.add('is-active');
|
||||
navLinks.classList.add('is-open');
|
||||
overlay.classList.add('is-visible');
|
||||
body.classList.add('menu-open');
|
||||
hamburger.setAttribute('aria-expanded', 'true');
|
||||
hamburger.setAttribute('aria-label', 'Menü bezárása');
|
||||
}
|
||||
|
||||
function closeMenu() {
|
||||
hamburger.classList.remove('is-active');
|
||||
navLinks.classList.remove('is-open');
|
||||
overlay.classList.remove('is-visible');
|
||||
body.classList.remove('menu-open');
|
||||
hamburger.setAttribute('aria-expanded', 'false');
|
||||
hamburger.setAttribute('aria-label', 'Menü megnyitása');
|
||||
}
|
||||
|
||||
hamburger.addEventListener('click', function() {
|
||||
if (navLinks.classList.contains('is-open')) {
|
||||
closeMenu();
|
||||
} else {
|
||||
openMenu();
|
||||
}
|
||||
});
|
||||
|
||||
// Close on overlay click
|
||||
overlay.addEventListener('click', closeMenu);
|
||||
|
||||
// Close on nav link click
|
||||
navLinks.querySelectorAll('a').forEach(function(link) {
|
||||
link.addEventListener('click', closeMenu);
|
||||
});
|
||||
|
||||
// Close on Escape key
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && navLinks.classList.contains('is-open')) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
|
||||
// Close on resize if open (e.g., rotating device)
|
||||
window.addEventListener('resize', function() {
|
||||
if (window.innerWidth > 900 && navLinks.classList.contains('is-open')) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,6 +1,9 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /szolgaltatasok-nonpublic
|
||||
# The redesigned home page, staged for review before it replaces /. Removed in the
|
||||
# same commit as the switch; the page also carries <meta name="robots" noindex>.
|
||||
Disallow: /preview/
|
||||
# /api/ is the contact form's POST endpoint, not a page: a GET returns 404 and Search
|
||||
# Console reported it as "Not found (404)" (seen 2026-10-10, first crawled 2026-04-29).
|
||||
Disallow: /api/
|
||||
|
||||
Reference in New Issue
Block a user