Make Interfaces Feel Better
samuelclay/NewsBlur
Design engineering principles for making interfaces feel polished.
Design engineering principles for making interfaces feel polished.
$ npx skills add trycompai/crm --skill better-ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install trycompai/crm better-ui --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/better-ui .claude/skills/better-ui && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .claude/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/trycompai/crm/tree/release/.agents/skills/better-uiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add trycompai/crm --skill better-ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install trycompai/crm better-ui --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/better-ui .agents/skills/better-ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .agents/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add trycompai/crm --skill better-ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install trycompai/crm better-ui --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/better-ui .cursor/skills/better-ui && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .cursor/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/trycompai/crm.git --path .agents/skills/better-ui--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add trycompai/crm --skill better-ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install trycompai/crm better-ui --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/better-ui .gemini/skills/better-ui && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .gemini/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install trycompai/crm better-uiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add trycompai/crm --skill better-ui -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/better-ui .github/skills/better-ui && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .github/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add trycompai/crm --skill better-ui -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install trycompai/crm better-ui --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trycompai/crm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/better-ui .opencode/skills/better-ui && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "better-ui" agent skill from https://github.com/trycompai/crm/tree/release/.agents/skills/better-ui into .opencode/skills/better-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "better-ui", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
better-uiDesign engineering principles for making interfaces feel polished.
Better UI is an agent skill from trycompai/crm. Design engineering principles for making interfaces feel polished. Use when building UI components, reviewing frontend code, implementing animations, hover states, shadows, borders, micro-interactions, enter/exit animations, choosing or reviewing icons, or any visual detail work. Triggers on UI polish, design details, "make it feel better", "feels off", stagger animations, border radius, optical alignment, image outlines, box shadows, icons, icon stroke weight, icon states, motion restraint.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files (for example `agents/openai.yaml`, `animations.md` and `icons.md`).
It sits in Frontend & Design, covering Web animation and motion and UI design. The repository describes itself as: Comp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6d4793d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Better UI loads about 2.4k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 1,230 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from trycompai/crm at commit 6d4793d, republished under its MIT licence (© trycompai). 1,230 words, ~2,409 tokens.
.claude/skills/better-ui/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Great interfaces rarely come from a single thing. It's usually a collection of small details that compound into a great experience. Apply these principles when building or reviewing UI code.
When reviewing, slow the interface down: replay motion at 10% speed in the browser's Animations panel and walk every state: hover, focus, active, loading, empty. What feels off at 10% speed is what's subtly wrong at full speed.
Preserve the project's component library, tokens, and density. Match its established motion language except where a principle below prescribes an exact interaction pattern.
Typography (text wrapping, font rendering, tabular numbers, spacing) is covered by the better-typography skill; use that for anything text-related. Accessibility (hit areas, focus states, keyboard support, ARIA, reduced motion) is covered by the better-accessibility skill. Layout structure (grouping, spacing between sections, breakpoints, spatial RTL) is covered by the better-layout skill.
| Category | When to Use |
|---|---|
| Surfaces | Border radius, optical alignment, shadows, image outlines |
| Animations | Interruptible animations, enter/exit transitions, icon animations, scale on press, motion restraint |
| Icons | Icon stroke weight, states via currentColor, outline vs fill, sizing, RTL flipping |
| Performance | Transition specificity, will-change usage |
Outer radius = inner radius + padding. Mismatched radii on nested elements is the most common thing that makes interfaces feel off.
When geometric centering looks off, align optically. Buttons with icons, play triangles, and asymmetric icons all need manual adjustment.
For buttons, cards, and containers whose border exists only to create depth, prefer layered transparent box-shadow values. Keep borders that communicate structure or state: dividers, layout separators, and selected or focus states.
Use CSS transitions for interactive state changes: they can be interrupted mid-animation. Reserve keyframes for staged sequences that run once.
For an infrequent staged entrance where sequence helps communicate hierarchy, break content into semantic chunks and stagger them by ~100ms instead of animating one container. Do not stagger routine, high-frequency interactions.
Use a small fixed translateY instead of full height. Exits should be softer than enters. Use ease-out for both enter and exit transitions.
Animate icons with opacity, scale, and blur instead of toggling visibility. Use exactly these values: scale from 0.25 to 1, opacity from 0 to 1, blur from 4px to 0px. If the project has motion or framer-motion in package.json, match that package's import path (or the established nearby imports when both exist) and use transition: { type: "spring", duration: 0.3, bounce: 0 }; bounce must always be 0. If no motion library is installed, keep both icons in the DOM (one absolute-positioned) and cross-fade with CSS transitions using cubic-bezier(0.2, 0, 0, 1); this gives both enter and exit animations without any dependency.
Add a subtle 1px outline with low opacity to images for consistent depth. The color must be pure black in light mode (oklch(0 0 0 / 0.1)) and pure white in dark mode (oklch(1 0 0 / 0.1)), never a near-black like slate, zinc, or any tinted neutral. A tinted outline picks up the surface color underneath it and reads as dirt on the image edge.
A subtle scale(0.96) on click gives buttons tactile feedback. Always use 0.96. Never use a value smaller than 0.95: anything below feels exaggerated. Add a static prop to disable it when motion would be distracting.
Use initial={false} on AnimatePresence to prevent enter animations on first render. Verify it doesn't break intentional entrance animations.
transition: allAlways specify exact properties: transition-property: scale, opacity. Tailwind's transition-transform covers transform, translate, scale, rotate.
will-change SparinglyOnly for transform, opacity, filter, the properties the GPU can composite. Never use will-change: all. Only add when you notice first-frame stutter.
An icon next to text carries the text's optical weight: 1.5px stroke beside regular (400) text, 2px beside semibold (600). One stroke weight per icon set; never mix libraries on one surface.
Icons use currentColor and get their states (hover, selected, disabled) from CSS color and opacity, never from separate assets. Outline variant is the default; fill variant marks the active state.
No custom animation on high-frequency interactions: the attention cost repeats on every trigger. Motion is never the only feedback channel; every animated state change also needs a static cue (color, icon, label).
| Mistake | Fix |
|---|---|
| Same border radius on closely nested parent and child | Calculate outerRadius = innerRadius + padding |
| Icons look off-center | Adjust optically with padding or fix SVG directly |
| Border used only to fake elevation | Use layered box-shadow with transparency; keep structural and state borders |
| Jarring staged entrance or contextual exit | Stagger infrequent entrances and keep context-preserving exits subtle |
| Stateful icon or toggle animates its default state on page load | Add initial={false} to that AnimatePresence; preserve intentional page entrances |
transition: all on elements | Specify exact properties |
| First-frame animation stutter | Add will-change: transform (sparingly) |
| Hairline icon beside bold text | Match the stroke width to the text weight |
| Separate icon assets per state | One currentColor SVG, states via CSS |
| Filled icons everywhere | Outline as default, fill only for the active state |
| Entrance animation on every hover or keystroke | Instant feedback or ≤150ms opacity/color transition |
Use this format only when the user asks for a standalone UI-polish review. When better-interface orchestrates the review, provide domain evidence and findings to that skill and let its output format, severity scale, consolidation rules, cap, and verdict take precedence.
Present the standalone review in two parts.
Group all confirmed findings by principle. Use a markdown table with Severity, Location, Before, After, and Why columns. Never use separate "Before:" / "After:" lines.
HIGH makes an interaction misleading, unresponsive, or repeatedly disruptive; MEDIUM creates a noticeable craft or consistency problem; LOW is isolated polish.path/to/file:line. If the artifact has no source files, cite the exact screen and component instead.Consolidate a repeated systemic issue into one row and list every affected location. Omit principles with no findings.
| Severity | Location | Before | After | Why |
|---|---|---|---|---|
| LOW | src/Card.tsx:28 | rounded-xl on card + rounded-xl on inner button (p-2) | rounded-2xl on card (8 + 8 = 16), rounded-lg on inner button | Nested corners should be concentric |
| LOW | src/card.css:11 | border-radius: 16px on both nested surfaces | Outer 24px, inner 16px with 8px padding | Equal nested radii make the inner surface look pinched |
| Severity | Location | Before | After | Why |
|---|---|---|---|---|
| LOW | src/Button.tsx:19 | <button className="..."> | Add active:scale-[0.96] transition-transform | Press feedback makes the control feel responsive |
| MEDIUM | src/button.css:24 | scale(0.9) on press | Raise to scale(0.96) | Anything below 0.95 feels exaggerated |
After the findings:
Block if any HIGH finding remains, Needs changes if only MEDIUM or LOW findings remain, and Approve only when no actionable findings remain.When there are no findings, omit the tables, state "No actionable UI-polish findings", report verification, and end with Approve.
© trycompai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in .agents/skills/better-ui of trycompai/crm.
Open the folder on GitHubat commit 6d4793d
Better UI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Better UI this skilltrycompai/crm | 11k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Make Interfaces Feel Bettersamuelclay/NewsBlur | 7.6k | 10 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Baseline UIibelick/ui-skills | 9.4k | 8 repos | ~855 | Automated safety check: Pass | MIT | |
| Apple Liquid Glass Designnaplesblue/apple-design-skill | 266 | — | ~2.3k | Automated safety check: Pass | MIT | |
| UI UX Pro MaxOhh-889/skyroc | 795 | 6 repos | ~14k | Automated safety check: Pass | MIT | |
| Antigravity Design Expertsickn33/agentic-awesome-skills | 47k | 2 repos | ~868 | Automated safety check: Pass | MIT |
samuelclay/NewsBlur
Design engineering principles for making interfaces feel polished.
ibelick/ui-skills
Applies a fixed set of UI rules for stack, components, interaction, animation, typography and layout, or reviews a file against them with concrete fixes.
naplesblue/apple-design-skill
Sets design rules for web interfaces that should feel like current Apple design: unified surfaces, restrained type and glass only where layers overlap.
Ohh-889/skyroc
UI/UX design intelligence for web, mobile, and desktop. An agent skill from Ohh-889/skyroc.
sickn33/agentic-awesome-skills
Core UI/UX engineering skill for building highly interactive, spatial, weightless, and glassmorphism-based web interfaces using GSAP and 3D CSS.
iurysza/module-graph
Design engineering principles for making interfaces feel polished.
trycompai/crm
Install and configure the anti-slop Oxlint plugin in a local TypeScript or JavaScript repository.
trycompai/crm
nuqs (type-safe URL query state) best practices for Next.js and other React frameworks.
trycompai/crm
Build end-to-end type-safe tRPC APIs inside NestJS using the nestjs-trpc adapter — @Router/@Query/@Mutation/@Subscription decorators, TRPCModule.forRoot, injectable middlewares and context, Zod…
trycompai/crm
Accessibility engineering for product interfaces, from focus states and keyboard support to ARIA, forms, and screen readers.
trycompai/crm
OKLCH color space and color usage for web projects. An agent skill from trycompai/crm.
trycompai/crm
Web typography from choosing fonts to spacing, wrapping and accessibility.
Categories
Design engineering principles for making interfaces feel polished. Better UI is an agent skill from trycompai/crm. Design engineering principles for making interfaces feel polished.
Better UI fits situations like: building UI components; reviewing frontend code; implementing animations; micro-interactions.
Run `npx skills add trycompai/crm --skill better-ui -a claude-code`. Or copy the skill folder (.agents/skills/better-ui in trycompai/crm) into .claude/skills/better-ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add trycompai/crm --skill better-ui -a codex`. Or copy the skill folder (.agents/skills/better-ui in trycompai/crm) into .agents/skills/better-ui in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add trycompai/crm --skill better-ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/better-ui, .gemini/skills/better-ui, .github/skills/better-ui and .opencode/skills/better-ui in your project.
SKILL.md names no scripts, command-line tools or credentials: Better UI is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Better UI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Better UI: Make Interfaces Feel Better (samuelclay/NewsBlur, 7.6k stars), Baseline UI (ibelick/ui-skills, 9.4k stars), Apple Liquid Glass Design (naplesblue/apple-design-skill, 266 stars) and UI UX Pro Max (Ohh-889/skyroc, 795 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
trycompai (a GitHub organization) maintains it in trycompai/crm, which has 11,109 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on September 11, 2026.
Source: trycompai/crm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.