Files
felhom.eu/marketing/facebook/README.md
T
admin 796a9fdf40
gates / gates (push) Successful in 4m28s
marketing/facebook: covers rebuilt to the MEASURED phone view (R-919 -> VERIFY)
build.py believed a phone shows 640x360 of the cover. It shows 412x274 =
1.504:1 -- the full height and only the centre 938 px of 1640, 351 px off each
side. PHONE_HDR = (412, 274) now drives CW_PHONE, so SAFE is (391,40)-(1249,584),
858 px wide with a 40 px margin inside each crop edge.

QUIET is no longer one formula for both circles: the computer circle is
left-anchored, the phone circle is CENTRED and hides only its measured box
(637,369,393). The old shared formula, applied to a centred circle, would have
blanked everything from x 0 to x 1054 below y 345.

Every cover draws in a derived BAND (408,48)-(1249,340), and a cap check holds
each headline's capital at >= 4% of the cover height; A/B/C come out at 45, 45
and 37 px against a 25 px floor.

RED-PROOF, and it is permanent: control_old_window() runs on every build and
draws the headline where the old assumption put it (x 328); the check must
reject it. The phone's crop edge is x 351, so 23 px were cut; the measured safe
edge is x 391. Against the covers as committed at a76207945e the new check
convicted 3 of 3 -- A 23/22 px past the left/right edges, B 63/58 px plus 1017
content pixels under the phone circle, C 63/82 px plus 1778.

Covers redrawn inside the band: A one centred line; B the home motif scaled
with two tiles moved into the lower-right strip, the one area below the band a
phone still shows beside the profile circle; C the dashboard screen 470 -> 370
px so frame and base fit. preview.html shows the phone panel at the measured
938x624 with the centred circle and no longer claims 640x360.

Profile pictures untouched -- sha256 identical before and after, and not in the
diff. Built on DooPlex: the PNGs are byte-reproducible there (Pillow 11.1.0) and
not across Pillow versions; the README now says so.

R-919 is VERIFY, not closed: the geometry is measured on ONE emulated device in
the mobile website, so the operator's check in the Facebook app is the
acceptance. Nothing uploaded, no Graph API call, FACEBOOK_API never read.
2026-10-09 06:59:53 +02:00

