agentleFS
RaillyRailly/tinte/CLAUDE.md

tinte

CLAUDE.md624 starsChanged 3 months agoMITView on GitHub

Generate, compile, install, and preview design systems from one source of truth. Compatible with shadcn/cli v4 presets and registries. Continuous Scale: bg → bg-2 → ui → ui-2 → ui-3 → tx-3 → tx-2 → tx Token Meanings: Editors: shadcn/ui, VS Code Terminals: Alacritty, Kitty, Warp, Windows Terminal Design Tools: GIMP, Slack All providers have rich visual previews using actual theme data.

  • In this repository2 other files it gives its agents.

The file

Show its rules and text

We split this CLAUDE.md into the rules it gives an agent

92 rules. About 0 are common, 57 are distinctive, and 35 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈57

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 35

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    All providers have rich visual previews using actual theme data.

    line 87
  2. Distinctive:

    All previews use real converted theme data

    line 124
  3. Distinctive:

    No comments unless requested

    line 131
  4. Distinctive:

    Test all format conversions (Rayso ↔ TweakCN ↔ VS Code ↔ shadcn)

    line 142
  5. Distinctive:

    Verify WCAG contrast ratios

    line 143
  6. Distinctive:

    Test light/dark mode switching

    line 144
  7. Distinctive:

    No infinite loops or circular dependencies

    line 152
  8. Distinctive:

    MUST: Full keyboard support per WAI-ARIA APG

    line 170
  9. Very specific:

    MUST: Visible focus rings (:focus-visible.

    line 171
  10. Distinctive:

    MUST: Manage focus (trap, move, and return) per APG patterns

    line 172
  11. Distinctive:

    MUST: Hit target ≥24px (mobile ≥44px) If visual <24px, expand hit area

    line 174
  12. Very specific:

    MUST: Mobile <input> font-size ≥16px or set:

    line 175
  13. Distinctive:

    NEVER: Disable browser zoom

    line 182
  14. Very specific:

    MUST: touch-action: manipulation to prevent double-tap zoom.

    line 183
  15. Distinctive:

    MUST: Hydration-safe inputs (no lost focus/value)

    line 185
  16. Very specific:

    NEVER: Block paste in <input>/<textarea>

    line 186
  17. Distinctive:

    MUST: Loading buttons show spinner and keep original label

    line 187
  18. Very specific:

    MUST: Enter submits focused text input In <textarea>, ⌘/Ctrl+Enter submits.

    line 188
  19. Distinctive:

    MUST: Keep submit enabled until request starts.

    line 189
  20. Distinctive:

    MUST: Don’t block typing; accept free text and validate after

    line 190
  21. Distinctive:

    MUST: Allow submitting incomplete forms to surface validation

    line 191
  22. Distinctive:

    MUST: Errors inline next to fields.

    line 192
  23. Very specific:

    MUST: autocomplete + meaningful name.

    line 193
  24. Very specific:

    SHOULD: Disable spellcheck for emails/codes/usernames

    line 194
  25. Very specific:

    SHOULD: Placeholders end with ellipsis and show example pattern (eg, +1 (123) 456-7890, sk-012345…)

    line 195
  26. Distinctive:

    MUST: Warn on unsaved changes before navigation

    line 196
  27. Distinctive:

    MUST: Compatible with password managers & 2FA.

    line 197
  28. Distinctive:

    MUST: Trim values to handle text expansion trailing spaces

    line 198
  29. Distinctive:

    MUST: No dead zones on checkboxes/radios.

    line 199
  30. Very specific:

    MUST: URL reflects state (deep-link filters/tabs/pagination/expanded panels) Prefer libs like nuqs

    line 201
  31. Distinctive:

    MUST: Back/Forward restores scroll

    line 202
  32. Very specific:

    MUST: Links are links—use <a>/<Link> for navigation (support Cmd/Ctrl/middle-click)

    line 203
  33. Distinctive:

    SHOULD: Optimistic UI; reconcile on response.

    line 205
  34. Distinctive:

    MUST: Confirm destructive actions or provide Undo window

    line 206
  35. Very specific:

    MUST: Use polite aria-live for toasts/inline validation

    line 207
  36. Very specific:

    SHOULD: Ellipsis (…) for options that open follow-ups (eg, “Rename…”)

    line 208
  37. Distinctive:

    MUST: Design forgiving interactions (generous targets, clear affordances.

    line 210
  38. Distinctive:

    MUST: Delay first tooltip in a group.

    line 211
  39. Very specific:

    MUST: Intentional overscroll-behavior: contain in modals/drawers

    line 212
  40. Very specific:

    MUST: During drag, disable text selection and set inert on dragged element/containers

    line 213
  41. Distinctive:

    MUST: No “dead-looking” interactive zones—if it looks clickable, it is

    line 214
  42. Distinctive:

    SHOULD: Autofocus on desktop when there’s a single primary input.

    line 216
  43. Very specific:

    MUST: Honor prefers-reduced-motion (provide reduced variant)

    line 220
  44. Distinctive:

    SHOULD: Prefer CSS > Web Animations API > JS libraries

    line 221
  45. Very specific:

    MUST: Animate compositor-friendly props (transform, opacity).

    line 222
  46. Distinctive:

    SHOULD: Animate only to clarify cause/effect or add deliberate delight

    line 223
  47. Very specific:

    SHOULD: Choose easing to match the change (size/distance/trigger)

    line 224
  48. Distinctive:

    MUST: Animations are interruptible and input-driven (avoid autoplay)

    line 225
  49. Very specific:

    MUST: Correct transform-origin (motion starts where it “physically” should)

    line 226
  50. Distinctive:

    SHOULD: Optical alignment.

    line 230
  51. Very specific:

    MUST: Deliberate alignment to grid/baseline/edges/optical centers—no accidental placement

    line 231
  52. Very specific:

    SHOULD: Balance icon/text lockups (stroke/weight/size/spacing/color)

    line 232
  53. Distinctive:

    MUST: Verify mobile, laptop, ultra-wide (simulate ultra-wide at 50% zoom)

    line 233
  54. Distinctive:

    MUST: Respect safe areas (use env(safe-area-inset-\*))

    line 234
  55. Distinctive:

    MUST: Avoid unwanted scrollbars.

    line 235
  56. Distinctive:

    SHOULD: Inline help first.

    line 239
  57. Distinctive:

    MUST: Skeletons mirror final content to avoid layout shift

    line 240
  58. Very specific:

    MUST: <title> matches current context

    line 241
  59. Distinctive:

    MUST: No dead ends; always offer next step/recovery

    line 242
  60. Very specific:

    MUST: Design empty/sparse/dense/error states

    line 243
  61. Distinctive:

    SHOULD: Curly quotes (“ ”).

    line 244
  62. Very specific:

    MUST: Tabular numbers for comparisons (font-variant-numeric: tabular-nums or a mono like Geist Mono)

    line 245
  63. Distinctive:

    MUST: Redundant status cues (not color-only).

    line 246
  64. Distinctive:

    MUST: Don’t ship the schema—visuals may omit labels but accessible names still exist

    line 247
  65. Very specific:

    MUST: Use the ellipsis character … (not ``)

    line 248
  66. Very specific:

    MUST: scroll-margin-top on headings for anchored links.

    line 249
  67. Very specific:

    MUST: Resilient to user-generated content (short/avg/very long)

    line 250
  68. Very specific:

    MUST: Locale-aware dates/times/numbers/currency

    line 251
  69. Very specific:

    MUST: Accurate names (aria-label), decorative elements aria-hidden, verify in the Accessibility Tree

    line 252
  70. Very specific:

    MUST: Icon-only buttons have descriptive aria-label

    line 253
  71. Very specific:

    MUST: Prefer native semantics (button, a, label, table) before ARIA

    line 254
  72. Distinctive:

    SHOULD: Right-clicking the nav logo surfaces brand assets

    line 255
  73. Very specific:

    MUST: Use non-breaking spaces to glue terms: 10&nbsp;MB, ⌘&nbsp;+&nbsp;K, Vercel&nbsp;SDK

    line 256
  74. Distinctive:

    SHOULD: Test iOS Low Power Mode and macOS Safari

    line 260
  75. Distinctive:

    MUST: Measure reliably (disable extensions that skew runtime)

    line 261
  76. Distinctive:

    MUST: Track and minimize re-renders (React DevTools/React Scan)

    line 262
  77. Distinctive:

    MUST: Profile with CPU/network throttling

    line 263
  78. Distinctive:

    MUST: Batch layout reads/writes.

    line 264
  79. Very specific:

    MUST: Mutations (POST/PATCH/DELETE) target <500 ms

    line 265
  80. Distinctive:

    SHOULD: Prefer uncontrolled inputs.

    line 266
  81. Very specific:

    MUST: Virtualize large lists (eg, virtua)

    line 267
  82. Distinctive:

    MUST: Preload only above-the-fold images.

    line 268
  83. Distinctive:

    MUST: Prevent CLS from images (explicit dimensions or reserved space)

    line 269
  84. Distinctive:

    SHOULD: Layered shadows (ambient + direct)

    line 273
  85. Distinctive:

    SHOULD: Crisp edges via semi-transparent borders + shadows

    line 274
  86. Distinctive:

    SHOULD: Nested radii: child ≤ parent.

    line 275
  87. Very specific:

    SHOULD: Hue consistency: tint borders/shadows/text toward bg hue

    line 276
  88. Distinctive:

    MUST: Accessible charts (color-blind-friendly palettes)

    line 277
  89. Distinctive:

    MUST: Meet contrast—prefer APCA over WCAG 2

    line 278
  90. Very specific:

    MUST: Increase contrast on :hover/:active/:focus

    line 279
  91. Distinctive:

    SHOULD: Match browser UI to bg

    line 280
  92. Distinctive:

    SHOULD: Avoid gradient banding (use masks when needed)

    line 281

≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md 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
CLAUDE.md

Tinte - Agent-Native Design System Infrastructure

Generate, compile, install, and preview design systems from one source of truth. Compatible with shadcn/cli v4 presets and registries.

What It Does

  • Compile theme graph to shadcn v4 registry:base + registry:font presets
  • Convert between 19+ theme formats (shadcn/ui, VS Code, terminals, design tools)
  • Generate semantic color palettes using OKLCH color space
  • Extract themes from images via Ray API
  • Live theme editing with real-time preview
  • Serve installable presets: npx shadcn@latest add https://tinte.dev/api/preset/{slug}

Tech Stack

  • Next.js 16 with TypeScript and App Router
  • Tailwind CSS + shadcn/ui for UI components
  • Culori for OKLCH color manipulation
  • Shiki + Monaco Editor for syntax highlighting
  • Zustand + nuqs for state management
  • React Context for theme state
  • Bun for package management

Architecture

Key Directories

src/
├── app/                  # Pages (workbench, experiment, bingo, vscode)
├── providers/theme.tsx   # Single theme context provider
├── components/
│   ├── shared/          # Theme components (switcher, selector, editor)
│   ├── preview/         # Provider-specific previews (vscode, shadcn, terminals)
│   └── workbench/       # Workbench components
├── hooks/               # Custom hooks (theme, monaco, shiki, workbench)
├── stores/              # Zustand stores (workbench, export)
├── lib/                 # Conversion logic and providers registry
└── types/               # TypeScript definitions

Color Philosophy - Flexoki-Inspired

Continuous Scale: bg → bg-2 → ui → ui-2 → ui-3 → tx-3 → tx-2 → tx

  • Light mode: bg (lightest) → tx (darkest)
  • Dark mode: bg (darkest) → tx (lightest)
  • OKLCH color space for perceptual consistency

Token Meanings:

  • bg/bg-2: Main/elevated surfaces
  • ui/ui-2/ui-3: Borders, hover states, active states
  • tx-3/tx-2/tx: Faint, muted, primary text
  • primary/accent/secondary: Functional colors

State Management

Theme System (Context Provider)

  • Single ThemeProvider wraps entire app
  • localStorage persistence with DOM updates
  • Zero state desync between components
  • Perfect SSR/hydration handling

Workbench (Zustand + nuqs)

  • Zustand stores: Server state (chatId, split, loading)
  • nuqs: URL state (activeTab, provider) with automatic sync
  • Zero prop drilling, zero useState/useEffect patterns
  • Perfect browser navigation support

Providers System

Type-Safe Registry

  • ThemeProvider: Basic conversion & export
  • PreviewableProvider: Adds live preview component
  • Registry-based with compile-time validation

Supported Providers

Editors: shadcn/ui, VS Code Terminals: Alacritty, Kitty, Warp, Windows Terminal Design Tools: GIMP, Slack

All providers have rich visual previews using actual theme data.

Development

Commands

bun install      # Install dependencies
bun dev          # Start development server
bun build        # Production build
bun run lint     # Lint code
bun run type-check # TypeScript validation

Key Pages

  • /workbench - Main theme editor with live preview
  • /experiment - Rayso → shadcn conversion testing
  • /bingo - TweakCN → Rayso conversion testing
  • /vscode - VS Code theme preview and export

Architecture Highlights

VS Code Preview (Optimized)

  • Modular components: monaco-preview, shiki-preview, tokens-preview
  • Custom hooks: use-monaco-editor, use-shiki-highlighter
  • Version-based caching, 50ms transitions, zero theme conflicts

Monaco + Shiki Integration

  • Perfect consistency using @shikijs/monaco
  • Identical theme structure between both systems
  • Smart initialization, no disposal conflicts

Provider Previews

  • All previews use real converted theme data
  • Dynamic light/dark mode switching
  • Type-safe integration with provider outputs
  • Performance optimized with memoization

Code Style

  • No comments unless requested
  • Semantic naming following Flexoki philosophy
  • Type safety throughout
  • Modular architecture with single responsibility
  • Custom hooks for complex logic
  • Minimal useEffect usage

Testing

Theme Conversion

  • Test all format conversions (Rayso ↔ TweakCN ↔ VS Code ↔ shadcn)
  • Verify WCAG contrast ratios
  • Test light/dark mode switching
  • Export and install themes in target applications

State Management

  • URL synchronization with browser navigation
  • Theme persistence across page refreshes
  • Component isolation with global state access
  • No infinite loops or circular dependencies

Key Features

  • Live workbench: Real-time editing with instant preview
  • Universal previews: Rich visuals for all supported providers
  • Type-safe conversions: Compile-time validation throughout
  • Performance optimized: Smart caching, minimal re-renders
  • URL state sync: Shareable URLs with preserved state
  • Provider status: Clear indicators for available vs planned providers
  • Export functionality: Download themes in multiple formats
  • Responsive design: Works on mobile and desktop

Concise rules for building accessible, fast, delightful UIs Use MUST/SHOULD/NEVER to guide decisions

Interactions

  • Keyboard
    • MUST: Full keyboard support per WAI-ARIA APG
    • MUST: Visible focus rings (:focus-visible; group with :focus-within)
    • MUST: Manage focus (trap, move, and return) per APG patterns
  • Targets & input
    • MUST: Hit target ≥24px (mobile ≥44px) If visual <24px, expand hit area
    • MUST: Mobile <input> font-size ≥16px or set:
      <meta
        name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover"
      />
    • NEVER: Disable browser zoom
    • MUST: touch-action: manipulation to prevent double-tap zoom; set -webkit-tap-highlight-color to match design
  • Inputs & forms (behavior)
    • MUST: Hydration-safe inputs (no lost focus/value)
    • NEVER: Block paste in <input>/<textarea>
    • MUST: Loading buttons show spinner and keep original label
    • MUST: Enter submits focused text input In <textarea>, ⌘/Ctrl+Enter submits; Enter adds newline
    • MUST: Keep submit enabled until request starts; then disable, show spinner, use idempotency key
    • MUST: Don’t block typing; accept free text and validate after
    • MUST: Allow submitting incomplete forms to surface validation
    • MUST: Errors inline next to fields; on submit, focus first error
    • MUST: autocomplete + meaningful name; correct type and inputmode
    • SHOULD: Disable spellcheck for emails/codes/usernames
    • SHOULD: Placeholders end with ellipsis and show example pattern (eg, +1 (123) 456-7890, sk-012345…)
    • MUST: Warn on unsaved changes before navigation
    • MUST: Compatible with password managers & 2FA; allow pasting one-time codes
    • MUST: Trim values to handle text expansion trailing spaces
    • MUST: No dead zones on checkboxes/radios; label+control share one generous hit target
  • State & navigation
    • MUST: URL reflects state (deep-link filters/tabs/pagination/expanded panels) Prefer libs like nuqs
    • MUST: Back/Forward restores scroll
    • MUST: Links are links—use <a>/<Link> for navigation (support Cmd/Ctrl/middle-click)
  • Feedback
    • SHOULD: Optimistic UI; reconcile on response; on failure show error and rollback or offer Undo
    • MUST: Confirm destructive actions or provide Undo window
    • MUST: Use polite aria-live for toasts/inline validation
    • SHOULD: Ellipsis (…) for options that open follow-ups (eg, “Rename…”)
  • Touch/drag/scroll
    • MUST: Design forgiving interactions (generous targets, clear affordances; avoid finickiness)
    • MUST: Delay first tooltip in a group; subsequent peers no delay
    • MUST: Intentional overscroll-behavior: contain in modals/drawers
    • MUST: During drag, disable text selection and set inert on dragged element/containers
    • MUST: No “dead-looking” interactive zones—if it looks clickable, it is
  • Autofocus
    • SHOULD: Autofocus on desktop when there’s a single primary input; rarely on mobile (to avoid layout shift)

Animation

  • MUST: Honor prefers-reduced-motion (provide reduced variant)
  • SHOULD: Prefer CSS > Web Animations API > JS libraries
  • MUST: Animate compositor-friendly props (transform, opacity); avoid layout/repaint props (top/left/width/height)
  • SHOULD: Animate only to clarify cause/effect or add deliberate delight
  • SHOULD: Choose easing to match the change (size/distance/trigger)
  • MUST: Animations are interruptible and input-driven (avoid autoplay)
  • MUST: Correct transform-origin (motion starts where it “physically” should)

Layout

  • SHOULD: Optical alignment; adjust by ±1px when perception beats geometry
  • MUST: Deliberate alignment to grid/baseline/edges/optical centers—no accidental placement
  • SHOULD: Balance icon/text lockups (stroke/weight/size/spacing/color)
  • MUST: Verify mobile, laptop, ultra-wide (simulate ultra-wide at 50% zoom)
  • MUST: Respect safe areas (use env(safe-area-inset-*))
  • MUST: Avoid unwanted scrollbars; fix overflows

Content & Accessibility

  • SHOULD: Inline help first; tooltips last resort
  • MUST: Skeletons mirror final content to avoid layout shift
  • MUST: <title> matches current context
  • MUST: No dead ends; always offer next step/recovery
  • MUST: Design empty/sparse/dense/error states
  • SHOULD: Curly quotes (“ ”); avoid widows/orphans
  • MUST: Tabular numbers for comparisons (font-variant-numeric: tabular-nums or a mono like Geist Mono)
  • MUST: Redundant status cues (not color-only); icons have text labels
  • MUST: Don’t ship the schema—visuals may omit labels but accessible names still exist
  • MUST: Use the ellipsis character … (not ``)
  • MUST: scroll-margin-top on headings for anchored links; include a “Skip to content” link; hierarchical <h1–h6>
  • MUST: Resilient to user-generated content (short/avg/very long)
  • MUST: Locale-aware dates/times/numbers/currency
  • MUST: Accurate names (aria-label), decorative elements aria-hidden, verify in the Accessibility Tree
  • MUST: Icon-only buttons have descriptive aria-label
  • MUST: Prefer native semantics (button, a, label, table) before ARIA
  • SHOULD: Right-clicking the nav logo surfaces brand assets
  • MUST: Use non-breaking spaces to glue terms: 10&nbsp;MB, ⌘&nbsp;+&nbsp;K, Vercel&nbsp;SDK

Performance

  • SHOULD: Test iOS Low Power Mode and macOS Safari
  • MUST: Measure reliably (disable extensions that skew runtime)
  • MUST: Track and minimize re-renders (React DevTools/React Scan)
  • MUST: Profile with CPU/network throttling
  • MUST: Batch layout reads/writes; avoid unnecessary reflows/repaints
  • MUST: Mutations (POST/PATCH/DELETE) target <500 ms
  • SHOULD: Prefer uncontrolled inputs; make controlled loops cheap (keystroke cost)
  • MUST: Virtualize large lists (eg, virtua)
  • MUST: Preload only above-the-fold images; lazy-load the rest
  • MUST: Prevent CLS from images (explicit dimensions or reserved space)

Design

  • SHOULD: Layered shadows (ambient + direct)
  • SHOULD: Crisp edges via semi-transparent borders + shadows
  • SHOULD: Nested radii: child ≤ parent; concentric
  • SHOULD: Hue consistency: tint borders/shadows/text toward bg hue
  • MUST: Accessible charts (color-blind-friendly palettes)
  • MUST: Meet contrast—prefer APCA over WCAG 2
  • MUST: Increase contrast on :hover/:active/:focus
  • SHOULD: Match browser UI to bg
  • SHOULD: Avoid gradient banding (use masks when needed)

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.