DRAFTS. COPY.md section 6: two versions of the Page's first post, shortened
from section 2. Hungarian, tegezo, no price. 6.1 = 347 characters, 6.2 = 638
(counted as Unicode characters). Every claim carries a source comment naming
the line of website/index.html it rests on; the first line of each carries the
point alone, because Facebook cuts after about three lines.
Deliberate: ZERO emoji and ZERO hashtags, though the brief allows two of each.
The Felhom design system uses no emoji (the website gate holds it at 0) and
two hashtags would serve no real search.
CHECKED, because the post repeats it: "56 alkalmazas" is CORRECT. The apps
page carries 57 <div class="app-card"> but states 56, which looks off by one
until you read the category line -- "6 alkalmazas + 1 beepitett". The 57th
card is FileBrowser, built into every box and deliberately not counted.
index.html says "56 telepitheto alkalmazas" too. I nearly "fixed" a live page
into being wrong. NOT-A-FINDING.
SCHEDULE-POST. A third sub-command on fb_probe.py, reusing its token loader
(R-453), redaction, Bearer call and evidence writer:
- the body is READ FROM COPY.md by section name. The Hungarian never passes
through a shell or an argv string (brief 9.6); the caller names a section.
- published is ALWAYS "false" and NO argument can change it (brief 9.7).
The operator's review in Planner is the safety net, so an immediate post
must be unreachable, not merely not-the-default.
- check_when refuses a time under Meta's 10-minute floor or over its
6-month ceiling, BEFORE the call, so a bad time is a readable local
refusal rather than a Graph error.
- budapest_to_epoch uses the real tz database. If zoneinfo has no
Europe/Budapest it REFUSES rather than falling back to a hardcoded
+01:00/+02:00 -- guessing the offset is how a post goes out an hour wrong
across a DST boundary.
- list_scheduled tries /scheduled_posts then feed?is_published=false and
RECORDS WHICH ANSWERED; when both are refused it returns None so the
caller says "unproven" instead of claiming a removal it never saw.
TESTS: 30, of which 2 skip on Windows (no tzdata in this interpreter; the
command runs on the Linux host, which has the system zoneinfo).
RED-PROOF of the guard that matters, as the brief requires. Made
schedule_form accept published=..., ran ScheduleForm, and watched
test_no_argument_can_publish_immediately FAIL:
AssertionError: 'true' != 'false' : published changed published
Guard restored, all 30 green again.
No post has been made. The dry check and the real post come next; the
operator picks the version and the time first.
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 — the logo mark only, no lettering (see below) |
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 648 x 648, twice 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.pngran 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. 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.