measuredplan measures existing buildings on site and draws them: as-built drawings, floor plans, square-footage reports, permit-ready construction drawings and lease exhibits, across western north carolina. it is deliberately not a licensed land surveyor, and the word survey is banned from the copy because in north carolina it names a licensed activity.
what was wrong
- project images were authored at 1400px because the detail pages show them large, and the grids rendered the same files in cells about 400px wide. roughly 3.5 times more pixels than any visitor displayed.
- the build was serving 139 plaintext email addresses and 176 raw whatsapp numbers, which is exactly what mass harvesters look for.
- the brand red measured 3.05:1 on the dark bands, below the 4.5:1 floor for text.
- the third most-seen page on the site had 128 impressions and zero clicks at average position 40.
what was decided
a second red was added to the brand rather than lightening the first one.
#C21F3A is correct on the paper canvas and measures 3.05:1 on the ink bands, which fails. #DF4B57 exists only for ink backgrounds and measures 4.53:1. a colour was added because a number said the first one was unreadable.
a url was renamed on the evidence of the query log.
the queries behind /services/measured-building-surveys/ were english villages: blockley, ellistown, bakers hill, coalville, hessle, eccles, arkesden, and about twenty more. "measured building survey" is british usage. the american term is as-built, and the phrase appeared nowhere in the page copy, so the slug was the only thing telling google this was a uk business. it moved to /services/as-built-drawings/ and the old url was kept alive as a redirect. the success criterion was written down in advance and inverted: judge it on clicks, not impressions. losing 128 worthless impressions is the intended outcome.
rejected: leaving it, on the grounds that 128 impressions is traffic. it was not traffic, it was the wrong country.
a performance optimisation was deleted after it shipped.
content-visibility:auto skipped off-screen rendering and also suppressed the scroll-reveal on mobile, so headings stayed invisible. the gain was negligible on a site this size and correctness wins. the note is still in the stylesheet so nobody re-adds it.
six page titles were rewritten on a position comparison.
pages whose title named asheville averaged position 16. pages saying western nc, or carrying no location, averaged 44. the conclusion in the file is one sentence: nobody searches "wnc".
the numbers
every figure carries three lines: what it measures, the file it was read from, and what it does not prove.
2,077,562 bytes to 273,922 bytes, 86.8%
projects page image payload at the 400w tier
m scripts/responsive-images.mjs
does not prove: one page, one date, one project set. an earlier measurement of a smaller set gave 1,418 kb to 574 kb.
139 and 176 to zero
plaintext email addresses and raw whatsapp numbers in the built output
m src/lib/protect.ts
does not prove: stated precisely: zero mailto, tel and wa.me anchors and zero plaintext email addresses across 48 built pages. the phone number survives on purpose in one place, the json-ld telephone field, because it is the local-seo anchor. a scraper that runs javascript still gets the value, and that minority is accepted.
3.05:1 to 4.53:1
the brand red on the dark bands, before and after adding an ink-only variant
m PROJECT-GUIDE.md, src/styles/global.css
does not prove: a contrast ratio is not legibility. it is the floor, not the ceiling.
128 impressions, 0 clicks, position 40
the renamed url at the search console baseline, three months to 2026-08-19
t docs/seo-baseline-2026-08-20.md
does not prove: this is the before figure. it is the reason for the change, not the result of it.
106.25% root font size, 1.65 body line-height
the reading setting, chosen for older customers as a stated requirement
m src/styles/global.css
does not prove: a stated requirement from the practice, not a tested outcome.
the type is set at about 17px with a 1.65 line-height because the people who commission as-built drawings are often not young, and a phones-only rule lifts the smallest labels by 8.6% to 13.3% while leaving the body copy alone, because the body copy did not need it.
what they own now
- the repository, the domain and the deploy workflow
- a written project guide that states the palette, the type scale and the rules that are not to be reinterpreted
- a search console baseline with four findings and a stop rule attached to each
what this does not prove
this section is here on every file. it is the reason the rest of the page is worth reading.
blocked out: search traffic improved
every search figure on this page is a baseline captured on 2026-08-19, deliberately before the changes shipped on 2026-08-20, so that nothing shipped could influence it. the comparison is due after 2026-09-10. until then there is no after, and this run stays painted out.
blocked out: a lighthouse score
no lighthouse run is recorded for this project. the brief set targets. targets are not measurements.
the practice’s own figures for years trading, projects completed and turnaround are its business facts. they are not measurements taken here and are not repeated on this page.
all six testimonials on the site are anonymous, so no review or rating markup was added. that restraint is deliberate and still holds.
the build does not currently type-check: five errors remain, and three buttons render with no variant classes.
the sitemap ships one date rather than one per route, because the deploy checks out shallow and the git-history dating script sees a single commit. the system is real in the code and is not producing differentiated dates in production.