I removed the old hosting project named jones1. I downloaded five SwissTransfer zip files of the El Paseo design and put them in the jones2 folder. I deployed an exact copy to elpaseo.jonesagency.dev. All 240 of 240 files matched the original exactly.
The first responsive check measured 1 pass of 12 devices. 7 WebKit iPhone devices did not load the page. I then rewrote the site to work on mobile devices. I also upgraded the check that measures this work. It went from 12 device-configs and 2 browser engines to 34 for a normal run, 56 for a full run, across three browser engines, and from 10 rules to 22. Section 04 lists every rule and what it catches. The new check found a real defect in iOS that the old check did not find.
SESSION OPENThe work opened with five requirements: remove the old host, download the files, deploy the copy, check the links, and check the mobile layout. I traced the old host to jones1.toolforge.ai. This host shared one Cloudflare Pages project with elpaseo.jonesagency.dev. The agreed scope was to delete the whole project, not only the hostname.
I downloaded five SwissTransfer zip files through the Chrome browser session and put them in the jones2/extract folder. All five files were identical, 239 files each. The link check found one broken link, to a file named "El Paseo Shopping.dc.html", which does not exist.
I built the deploy tree with a script named build_site.py. It made a byte-verified copy and repaired the broken link in place, as the scope required. I created a new Cloudflare Pages project named jones2 and deployed 240 files. The byte check found all files clean. It found one addition to every HTML file, from Cloudflare Web Analytics. This addition is normal at the domain zone level, not a defect.
The domain elpaseo.jonesagency.dev now points to jones2. I deleted the old project, jones1, and confirmed it returns 404 with no leftover DNS record. The first run of the existing 12-device check measured 21 passes of 60 page-and-device combinations. I committed the work and pushed it.
Three new requirements followed: remove files not needed for the deliverable, remove the 4-hour cache, and fix the mobile display. I found the cause of the sideways scroll: two decorative panels set at a fixed 648-pixel width. I found the cause of the WebKit load failure: a paragraph with a fixed pixel size, combined with a forced line break in the introduction heading. I fixed both without changes to the desktop layout. The 12-device check then measured 60 passes of 60.
A further requirement raised the check to an industry standard, with no gaps. I expanded the device matrix from 12 to 34 configs, across three browser engines: WebKit, Chromium, and Firefox. I added 12 new usability rules, each proved first on a bad example, then on a good example. The new check found a real defect, a zoom problem on an iOS input field, that the old check could not find. I fixed the defect. The final full check run, across all five pages, did not finish before this record closed.
The harness is a program named responsive_audit.py. It opens the real page in real browsers, at many screen sizes, and measures what a person would see. It does not read the code and guess. It measures the page that the browser draws, and it measures the top page and every visible frame inside it.
Before this session the harness had 12 device-configs and 2 browser engines. It now has three sizes of run: quick, with 6 device-configs, for a fast look; standard, with 34, for the usual gate; and full, with 56, which contains all of the others. The three engines are WebKit, which is Safari and every browser on iPhone; Chromium, which is Chrome and Android; and Firefox. The matrix holds phones, phones turned sideways, tablets, tablets turned sideways, and desktop widths from 1024 to 2560 pixels.
A run reports two levels. A critical item fails the page. A warning is recorded but does not fail the page. The switch named --strict makes any critical item fail the whole run, which is what a gate needs. The switch named --gate-orphans raises the orphan rule to a critical item. The switch named --list-devices prints the full matrix.
Every new rule was proven twice before it was trusted. First on a bad example, which the rule must report. Then on a clean example, which the rule must leave alone. Two rules failed this test and were repaired, and in both cases I repaired the rule, not the example. The rule for cut-off text reported 43 false criticals on Firefox, because Firefox measures an inline element in a way the other two engines do not. The rule for oversized images did not fire on its bad example, because WebKit reports the size of an SVG as the size on screen, not the true size of the file.
One more repair matters. Line breaks depend on the real letter shapes, so the harness now waits for the fonts to load, and then waits 400 milliseconds more, before it measures. Without that wait, a page can pass on a test machine and fail for a reader.
The rules have their own done-check, in a file named check_usability_rules.py. It holds one bad example for each rule and one clean example for all of them. It is the proof that the harness still works after any change to it.
The upgraded harness earned its place at once. It found a real defect in the delivered bundle that the old 12-device matrix could not see: the search field on the events page used 13-pixel text, so Safari on iPhone zoomed the page in on touch and left the reader stuck to one side.
One rule was added after this record closed, named GRID_UNCOLLAPSED. It reports a set of columns that stays side by side on a phone when each column is too narrow to read. That rule came from a defect this report itself had, and the check now carries it.
This section lists eight fixes. I named and defined each fix in port_site.py before I changed any code. I set one rule for all eight fixes: the check named responsive_audit.py --strict must report zero critical items on every page, and the desktop view must not change. I proved the desktop view was unchanged with a separate tool, visual_compare.py. It made 21 before-and-after screenshots, stored in jones2/_visual_v3.
The table below shows one page at a time. The number of device-configs for one page grew from 12 to 34 as I upgraded the check. This is a different count from the 21-of-60 and 60-of-60 figures above. Those figures cover all five pages together on the original 12-device check. Read the two tables side by side. Do not add the two counts together.
I ran this check on the live site, which still serves the literal copy. The port is not yet live. See the alert below.