audreyinc INP P75 perf tracking — Core Web Vitals ledger for audrey-inc + portfolio (parked 2026-05-26)
DARE.CO.UK · PARKED SKETCH · 2026-05-26
Mirrored from ~/.claude/.../memory/parked_sketch_audreyinc_inp_tracking_2026-05-26.md. This is a design sketch parked for future build — read for context, not as a current deliverable.
Dan flagged a poor INP P75 score (688 ms, trending +2.2K%) on audreylam.com via Cloudflare Web Analytics. Wants ongoing tracking, not an immediate fix. Sketch a daily-snapshot + sparkline-card pattern that drops into status.gf.cx (or a sibling perf.gf.cx subdomain) and covers every tracked portfolio property. Resume when ready to invest in audrey-inc theme work, OR when a second domain’s INP regresses, OR when the broader perf-dashboard substrate becomes useful for other surfaces.
Dan 2026-05-26: “fyi - next-paint score, poor for audreyinc [CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Web Analytics screenshot] it would be good to track”
What the screenshot showed (30-day window, audreylam.com)
| Metric | Value | Threshold | Verdict |
|---|---|---|---|
| LCP P75 | 1698 ms | ≤2500 ms = Good | ✅ Good (42% improvement on prior window) |
| INP P75 | 688 ms | ≤200 ms Good · 200-500 Needs work · >500 Poor | 🔴 Poor (trending +2.2K%) |
| CLS | 0 | ≤0.10 = Good | ✅ Good |
INP measures the latency between any user interaction and the next visual update. 688 ms means tapping HOME/ABOUT/COLLECTIONS feels noticeably laggy on the median mobile device.
Likely root cause (untested hypothesis)
audreylam.com is a Squarespace / WordPress / Wix / similar template-driven portfolio — the theme’s nav-click handler probably triggers a synchronous JS bundle init (analytics, lightbox, AJAX page-load, font-swap) that blocks the main thread between tap and paint. The +2.2K% trend suggests a recent script addition (new analytics tag? GTM container? cookie consent banner?) tipped it over.
Diagnosis recipe before any tracking work: open Chrome DevTools → Performance Insights → record a HOME→ABOUT tap → look at the longest task. INP almost always traces to one specific handler.
Tracking approach (sketch — pick one when resuming)
Option A — daily cron + sparkline card on status.gf.cx (lightest)
~/bin/perf_snapshot_cf_web_analytics.py— pulls CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Web Analytics GraphQL daily, writes~/Code/home-projects/perf/{domain}/{YYYY-MM-DD}.jsonper property.- Adds one card per tracked domain to status.gf.cx, in the same shape as the existing job-status cards (kicker · big number · 30-day sparkline · trend pill).
- Threshold badges: Good (green) / Needs work (amber) / Poor (red).
- ~2-3 hr build · reuses the status card primitive that already shipped.
Option B — perf.gf.cx subdomain (more ambitious)
- Sibling to status.gf.cx: dedicated Core Web Vitals dashboard.
- Per-property cards: LCP, INP, CLS, FID, TTFB, page-views, error-rate.
- 30/90/365-day toggles.
- Use the assets.gf.cx/cards/cards.css primitive.
- Spin up via
~/bin/gfcx_subdomain_new.py(5-min recipe perfeedback_cf_pages_subdomain_setup_recipe.md). - ~half-day build.
Option C — per-property perf section (narrowest)
- Drop a perf block into the audrey-inc record on pa.gf.cx (or wherever audreyinc lives in the substrate).
- Same daily snapshot file, but rendered inline on a single record.
- Lightest if INP tracking is only ever an audreyinc concern; biggest regret if it’s not.
API surface
Cloudflare Web Analytics → GraphQL Analytics API → viewer.zones.rumWebVitalsEventsAdaptiveGroups (the same data the dashboard renders). Auth via the existing CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF API token used by other gf.cx scripts. No new permissions needed if the token already has Analytics: Read.
Cross-references
feedback_status_gfcx_meta_dashboard_pattern.md— the natural home for Option Afeedback_cf_pages_subdomain_setup_recipe.md— recipe if Option Bfeedback_ingest_dashboard_pattern.md— the dashboard-card render primitivesfeedback_filling_in_blanks_substrate_payoff.md— the post-substrate template-deploy speed argument for “do it once, get it everywhere”
Resume trigger
- Strongest: Dan plans an audrey-inc theme refresh and wants a before/after measurement.
- Or: a second portfolio domain (gf.cx, dare.co.uk, pa.gf.cx) shows a similar regression — at two domains it’s worth building the substrate.
- Or: a regression in LCP or CLS too (currently both Good), which would mean the underlying theme is degrading on multiple axes.
What I’d do first (15-min triage, before any tracking build)
Open audreylam.com in Chrome → DevTools Performance Insights → record a HOME-to-ABOUT tap → screenshot the longest task → drop here. Knowing the cause is more useful than charting the symptom, and the fix might be a single script removal that brings INP back inside Good without any dashboard work.