Skip to content
Back to skills

Tailwind Cleanup

ASecurity

Scan and fix Tailwind anti-patterns for movemental — hardcoded colors, arbitrary values, raw HTML bypassing shadcn/primitives, border violations, and non-semantic tokens. Enforces DESIGN.md token-first design.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added October 26, 2026
developmentgoreact

Security analysis

A100/100

Scanned October 26, 2026

npx -y skills add JoshuaShepherd/my-skills --skill tailwind-cleanup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tailwind Cleanup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tailwind Cleanup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joshuashepherd-tailwind-cleanup/badge)](https://www.skillsdirectory.com/skills/joshuashepherd-tailwind-cleanup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tailwind-cleanup
description: Scan and fix Tailwind anti-patterns for movemental — hardcoded colors, arbitrary values, raw HTML bypassing shadcn/primitives, border violations, and non-semantic tokens. Enforces DESIGN.md token-first design.
user-invocable: true
allowed-tools: Read, Grep, Glob, Edit
---

Scan and fix Tailwind anti-patterns across the movemental codebase, enforcing DESIGN.md token-first design.

Target: $ARGUMENTS

If no target is provided, scan `src/components/` and `src/app/(site)/`.

## Before Starting

1. Read `src/app/globals.css` — load the token inventory (`@theme inline` + `:root`).
2. Read `docs/design/DESIGN.md` — the authoritative design spec.
3. Read `docs/build/prompts/stitch-to-react-migration.md` §7 — the Stitch→DESIGN.md translation table.

## Scan Checklist

### 1. HARDCODED COLORS (Critical)

Search for Tailwind color utilities that bypass semantic tokens:

**Banned patterns:**
- `bg-white`, `bg-black` → `bg-card` / `bg-inverse-surface`
- `text-white` → `text-inverse-foreground` (only in midnight sections) or `text-primary-foreground`
- `text-black` → `text-foreground`
- `bg-blue-*`, `text-blue-*` → `bg-primary` / `text-primary`
- `bg-gray-*`, `text-gray-*`, `bg-slate-*`, `text-slate-*` → semantic tokens
- Arbitrary hex: `bg-[#...]`, `text-[#...]`, `border-[#...]`
- Inline rgb/hsl in className or style props

**Movemental translation table (from migration prompt §7):**

| Anti-pattern | Replace with |
|---|---|
| `bg-white`, `bg-[#ffffff]` | `bg-card` (on cards) or `bg-popover` |
| `bg-[#f7f9fb]` | `bg-background` |
| `bg-[#f0f4f7]` | `bg-section` or `bg-muted` |
| `bg-[#e1e9ee]` | `bg-elevated` or `bg-secondary` |
| `bg-[#0053db]`, `bg-blue-600` | `bg-primary` |
| `bg-[#101820]`, `bg-black` | `bg-inverse-surface` |
| `text-[#2a3439]` | `text-foreground` |
| `text-[#566166]`, `text-gray-500` | `text-muted-foreground` |
| `text-white` (on dark sections) | `text-inverse-foreground` |

**Allowed exceptions:**
- `src/components/ui/*` (shadcn primitives — do not touch)
- `src/app/globals.css` (token definitions)
- SVG `fill`/`stroke` using `currentColor`
- Opacity modifiers on semantic tokens: `bg-primary/10`, `text-inverse-foreground/55`

### 2. BORDER VIOLATIONS (Critical — DESIGN.md §3.1)

Search for decorative borders used for section separation:
- `border-b`, `border-t`, `divide-y`, `divide-x` between sections → **remove** and use tonal stacking
- Allowed: `border-border` on form inputs, `border-primary` for accent on quotes/callouts

### 3. SHADOW VIOLATIONS (High)

- `shadow-sm`, `shadow-md`, `shadow-lg`, `shadow-xl`, `shadow-2xl` → **remove** or replace with `shadow-ambient`
- Only `shadow-ambient` (defined in globals.css) or tonal stacking (Ghost Lift)

### 4. ARBITRARY VALUES (High)

- `w-[`, `h-[`, `p-[`, `m-[`, `gap-[` with pixel/rem values → use Tailwind spacing scale
- `rounded-[` → use `rounded-md` (matches `--radius: 0.375rem`)
- `text-[` with size values → use standard Tailwind scale or Display/Eyebrow primitives
- `shadow-[` → use `shadow-ambient` token

**Allowed:** `clamp()` for responsive type, `calc()` for layout math, values in `globals.css`.

### 5. RAW HTML INSTEAD OF PRIMITIVES (Medium)

Search for patterns that should use movemental primitives:
- `<section` with manual bg/padding → `<Section variant="...">` primitive
- `<div` with `max-w-*` + `mx-auto` + `px-*` → `<Container>` primitive
- Large bold headings with manual tracking → `<Display size="...">` primitive
- Uppercase small labels → `<Eyebrow>` primitive
- Long-form text blocks → `<Prose>` primitive
- Cards with shadow + rounded → `<SurfaceCard tone="...">` primitive
- Raw `<button` → `<Button>` from shadcn

### 6. DARK MODE VIOLATIONS (Medium)

- No `dark:` prefixes should exist — movemental is light-primary only
- `class="dark"` on any element → remove (midnight is via Section variant, not class toggle)
- `text-white` outside a `variant="midnight"` context → `text-inverse-foreground` inside midnight, or `text-primary-foreground` on primary backgrounds

### 7. TAILWIND V4 BEST PRACTICES (Low)

- `aspect-[4/5]` → `aspect-4/5` (canonical Tailwind v4)
- `bg-gradient-to-*` → `bg-linear-to-*` (Tailwind v4)
- Duplicate utility classes
- Conflicting utilities (`p-4 p-6`, `flex block`)
- `className` concatenation without `cn()` utility

## Fixing Protocol

1. **Fix at the source layer** — If a needed token doesn't exist, add it to `globals.css` `@theme inline` first.
2. **Never modify `src/components/ui/*`** — These are shadcn primitives.
3. **Batch similar fixes** — If the same anti-pattern appears in multiple files, fix all instances.
4. **Verify after fixing** — Run `pnpm typecheck` after changes.

## Output Format

```
## Tailwind Cleanup Report

### Summary
- Files scanned: X
- Violations found: X (Critical: X, High: X, Medium: X, Low: X)
- Auto-fixed: X
- Manual review needed: X

### Violations by Category

#### 1. HARDCODED COLORS — X violations
| File | Line | Violation | Fix |
|------|------|-----------|-----|

#### 2. BORDER VIOLATIONS — X violations
...

[Continue for all categories]

### Files Modified
- path/to/file.tsx — X fixes applied
```

## Rules

- Always scan before fixing. Present the full report first, then apply fixes.
- Group fixes by file to minimize edits.
- Do not touch `src/components/ui/*`, `globals.css` definitions, or Stitch source files in `docs/build/stitch/`.
- This is a light-primary site. There is NO global dark mode. Midnight is regional via `<Section variant="midnight">`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.