796a9fdf40
gates / gates (push) Successful in 4m28s
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.
104 lines
7.1 KiB
Markdown
104 lines
7.1 KiB
Markdown
# 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.
|