06 · Plumb Type Foundry: a living specimen with a working font tester
Plumb is an imaginary type foundry whose whole site is live text in three real open-source variable fonts. There are no images and no WebGL. What stops people is the hero: giant letters stretched edge to edge that swell in weight and width as the pointer passes over them, with a live readout of the nearest letter's axis values. Further down, a working tester gives you a paste-ready Google Fonts link tag and CSS block. The page says plainly that the foundry is fictional and the typefaces and their makers are real.
Inspiration
- Magic UI Hyper Text: the nav links scramble through random characters before settling, and the glyph inspector flickers three random characters before landing on the one you picked.
- Aceternity Magnetic Button: the "Invert", "Open the tester", "Copy" and "Back to the tester" buttons drift toward the pointer.
- Aceternity Following Pointer: a small difference-blend dot trails the cursor and changes shape (ring over links, bar over the tester text, tiny dot over sliders).
- Aceternity Text Generate: the colophon types itself in when it scrolls into view.
- Refero Styles and CSS Peeper: the tester's output is a link tag plus a CSS block you can paste, and the glyph inspector is laid out like a spec sheet (Unicode, HTML entity, class, advance width, metric lines).
- Added on top: a fit-to-width hero with a per-line width budget and height clamp, scroll-driven axis changes with live numbers from CSS counters, an orange "heaviest weight" ghost behind each glyph, and a colophon whose new letters arrive at Grade 150 and dry to Grade 0 so nothing reflows.
Visual direction
- Palette: paper #F3F0E8, ink #000000, one hot ink #FF4F00. Invert swaps paper and ink (the hot orange stays).
- Fonts: Roboto Flex (13 axes) for most of the page, Fraunces (SOFT and WONK axes) and Bricolage Grotesque in the marquee and drawer, DM Mono for small captions.
- Layout: a 12-column grid with hairline rules, numbered sections 01 to 07, and oversized uppercase type justified edge to edge. A "G" key shows the grid.
- Motion: axes move, not transforms. Hero letters respond to the pointer (or an idle drifting point, or phone tilt). Section 01 lines stretch from wdth 25 to 151 as they scroll past, and section 02 runs weight from 100 to 1000. A four-row marquee speeds up and skews with scroll velocity. Section 03 pins the screen for roughly 13 stops, one per Roboto Flex axis.
- Signature moments: the hero proximity engine, the pinned axis parade with its big orange number, the drawer rows that animate each font's axes on hover, the glyph inspector with baseline, x-height and cap-height lines, the tester's animated presets, and the circle-reveal theme invert.
References
- Magic UI, Hyper Text: https://magicui.design (scramble on nav links and glyph swaps)
- Aceternity UI, Magnetic Button, Following Pointer, Text Generate: https://ui.aceternity.com (magnetic buttons, trailing cursor, self-typing colophon)
- Refero Styles: https://styles.refero.design (spec-sheet presentation, copyable style output)
- CSS Peeper: https://csspeeper.com (the "paste-ready CSS" idea and the inspector layout)
- Google Fonts CSS2 API: the tester builds real axis-range URLs from the font's axes.
Why these choices
With no images or shaders, the "how is this a website" feeling had to come from type, and variable fonts are the one place where type itself can animate smoothly. That also makes it the lightest of the ten: one HTML file plus font requests.
The tester gives it a practical job, so it is more than a demo. It handles the details that make the output trustworthy: only changed axes go into the CSS, optical size can be left on auto, and the generated link tag only requests the axes in use.
Trade-offs visible in the code: a JS fallback runs the scroll animation when animation-timeline is unsupported (and ?nosda=1 forces it for testing). Reduced motion turns off the reveals, scramble, typing and idle drift. The hero reads layout once per frame and writes in batches. The marquee and hero stop working when off screen. The cost is a heavy font request (Roboto Flex with all axes) and a long scroll in the axis parade, about 5 screens.
Who this kind of site is for
Good fit: type foundries, design studios, agencies, editorial and portfolio sites, conference or event pages, and any brand whose identity is typographic. It also suits a tool-led site where one working widget (the tester) earns the visit.
Wrong call: a local trades business, a clinic, or a shop where people want hours, prices and a phone number fast. Giant, shifting type and a 5-screen pinned section would get in their way, and the self-typing colophon would add nothing.
How to make it
Stack and key techniques
- One HTML file, about 1,200 lines, vanilla JS, no libraries, no build step. Google Fonts supplies the fonts.
- Hero proximity engine with fit-to-width and height clamp, Gaussian falloff per letter.
- Registered CSS property
--pdriven byanimation-timeline: view(), feedingfont-variation-settingsand CSS integer counters, with a JS fallback. - Pinned, sticky 13-axis parade with auto-fit per word and a rail of jump buttons.
- Velocity marquee with skew, glyph inspector using canvas-measured metrics, a baseline probe element, a ripple and scramble.
- Tester with generated sliders, tweened presets, optical-size auto, Google Fonts URL builder, clipboard copy with fallback, and a waterfall.
- View Transitions circle reveal for invert; cursor and magnetic buttons.
The prompt
Build a single-file website (index.html, no build step, no libraries, vanilla JS and CSS) for "Plumb Type Foundry", a fictional foundry whose entire site is a living specimen set in real open-source variable fonts. No images, no WebGL, no canvas visuals. The footer and colophon must state clearly that the foundry is imaginary and credit the real type designers (Roboto Flex by Font Bureau, Fraunces by Undercase Type, Bricolage Grotesque by Mathieu Triay, DM Mono by Colophon Foundry; all SIL OFL via Google Fonts).
Visual direction: paper #F3F0E8, ink #000000, one hot ink #FF4F00. An Invert control swaps paper and ink using a View Transitions circle reveal from the click point. Fonts: Roboto Flex with all 13 axes, Fraunces (opsz, wght, SOFT, WONK), Bricolage Grotesque, DM Mono for captions. 12-column grid, hairline rules, numbered sections 01 to 07, giant uppercase type justified edge to edge. Motion comes from variable axes, not transforms. A "G" key toggles a 12-column grid overlay.
Sections and signature moments:
1. Hero: "PLUMB / FOUNDRY" fit to the full width with a height clamp. Each letter's wght and wdth rise with pointer proximity (smooth falloff, eased), the nearest letter turns orange, and a readout shows its axis values. When idle, a point drifts on its own. On phones, use a four-line version and device tilt.
2. Width: four lines, each stretching wdth 25 to 151 as it scrolls through the viewport, using a registered @property --p and animation-timeline: view(), with a live number from a CSS counter. Include a JS fallback for browsers without scroll timelines.
3. Weight: one huge word going from wght 100 to 1000 with a ruler and orange marker.
4. Velocity marquee: four rows in different fonts that speed up and skew with scroll speed.
5. Axis parade: a pinned sticky stage that steps through all 13 Roboto Flex axes with scroll, one sample word each, auto-fit so nothing overflows, a big orange live value, a min/max bar, and a clickable rail of axis tags.
6. Drawer: three font rows that animate their axes on hover and load the font in the tester on click.
7. Glyph inspector: a grid of about 117 characters, a large glyph with baseline, x-height, cap-height, ascender and descender lines measured from canvas, an orange ghost of the heaviest weight, a Unicode and advance readout, a weight slider, and a scramble when choosing.
8. Tester: editable text, sliders generated from each font's axes, animated presets, optical-size auto, a Google Fonts link builder that requests only used axes, a CSS block, copy buttons, and a waterfall of sizes.
9. Colophon: text types itself in on scroll; each new letter starts at GRAD 150 and settles to 0 without reflow.
Details: scrambling nav links, magnetic buttons, a difference-blend cursor dot that changes shape over links, text and sliders.
Rules: respect prefers-reduced-motion, keep keyboard access (arrow keys in the glyph grid, labelled sliders, visible focus), no horizontal overflow from 360 to 1920 px wide, and pause off-screen animation.
Verification loop: open the page in a browser at 1920, 1440, 1024, 820, 390 and 360 wide. Screenshot every section at several scroll stops. Check the console for errors, measure text widths at two axis settings to confirm each axis works, test the presets, copy buttons and generated Google Fonts URLs, then fix and repeat until clean.
Build notes
- The hero overflowed at 1024 wide and was fixed during testing, which is why the height clamp and per-line width budget exist.
- The glyph inspector measures metrics with a canvas and a zero-size baseline probe, and re-measures after fonts load.
- Fonts can arrive late, so the layout code runs again once fonts are ready (with a 2.5 second cap).
- Tester URLs sort axis tags lowercase first, as Google Fonts requires; the builder said all three returned 200.
- Not tested: device tilt and the iOS permission prompt on real hardware, Safari and Firefox. The cursor dot turns blue over orange, glyph metric labels are 8px on mobile, and the axis parade is a long scroll.
Stepping down: what you would likely lose
This is an informed estimate, not a measurement. No public benchmark compares these exact models on one-shot frontend work, so the table rests on Anthropic's tiering, earlier-generation reviews and extrapolation.
| Feature | Opus 5.5 (likely outcome) | Sonnet 5.5 (likely outcome) |
|---|---|---|
| Hero proximity engine with fit-to-width and height clamp | Likely does fine, with a chance of the 1024 overflow bug the builder hit | Attempts it with likely bugs: letters overflow at mid widths, or it falls back to a fixed font size |
Scroll-driven --p with counters and JS fallback |
Likely does fine | Attempts it with likely bugs: the fallback drifts out of sync with the CSS timeline, or is left out |
| Pinned 13-axis parade with auto-fit | Likely does fine | Likely simplifies it to fewer axes or a shorter scroll, or attempts it with words overflowing the stage |
| Glyph inspector with canvas-measured metric lines | Attempts it with likely bugs: lines misaligned after font load or weight change | Likely simplifies it away to a big glyph without accurate lines |
| Tester with correct Google Fonts URLs | Likely does fine, maybe a malformed axis order on one font | Attempts it with likely bugs: axis tags in the wrong order, so a URL returns 400 |
| Velocity marquee with skew | Likely does fine | Likely does fine |
| Colophon with no-reflow Grade typing | Likely does fine | Likely does fine, but may type by opacity and miss the Grade trick |
| View Transitions invert, cursor, magnetics | Likely does fine | Likely does fine, with a possible missing reduced-motion path |
Judgment call, rough ranges: Opus 5.5 likely keeps roughly 80 to 90 percent of the visual impact in one pass. Sonnet 5.5 likely keeps roughly 60 to 75 percent. The evidence for a large Fable-to-Opus gap on this kind of task is thin, so I would expect them to be close here. The gap would likely close with a screenshot feedback loop at several widths, or by splitting the build into hero, parade and tester passes.