RelayCTX Creative briefsBRIEF.interaction-motion.md
RelayCTX Creative · Document

BRIEF.interaction-motion.md — Pulse Family, Interaction Layer

855 words · 4 min View raw Source History

BRIEF.interaction-motion.md — Pulse Family, Interaction Layer

Project: relay-creative / brand motion exploration Status: exploration — nothing here is ratified until it lands in SPEC.pulse-motion.md Live lab: /brand/motion-lab.html (interactive demos of everything below) Gallery: /gallery.html (the riff wall — mastheads, animatics, eggs, motion, one room) Date: July 2026 · v3.5 neutral-first


Why

SPEC.pulse-motion.md ratified six behaviours (heartbeat, receipt flash, send burst, awaiting, arrival ring, broadcast) and gave #00D9C8 its job: motion-only, event flashes, never static, never looping on product surfaces. BRIEF.animations.md covers the produced marketing motion (Lottie/MP4 stings, deck beats, social cuts).

The gap between them is the interaction layer: how creating, copying, sending, claiming, and waiting feel inside the app. This brief proposes eight additions to the pulse family to fill it. All obey the four hard rules unchanged.

The four hard rules (carried verbatim, not renegotiated)

  1. One pulsing element per view, maximum.
  2. Product UI transitions stay ≤0.18s — pulse moments are event animations (once) or brand-surface loops, never product chrome.
  3. Everything disables under prefers-reduced-motion. The static mark must carry the brand alone.
  4. Never loop #00D9C8 on product surfaces. Looping pulses stay in system teal; #00D9C8 is reserved for event flashes.

Proposed additions (7–14)

#MomentClassBehaviourLoop?Colour lawWhere
7Code materialize.rly-materializeCharacters land top-down, 55ms stagger, 0.3s eachOncesystem tealThe moment a relay is created and its Code is minted
8Copy cascade.rly-copy-cascadeCharacters lift in a 28ms wave; one #00D9C8 underline sweepOnce#00D9C8 · eventCode copied (the most repeated act in the product)
9Claim unfold.rly-unfoldReceived card wipes open (clip-path), content lines stagger in 90ms apartOncesystem tealRelay received / context loaded
10Stream arrival.rly-stream-inItem slides in from above (0.4s out-expo); status dot carries one arrival ringOnce#00D9C8 ring · eventStream feed, new item
11Routing spinner.rly-routingMark rays chase clockwise, 1.1s, eight stepsLoopsystem teal (rule 4)Network waits over 400ms; replaces generic spinners
12Shutter toggle.rly-shutterRays open/close clockwise, 30ms steps, on a boolean settingOncesystem tealSettings that turn a signal on: notifications, nudges, visibility
13Nudge blink.rly-nudgeTwo soft border-and-dot beats, 1.1s total, then stillOnce (2 beats)system tealA nudge arrives — a tap on the shoulder, not an alarm
14In-flight travel.rly-travelCode chip crosses a dashed path through the mark; pulse-coloured while movingOnce, bounded#00D9C8 · in motionBrand surfaces + send confirmation; the lab's lifecycle hero

Timing conventions across all eight: out-quart/out-expo easing, no bounce, no elastic; exits run ~75% of entrance duration; product-layer feedback stays ≤0.18s (press weight is 0.12s at scale 0.97).

Colour-law notes

Relationship to the eggs (PR #34) and animatics

Ratification path

  1. Team plays with /brand/motion-lab.html (light + dark, desktop + mobile).
  2. Cut or amend concepts; anything kept gets its row appended to the family table in SPEC.pulse-motion.md and its keyframes added to brand/relay-pulse.css (bump to v3.5.1).
  3. Product adoption lands via relay-app tickets referencing the class names above.

Open questions


relay-creative/briefs/BRIEF.interaction-motion.md · July 2026 · exploration