
—
—
Waiting for the answer
Technology by design
A tool is worth what it does on the page. On our new system, each of ours earns its place by a job: React composing pages ahead on our server, TypeScript checking every piece before it ships, three.js drawing on your own graphics chip, WordPress where your team writes. This page shows them at work, reads live what runs here, and says plainly what belongs to client projects.
Readings are taken live from this page, in your browser, and sent nowhere. Diagrams are illustrative where marked.
01 · The tools
Our twenty-four tools, each where it really works: on this page, read live as you watch; elsewhere on this site; or in client projects. Open a tile for its job.
01 · Where it works
02 · The selected tool
Checks that every piece of the code fits the others, before anything ships.
How we know: stated Checked this page before it shipped · none of it reached you.
Where to see itThe code, below
TypeScript. Working for this page. Checks that every piece of the code fits the others, before anything ships. Checked this page before it shipped · none of it reached you.
| Tool | Where it works | Evidence | How it is known |
|---|---|---|---|
| TypeScript | Working for this page | Checked this page before it shipped · none of it reached you. | stated |
| JavaScript | Working for this page | Reading this page… | read |
| HTML | Working for this page | Reading this page… | read |
| CSS | Working for this page | Reading this page… | read |
| PHP | In client work | Our own WordPress plugins are written in it · in client projects. | described |
| Node.js | Working for this page | Built this page’s HTML ahead of your visit. | stated |
| React | Working for this page | React 19.3.0-canary-3f0b9e61-20260317 · HTML from our server, woken in your browser. | read |
| Vue.js | In client work | The same job as React, for teams that use it · in client projects. | described |
| WordPress | In client work | Where our clients’ teams write · in client projects. | described |
| MariaDB | In client work | Where WordPress keeps what teams write · in client projects. | described |
| PostgreSQL | Elsewhere on this site | Keeps this site’s messages, written by a role that cannot read them · your browser never connects to it. | stated |
| MongoDB | In client work | For records that change shape · in client projects. | described |
| REST API | Elsewhere on this site | This site’s forms answer through it, on our server. | stated |
| GraphQL | In client work | Asks for exactly the fields a screen shows · in client projects. | described |
| WebSockets | In client work | An open line, for live updates · in client projects. | described |
| GSAP | Working for this page | Asleep: 0 KB until Motion & 3D comes near. | read |
| Three.js | Working for this page | Asleep: 0 KB until Motion & 3D comes near. | read |
| WebGL | Working for this page | Asking your browser… | read |
| Babylon.js | In client work | For full 3D scenes · in client projects, not loaded here. | described |
| MapLibre | Elsewhere on this site | Reading this page… | read |
| AWS | Working for this page | Reading this page… | read |
| Turnstile | Elsewhere on this site | Reading this page… | read |
| Umami | Working for this page | Reading this page… | read |
| Stripe | In client work | In the shops we build. | described |
Read in your browser, now, and sent nowhere. Client work is described, not run here.
02 · The page
Each page is assembled ahead by React on our server: you receive finished HTML and CSS, and JavaScript then wakes what you can touch. Here is a page of this site with its scripts off.
GET/expertise/technology · scripts: none
Words, ready—wordsreadable without script
Buttons, waiting—buttonswaiting for script to answer
A page of this site, about to be opened with its scripts switched off.
A real page of this site, opened in your browser with scripts switched off. Counted from its own markup.
Your browser asks this site for the page, once, as it would for any page. Its scripts are taken out, and it opens in a frame your browser sandboxes without permission to run any. The frame is the size of a desktop or a phone window. Two things are changed in it. A film on this site gets its source from script, so in the frame it stands as an empty box of its size. A picture the page asks to load late is held until the frame comes near it, as your browser would hold it with scripts on: without them, it would fetch every picture at once.
Words are the visible text of the page’s main region. Titles are its headings. A real link has an address that is not empty, not “#” and not a script. An image has its text when it carries an alt attribute. Every button counts as waiting: without script, none answers. So does every film.
The first byte and the size of the HTML come from your browser’s own Resource Timing record of that request: when its first byte arrived, and how much the HTML weighed as it travelled, compressed.
On this page, the words in the frame are set against the words of the page you are reading, scripts running: the smaller count over the live one.
The tags are drawn by this page, on boxes measured once in the frame before anything moves. Moving through the page shifts the framed page as a whole and changes nothing in it; its own animations are paused when the story ends.
One more request for the page’s HTML, made when you come near this section or pick a page, then its stylesheets, its fonts and the pictures near the part of it the frame shows. The page runs no script there, so it counts no visit.
| Reading | Value |
|---|---|
| Words in the main region | — |
| Titles | — |
| Real links | — |
| Images with a text alternative | — |
| Buttons waiting for script | — |
| Instruments drawn on the server | — |
| Films waiting for script | — |
| Points shown in the header | — |
| Moon in the header | — |
| Scripts taken out | — |
| First byte | — |
| HTML as it travelled | — |
| HTML once unpacked | — |
| Frame window | 1440 × 760 |
03 · The code
This site is written in TypeScript, and its build stops on types that do not fit. Types cannot see a wrong sum, so our tests run the code: Québec taxes to the cent, French to the space.
01 · A change
02 · The gates
Choose a change and send it.
03 · What it said
Waiting for a change.
The checks and the French rule run in your browser, on this site’s own tax code and this page’s French. Types: our build, measured October 18, 2026.
04 · How data travels
For most clients, words live in WordPress, kept in MariaDB. A site fetches them over REST or GraphQL, or keeps a WebSocket open. Follow one entry, then change it.
One demonstration entry, followed through four stations: written in WordPress, kept by a database, carried to the site, shown as a card.
Your team writes the entry in WordPress.
register_post_meta( 'event', 'seats_left', [
'type' => 'integer',
'single' => true,
'show_in_rest' => [
'schema' => [ 'minimum' => 0 ],
],
] );Nothing published yet
Waiting for Publish
WordPress’s own tables: a row for the entry, then a row for each field.
Waiting for the entry
—

