A principle is unactionable.
A signature is a lookup. Every law is written as one.
MOTIONSMITH is pre-release. The template, the five commands and the fourteen laws work today. The asset pipeline and ship do not. Pre-release. Five commands work; the asset pipeline does not.
v0.1.0 — pre-release
An engine, not a template
MOTIONSMITH builds motion-led one-page sites for any vertical. An agent authors the brief; a CLI does the mechanical work, and refuses to call the build clean until four headless passes agree.
If a test can catch it, it lives in the CLI. If it needs taste, it lives in the plugin. Fourteen laws, each paid for with a shipped bug. Findings report by law ID, not by adjective. 390 × 844 and 1440 × 900, every run. Different film, different words, identical machinery. The page still reads with the bundle gone.
Every one content-driven and brand-free. The previews are real builds — eight from this page, three from the worked example, which shares nothing with it.
Arrival and thesis
0 vh
Voice and momentum
0 vh
Pinned Belief and escalation
3.9 vh
Proof and catalogue
0 vh
Pinned The spectacle beat
2.9 vh
Credibility
0 vh
Pinned Cast and range
3.4 vh
Pinned The review desk
3.6 vh
Objection handling
0 vh
The close
0 vh
Links and legal
0 vh
Scroll cost is what a pinned piece spends from the intensity budget. validate refuses a composition that goes over, and refuses two pinned pieces in a row.
Operating doctrine
001/004
A signature is a lookup. Every law is written as one.
Fourteen shipped bugs, each one now a grep signature.
So the CLI never invents copy, and never judges the film.
Not the desktop's with the motion removed.
Every figure below is enforced somewhere in the CLI rather than asserted here.
Brief 001 — voltline, ev-charging
Written as failure signatures rather than principles, because a principle is unactionable and a signature is a lookup. The audit reports findings by these IDs and nothing else useful.
The object is correct while scrolling down, then snaps to a stale position — often one it held two sections earlier — when you scroll back up, or when you land mid-page on reload. Opacity is the usual tell: the thing is visible in a section where it should be long gone.
Content jumps by exactly the height of the pinned section on refresh, on font load, or on rotation. Anchor links land in the wrong place. The section reads as a blank gap with JS disabled.
The bundle 404s, an extension blocks it, or a syntax error lands — and the page renders blank or half-empty. Worse: it looks fine to you because your cache is warm.
A headline is invisible on mobile or under reduced motion, but perfect on desktop. Or: a line renders 208% down instead of 108% and you cannot see where the extra came from.
The object is wildly off-position — hundreds of pixels adrift — and the error scales with viewport width, not with the object.
With reduced motion on, a decorative element renders as a permanent artifact — a solid line across the page, a stray marker — or a counter sits frozen at its initial value forever.
The phone build is a static document with three videos on it, or — worse — it inherits a pinned sequence and every swipe fights a scrub.
Where desktop scrubs a video by scroll, portrait plays it and drives the overlay from timeupdate. Scroll-scrubbing a video on a phone competes with the gesture the user is already making, and seeking is expensive on mobile decoders.
The marker lands correctly on the phone you tested and misses the target on every other aspect ratio. A viewBox authored for landscape stretches into nonsense in portrait.
A flying object sits on top of a price, a headline, or a button. It reads as a rendering artifact, not as art direction.
Waypoints come from a helper that measures the document. The master timeline is padded to ScrollTrigger.maxScroll so that timeline seconds and scroll pixels stay one to one.
Waypoints are subtly early or late on first load and correct after a resize. Classic tell: it is right when you are debugging and wrong for the user.
A megabyte of video downloads on first paint for a section three screens down that many visitors never reach. The trap: calling play() at boot forces the download regardless of preload, and the lazy attribute makes it look handled.
A JS bundle over roughly 120 KB gzipped for a marketing page, or a scroll handler doing work no one can see. Hover, press, disclosure and focus are CSS.
Waitlist — open
MOTIONSMITH is pre-release, and this page names the parts that are not built. The template, init, validate, sync, qa and doctor work today. The asset pipeline, ship, upgrade and the plugin's ten commands do not. Leave an address and we will write when they do.
One note when it ships. Nothing else, and no list.