futr
Revision 02 · issued 2026-08-11

This site, measured.

We ask clients to hold their sites to budgets, so ours is published — and now checked against a real build rather than stated as an intention. Where we are over, it says so.

Performance budget · measured
First-load JS, heaviest routeover target, under ceiling
149kBtarget 120kB · ceiling 160kB

Gzipped, every chunk that route pulls in.

First-load JS, median routeover target, under ceiling
146.9kBtarget 120kB · ceiling 160kB

The typical page rather than the worst one.

Shared baseline JSwithin budget
100kBtarget 100kB · ceiling 120kB

Loaded once, then cached across every route.

CSS, whole sitewithin budget
14kBtarget 20kB · ceiling 30kB

Gzipped. No framework, so this is all of it.

Self-hosted fontswithin budget
47.1kBtarget 60kB · ceiling 90kB

2 WOFF2 files, no third-party font request.

Measured 2026-08-12 from a production build of 29 routes, by scripts/measure.mjs reading the build output directly. 2 of 5 lines are over target. They are published anyway — a budget you only show when you pass it is marketing, not a budget.

Lighthouse · measured
96PerformanceMobile, throttled
96AccessibilityAutomated portion only
100Best practices
66SEOnoindex while on the staging host
2.0 sLargest contentful painttarget < 2.0 s
0Cumulative layout shifttarget < 0.1
30 msTotal blocking timetarget < 200 ms

Measured 2026-08-12 against futragency.vercel.app, mobile, using our own audit tool — the same one you can point at your site. SEO scores 66 because we are deliberately noindexed while the site is on a staging hostname whose canonical URLs point at the production domain. That resolves when DNS completes. We would rather publish a low score with its reason than wait until the number flatters us.

Not yet measured

Frame rate, mid-tier Android

Measured on device, not in a lab. The animation work is CSS scroll-driven, so this is a hardware question rather than a code one.

Target 60 fps

WCAG 2.2 AA, core journeys

Automated tooling catches roughly a third of the criteria, and the easy third. The remainder is a manual pass with a keyboard and a screen reader, and the 96 above should not be read as a conformance claim.

Target Conformant

LCP on the production domain

The 2.0s above was measured on the staging host. It will be re-measured on futragency.com once DNS completes, and republished whether it improves or not.

Target < 2.0s
Weight on disk
Routes29
Images711.5 MB total
Fonts247.1 kB
CSS14kB gzipped
Heaviest routes
RouteFirst-load JS
/contact149 kB
/work148.7 kB
/audit147.8 kB
/147.5 kB
/not-found146.9 kB
Stack
FrameworkNext.js 15 · React 19
HostingVercel
StylingCSS custom properties · no framework
MotionCSS scroll-driven animations
SearchClient-side index over the content model
Display typeCCS Glyke, self-hosted WOFF2
Index
page27
capability11
work20
person6
writing6
Revision history

Rev 02

Site audit tool, six published technical articles, contact form wired to CRM with attribution, four-gate contact sheet, comparison pages, procurement pack, published legal pack. Domain attached with the legacy WordPress URLs redirected. Performance budget switched from targets to measured figures.

2026-08-11

Rev 01

First issue. Search shell, six vertical destinations, capability pages with computed project mapping.

2026-08-06
How revisions work

Behaviour on this site is measured monthly. Where the evidence suggests a change, it is proposed, approved, and issued as the next revision with a line in this log. The site improves in public.

Four ways in

However you prefer.

Marine and yacht enquiries go straight to a named senior contact, and nothing is published without permission.