Fluid logo

Fluid

Community
Darcos-Loft
fluid

Production-grade web motion design for React and Tailwind sites. Use when building, choosing, or reviewing animations, scroll effects, reveals, page transitions, hovers, counters, marquees, or micro-interactions. Encodes easing, timing, spring, origin, and reduced-motion rules, and ships a drop-in component library.

Overview

PublisherDarcos-Loft
Repositoryfluid
Skill namefluid
Stars
3
Forks
0
Bundled files
16
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 16 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Darcos-Loft on GitHub. Read the source before you install it.

Installation

Install the Fluid AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Darcos-Loft/fluid/tree/main/fluid
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Darcos-Loft/fluid.git /tmp/fluid
mkdir -p .claude/skills
cp -r /tmp/fluid/fluid .claude/skills/fluid
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Fluid in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Fluid on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Fluid is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Fluid

Motion that feels like an extension of the user, not decoration. This skill is a house motion language: a small set of rules that decide whether to animate and how, plus a library of components that already follow them.

The rules are distilled from years of our own production sites into one house motion language.

House craft bar: the finish reference is plrstudio.fr. Motion stays restrained and serves the content (Swiss craft, the motion only accompanies). The differentiator is the quality of each detail, not the count of effects. When in doubt, do less, and make what remains feel inevitable: signature easings, spring micro-interactions, custom SVG over stock icons, a rationed brand accent.

When to use this skill

Whenever a task involves movement on a web interface:

  • adding or changing an animation, transition, hover, or scroll effect
  • building a reveal on scroll, a rolling counter, a marquee, a smooth-scroll page
  • reviewing a UI for "why does this animation feel off"
  • starting a new site and wanting the motion baseline set correctly

First decision: does it deserve motion?

fluid loves motion, used on purpose. Animate what rewards the eye and clarifies the moment; keep instant what the user hits constantly. The aim is fluid, not busy.

Let it flow when it is occasional, teaches something, gives feedback, reveals content, or keeps space consistent (a panel returns the way it left). That is most of a marketing site: heroes, reveals, counters, hovers, section transitions.

Keep it instant when:

  • the interaction happens many times a day (menus, list rows, repeated hovers)
  • it is triggered by the keyboard or by a tool the user runs to go fast
  • it adds nothing to clarity, feedback, or spatial understanding

If you keep one line: frequent means instant, everything else gets to flow.

The rules (apply by default)

Timing

  • Frequent micro-interactions stay fast: hovers, presses, selects around 150 to 250ms. Reveals, heroes, and ambient motion can run longer (600ms and up) when deliberate.
  • Animate transform and opacity for anything that moves often (GPU-cheap, smooth). Avoid animating layout (width, height, top, margin), and prefer naming the properties over a blanket transition: all.

Easing

  • ease-out for almost everything that enters or exits. It feels responsive.
  • ease-in-out for elements that move or morph while staying on screen.
  • ease-in suits exits more than enters; for enters use ease-out.
  • linear only for marquees, hold-to-confirm, and 3D rotation.
  • Prefer the house signature curves over browser defaults: --out: cubic-bezier(0.22, 1, 0.36, 1) for enters, exits, and hovers (the default), --fr: cubic-bezier(0.27, 0, 0.51, 1) for on-screen morphs and position changes, --spring: cubic-bezier(0.34, 1.4, 0.5, 1) for a gentle overshoot. The Reveal component uses a slightly stronger expo variant cubic-bezier(0.16, 1, 0.3, 1) for large section reveals. Full set in reference/easings-and-durations.md.

Springs (anything gesture-driven or that should feel physical)

  • Think in damping and response, never in duration.
  • Default to no overshoot. Add bounce only when the motion carried momentum.
  • The house rolling counter uses stiffness 120, damping 20.

