Colophon

How this site is made.

The tools, the pipeline, and the weight of every page. Built by hand, hosted for nothing.

Build 66cefc2October 13, 2026Astro 7.2.7source

The stack

Astro, fully static. There is no framework in the page and no CSS framework under it: plain CSS with custom properties, and TypeScript written for the one page that needs it. GSAP drives the film scrub, and three.js turns the models. Fonts are self hosted: Fraunces for display, Instrument Sans for reading, Spline Sans Mono for labels. A GitHub Action builds every push and GitHub Pages serves it under a domain from Namecheap, which puts the monthly bill at zero.

The film

The Ridge was modelled and rendered in Blender with Cycles, 192 frames, on free CC0 assets from Poly Haven for the sky, the ground and the grass. A Node script runs the frames through sharp into WebP at two sizes with posters and a manifest. In the browser the frames decode into a canvas and the scroll position picks the frame, so the flyover runs at whatever speed you read. The last movement plants the station: the menu on the ridge is a pure function of how far the film has run, and its landmarks were measured off the frame in pixels. Choosing one is a camera dive, and the page you land on keeps the same crop underneath as a faint ghost.

The lab

Each experiment brings its own engine. The MacArthur is a three.js orbit viewer over models built from public survey data. The Field is a WebGPU compute shader with a spring for every blade. The keepsake is an SVG drawn from a seed, so the same address always draws the same field. Everything that moves has a still or a fallback for browsers and people who would rather it did not.

Type and motion

Fraunces does the art direction with its optical size, softness and wonk axes. Page heads interpolate those axes on a scroll timeline as they leave the screen, display type settling into text, with no script involved. Pages change under native cross-document view transitions. Every motion on the site is switched off for a reduced motion preference. One gotcha for anyone copying this: the default CSS minifier folds scroll timelines into the animation shorthand, which stable browsers reject, so the build minifies CSS with esbuild instead.

Offline

A service worker caches the core pages and posters at install, fetches navigations network first so a new deploy is never served stale, and serves hashed assets cache first. The site installs, and there is a page for when the signal goes. The film frames stay online only.

The store

The shelf is a static page with Stripe Elements in the browser. A Cloudflare Worker holds the catalogue, keeps the pictures in KV, and prices every order again from its own list, because nothing the page believes about money is trusted. It runs in test mode until it does not.

Machine readers

There is an llms.txt, a JSON Resume that also renders the resume page, and schema.org data on the front page. Each page gets its own social card at build time, drawn in the site's type by satori and rasterised by sharp, from the same list the site uses for titles. The log reads git during the build.

Dusk

After sunset the paper cools and the ink deepens on the reading pages. Sunset is guessed from your clock and the month, not from where you are. Add ?dusk=1 or ?dusk=0 to any address to choose for yourself; the choice stays on your device.

The weight

Measured after every build: the HTML, the CSS and the script each page loads, gzipped as a browser would fetch them. Pictures, film frames and models are not counted. They are most of what you see and none of what this table is about.

