the find
− 0.6 mClient work for a sword forge in Thailand: the forge's whole collection as one real-time 3D configurator. Ten lines: eight traditional families — the Thai–Lao dhaab, the Lao dhaab, the Burmese dha, the Ayuthaya Noble dhaab, the dhaab dang that a guardsman carried with a shield, the Tai Lue dha, the Thai saber, a heritage series in repoussé silver — and two custom lines. Choose the blade, the steel's finish and its etched temper line, the grip and its wrap, the scabbard's lacquer, the fittings, the carry rope and its colour.
Blades, scabbards, wraps and ropes are generated in code from parameters; only the cast fittings arrive as compressed meshes. The carry ropes are physically simulated — a tassel is 576 strands — and go to sleep when they stop moving. A life-size silhouette can stand beside the sword for scale. The blade's weight is computed live from its geometry; the Thai–Lao dhaab comes out at about 284 g. English and ไทย throughout, and one link holds the whole build.
[client work · the blade designs are the forge's own · no prices on this page]
cross-section
− 1.3 mBlade outlines were vectorised from the smith's own paper templates at 1:1, then rebuilt as curvature-fair curves. The viewer draws only when something changes, caps its pixel ratio at 1.75, and drops to lighter geometry by itself when its frame is under 900 px wide or the device is short on memory. Fitting meshes travel gzipped and are unpacked in the browser by its own decompression stream, with a small fallback for older engines. Most swords open in about 0.6 MB.
A minimal embed mode — no panel, no prices, a transparent stage, a fixed pose — lets the same engine sit inside a page like this one, and listens for a message to pause while it is off-screen.
inscription
− 2.0 mField note, from the defect log: A wobble of ±0.5 mm — invisible on the paper templates, honest work for a hand tracing a blade — became rippling bands of reflection once the blade was polished steel under a studio light. Every outline was redrawn with curvature-fair curves, and the build now fails if any edge tilts by more than one degree of wobble.
On iPhones only, the stamped blades wore a faint grey crosshatch. The cause was fwidth() called inside a shader branch — undefined behaviour that most GPUs forgive and Apple's mobile GPUs do not. And Safari allows a page only a hundred history updates in thirty seconds, so dragging a slider could silently break the share link; the link is now written at once, then at most once every 400 ms.

