An AI can scaffold a UI in seconds, but it converges on the same look: Inter, a purple gradient, default shadcn, bouncy easings, pure black. fluid pushes the other way. It gives an agent a committed identity, a signature motion language, and a deterministic guardrail, so the work ships looking like a studio made it, not a template.
The rules and components are distilled from real production work, not from a starter kit.
Quick start
npx fluid-skills install
It detects your agent (Claude Code, Cursor, Copilot, Codex, Gemini, Windsurf, OpenCode) and drops the six skills in. Then tell your agent what to build: it loads the right skill on its own, design-system to set an identity, fluid for motion, the detector to check itself before calling anything done.
Prefer the skills registry? npx skills add Darcos-Loft/fluid works too.
On Claude Code, add it as a plugin marketplace instead: /plugin marketplace add Darcos-Loft/fluid, then /plugin install fluid@fluid.
Why fluid
Generic output is not a taste problem, it is a convergence problem. Every model reaches for the same safe defaults, so every site lands in the same place. Fixing it after the fact is slow and never quite works.
fluid fixes it at the source:
- A unique identity per project.
design-systemcommits to one palette, one type pairing, one style direction, one page shape, picked from a large curated database before it improvises. Same house DNA, different result every time. - Motion that feels intentional.
fluidis a house motion language: when to animate, which easing, how long, where the spring goes, and the reduced-motion path shipped in the same change. - A guardrail that does not rely on taste. The detector greps the code for the tells of generic work and flags them with a line number and a fix. It runs with zero dependencies and zero API calls, so it can gate CI.
What's new in v0.2
- The family grew to six skills.
redesign,brandkit,refine(a vocabulary of 20 named moves), andoutputjoinfluidanddesign-system. - The database doubled. 108 palettes, 57 type pairings, 53 style directions, plus two new libraries the
initcommits to: 14 page-layout archetypes and 10 build stacks, so generated pages vary their shape, not just their palette. - The detector reached 29 rules. New layout, look, and glassmorphism tells (numbered section markers, the hero eyebrow chip, oversized type, frosted-glass backdrop-blur) on top of the motion and generic-font checks.
See the full changelog.
The six skills
| Skill | What it does |
|---|---|
design-system |
The identity factory. From a short brief it generates a unique design system in the house DNA: tokens, a Tailwind config, a brand rules doc the agent obeys, a storybook, a spec. Picks from the database first, then commits. |
fluid |
The motion language. Easing map, durations, springs, origins, reduced-motion, plus a drop-in React component library (SmoothScroll, ScrollProgress, Reveal, Odometer, AmbientField, Marquee) and the detector. |
redesign |
Audit an existing site and ship a fresh identity, preserving content, routes, and SEO. Pairs with design-system and the detector. |
brandkit |
Generate premium reference imagery (logo concepts, palette and type boards, product mockups) for a brand. Works with any image model. |
refine |
The verb layer. A vocabulary of named moves you run on UI that already exists (typeset, colorize, animate, settle, glass, deslop, brandward, polish, and more). "Make it better" becomes precise and repeatable. |
output |
The last gate before shipping: no placeholders, every interactive state handled, the brief honestly met. |
The database
design-system does not improvise an identity from a blank page. It picks from a curated database first, the same way a studio reaches for a known-good combination, then commits to one per project. The DNA stays constant, the output varies.
| Library | Count | What it holds |
|---|---|---|
| Palettes | 108 | committed color systems across 20+ sectors and moods |
| Type pairings | 57 | distinctive display + text + mono combinations |
| Style directions | 53 | neo-brutalist, aurora mesh, claymorphism, editorial maximalism, cinematic dark, high-contrast a11y, and more |
| Page layouts | 14 | page-shape archetypes, so pages vary their silhouette instead of converging on split-hero-plus-three-cards |
| Chart types | 32 | which chart for which question, with house data-viz defaults |
| Tech stacks | 10 | one committed build stack per project type, wired to the tokens |
Plus a motion-preset library in the house easings. The lesson behind it: varying the palette is not enough, generated pages also share a shape, so the layout and stack are committed too.
The detector
A deterministic scanner for the anti-patterns the rest of the suite teaches. No API calls, no model: it reads source for motion and generic-look smells, with line numbers, severity, and a fix hint.
npx fluid-skills detect <path> # audit a folder or file
npx fluid-skills detect <path> --deep # add the DOM pass (jsdom)
npx fluid-skills detect <path> --strict # exit 1 on warnings (CI)
npx fluid-skills detect <path> --json # machine output
29 rules, zero dependencies, across two families:
- Motion smells:
transition: all, animating layout properties,ease-inon enters,scale(0), long durations, dated bounce eases, low-damping springs, plus a project-level check for a missingprefers-reduced-motionpath. - Generic-look tells: Inter/Roboto/Arial as a primary font, the cliche purple gradient, pure black, emoji used as icons, template components (Aceternity/Magic UI/21st/motion-primitives) shipped verbatim, Space Grotesk overuse, gradient text, frosted-glass backdrop-blur, justified body, tiny text, em-dash typography, crushed tracking, marketing buzzwords, numbered section markers, the hero eyebrow chip, oversized type.
--deep adds 6 DOM-aware rules the regex pass cannot see (via jsdom, opt-in so the core stays dependency-free): heading-order skips, multiple h1, cards nested in cards, repeated icon-tile feature grids, unbounded line length, and a best-effort contrast check on literal colors.
Suppress a line with fluid-disable-line, configure with fluid.config.json. Rules live in fluid/detector/rules.mjs (and deep.mjs) as plain arrays, extend them as your house ruleset grows. Exit code is 1 on an error (or any warning under --strict), so it gates CI. No npm? node fluid/detector/detect.mjs <path> runs the same engine.
The CLI
One command, three jobs. Published as fluid-skills on npm, so nothing to clone.
npx fluid-skills install # drop the 6 skills into your agent (auto-detected)
npx fluid-skills detect . # lint a project for AI-slop tells
npx fluid-skills hooks # run the detector on every edit in Claude Code
install detects the agents present in your project and copies the skills into each. hooks wires the detector into Claude Code as a non-blocking edit hook, so the slop tells surface the moment you write them, not at review time.
The pipeline
direction the aesthetic point of view
design-system a UNIQUE identity per project <- kills the generic look at the source
fluid signature motion
detector a deterministic guardrail
Works with everything
Any agent. It is a SKILL.md skill, so it loads in Claude Code, Cursor, Codex, GitHub Copilot, Gemini CLI, OpenCode, Windsurf, and any harness that reads the skills format.
Any stack. The design system is pure CSS variables (tokens.css), which work in React, Vue, Svelte, Astro, SvelteKit, or plain HTML, with a Tailwind config for Tailwind projects. The easing tokens are framework-agnostic CSS; the fluid components are React reference implementations, and the same principles (ease-out, spring damping and response, reduced-motion) translate to Vue, Svelte, SwiftUI, and Flutter. The detector scans CSS, SCSS, HTML, JSX/TSX, Vue, Svelte, and Astro.
Install
The quick start above installs the whole suite. To add one skill at a time:
npx skills add Darcos-Loft/fluid -s design-system
npx skills add Darcos-Loft/fluid -s fluid
npx skills add Darcos-Loft/fluid -s redesign
npx skills add Darcos-Loft/fluid -s brandkit
npx skills add Darcos-Loft/fluid -s refine
npx skills add Darcos-Loft/fluid -s output
Or copy a skill folder straight into your agent's skills directory (.claude/skills/, .cursor/, etc).
Example
examples/bitcoin/ is a complete design system generated by design-system: orange #f7931a + mint + gold, Cabinet Grotesk + Satoshi + JetBrains Mono, dark-first. Open storybook.html to see it. It clears the detector with no errors or warnings.
Star history
License
MIT, see LICENSE. By Paul Rolland (PLR Studio).
No comments yet
Be the first to share your take.