/health.
The operational state of challa.io — published, not asserted. This site argues that fundamentals like observability, determinism, and trust should be architecturally verifiable, not claimed. This page is the receipt.
Every number below is checkable against the repo or your browser’s DevTools. If anything here is wrong, it’s a bug — tell me.
Page weight
| Asset | Detail | Size |
|---|---|---|
| HTML | — | 41 KB |
| CSS | 14 files, parallel-fetched | 128 KB |
| JavaScript | 2 files, deferred | 26 KB |
| Webfonts | 4 files, self-hosted, font-display: swap |
101 KB |
| Total | uncompressed source | 295 KB |
Raw source bytes. In production HTML, CSS, and JS are brotli or gzip compressed — a visitor typically downloads roughly 140–160 KB on first visit. Fonts are already compressed woff2. Portrait loads lazily; favicon is cached.
Runtime state
| Signal | Detail | Value |
|---|---|---|
| Third-party scripts | Google Analytics 4, async, non-blocking | 1 |
| Analytics / trackers | GA4 — anonymised, no ads, no remarketing | 1 |
| Cookies set | — | 0 |
| localStorage keys | theme preference only | 1 |
| External font requests | 4 self-hosted woff2 — no Google Fonts | 0 |
| Service workers | — | 0 |
Google Analytics 4 is the one third-party script on this site. It loads async and doesn’t block render. No remarketing, no ad targeting, no audience building — just basic traffic data: pageviews, referrers, countries, devices. If you’d rather not be counted, uBlock Origin works fine.
Observed performance
| Metric | Threshold | Value | Status |
|---|---|---|---|
| First Contentful Paint | < 1.8s | 1.5s | good |
| Largest Contentful Paint | < 2.5s | 1.7s | good |
| Cumulative Layout Shift | ≤ 0.1 | 0 | good |
| Total Blocking Time | < 200ms | 40ms | good |
| Lighthouse Performance | ≥ 90 | 99 | good |
Thresholds are Google’s Core Web Vitals. Measured on mobile Lighthouse (slow-4G throttling, mid-tier emulated phone) — the stricter test. Values are stamped from scripts/perf.json after each run.
Critical render path
| Resource type | Detail | Blocking |
|---|---|---|
| HTML | the page itself | 1 |
| CSS | 14 files, parallel-fetched from head | 14 |
| JavaScript | defer — runs after paint |
0 |
| Fonts | self-hosted, preloaded, font-display: swap |
0 |
| Images | portrait is loading="lazy"; favicon is cached |
0 |
Dependencies
| Item | Value |
|---|---|
| NPM packages | 0 |
| Framework | none — hand-coded HTML + CSS + vanilla JS |
| Build step | none — source is what’s served |
| CSS preprocessors | none — plain CSS with custom properties |
Accessibility
| Feature | Status |
|---|---|
| Skip-to-content link | present |
| Semantic HTML landmarks | header, nav, main, article, section, footer |
| Reduced-motion support | respected — prefers-reduced-motion |
| Theme | dark + light, persisted to localStorage |
| Focus-visible rings | present on all interactive elements |
Provenance
| Item | Value |
|---|---|
| Site version | v3 |
| Last receipt regenerated | 2026-04-25 |
| Recent edits | Journey trust lines · Preloader arc · GA4 added · Health page table layout |
Verify these claims
Don’t take my word for any of this. Open DevTools on this page, open the Network tab, hard-reload. Every byte above will match. Or run Lighthouse on the live site and compare the Observed performance numbers to what’s stamped here.
The build script itself is scripts/update-health.js — one file, zero
dependencies, roughly 140 lines. It scans the source, stamps the numbers, prints a report.
If a scan ever finds something that breaks a zero-claim, the script prints a warning
rather than silently passing.