website: the share card shows the product, not just the words
gates / gates (push) Successful in 6m13s

The operator went to post the link and found the card out of date: it was the
2026-07-18 design - a headline and two lines of text on a dark field, nothing of
the product, and older than everything the site has become since.

- og-image.png and og-image-en.png rebuilt around the laptop, with the hero's
  own poster frame on its screen.
- scripts/make_og_card.py: the headline, logo and button are lifted as PIXELS
  from the previous card and composited with `lighter` onto flat --bg-0, because
  the site's font is a woff2 and nothing here can draw a glyph with it. A new
  headline therefore CANNOT be made with this script - new words go back to the
  design tool and this takes that card as its source. The lede lines are gone;
  the laptop says what they said.
- ?v=2 on every og:image and twitter:image (20 pages): a scraper caches by URL,
  so a new picture at the old URL would reach nobody. A card already attached to
  a post still does not change - that post must drop the preview and re-add the
  link after a re-scrape.
This commit is contained in:
2026-10-12 14:48:43 +02:00
parent e2b09f25ea
commit d328147322
25 changed files with 204 additions and 39 deletions
+1
View File
@@ -173,6 +173,7 @@
| Rule-firing report | scripts/rules_report.py | Reads the `InstructionsLoaded` hook log and cross-references every `.claude/rules/*.md` in the workspace. **The column that matters is the empty one** — a rule that has never fired is mis-globbed or dead (built-but-never-wired, applied to instructions). Prints each silent rule's `paths:` so "wrong glob" is distinguishable from "quiet month". Caveat: the log only covers since the hook was armed. |
| Gate script | scripts/site_gates.py | Byte-level mechanical gates (BOM, emoji codepoint ranges, nav/footer diff, analytics, banned tokens, cache-bust); run `python scripts/site_gates.py` after ANY website change; non-zero exit on failure. |
| Hero clip builder | scripts/make_hero_clip.py | Assembles the home page's laptop clip from the operator's raw app recordings: scale+crop each to the screen's 1.626:1, crossfade, encode mp4 (h264) + webm (VP9) + a webp poster. **Runs on DooPlex** - Windows has no ffmpeg. NOT part of any build, gate or deploy: the site has no build step, so the output is committed like any other picture. Measured 2026-10-12: GIF is 11x the mp4 for the same seconds and dithers to 256 colours, hence mp4+webm. The frame it plays under is `website/assets/hero-laptop-frame.webp`, whose screen is cut out; the hole's position is in the CSS as percentages. **Every scene plays at its full recorded length** (operator ruling 2026-10-12: the raw file IS the edit); `--seconds N` only caps. One output set (`hero-clip.mp4/.webm`, `hero-poster.webp`) serves both languages; `--lang hu` adds a suffix back if they ever differ. |
| Share-card builder | scripts/make_og_card.py | Rebuilds `og-image.png` / `og-image-en.png` (1200x630) around the laptop: the headline, logo and button are lifted as PIXELS from the previous card and composited with `lighter` onto flat `--bg-0`, because the site's font is a woff2 and nothing here can draw a glyph with it. **A new headline cannot be made with this script** - new words go back to the design tool, and this then takes that card as its source. Bump the `?v=` on the og:image URLs afterwards or no scraper will refetch. |
| Fetch-validate-install (shell) | scripts/felhom-host-install.sh `step_agent_install` (~L1108) | `fetch_raw` to mktemp → syntax-check (`bash -n`) → `install -m0755 -o root -g root` → only then activate; guarded-mkfs wrapper installed BEFORE the sudoers that references it (ordering is the safety property). All mutations through `run()` (dry-run aware). |
| Install-profile gate (shell) | scripts/felhom-host-install.sh `--mode appliance\|byo` (GL-2, v1.10.0) | Mandatory-flag profile (no default), refusals at argv time BEFORE any prompt/step, risky step gated at its CALL SITE (one auditable place — never a branch inside the step), mode persisted to state.json + resume-mismatch refusal, `FELHOM_INSTALL_STATE_DIR` override for harness isolation. Harness: scripts/hostinstall-mode-harness.sh (static refusal matrix + grep-invariants + PVE dry-transcript tier; red-proofs run against a mutated scratch copy). |
| Disclosure↔uninstall parity (shell) | scripts/felhom-host-install.sh `_uninstall_statement` + harness GL4-D (v1.11.0) | Every host artifact the byo disclosure names must be removed OR explicitly listed KEPT by `run_uninstall`; the harness greps the parity (token list). New install-time artifact ⇒ add its removal + disclosure line + parity token in the SAME commit. Drive data rule: plain `umount` only, never `-l`/`-f`, never any format op under /mnt/felhom-drives. |
+142
View File
@@ -0,0 +1,142 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""make_og_card.py - rebuild the link-preview cards (og:image) around the laptop.
python scripts/make_og_card.py [--lang hu|en|both] [--check]
WHAT IT IS FOR. The card Facebook, Messenger, LinkedIn and Slack show when somebody shares
felhom.eu. The 2026-07-18 cards were a headline and two lines of text on a dark field: they showed
the words and none of the product, and they predate the site's current look (operator, 2026-10-12:
"the image is outdated"). This puts the same laptop the home page shows - the frame with the real
screen recording's first frame in it - beside the headline.
HOW IT KEEPS THE TYPOGRAPHY. The site's font is a woff2 (Plus Jakarta Sans); no font file on this
machine or on DooPlex can be given to a drawing library, and installing one to draw two lines of text
would be a new dependency for a once-a-year picture. So the headline, the logo and the button are
taken as PIXELS from the previous card, which was rendered with the real font: they are cropped,
the headline is scaled to free the right half, and they are composited onto a flat --bg-0 field with
`lighter`, which makes the crop's own background disappear into the new one (both are #0A1220, so
there is no seam to see). Nothing here draws a glyph.
IF THE WORDS EVER CHANGE this script cannot help - a new headline needs the font, so the card goes
back to the design tool, and this script then takes the new card as its source.
INPUT website/assets/og-image.png, og-image-en.png (the previous cards - the typography)
website/assets/hero-laptop-frame.webp (the laptop, screen cut to transparency)
website/assets/hero-poster.webp (what the hero's clip opens on)
OUTPUT the same two card files, 1200x630, overwritten.
--check prints where the ink sits on the current cards and changes nothing.
"""
import argparse
import os
import sys
from PIL import Image, ImageChops
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
A = os.path.join(ROOT, "website", "assets")
W, H = 1200, 630
BG = (10, 18, 32) # --bg-0, which is what sits behind the headline on the old cards
TOPBAR_H = 6
LEFT = 73 # the logo's own left edge on the old cards
HEAD_TOP = 206 # where the headline's ink starts on the new card
HEAD_WIDTH = 498 # how wide the headline is allowed to be, to leave the laptop its half
LAPTOP_W = 548
LAPTOP_X = 616
# The screen hole in hero-laptop-frame.webp, measured off its alpha channel (2026-10-12):
HOLE = (0.11041, 0.12345, 0.79817, 0.64305)
CARDS = {
# lang: (file, headline band, pill band) - bands are y ranges on the OLD card, generous enough
# to hold accents and descenders
"hu": ("og-image.png", (200, 372), (510, 572)),
"en": ("og-image-en.png", (208, 382), (510, 572)),
}
LOGO_BAND = (76, 132)
def ink_bbox(im, y0, y1, thresh=300):
"""The bounding box of everything brighter than the background in a horizontal band."""
px = im.convert("RGB").load()
xs, ys = [], []
for y in range(y0, y1 + 1):
for x in range(im.size[0]):
if sum(px[x, y]) > thresh:
xs.append(x)
ys.append(y)
if not xs:
sys.exit("no ink in rows %d..%d - the source card is not the one this script expects" % (y0, y1))
return min(xs), min(ys), max(xs) + 1, max(ys) + 1
def laptop():
"""The frame with the hero's poster frame inside its cut-out screen."""
frame = Image.open(os.path.join(A, "hero-laptop-frame.webp")).convert("RGBA")
shot = Image.open(os.path.join(A, "hero-poster.webp")).convert("RGB")
fw, fh = frame.size
x, y = int(round(HOLE[0] * fw)), int(round(HOLE[1] * fh))
w, h = int(round(HOLE[2] * fw)), int(round(HOLE[3] * fh))
out = Image.new("RGBA", frame.size, (0, 0, 0, 0))
out.paste(shot.resize((w, h), Image.LANCZOS), (x, y))
out.alpha_composite(frame)
return out
def build(lang, check):
src_name, head_band, pill_band = CARDS[lang]
src_path = os.path.join(A, src_name)
src = Image.open(src_path).convert("RGB")
if src.size != (W, H):
sys.exit("%s is %dx%d, expected %dx%d" % (src_name, src.size[0], src.size[1], W, H))
logo = ink_bbox(src, *LOGO_BAND)
head = ink_bbox(src, *head_band)
pill = ink_bbox(src, *pill_band)
if check:
print("%s logo %s headline %s button %s" % (src_name, logo, head, pill))
return
card = Image.new("RGB", (W, H), BG)
card.paste(src.crop((0, 0, W, TOPBAR_H)), (0, 0)) # the blue rule along the top
lap = laptop()
lh = int(round(LAPTOP_W * lap.size[1] / float(lap.size[0])))
card.paste(lap.resize((LAPTOP_W, lh), Image.LANCZOS), (LAPTOP_X, (H - lh) // 2),
lap.resize((LAPTOP_W, lh), Image.LANCZOS))
# the three text blocks, lifted as pixels and laid down with `lighter` so their own
# background (the same #0A1220) vanishes instead of leaving a rectangle
def lay(box, at, scale=1.0):
part = src.crop(box)
if scale != 1.0:
part = part.resize((max(1, int(round(part.size[0] * scale))),
max(1, int(round(part.size[1] * scale)))), Image.LANCZOS)
region = card.crop((at[0], at[1], at[0] + part.size[0], at[1] + part.size[1]))
card.paste(ImageChops.lighter(region, part), at)
lay(logo, (LEFT, logo[1]))
scale = HEAD_WIDTH / float(head[2] - head[0])
lay(head, (LEFT, HEAD_TOP), scale)
lay(pill, (LEFT - 1, pill[1]))
card.save(src_path, "PNG", optimize=True)
print("%-16s %4dx%d %6.1f KB (headline scaled %.2f, laptop %dpx)"
% (src_name, W, H, os.path.getsize(src_path) / 1024.0, scale, LAPTOP_W))
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--lang", default="both", choices=["hu", "en", "both"])
ap.add_argument("--check", action="store_true", help="print the measured bands, change nothing")
a = ap.parse_args()
for lang in (["hu", "en"] if a.lang == "both" else [a.lang]):
build(lang, a.check)
if not a.check:
print("Bump the ?v= on the og:image / twitter:image URLs, then re-scrape the page in "
"Facebook's Sharing Debugger - a card already attached to a post does not change.")
if __name__ == "__main__":
main()
+23 -1
View File
@@ -1,4 +1,26 @@
## 2026-10-12 (review round) — the reviewer's findings, fixed
## 2026-10-12 (night) — the share card shows the product
The operator went to post the link and found the card out of date (2026-10-12): it was the
2026-07-18 design — a headline and two lines of text on a dark field, nothing of the product, and
older than everything the site has become since.
- **`og-image.png` and `og-image-en.png` rebuilt around the laptop**, with the hero's own poster
frame on its screen: what somebody sees shared in a feed is now the thing itself.
- **The typography is the old card's, to the pixel.** The site's font is a woff2 and no font file
here can be handed to a drawing library, so `scripts/make_og_card.py` lifts the headline, the logo
and the button out of the previous card as pixels and composites them with `lighter` onto flat
`--bg-0` — the crop's own background is the same colour, so there is no seam. **Nothing in that
script draws a glyph, so new words cannot be made with it**: a new headline goes back to the
design tool and the script then takes that card as its source. The two lines of lede are gone
(they would have needed the font); the laptop says what they said.
- **`?v=2` on every `og:image` and `twitter:image`** (20 pages). A scraper caches by URL, so a new
picture at the old URL would have reached nobody. **A card already attached to a post does not
change** — that post has to drop the preview and re-add the link, after a re-scrape.
- The English card carries the same Hungarian-language Immich screen as the Hungarian one, because
it is the same recording the hero uses on both pages. Worth a retake if the English page ever
gets its own.
## 2026-10-12 (review round) — the reviewer's findings, fixed
A page-by-page review of the live site (Playwright, 1440 px and 390 px) found six real defects and
two editorial questions. The operator answered three questions first; the answers are in
+1 -1
View File
@@ -15,7 +15,7 @@
<meta property="og:url" content="https://felhom.eu/adatkezeles">
<meta property="og:title" content="Adatkezelési tájékoztató — Felhom.eu">
<meta property="og:description" content="Mit kezelünk rólad, miért, meddig, és kik látják még. A Felhom.eu adatkezelési tájékoztatója, egyszerűen leírva.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/alkalmazasok">
<meta property="og:title" content="58 alkalmazás otthoni szerverre">
<meta property="og:description" content="Nextcloud, Immich, Jellyfin, Vaultwarden és még sok más. Fájlkezelés, fotók, média, dokumentumok — mind a saját szerveredről.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="58 alkalmazás otthoni szerverre">
<meta name="twitter:description" content="Nextcloud, Immich, Jellyfin és még sok más — a te szerveredről.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 279 KiB

+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/biztonsagimentes">
<meta property="og:title" content="3-2-1 biztonsági mentés otthoni szerverhez">
<meta property="og:description" content="Professzionális szintű adatbiztonság otthon. Automatikus backup, és egy titkosított másolat távol is.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="3-2-1 biztonsági mentés otthoni szerverhez">
<meta name="twitter:description" content="Professzionális adatvédelem otthoni szerveredre. Automatikus backup, offsite mentés.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/en/apps">
<meta property="og:title" content="58 apps for a home server">
<meta property="og:description" content="Nextcloud, Immich, Jellyfin, Vaultwarden and many more. Files, photos, media, documents — all from your own server.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="58 apps for a home server">
<meta name="twitter:description" content="Nextcloud, Immich, Jellyfin and many more — from your own server.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/en/backups">
<meta property="og:title" content="3-2-1 backups for a home server">
<meta property="og:description" content="Professional-grade data safety at home. Automatic backups, and an encrypted copy far away too.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="3-2-1 backups for a home server">
<meta name="twitter:description" content="Professional data protection for your home server. Automatic backups, off-site copies.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/en/contact">
<meta property="og:title" content="Contact — Felhom.eu">
<meta property="og:description" content="Write to us and we will make a personal offer for your home server.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Contact — Felhom.eu">
<meta name="twitter:description" content="A question? Write to us: info@felhom.eu">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin-ext.woff2">
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
+2 -2
View File
@@ -16,14 +16,14 @@
<meta property="og:url" content="https://felhom.eu/en/download">
<meta property="og:title" content="Download the Felhom installer">
<meta property="og:description" content="Download, checksum, and what to check before you install.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Download the Felhom installer">
<meta name="twitter:description" content="Download, checksum, and what to check before you install.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin-ext.woff2">
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/en/faq">
<meta property="og:title" content="FAQ — home server service questions and answers">
<meta property="og:description" content="Hardware, installation, apps, security, costs — everything worth knowing.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="FAQ — home server questions and answers">
<meta name="twitter:description" content="Everything worth knowing about the home server service.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -22,7 +22,7 @@
<meta property="og:url" content="https://felhom.eu/en/">
<meta property="og:title" content="Felhom.eu — Your own cloud, your own rules">
<meta property="og:description" content="A home server in your own home in Hungary: photos, documents, media — with automatic backups and a recovery code only you know. A closed test is starting now.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Felhom.eu — Your own cloud, your own rules. Closed test starting.">
@@ -33,7 +33,7 @@
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Felhom.eu — Your own cloud, your own rules">
<meta name="twitter:description" content="A home server in your own home in Hungary: photos, documents, media — with automatic backups and a recovery code only you know.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<!-- Structured Data (JSON-LD) -->
<script type="application/ld+json">
+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/en/services">
<meta property="og:title" content="What a Felhom box does today">
<meta property="og:description" content="Not a plan and not a promise: these are features working today on a live Felhom box.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="What a Felhom box does today">
<meta name="twitter:description" content="Not a plan and not a promise: these are features working today on a live Felhom box.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/en/technology">
<meta property="og:title" content="Professional technology for a home server">
<meta property="og:description" content="Docker, a Dashboard in English or Hungarian, Proxmox — industry-grade tools at home.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Professional technology for a home server">
<meta name="twitter:description" content="Docker, a Dashboard in English or Hungarian, Proxmox — industry tools, at home.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/en/testing">
<meta property="og:title" content="Looking for testers — your own cloud at home, free during the test">
<meta property="og:description" content="Your photos and documents on your own machine, at home. I do the setup and pay for the domain for two years. Up to 5 households.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Looking for testers — your own cloud at home">
<meta name="twitter:description" content="No fee during the test. I do the setup and pay for the domain for two years.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+1 -1
View File
@@ -15,7 +15,7 @@
<meta property="og:url" content="https://felhom.eu/feltetelek">
<meta property="og:title" content="A zárt teszt feltételei — Felhom.eu">
<meta property="og:description" content="Mit kapsz a Felhom.eu ingyenes zárt tesztjében, mit nem ígérünk, és hogyan tudsz bármikor kiszállni.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/gyik">
<meta property="og:title" content="GYIK — Otthoni szerver szolgáltatás kérdések és válaszok">
<meta property="og:description" content="Hardver, telepítés, alkalmazások, biztonság, költségek — minden, amit tudni érdemes.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="GYIK — Otthoni szerver kérdések és válaszok">
<meta name="twitter:description" content="Minden, amit az otthoni szerver szolgáltatásról tudni érdemes.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -22,7 +22,7 @@
<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" content="https://felhom.eu/assets/og-image.png?v=2">
<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.">
@@ -33,7 +33,7 @@
<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">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<!-- Structured Data (JSON-LD) -->
<script type="application/ld+json">
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/kapcsolat">
<meta property="og:title" content="Kapcsolat — Felhom.eu">
<meta property="og:description" content="Írj nekünk és személyre szabott ajánlatot készítünk otthoni szerveredhez.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Kapcsolat — Felhom.eu">
<meta name="twitter:description" content="Kérdésed van? Írj nekünk: info@felhom.eu">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin-ext.woff2">
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
+2 -2
View File
@@ -16,14 +16,14 @@
<meta property="og:url" content="https://felhom.eu/letoltes">
<meta property="og:title" content="A Felhom telepítő letöltése">
<meta property="og:description" content="Letöltés, ellenőrző összeg, és mire figyelj a telepítés előtt.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="A Felhom telepítő letöltése">
<meta name="twitter:description" content="Letöltés, ellenőrző összeg, és mire figyelj a telepítés előtt.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/fonts/pjs-latin-ext.woff2">
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/szolgaltatasok">
<meta property="og:title" content="Mit tud ma a Felhom doboz">
<meta property="og:description" content="Nem terv és nem ígéret: ezek ma működő funkciók egy éles Felhom dobozon.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Mit tud ma a Felhom doboz">
<meta name="twitter:description" content="Nem terv és nem ígéret: ezek ma működő funkciók egy éles Felhom dobozon.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -18,14 +18,14 @@
<meta property="og:url" content="https://felhom.eu/technologiak">
<meta property="og:title" content="Professzionális technológiák otthoni szerverhez">
<meta property="og:description" content="Docker, magyar vagy angol nyelvű vezérlőpult, Proxmox — ipari szintű megoldások otthoni környezetben.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Professzionális technológiák otthoni szerverhez">
<meta name="twitter:description" content="Docker, magyar vagy angol nyelvű vezérlőpult, Proxmox — ipari megoldások, otthoni környezetben.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{
+2 -2
View File
@@ -17,14 +17,14 @@
<meta property="og:url" content="https://felhom.eu/teszteles">
<meta property="og:title" content="Tesztelőket keresek — saját felhő otthon, a teszt alatt ingyen">
<meta property="og:description" content="A fotóid és a dokumentumaid a saját gépeden, nálad. A beállítást én végzem, a domaint két évre én fizetem. Legfeljebb 5 háztartás.">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png">
<meta property="og:image" content="https://felhom.eu/assets/og-image.png?v=2">
<meta property="og:locale" content="hu_HU">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Tesztelőket keresek — saját felhő otthon">
<meta name="twitter:description" content="A teszt alatt nincs díj. A beállítást én végzem, a domaint két évre én fizetem.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image.png?v=2">
<script type="application/ld+json">
{