Personal project · agentic tooling

A tech guide for people who are not from tech

Phone first: the guide as it reads on a small screen, then its live reading numbers and the checker that tests it.

plain-language guide phone first automated page check ~119s

Built 2026-09-26 · Filmed 2026-10-20

I wrote the method for a plain-language guide as rules a script can test, and the guide gets opened. Below is the script's run on the published page, shown as it came out, and the count of opens.

Exhibit 1What a rule looks like to a reader

Two short clips from the film, each with its own sound. Tap one to play it. Playing one stops the other.

The scam-safety ritual 0:14

What to notice: a rule written as something a frightened person can do: three verbs, then a numbered list that says what each one means.

From the film's guide scenes, the English edition, narrated in my voice.

The recap and the WhatsApp button 0:18

What to notice: the guide ends in 12 lines that repeat each part's summary word for word, and one button that opens WhatsApp with a message ready to send. The button is hovered in the film, never pressed.

From the film's guide scenes, the English edition, narrated in my voice.

Exhibit 2What the script measured

Each row is one rule of the method. The limit, the measured value and the result all come from one run of the script on the published Portuguese edition at 390 px, on 2026-10-22. The result word is the checker's, not mine. The rules that did not pass come first.

Rules that did not pass: the limit, the value measured, the checker's result
RuleMeasuredResult
The page loads nothing from outside its own fileLimit: noneexternal2 files from outsideFAIL2 findings
Links inside a sentence are tall enough for a thumbLimit: at least 48 pxtap-inline23 px tall (1 of 1 below the limit)WARN1 finding
Sentences stay near the target lengthLimit: about 25 wordssentence-soft27 words, longest sentence (2 over)WARN2 findings
Paragraphs stay near the target lengthLimit: about 45 wordsparagraph-soft48 words, longest paragraph (2 over)WARN2 findings
The 30 rules that passed, with the value measured
Rules that passed: the limit, the value measured, the checker's result
RuleMeasuredResult
Body text is big enough to read without zoomingLimit: at least 20 pxbody-size20.8 pxPASS
Every paragraph and list line is big enoughLimit: at least 20 pxprose-size20.8 pxPASS
Labels, captions and notes are big enoughLimit: at least 16 pxsecondary-size16.3 pxPASS
The page does not scroll sideways on a phoneLimit: at most 390 pxoverflow390 px widePASS
It still does not when the reader enlarges the textLimit: at most 390 pxoverflow-large390 px wide at 130% textPASS
No box scrolls sideways (no carousel, no wide table)Limit: nonescroll-box0 boxesPASS
No text hides behind a tapLimit: nonehidden-text0 blocksPASS
No tabs, toggles, pop-ups or tooltipsLimit: nonereveal-control0 controlsPASS
Nothing sticks to the screen and covers textLimit: nonefixed-position0 elementsPASS
Buttons and block links are tall enough for a thumbLimit: at least 48 pxtap-target49.0 px tallPASS
It declares a phone viewportLimit: presentviewportpresentPASS
It stays light on a phone set to dark modeLimit: light onlycolor-schemelight onlyPASS
Every drawing can scale (it has a viewBox)Limit: none missingsvg-viewbox0 of 20 drawingsPASS
The part labels run in order, with the right totalLimit: noneparte-sequence0 of 13 labels offPASS
Each part ends in exactly one summary lineLimit: nonefrase-per-part0 of 12 parts offPASS
The closing recap repeats those lines word for wordLimit: nonerecap0 of 12 lines differPASS
The contents list has one link per part, and each link landsLimit: noneindice0 of 13 parts unlinkedPASS
No unfilled template slot or TODO is leftLimit: noneplaceholder0 slots or TODOsPASS
No word the method bans (condescension, charged politics)Limit: nonebanned-word0 banned wordsPASS
No sentence is far too longLimit: at most 30 wordssentence-hard27 words, longest sentencePASS
No paragraph is far too longLimit: at most 60 wordsparagraph-hard48 words, longest paragraphPASS
Text contrast meets the accessibility floor (WCAG AA)Limit: at least 4.5:1contrast5.9:1, the lowest in the textPASS
The page loads without a script errorLimit: nonepage-error0 script errorsPASS
Nor on a smaller phoneLimit: at most 360 pxoverflow-narrow360 px wide at 360 pxPASS
The page declares its language as PortugueseLimit: pt-*langpt-BRPASS
Each part's headline is a sentence, not a labelLimit: noneheadline-sentence0 headlines that read as a labelPASS
No word that needs care under the neutrality rulesLimit: nonewatch-word0 watch wordsPASS
No em dash in the textLimit: noneem-dash0 em dashesPASS
At most one exclamation mark (the tone is calm)Limit: at most 1exclamation0 exclamation marksPASS
No code or amount can wrap across two linesLimit: nonenumber-break0 numbers split by a plain spacePASS

What the 2 FAIL are

Both are one kind of finding. The page's head carries two language-link tags, one for each edition, and the checker counts them as files loaded from outside the page. Nothing loads from them: they only tell search engines that the other edition exists. They were added when the English edition went up, after the checker was written, so the checker's rule is out of date. The page as published still does not pass its own check, and I did not edit the checker or the page to change that.

With only those two lines removed, a fresh run reads 0 FAIL and 5 WARN, with exit status 0. That is the run the film's last scene shows.

Why it's technically interesting

The method is written down as a list a script can run. The script opens the real page in a browser at phone width and measures it: text size, sideways scroll, anything hidden behind a tap, button height, sentence and paragraph length, one summary line per part with a recap that repeats them, text contrast. The counter is small on purpose: it counts page opens, not people, leaves out robots and link previews, and never stops the page from loading if counting fails.

What this does not show.

  • A run with no FAIL would mean that none of these rules is broken, not that the page is good. The drawings, the tone and whether an older reader follows it are still judged by eye.
  • The rules are written for Portuguese pages, so the table is the Portuguese edition. The English edition, which the film shows, is not in it: its part labels read "Part N of M" and the checker expects "Parte N de M".
  • The film's last scene, and the last line of its narration, say zero failures. That was a run on a copy of the Portuguese edition without its two language-link tags, not on the page as published.
  • 3,640 is page opens, not people. The counter leaves out known robots and WhatsApp link previews, but it cannot tell every automated visit from a reader. The city table on the statistics page has large entries from cities with big data centres, so I expect some of these opens are not readers. I did not separate them.
  • The film shows a handful of moments from a guide of 13 parts. In it I removed one line from the cover, the link to the other language, and the numbers page is shown without its address.

The long cutAll of it, with my narration

A 1:59 film: the guide's cover and first idea, the scam-safety part, the end of the guide with its WhatsApp button, the live numbers page and the checker's run. Choose English or Português under the picture.

Next clip: A house listing, checked against the city's own records →