PageHTMLCSSScriptTotal
/3.74.432.740.8
/about/4.04.41.910.3
/colophon/4.64.41.910.9
/edit/0.40.00.00.4
/ked/17.00.00.017.0
/ked/admin/3.90.00.03.9
/ked/approve/7.00.00.07.0
/ked/areas/5.90.00.05.9
/ked/areas/brentwood/6.70.00.06.7
/ked/areas/central-west-end/6.70.00.06.7
/ked/areas/chesterfield/6.70.00.06.7
/ked/areas/clayton/6.70.00.06.7
/ked/areas/creve-coeur/6.80.00.06.8
/ked/areas/frontenac/6.80.00.06.8
/ked/areas/kirkwood/6.80.00.06.8
/ked/areas/ladue/6.80.00.06.8
/ked/areas/town-and-country/6.70.00.06.7
/ked/areas/webster-groves/6.70.00.06.7
/ked/areas/wildwood/6.70.00.06.7
/ked/blog/7.10.00.07.1
/ked/blog/category/Info/0.20.00.00.2
/ked/blog/how-often-should-you-detail-your-car/7.80.00.07.8
/ked/blog/regular-car-detailing-saves-money/7.60.00.07.6
/ked/blog/tag/auto+detailing/0.20.00.00.2
/ked/blog/tag/auto+detailing+tips/0.20.00.00.2
/ked/blog/tag/car+care+st.+louis/0.20.00.00.2
/ked/blog/tag/car+care+tips/0.20.00.00.2
/ked/blog/tag/car+detailing+near+me/0.20.00.00.2
/ked/blog/tag/car+detailing+schedule/0.20.00.00.2
/ked/blog/tag/mobile+detailing+St.+Louis/0.20.00.00.2
/ked/blog/tag/paint+protection/0.20.00.00.2
/ked/blog/tag/regular+car+detailing/0.20.00.00.2
/ked/blog/tag/resale+value/0.20.00.00.2
/ked/blog/tag/seasonal+car+care/0.20.00.00.2
/ked/blog/tag/st+louis/0.20.00.00.2
/ked/blog/tag/vehicle+maintenance/0.20.00.00.2
/ked/blog/tag/vehicle+protection/0.20.00.00.2
/ked/blog/the-benefits-of-professional-auto-detailing-in-st-louis/7.60.00.07.6
/ked/booking/6.10.00.06.1
/ked/car/7.70.00.07.7
/ked/cart/0.20.00.00.2
/ked/done/6.60.00.06.6
/ked/guide/15.30.00.015.3
/ked/home/0.20.00.00.2
/ked/launch/5.90.00.05.9
/ked/pay/7.70.00.07.7
/ked/quote/9.90.00.09.9
/ked/services/boat-detailing/7.20.00.07.2
/ked/services/ceramic-coating/7.70.00.07.7
/ked/services/interior-detailing/7.60.00.07.6
/ked/services/paint-correction/7.70.00.07.7
/ked/store/6.50.00.06.5
/ked/store/p/level-i-the-tune-up/0.20.00.00.2
/ked/unsubscribe/6.20.00.06.2
/lab/3.24.41.99.5
/lab/bridge/3.95.84.113.8
/lab/drafting-film/6.36.57.320.0
/lab/field/3.04.47.114.5
/lab/keepsake/4.64.41.910.9
/lab/ridge/3.34.41.99.6
/lab/sprout-siege/4.24.41.910.5
/lab/trra/6.45.6168.1180.1
/lab/underground/5.14.44.814.2
/ladle/2.94.41.99.2
/ladle/privacy/2.94.41.99.2
/log/10.94.41.917.2
/mattress-concepts/13.00.00.013.0
/mattress-concepts/adjustable-beds/6.60.00.06.6
/mattress-concepts/antique-bed-mattresses/6.00.00.06.0
/mattress-concepts/boat-mattresses/5.90.00.05.9
/mattress-concepts/custom/8.10.00.08.1
/mattress-concepts/horse-trailer-mattresses/5.80.00.05.8
/mattress-concepts/mattresses/8.00.00.08.0
/mattress-concepts/mattresses/balance-embrace-firm-et/4.70.00.04.7
/mattress-concepts/mattresses/balance-embrace/4.70.00.04.7
/mattress-concepts/mattresses/benton-flip-firm/4.70.00.04.7
/mattress-concepts/mattresses/cloud-plush/4.70.00.04.7
/mattress-concepts/mattresses/copper-hybrid-firm-smoothtop/4.80.00.04.8
/mattress-concepts/mattresses/copper-plush-hybrid-et/4.80.00.04.8
/mattress-concepts/mattresses/de-vinci-et/4.80.00.04.8
/mattress-concepts/mattresses/de-vinci-extra-firm/4.70.00.04.7
/mattress-concepts/mattresses/empire-et/4.80.00.04.8
/mattress-concepts/mattresses/empire-hd-extra-firm/4.70.00.04.7
/mattress-concepts/mattresses/everest-sub-zero-et/4.60.00.04.6
/mattress-concepts/mattresses/everest-sub-zero-firm/4.60.00.04.6
/mattress-concepts/mattresses/four-seasons-deer-valley-gentle-firm/4.80.00.04.8
/mattress-concepts/mattresses/four-seasons-whistler-pt/4.80.00.04.8
/mattress-concepts/mattresses/kingston-et/4.70.00.04.7
/mattress-concepts/mattresses/kingston-firm/4.70.00.04.7
/mattress-concepts/mattresses/pinnacle-2500-et/4.70.00.04.7
/mattress-concepts/mattresses/revere-firm/4.60.00.04.6
/mattress-concepts/mattresses/revere-plush/4.60.00.04.6
/mattress-concepts/mattresses/spring-o-pedic-orthopedic-ii-medium/4.70.00.04.7
/mattress-concepts/mattresses/spring-o-pedic-orthopedic-iii-et/4.70.00.04.7
/mattress-concepts/mattresses/stevens-95th-anniversary-edition/4.70.00.04.7
/mattress-concepts/rv-mattresses/6.40.00.06.4
/mattress-concepts/two-sided-mattresses/6.30.00.06.3
/mattress-concepts/visit/7.50.00.07.5
/nightjar/0.20.00.00.2
/nightjar/privacy/0.20.00.00.2
/nightjar/terms/0.20.00.00.2
/resume/5.35.61.912.8
/slumbio/3.34.41.99.6
/slumbio/privacy/2.74.41.99.0
/slumbio/terms/2.94.41.99.2
/work/3.74.41.910.0
/work/datum/6.66.21.914.8
/work/erp-writeback/5.04.41.911.3
/work/photography/3.94.41.910.2
/work/photography/commercial/4.54.44.213.1
/work/photography/eclipse/6.45.54.216.1
/work/photography/live-music/4.74.44.213.2
/work/photography/product/4.14.44.212.6
/work/session-prompting/4.64.41.910.9
/work/tenant-isolation/4.74.41.911.0
/work/websites/3.84.41.910.1
/work/websites/ked-detailing/4.45.41.911.8
/work/websites/lauren-becherer-pottery/3.84.41.910.2

Kilobytes, gzipped, measured on 2026-10-13 across 118 pages. Styles that ship inline with a page count as HTML. Script includes every chunk the page can reach.

← Home