agentleFS
markoblogomarkoblogo/abvx-agent-skills/skills/fluid-interaction-review/SKILL.md

fluid-interaction-review

Skill16 starsChanged 5 months agoMITView on GitHub

Build or review gesture-driven web interactions such as drag, swipe, sheets, carousels, and draggable panels. Use when pointer tracking, interruption, velocity handoff, momentum projection, hysteresis, rubber-banding, spatial continuity, or motion/transparency/contrast fallbacks materially affect the interaction.

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 4 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use this only for direct-manipulation surfaces.

    line 12
  2. Distinctive:

    Prefer a mature interaction library when it already satisfies the contract.

    line 38
  3. Distinctive:

    Treat these as independent modes.

    line 42
  4. Distinctive:

    Test slow drag, fast flick, boundary overshoot, pointer cancellation, axis ambiguity, and repeated rapid input.

    line 55
  5. Distinctive:

    Test mouse/touch or faithful emulation, keyboard operation, native scrolling, and the three fallback modes.

    line 56
  6. Very specific:

    Run motion-review-gate for general purpose, frequency, timing, GPU-property, and reduced-motion checks.

    line 57

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Fluid Interaction Review

Use this only for direct-manipulation surfaces. It complements motion-review-gate; it is not a general visual-style or Apple-look preset.

Best Fit

  • drawers, sheets, swipe actions, carousels, sliders, scrubbers, and draggable panels;
  • gesture code using Pointer Events, Motion, Framer Motion, or a library with equivalent primitives;
  • reviews where a transition looks acceptable after release but feels disconnected during manipulation.

Do Not Use For

  • ordinary buttons, forms, tables, or static marketing sections;
  • adding glass, bounce, sound, or haptics as decoration;
  • replacing stable library behavior without a reproduced interaction defect;
  • imposing universal spring constants or visual styling.

Interaction Contract

  1. Continuous tracking — while dragging or swiping, the surface follows the pointer 1:1. Preserve the offset from the point where the user grabbed it; do not jump to the element center.
  2. Pointer ownership — use Pointer Events and setPointerCapture(pointerId) when implementing custom gestures so tracking survives leaving the element bounds. Release or cancel capture cleanly.
  3. Interruptibility — a moving surface can be grabbed and redirected immediately. Retarget from the current on-screen value and current velocity, not from a stale logical target. Never lock input until an animation finishes.
  4. Velocity handoff — sample a short, timestamped movement history and pass release velocity into the settling spring. Guard zero distance, sparse events, and extreme velocity.
  5. Momentum projection — when a flick can cross snap points, select the destination from a bounded projection of release velocity, then settle with the handed-off velocity. Do not choose solely from release position.
  6. Hysteresis — keep the gesture undecided until movement exceeds a small, input-appropriate threshold. Resolve axis and intent before suppressing native scrolling or committing an action.
  7. Soft boundaries — beyond a real bound, apply progressively increasing resistance. Do not hard-stop while the pointer is still moving. Clamp the final resting state to a valid target.
  8. Spatial continuity — enter and exit use the same spatial path unless product meaning requires otherwise. Popovers and panels originate from their trigger or manipulation source; reversible motion preserves direction and velocity continuity.

Prefer a mature interaction library when it already satisfies the contract. Custom physics requires focused tests and browser evidence.

Accessibility Fallbacks

Treat these as independent modes; test combinations, not only each mode alone:

  • prefers-reduced-motion: reduce: remove momentum, elastic overshoot, parallax, and large spatial travel; retain state feedback through static change or a short non-spatial fade;
  • prefers-reduced-transparency: reduce: replace translucent surfaces with a sufficiently opaque or solid surface when the browser supports the query; keep a solid default/fallback where it does not;
  • prefers-contrast: more: strengthen surface separation, focus indication, controls, and text contrast without depending on blur or transparency.

Pointer behavior must retain keyboard, focus, click/tap, cancellation, and native-scroll semantics. Visual press feedback may start on pointer-down; destructive or committed actions still follow the component's accessible activation contract.

Review Procedure

  1. Identify the gesture state machine: idle, possible, active, settling, cancelled.
  2. Trace pointer position, grab offset, timestamps, velocity, projected target, and bounds.
  3. Interrupt the interaction during settling and reverse direction.
  4. Test slow drag, fast flick, boundary overshoot, pointer cancellation, axis ambiguity, and repeated rapid input.
  5. Test mouse/touch or faithful emulation, keyboard operation, native scrolling, and the three fallback modes.
  6. Run motion-review-gate for general purpose, frequency, timing, GPU-property, and reduced-motion checks.

Required Evidence

  • browser and route/component tested;
  • input modes tested;
  • current-value interruption and reversal result;
  • velocity/projection and boundary result;
  • keyboard, focus, cancellation, and native-scroll result;
  • reduced motion, transparency, and contrast result, including unsupported-query fallback;
  • targeted automated tests, or an explicit reason they are not practical.

Source inspection or a successful build alone is insufficient interaction evidence.

Output

Return findings first:

SeverityEvidenceContract breachSmallest fix
block / high / medium / lowfile:line plus observed behaviornamed rulebounded correction

Then include:

  • Decision: Block, Needs changes, or Approve.
  • Interaction evidence: tested gesture and fallback matrix.
  • Unverified: any input, browser, accessibility mode, or device not tested.

Attribution

Adapted from Emil Kowalski's MIT-licensed apple-design skill, chiefly its direct-manipulation, interruptibility, velocity, momentum, hysteresis, resistance, spatial-consistency, and accessibility guidance. Re-shaped into a bounded ABVX web-interaction contract; it does not adopt Apple visual styling or universal physics constants.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.