104 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# marketing/facebook — the Felhom.eu Facebook Page's pictures and texts
Files the operator uploads and pastes by hand. Nothing here talks to Facebook (the robot posting path is R-914).
## Rebuild
```
python3 marketing/facebook/build.py
```
One command makes every PNG and `out/preview.html`, and runs the checks: the profile circle (no logo pixel
outside 0.42 x width; shown failing first on today's shape), the cover safe area (content inside what computer
AND phone show, clear of both profile circles), the headline's capital height, and the sizes read back from the
files. Exit 0 = all passed. Needs Python 3 + Pillow only.
**Build it on DooPlex.** The PNGs are byte-reproducible there (Pillow 11.1.0 — a rebuild leaves `git status`
clean) and NOT across Pillow versions: Pillow 12.3.0 on the Windows workstation re-renders the same text a
pixel or two differently and rewrites all six files. Measured 2026-10-09. Brand source: `website/assets/logo.png` (the logo master — see below),
`website/assets/site.css` tokens, `website/assets/fonts/` (Plus Jakarta Sans).
## What goes where
| File | Where on the Page |
|---|---|
| `out/profile-dark.png` (recommended) or `out/profile-white.png` | Profile picture |
| `out/cover-a.png` / `cover-b.png` / `cover-c.png` — pick one | Cover photo |
| `COPY.md` §1 | Intro / Bemutatkozás (≤ 100 characters) |
| `COPY.md` §2 | **Nowhere today — the field is gone** (R-917). Facebook's current Pages experience has no long-description field: not in the Page's „Névjegy" tab, not in Business Suite's „Oldal módosítása", not in Page settings; the Graph `description` reads `null` and writing it needs `pages_manage_metadata`, which the robot key does not have. Checked 2026-10-08. |
| `COPY.md` §3 | Messenger welcome message |
| `COPY.md` §4 | The first three posts, each with its picture |
Open `out/preview.html` (download it from Gitea, open locally — it is self-contained) to see each picture the way
Facebook shows it.
## Sizes used (READ, Meta's help page — and it does NOT confirm most of ours)
Meta's own help page (facebook.com/help/125379114252045) was read first-hand on 2026-10-08 from the Windows
workstation, quoted verbatim in `documentation/audits/facebook-page-setup-2026-10-08/A-meta-sizes.md`. **It does
not carry most of the figures this section used to assert.** What it does say: cover **16:9 on a computer** and
**2,4:1 on a phone**, minimum **400 x 150** either way, fastest-loading file sRGB JPG **851 x 315** under 100 kB;
profile picture shown **176 x 176** on a computer, **196 x 196** on a smartphone, **36 x 36** on a feature phone,
best source **320 x 320**, cropped to a circle; the profile circle overlaps the cover by **about 40 px on mobile**;
and **PNG beats JPG** when the picture carries a logo or text. Meta's page contradicts itself — it gives two
ratios and then recommends one 2,70:1 file for both — so the figures below are kept as *ours*, not as Meta's.
The second-hand figures this section used to carry (cover shown **820 x 312** on computers, **640 x 360** on
phones, profile circle over the cover at 16 px / 176 px and 24 px / 196 px; sources postfa.st, linearity.io,
fasturtle.com) appear **nowhere on Meta's page**; only the 176 px profile size matched. The mobile overlap we
assumed, 24 px, is smaller than the ~40 px Meta states.
What we build: the cover at 2 x, **1640 x 624**, well above both stated minimums, as PNG; the profile picture
932 x 932, larger than Meta's 320 x 320 recommendation and therefore downscaled, not enlarged.
**MEASURED on the live Page 2026-10-08, both widths:**
- **Computer (1435 px viewport): fine.** The cover renders whole — no crop, no distortion — the cover container
caps at 1250 px, and the profile circle sits 16 px *below* the cover, so it covers no cover text.
- **Phone (emulated Pixel 9, 412 x 924): the cover WAS cut — R-919, fixed 2026-10-09.** The mobile Page header
is **412 x 274 = 1,504:1**, so Facebook keeps the full height and shows only the **centre 938 px of the
1640 px width (57,2 %)** — **351 px cut from each side**. The old safe area was the centre 1028 x 544, i.e.
306 px clear of each edge: **45 px per side too wide**. The light text of the old `cover-c.png` ran from
x 333 against a left crop edge of x 351, so **18 px of it were cut** — the headline read „aját szabályaid"
and the wordmark „elhom.eu" on every phone. The mobile profile circle is **172 px and centred**, hiding
source x 637–1030 x y 369–624.
### What the build does about it now (2026-10-09)
`build.py` takes the phone view from the measurement, not from Meta: `PHONE_HDR = (412, 274)` gives
`CW_PHONE` = 938 px, so **SAFE is the centre (391, 40)–(1249, 584)** — 858 px wide, MARGIN 40 px inside each
crop edge. The phone profile circle is the measured **centred** box `(637, 369, 393)`, and `QUIET` is no longer
one formula for both circles: the computer one is *left-anchored* (everything to its left is under it), the
phone one hides **only its own box**. Every cover is drawn inside `BAND` — inside SAFE, right of the computer
circle, above the phone circle — which is derived from those constants, so a re-measurement moves the designs
with it. A `cap` check keeps each headline's capital at **≥ 4 % of the cover height** (25 px), so the text
survives the phone shrinking the cover to 412 px.
**The check was shown failing first.** Against the covers as committed at `a76207945e`: cover A was 23 px over
on the left and 22 px on the right, cover B 63 px / 58 px with 1017 content pixels under the phone circle, and
cover C 63 px / 82 px with 1778 under it — 3 of 3 convicted.
**Grade of the phone figures: MEASURED, but on ONE device** (Pixel 9 emulated, 412 px, the mobile **website**).
Not measured in the Facebook app and not at any other width — which is why MARGIN is 40 px and why the
operator's check in the app is the acceptance step. **Meta's stated mobile ratio of 2,4:1 is not what the Page
header does** (1,504:1 measured), which is why a figure from Meta's page is no substitute for looking at the
Page. Getting Facebook's phone layout at all needs DevTools device mode **plus a reload**; the audit's README
has the recipe.
Page `about` = 100 characters: developers.facebook.com/docs/graph-api/reference/page/ (Meta, first-hand). The
Page's own „Bemutatkozás" editor counts to **255** (seen on screen 2026-10-08); §1 is 99 characters, so neither
limit bites.
## The logo master
`website/assets/logo.svg` is **not** usable as a master: its „felhom.eu" lettering is live text in the fonts
„M+ 2c" and „Vremena Grotesk", which DooPlex does not have, so any renderer here draws other letters. The PNG
(645 x 408) is placed unscaled, so the profile picture is 932 x 932 — sharp, not enlarged. A vector master with the
lettering converted to paths (Inkscape: Path → Object to Path, on the machine that has the fonts) is R-916.
## Cover C
Uses `website/assets/dashboard-backups-hu.webp` (demo box, already public on the website). The demo box's domain
chip next to the title is covered with the page colour in the copy; the source file is unchanged. No third-party
logo appears in it (app names are text). The Launcher and Apps pictures were not used: they show app logos.