Communitygithub.com

Multi-App-Design-System

Konsolidiere mehrere Apps oder Prototypen in einer gemeinsamen Komponentenbibliothek, ohne ihr individuelles Aussehen zu vereinheitlichen. Deckt die Suche nach duplizierten lokalen Komponenten (Buttons, Selects, Felder, Modale, Pager, Toasts), die Erstellung token-gesteuerter Komponenten, Varianten-Mapping, Entscheidungen über app-spezifische Teile und die Fallstricke von tailwind-merge mit benutzerdefinierten Tokens ab.

Was ist Multi-App-Design-System?

Dieses Skill befähigt einen KI-Agenten, mehrere Anwendungen oder Prototypen unter einer gemeinsamen Komponentenbibliothek zu konsolidieren, ohne ihr individuelles Erscheinungsbild zu vereinheitlichen. Es eignet sich besonders für Szenarien, in denen verschiedene Apps eigene Versionen von Basis-Komponenten wie Buttons, Selects, Modals usw. entwickelt haben. Das Skill erklärt den Ansatz "Token-gesteuerter Komponenten", bei dem die Komponente selbst Verhalten, Markup und Zustände bereitstellt, während jedes Thema seine eigenen Messwerte über CSS-Theme-Tokens definiert. Dadurch können alle Apps einer Suite dieselben Komponenten nutzen, aber unterschiedliche Größen, Radien und andere visuelle Eigenschaften haben. Das Skill behandelt auch die schrittweise Konsolidierung pro App, von der Inventarisierung lokaler Komponenten über das Varianten-Mapping bis hin zur Entscheidung, welche Komponenten app-spezifisch bleiben sollten. Besondere Aufmerksamkeit wird den Fallstricken von `tailwind-merge` (cn()) gewidmet: Unbekannte Tokens für Abstände, Textgrößen, Schatten und Farben können zu stillen Fehlern führen. Das Skill zeigt, wie man diese Tokens über `extendTailwindMerge` registriert. Es enthält auch Hinweise zu Fokus- und Validierungsproblemen (z. B. `aria-invalid` überschreibt `focus-visible`) und zum korrekten Setzen des `type`-Attributs bei Buttons in Formularen. Zielplattformen sind React-Anwendungen mit Tailwind CSS, Radix UI und ähnlichen Stacks.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Adamparishspok/skills/tree/HEAD/skills/multi-app-design-system

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Viele Apps, ein System

Der typische Fehler: Eine Bibliothek wird für App A entwickelt, App B hat Buttons, die 4px höher und 2px runder sind, also fork App B den Button "nur dieses eine Mal". Fünf Apps später gibt es sechs Buttons, acht Selects und drei Modals, alle mit der gleichen Aufgabe.

Mache die gemeinsame Komponente token-gesteuert: Sie trägt Verhalten, Markup und Zustände, und jedes Theme liefert die Maße. Dann konsolidiere App für App.

Token-gesteuerte Komponenten

Lies jedes Maß, das zwischen Apps variiert, aus einem Theme-Token:

@theme {
  --spacing-btn-sm: 1.75rem;  --spacing-btn-px-sm: 0.625rem;
  --spacing-btn-md: 2.25rem;  --spacing-btn-px-md: 0.875rem;
  --spacing-field: 2.125rem;  /* input / select height */
  --text-label: 0.8125rem;
}
md: "h-btn-md px-btn-px-md text-sm",
icon: "size-btn-md",

Dann:

  • Eine Suite überschreibt die Tokens einmal in ihrem Theme, und jede App in der Suite erhält ihre eigenen gemessenen Controls.
  • Radius, Fills und Schatten sind bereits Tokens (rounded-field, bg-accent, --shadow-card).
  • Fülle Farben als Farbe plus eine dekorative Klasse, z. B. bg-accent accent-fill. Ein Theme, das nur die Dekoration (einen Glanz) definiert, rendert dann nie einen transparenten Button.

Siehe references/button.tsx.

Konsolidierungsdurchgang, pro App

  1. Lokale Kopien inventarisieren. Durchsuche jede App nach export function (Btn|Button|IconBtn|Select|Field|Input|Modal|Dialog|Sheet|Badge|Empty|Pager|Toast|Stat|Status|Spinner). Zähle die Aufrufstellen.

  2. Ersetzen und Löschen, wo die gemeinsame Komponente nach dem Theming passt. Ordne Variantennamen explizit zu und dokumentiere die Zuordnung:

    Lokaler NameGemeinsame Variante
    primary, navyaccent
    secondaryoutline
    quiet, softsubtle
    danger (solid)danger-solid
  3. App-spezifische Teile bleiben app-spezifisch:

    • Domain-Widgets, Diagramme und App-Chrome;
    • Controls, deren Form die Marke ist (iOS-Slabs, Carbon-Flat-Controls, 48px-Pill-CTAs);
    • Controls mit Verhalten, das die gemeinsame Komponente nicht hat (Tri-State-Checkbox, entfernbares Chips, ein "Alle"-Reset-Item, Multi-Select-Filter).

    Ein dünner Wrapper ist in Ordnung, wenn er eine Sache hinzufügt. Notiere den Grund in einem Kommentar.

  4. Entferne native <select>s und auf Menüs basierende Selects zugunsten eines einheitlichen Selects.

    • Radix Select reserviert "" als "kein Wert": Verwende einen Sentinel wie "all" und bilde ihn zurück.
    • Leite aria-labelledby und aria-describedby weiter.
    • Walkthrough-Skripte, die selectOption() aufrufen, müssen auf den Combobox klicken, dann auf die Option.
  5. Überprüfe jede App anhand ihrer eigenen Screenshots (siehe visual-regression-pass). Wirkliche Unterschiede sind meist beabsichtigt: Größen, Glanz, Press-Skalierung.