Details that separate good from great

  • Press feedback: scale(0.97) on :active, around 150ms.
  • Never animate from scale(0). Start near 0.93 so it grows, instead of materialising from nothing.
  • Make scaling origin-aware. Popovers grow from their trigger: use the library transform-origin variable (Radix, Base UI), not the center.
  • If an animation still feels wrong after fixing easing and timing, add filter: blur(2px) across the transition.
  • Do not delay repeated tooltips. Delay the first, make the rest instant.

Accessibility (non negotiable)

  • Every motion must honour prefers-reduced-motion: disable inertia and parallax, snap counters to their final value, freeze ambient canvases on the first frame. Every component here already does this. Keep it that way.

Workflow

  1. Decide if it should move at all (section above). If not, stop.
  2. Pick the smallest tool: a CSS transition for a hover or press, a scroll-linked reveal for sections, a spring for anything gesture-driven or physical.
  3. Reach for a component below before writing new motion. When you do write new motion, follow the recipes in reference/motion-craft.md.
  4. Set easing and duration from the rules. transform and opacity only.
  5. Add the reduced-motion path in the same change, not later.
  6. Review against reference/anti-patterns.md before calling it done.

Component library

Drop-in, dependency-light, all reduced-motion safe. Files in components/. Stack: React 19, framer-motion, lenis, Tailwind v4.

  • SmoothScroll + ScrollContext: one weighted Lenis instance feeding a single shared velocity and progress value to the whole page. The biggest single lever for the premium feel. lerp 0.09, duration 1.1, native fallback under reduced motion.
  • ScrollProgress: a 2px reading-progress hairline that reuses the shared progress value at zero extra scroll cost.
  • Reveal: opacity and y: 24 on scroll into view, expo-out, fires once. The default way to bring sections in.
  • Odometer: per-digit rolling counter, springs to its value on view, locale-aware grouping, tabular figures.
  • AmbientField: soft brand-tinted blobs drifting on additive blend behind a hero. Pure canvas, no deps, paused off screen, frozen under reduced motion, gradients cached.
  • Marquee (+ marquee.css): infinite linear scroll for logos or tickers, the one correct use of linear. Pauses on hover, freezes under reduced motion.

Detector (deterministic guardrail)

Run detector/detect.mjs to scan code for these anti-patterns automatically, with no API calls. It is the fast, measurable, anti-generic check.

bash
node detector/detect.mjs src          # or bun; folders or files
node detector/detect.mjs --json src   # for CI
node detector/detect.mjs --strict src # exit 1 on warnings too

It flags the motion smells above (transition: all, layout animation, ease-in, scale(0), long durations, dated bounce, missing reduced-motion) and the generic-look tells (Inter/Roboto/Arial as a primary font, the purple gradient, pure black, emoji icons, Aceternity/Magic UI/21st template signatures shipped verbatim, and the display fonts generations converge on: Space Grotesk, Geist, Plus Jakarta Sans). Suppress a line with fluid-disable-line, configure via fluid.config.json. Rules live in detector/rules.mjs, extend them as the house ruleset grows. Run it before calling any UI change done.

Reference (load when needed)

  • reference/easings-and-durations.md: the full easing map, custom curves, duration table.
  • reference/motion-craft.md: implementation recipes (text blur reveal, pointer physics, number roll, spring discipline, stagger), all reduced-motion safe. Read this when you write new motion.
  • reference/principles.md: the motion principles behind the rules, condensed.
  • reference/anti-patterns.md: the review checklist. Seed of a future deterministic detector.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Fluid AI skill do?

Production-grade web motion design for React and Tailwind sites. Use when building, choosing, or reviewing animations, scroll effects, reveals, page transitions, hovers, counters, marquees, or micro-interactions. Encodes easing, timing, spring, origin, and reduced-motion rules, and ships a drop-in component library.

Why use Fluid on TypingMind?

Because you install it once and use it with any model. Fluid is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Fluid in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Darcos-Loft/fluid/tree/main/fluid. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Fluid?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Fluid?

As many as you like. As long as a model supports skills, you can use Fluid with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Fluid AI skill free?

Yes. It is published on GitHub by Darcos-Loft under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