—
—
Waiting for the answer
The card, written for React
function EventCard({ e }) {
return <article className="event">
<img src={e.cover} alt="" />
<h3>{e.title}</h3>
<time>{day(e.date)}</time>
<Seats left={e.seatsLeft} />
</article>;
}React draws the card above from the entry, live.
WordPress’s table names, its REST route and each system’s answer to −1 are real; the entry, the GraphQL schema and the channel are drawn. Sizes are counted in your browser from the text shown.
05 · Motion & 3D
Three.js speaks WebGL to your device’s graphics chip; GSAP times its movement like a score. The gem is computed as you watch, its engine fetched as you came near. Turn it, and read its cost.
The entrance, as a score
up to your screen’s rate
Fetched when you come within a screen
three.js · GSAP
Not loaded here: Babylon.js, the game-engine toolkit we use for full 3D worlds.
Drawn live by your device and counted by its renderer; your chip’s name is read here and sent nowhere.
Triangles and draw calls are three.js’s own renderer counters, reset at every frame. In Split, the two halves are two passes over the same scene in one frame, and both are counted.
Frame time is the gap between your browser’s animation frames, averaged over the last sixty, and measured while something moves: the drawing stops a second after all is still. A frame rate cannot pass your screen’s own.
Its name comes from WebGL’s renderer information, where your browser shares it; some keep it private on purpose. It is shown here and sent nowhere.
three.js and GSAP arrive by a dynamic import when this section comes within a screen of view, not with the page. Their weight is the sum of the scripts your browser’s Resource Timing records during that import, or “from your cache” when no byte crossed the network.
Drawn from the GSAP timeline’s own tweens: where each starts, how long it lasts, and its ease. A cadence rebuilds the timeline with its ease; Mechanical is the same entrance with no ease at all.
Generated from a seeded recipe, the same gem at every visit; nothing is pre-rendered or played from a video. The sparkles are one instanced mesh: one draw call, however many there are.
three.js also draws the image optics of the Design page’s Dream Conservatory.
The choice
We pick from these twenty-four for what a site has to do: WordPress where your team already writes, a database shaped like your records, 3D where it tells your story, a payment provider where you sell. What a project does not need stays off its pages.
What this page shows is our new system, the way we build today. Sites we delivered before it may not include it.
Tell us what your site has to do. We will tell you what we would build it with, and why.