How this site is built.
We tell founders that most of what slows a store down is stuff nobody needed. It would be strange to say that on a page held together by four megabytes of JavaScript, so this one isn't. Here is the whole inventory, including the parts we would rather not have.
This page, right now.
Read from your browser's Performance API on load. If a number is missing, your browser did not report it. We would rather show a gap than a guess.
transferred weight is only reported over http. Open this page from a server to see it.
No framework
Every page here is hand-written HTML. There is no React app, no router, no component tree, no hydration. The navigation between pages is real navigation. The terminal overlay you see between them is a two-hundred-byte animation, not a single-page shell pretending to be one.
The animations are CSS keyframes and one shared requestAnimationFrame loop that every effect on the page registers with. Not one loop per effect. That is the difference between a site that scrolls smoothly on a mid-range Android and one that does not.
No build step
There is no bundler, no transpiler, no CSS preprocessor, no node_modules. You can open any file in this project directly from your filesystem and it works, exactly as it does in production. The source you are served is the source we wrote.
That is not nostalgia. It means there is no build to break at 2am, no toolchain to upgrade, and nothing between a bug report and a fix except a text editor.
Everything that ships.
Including the two dependencies we have not yet removed, and the analytics script we added on purpose.
- Hand-written HTML pages19
- CSS, across two files~570 lines
- JavaScript, across three files~620 lines
- Typefaces: Sora, self-hosted, one variable file1
- Accent colours2
- Build steps0
- npm packages installed0
- Runtime dependencies: React and ReactDOM, self-hosted production builds, used only to mount the design-system button2
- Third-party origins contacted when you load this page1
- Analytics scripts: Google Analytics 41
- Chat widgets, cookie banners, popups0
Those two dependencies are the honest wart. They exist because the button component came from our design system as React, and we have not yet rewritten it as plain HTML. It is on the list. We are telling you about it because a colophon that only lists the flattering numbers is an advert.
They used to be the development builds, pulled from a CDN on every page: 1.19 MB of React to render a button, plus a second origin to connect to before anything could mount. They are now the production builds, served from this domain, at 143 KB. Same wart, a tenth of the size, and React no longer costs you a second origin.
The analytics script is the newer wart, and unlike the other one it is deliberate. Google Analytics 4 loads from googletagmanager.com, which makes it the single third-party origin on this page and the one company other than us that sees your IP address. We added it because we were guessing about which case studies people actually read, and guessing is a bad way to decide what to build next. It is the only script here that is not ours, there is no cookie banner because we are not going to pretend the choice was yours, and if the trade stops being worth it, it comes out.
Two colours, four surfaces.
Every value on this site comes from a design token. Nothing is a one-off hex someone typed into a stylesheet at midnight.
Purple Heart#9659FF · --brand
Inch Worm#C0FF00 · --acid
Background#08060D · --bg
Surface#141020 · --surface
This is the same discipline we point at your store.
Most Shopify stores we inherit are slow for one reason: things got added and nothing got removed. Six apps that each load their own copy of a library. A theme with four carousel implementations, three of them unused. Tracking scripts nobody can name.
Our job is to know exactly what is on the page and why. This site is the smallest possible demonstration of that: we can list every file, every dependency, and every reason one is there. When we take over your theme, that is the state we work toward, and the maintenance retainer exists to keep it there, because entropy is the default.
Curious what your store is actually loading? Book a call and we will read it with you, line by line.
