Proof
Built to the rules it sells.
The tables below are measured from the files your browser just downloaded. A script in the repository produces them on every build, and a failed check fails the build. A client evidence file looks the same, with more rows.
Checks
Measured 2026-11-04 21:51 UTC. 8 of 8 pass.
| Check | Result | Status |
|---|---|---|
| JavaScript per page, gzip | 1.0 KB of 6.0 KB | pass |
| Heaviest page, HTML + CSS gzip | 11.9 KB of 80.0 KB | pass |
| Third-party requests | none | pass |
| Internal links resolve | 244 of 244 | pass |
| One h1, no skipped levels | 10 of 10 pages | pass |
| Title, description, canonical, lang | 10 of 10 pages | pass |
| Images with alt text | 7 of 7 | pass |
| Text contrast at least 4.5:1, both themes | 16 of 16 pairs, lowest 5.3:1 | pass |
Every page, weighed
Compressed size of each page in kilobytes. Styles are inlined, so HTML carries the CSS. Fonts and images load separately.
| Page | HTML + CSS | JS | Scripts | Links | Headings | Meta |
|---|---|---|---|---|---|---|
| /404.html | 7.8 | 1.0 | 1 | 25 | ok | ok |
| /about/ | 9.3 | 1.0 | 1 | 23 | ok | ok |
| / | 11.9 | 1.0 | 1 | 35 | ok | ok |
| /method/ | 10.0 | 1.0 | 1 | 23 | ok | ok |
| /privacy/ | 8.0 | 1.0 | 1 | 24 | ok | ok |
| /proof/ | 9.2 | 1.0 | 1 | 22 | ok | ok |
| /services/ | 10.0 | 1.0 | 1 | 23 | ok | ok |
| /start/ | 8.4 | 1.0 | 1 | 22 | ok | ok |
| /trust/ | 8.4 | 1.0 | 1 | 22 | ok | ok |
| /work/ | 9.7 | 1.0 | 1 | 25 | ok | ok |
Color contrast
Each text color against each background it sits on, in both themes. WCAG 2.1 AA asks for at least 4.5 to 1.
| Theme | Text | Background | Ratio | Status |
|---|---|---|---|---|
| dark | ink #EEE9DF | bg #0E0E0F | 15.95 | pass |
| dark | ink #EEE9DF | surface #161618 | 14.94 | pass |
| dark | muted #A8A296 | bg #0E0E0F | 7.60 | pass |
| dark | muted #A8A296 | surface #161618 | 7.12 | pass |
| dark | accent #D9955A | bg #0E0E0F | 7.72 | pass |
| dark | accent #D9955A | surface #161618 | 7.23 | pass |
| dark | brass #C9A96A | bg #0E0E0F | 8.61 | pass |
| dark | accentInk #1A0F06 | accent #D9955A | 7.53 | pass |
| light | ink #16140F | bg #F4F1EA | 16.32 | pass |
| light | ink #16140F | surface #FBFAF6 | 17.62 | pass |
| light | muted #5C574E | bg #F4F1EA | 6.36 | pass |
| light | muted #5C574E | surface #FBFAF6 | 6.87 | pass |
| light | accent #9A4F1E | bg #F4F1EA | 5.30 | pass |
| light | accent #9A4F1E | surface #FBFAF6 | 5.73 | pass |
| light | brass #7A5A1E | bg #F4F1EA | 5.63 | pass |
| light | accentInk #FFFFFF | accent #9A4F1E | 5.98 | pass |
Reproduce it
Clone the repository, build, measure. The script writes this page’s data and exits non-zero on any failure, which is how it gates the deploy.
pnpm install pnpm build node scripts/evidence.mjs --check
What is not here
Field performance, real-user timings and search rankings. Those need a running site and time. When they exist they will be added as rows, with their source.