Chain builder

Every machine is THINGs wired together. Pick components from the catalog, connect one THING's output port to another's input, and the planner evaluates the whole chain in dependency order — stress, twist, stored energy, and safety factors propagating from node to node. A connection is legal only when the SI dimension and the quantity kind both match (invariant 2), so a torque can never be mistaken for an energy, nor an angle for a ratio. Swap a downstream material and watch the numbers move; drive a node past its validity envelope and watch the refusal propagate — a refused value is withheld, never forwarded as a plausible wrong number (invariant 5).

This is the v1 builder: forward chains only, up to six nodes, single-branch configurations. For a fixed worked example see the chaining demo (a planetary reduction driving a torsion shaft, power conserved through the wiring).

Start from an example

Wiring a legal chain from scratch takes some knowing-what-connects-to-what. These three are built and verified — open one to load it into the builder below, then turn its knobs and watch the consequences travel. Every number keeps the citation trail (Where this comes from) and the assumptions panel you see under any chain.

0 / 6 nodes

Pick a component above and add it to begin. Wire verified THINGs together and every number keeps its citation across the chain.

Connections are type-checked

A binding is legal iff the SI dimension 7-vector and the quantity kind both match. Dimensions alone are not enough: an angle and a Poisson ratio are both dimensionless, and torque shares dimensions with energy. The verdicts below come from the same connectionLegal() the builder runs when you press Connect:

From portTo portEngine verdict
motor T — torque planetary T_s — torque legal
planetary T_out — torque shaft T — torque legal
planetary ω_c — angular velocity flywheel ω — angular velocity legal
planetary ω_c — angular velocity shaft T — torque rejected — dimension mismatch: [0,0,-1,0,0,0,0] → [2,1,-2,0,0,0,0]
planetary N_r — tooth count column K — end-fixity ratio rejected — quantity kind mismatch: count → ratio (same dimensions, different meaning)

The planner also rejects any binding that would close a feedback loop — cyclic solving is out of scope in v1 (relations are stored undirected, so a cyclic solver can be added later without rewriting THINGs). Everything here is computed in the browser from build-time-verified functions; the site remains a pure static site.