ExperimentsApril 20264 min read

Point of Failure

A paragraph that unravels. One loop of rope hiding inside typeset text, waiting for someone to find the loose end.

InteractiveExperimentPhysicsCreative Code

Have you ever experienced that satisfying, yet quietly destructive moment where you find a tiny loose thread on a sweater? You know you shouldn't, but you pull. And as the wool unspools, you realize you've found the single point where the geometry of the whole garment fails.

I essentially ended up with this post, and I lost a perfectly good sweater in the process.

This experiment started as a question: what if the contract we make with static text was just as breakable? Not through a fade or a slide animation, but through something more honest: through physics. Through weight and tension and the inevitability of gravity.

/ Pull the last word

Ten years of hardware repair teaches you that every system has a single point of failure. A frayed ribbon, a loose solder joint, or a connector that's one millimeter out of place. You spend your life opening things up just to find the one weak link that makes the whole device stop making sense. I wanted to see if I could bring that same level of physical risk into code. This paragraph looks like a solid block of text, but it is actually a chain of logic under tension, pinned to the character at the very end. It is passing inspection for now. But I have always found that the best way to understand how something is built is to break it and see which piece falls first. If you want to see the structural integrity fail, pull this word.

How the rope works

Each character in the paragraph is treated as a node in a Verlet integration chain. Locked nodes sit exactly where the typesetter placed them. The chain starts at the first character and snakes through every line in a zig-zag path, ending at the tail: the only character the reader can grab. When you pull the tail past its resting distance, the tension propagates backwards along the chain, popping locked nodes free one by one.

useStringPhysics.tsts
// Backwards tension cascade: unlock locked nodes when the string pulls taut
for (let i = nodes.length - 2; i >= 0; i--) {
  const a = nodes[i]  // locked candidate
  const b = nodes[i + 1]  // already loose

  const dist = Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2)

  if (a.isLocked && !b.isLocked && dist > rest + UNLOCK_THRESHOLD) {
    a.isLocked = false  // the agreement ends here
  }
}

The paragraph as material

There is something useful in watching text lose its meaning through motion. The words do not change, but once the characters stop being in the right positions, once the reading order scrambles into a pile on the floor, the semantic content evaporates. It is a reminder that meaning in typography is almost entirely about spatial arrangement. Move the letters and all you have left is texture.

We treat letters like they are glued down. They are not. They are just agreements.

wadyd

The interaction is deliberately one-directional: you can only grab the tail. You cannot pick up single characters from the middle. The unthreading has to happen in order, from the end back to the beginning. That constraint felt true to the idea: you cannot pull a sweater apart from the middle. You find the loose end, and you pull.

Share