website: the redesigned home page, staged at /preview/ (noindex)
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:
2026-10-10 22:01:12 +02:00
parent fc52e3865e
commit a818b9c576
10 changed files with 998 additions and 3 deletions
+39
View File
@@ -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

+133
View File
@@ -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; }
+444
View File
@@ -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>
+3
View File
@@ -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/