tailwind-merge Fallen (cn())

tailwind-merge kennt nur die eingebauten Maße von Tailwind. Benutzerdefinierte Tokens brechen es auf drei stille Arten:

  • Unbekannte Spacing-Tokens. cn("h-btn-md", "h-10") behält beide, da es nicht weiß, dass h-btn-md eine Höhe ist, und die Stylesheet-Reihenfolge bestimmt den Gewinner. Eine h-10 des Aufrufers geht gegen das Token verloren und ein 40px Button rendert bei 36px. Registriere Tokens: extendTailwindMerge({ extend: { theme: { spacing: ["btn-sm","btn-md","field", …] } } }).
  • Unbekannte Textgrößen. cn("text-meta", "text-ink") behandelt text-meta als Farbe und wirft es weg. Registriere Größen: theme: { text: ["meta","micro","label"] }.
  • Benutzerdefinierte Schatten und Farben. text-14 neben text-t3 oder willkürliches shadow-[var(--x)] neben einem benannten Schatten: dasselbe Problem. Wenn eine Codebasis überall eine geschlossene benutzerdefinierte Skala verwendet, verwende dort einfaches clsx.

Siehe references/cn.ts.

Fokus und Validierung

  • Ein aria-invalid:ring-* Style überschreibt focus-visible:ring-* und versteckt den Fokusring bei einem fokussierten ungültigen Feld. Schreibe aria-invalid:not-focus-visible:ring-….
  • Nackte <button>s in Formularen senden diese ab. Wenn der gemeinsame Button nicht standardmäßig `type="button"" ist, muss jede konvertierte Nicht-Submit-Aufrufstelle ihn setzen.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Adamparishspok/skills

Make a website, web app or online store ready for AI agents. Scan it with Cloudflare's Agent Readiness checks, decide which checks apply to this kind of site, ship the discovery files and headers in priority order, and add the AI-first basics the scanner does not score (server-rendered content, JSON-LD, llms.txt). Covers robots.txt AI rules, Content Signals, sitemap, Markdown for Agents (Accept text/markdown), Link headers, API catalog, OAuth discovery, auth.md, MCP server card, A2A agent card, agent skills index, WebMCP, and commerce protocols (ACP, UCP, AP2, MPP, x402). Use when making a site AI-ready, agent-ready or AI-first, or fixing an isitagentready.com or Cloudflare Agent Readiness report. Triggers on: AI ready, agent ready, AI-first, agent readiness, isitagentready, AI Crawl Control, Markdown for Agents, text/markdown, llms.txt, GPTBot, ClaudeBot, AI crawlers, Content-Signal, ai-train, api-catalog, .well-known, oauth-protected-resource, auth.md, MCP server card, agent card, agent skills, WebMCP, a...

Adamparishspok/skills

Install a complete, lean favicon set on any website or web app — the five files modern browsers, iOS and Android actually use, one block of head markup added once in the root layout, and a check that every file resolves. Covers finding the public folder per framework, generating the set from one SVG (or from a RealFaviconGenerator package), dark-mode SVG icons, maskable manifest icons, cache busting and verification. Use when adding, replacing or auditing a favicon, app icon, apple-touch-icon or web manifest. Triggers on: favicon, favicon.ico, favicon.svg, apple-touch-icon, site.webmanifest, manifest.json, app icon, PWA icon, maskable icon, tab icon, RealFaviconGenerator.

Adamparishspok/skills

Give an interface one shared tempo and a small vocabulary of hover and state micro-interactions: duration tiers (tap/pop/hover/card/layout) for CSS and Motion, swap hand-offs, rows whose highlight grows in, trailing arrows, chevron nudges, card lifts without translate, scroll-edge fades, and icon/label swaps for copy and toggle buttons. Use when animations feel inconsistent, durations are scattered magic numbers, hovers only change colour, or a product feels flat or unfinished. Triggers on: animation duration, transition timing, hover state, micro-interaction, polish, copy button feedback, menu icon to close, back arrow, card hover, scroll fade, motion tokens, Framer Motion durations.

Adamparishspok/skills

Build or migrate a UI's neutral palette (grounds, surfaces, lines, ink/text) as an OKLCH formula driven by a few inputs instead of dozens of hand-picked hex values, with light and dark themes, per-step ladder overrides, a fit script that reproduces existing colours, and a browser contrast audit. Use when creating a theme, adding dark mode, retinting a product, auditing text contrast, or consolidating several apps' palettes. Triggers on: palette, neutrals, grey ramp, dark mode, theme tokens, oklch, retint, hue, contrast audit, design tokens, Tailwind @theme colours.

Verwandte Skills