Was macht uix-skill?
Erstelle UI, die gestaltet aussieht, nicht generiert. Lege das Aussehen einmal fest (DESIGN.md), baue daraus und überprüfe das Ergebnis mit Skripten.
Pfade: Alle references/-, data/- und scripts/-Pfade unten sind relativ zu dem Ordner, der diese SKILL.md enthält. Führe Skripte aus dem Benutzerprojektstammverzeichnis aus als node <dieser Ordner>/scripts/<name>.mjs. Skripte benötigen Node 22.
Befehle
| Befehl | Aufgabe |
|---|---|
/uix init | Projekt einlesen, 3 Fragen stellen, 3 Richtungen anbieten, DESIGN.md schreiben und linten. |
/uix build | Seite, Bildschirm oder Komponente aus DESIGN.md bauen, prüfen, korrigieren. Standard. |
/uix audit | Prüfungen ausführen und Bericht erstellen. Nichts bearbeiten. |
/uix polish | Die wichtigsten Audit-Probleme beheben. Logik, Routen und Textbedeutung erhalten. |
/uix motion | Bewegung prüfen oder hinzufügen, nach den 4 Fragen. |
Das Verb kann als /uix-skill <verb>, als uix <verb> oder als einfache Aufforderung („Erstelle die Einstellungsseite“, „Prüfe diesen Bildschirm“) eingehen. Ordne eine einfache Aufforderung dem nächstgelegenen Verb zu. Keine klare Übereinstimmung: build.
Harte Regeln
- DESIGN.md existiert: Lies sie zuerst und baue daraus. Überspringe die Aufnahme und Richtungen. Erfinde niemals Farben, Schriftarten oder Radien, die sie nicht definiert.
- Melde niemals „fertig“, bevor
scripts/rules.mjsund, für Web-Stacks,scripts/check.mjsausgeführt wurden. Kann eine Prüfung nicht ausgeführt werden (siehe Prüfungen), meldeunverified: <Grund>. - Maximal 2 Reparaturrunden nach einer Prüfung. Melde dann, was übrig bleibt.
- Bilder: Projekt-Assets, dann Openverse/Wikimedia mit Quellenangabe, dann CSS/SVG-Kunst. Niemals einen leeren Platzhalter.
- Nur kostenlose Werkzeuge. Keine kostenpflichtigen APIs, keine Keys.
- Bearbeite keine Dateien außerhalb des UI-Umfangs der Anfrage.
/uix auditbearbeitet nichts. - Lade nur die Dateien, die die folgenden Tabellen nennen. Lade eine Stack-Datei, außer bei
shadcnundnuxt-ui: Lade diesen Leitfaden plus den Leitfaden des Host-Frameworks.
Ausführungsreihenfolge
- Projekt einlesen: package.json, Konfiguration, vorhandene Styles, DESIGN.md,
public/oderassets/. - Stack erkennen (Tabelle unten). Seinen Leitfaden laden.
- Aufnahme. Stelle 3 Fragen zusammen in einer Nachricht: Zielgruppe, Aufgabe des Bildschirms, Tonfall. Mobile Stacks: Tonfall fragt auch „ruhige oder lebhafte Bewegung?“; notiere die Antwort als Bewegungsebene in DESIGN.md (
references/design-md.md). Überspringe alles, was der Benutzer oder das Projekt bereits beantwortet hat. - Biete 3 Richtungen aus
references/directions.mdan, die sich deutlich in Tonfall, Dichte und Farbtemperatur unterscheiden. Warte auf die Auswahl. Eine Richtung, die der Eigentümer bereits vorab gewählt hat, überspringt das Angebot. - Schreibe DESIGN.md (
references/design-md.md) und führe den Linter aus. Behebe jeden Lint-Fehler. - Wähle eine Struktur aus
references/layouts-web.md(Marketing, Inhalt) oderreferences/layouts-app.md(eingeloggte Bildschirme). - Baue den ersten Abschnitt. Echte Texte, echte Bilder, alle Komponentenzustände.
- Prüfen (siehe unten). Behebe Fehler, dann Warnungen. Maximal 2 Runden.
- Bericht.
Die Schritte 3 bis 5 gehören zu init. build verwendet eine vorhandene DESIGN.md; wenn keine vorhanden ist, führe zuerst init aus.
Vorhandene Designsysteme gewinnen
- DESIGN.md existiert: Lies sie, führe den Linter aus, baue daraus.
- Keine DESIGN.md, aber das Projekt hat eigene Tokens oder ein Theme (Tailwind-Konfiguration, CSS-Variablen, Theme-Datei):
/uix initschreibt eine DESIGN.md (im Projektstammverzeichnis) aus diesen Tokens. Biete keine neuen Richtungen an, es sei denn, der Benutzer wünscht ein neues Aussehen. - Weder noch: vollständiges
init. - Eigene Tokens bedeutet Farben, Schriftarten oder Abstände, die über die Standard-Standardwerte des Frameworks hinausgehen, in einem Tailwind v4
@theme-Block, einer Tailwind-Konfiguration, CSS-Custom-Properties oder einer Plattform-Theme-Datei. Die Standardwerte--background/--foregroundvon create-next-app zählen nicht.
Was zu laden ist
Lade nichts anderes, bis es benötigt wird.
| Wann | Laden |
|---|---|
| Jeder Build, Polish oder Audit | references/anti-slop.md, references/components-a11y.md |
init, oder jeder Schreibvorgang von DESIGN.md | references/design-md.md |
init (Anbieten von Richtungen) | references/directions.md, dann die ausgewählten Zeilen von data/fonts.csv, data/palettes.csv, data/styles.csv |
| Marketing-, Inhalts-, Katalogseite | references/layouts-web.md |
| Dashboard, Tabelle, Formular, Einstellungen, Auth | references/layouts-app.md |
Jede Bewegung, oder /uix motion | references/motion.md |
| Mobiler Build, Polish oder Audit | references/mobile-foundations.md, references/mobile-patterns.md |
| Mobile Bewegung | references/mobile-motion.md anstelle von references/motion.md |
| Mobil: App sicher ansehen, Expo Go vs. Dev-Build, Tap- und Swipe-Prüfungen | references/mobile-testing.md |
init für eine mobile App | data/mobile-styles.csv anstelle von data/styles.csv (die ausgewählten Zeilen) |
| Jeder Bildplatz | references/images.md |
| Beispielhafte DESIGN.md-Form | data/examples/ledger.md, field-notes.md oder harbor.md. Nur eine. |
| Jede Aufgabe | Eine references/stacks/<id>.md. Für shadcn oder nuxt-ui auch den Host-Leitfaden (siehe Stack-Erkennung). |
Stack-Erkennung
Erste Übereinstimmung gewinnt, von oben nach unten. Nichts passt: html-tailwind. Übereinstimmung mit exakten Abhängigkeitsnamen (next, nicht next-themes).
| Signal | Stack-ID |
|---|---|
@nuxt/ui in package.json | nuxt-ui |
components.json mit shadcn, oder @/components/ui | shadcn |
artisan-Datei oder laravel/framework in composer.json | laravel |
nuxt in package.json | nuxtjs |
next in package.json | nextjs |
@angular/core oder angular.json | angular |
astro in package.json oder astro.config.* | astro |
svelte oder @sveltejs/kit | svelte |
vue in package.json | vue |
three in package.json | threejs |
react-native oder expo in package.json | react-native |
react in package.json | react |
pubspec.yaml | flutter |
build.gradle(.kts) mit Compose (androidx.compose) | jetpack-compose |
*.xcodeproj oder Package.swift mit SwiftUI | swiftui |
*.csproj mit Avalonia | avalonia |
*.csproj mit Uno. oder Uno.WinUI | uno |
*.csproj mit Microsoft.WindowsAppSDK | winui |
*.csproj mit <UseWPF>true</UseWPF> | wpf |
*.csproj mit TargetPlatformIdentifier UAP oder Microsoft.NETCore.UniversalWindowsPlatform | uwp |
pom.xml oder build.gradle mit javafx | javafx |
| Keine der obigen | html-tailwind |
Web-IDs: angular, astro, html-tailwind, laravel, nextjs, nuxt-ui, nuxtjs, react, shadcn, svelte, threejs, vue. Der Rest sind native.
„Mobiler Stack“ bedeutet react-native, flutter, swiftui oder jetpack-compose. Deren Anfragen laden auch die mobilen Zeilen von „Was zu laden ist“.
Der spezifischere Stack gewinnt: nextjs über react, react-native über react, laravel über sein JS-Frontend.
Komponentenschicht-Stacks laden zwei Leitfäden: shadcn plus den Host-Leitfaden (nextjs, react, astro, laravel, ... erkannt durch diese Tabelle mit übersprungener shadcn-Zeile), und nuxt-ui plus nuxtjs. Jedes andere Projekt lädt einen.
Prüfungen
Aus dem Benutzerprojektstammverzeichnis. Ersetze <skill> durch den Ordner, der diese SKILL.md enthält.
node <skill>/scripts/rules.mjs [--design DESIGN.md] <pfad...>
node <skill>/scripts/check.mjs <url|datei> [--widths 375,768,1280] [--out .uix/shots] [--themes attr=v1,v2]
node <skill>/scripts/images.mjs "<abfrage>" [--count 6]
- Alle drei geben JSON aus.
rules.mjsgibt{findings, skipped}aus: minifizierte, über 1 MB große oder nicht lesbare Dateien landen inskippedmit einem Grund und sind kein Fehler.check.mjsgibt{shots, findings, notes}aus; liesnotes(z. B. ein zu früh abgefragtes Lade-Timeout oder ein fehlgeschlagener Screenshot). Exit 0: sauber. Exit 1: Fehler (Findings) (rules.mjs,check.mjs). Exit 2: Verwendungs- oder Umgebungsproblem (alle drei).images.mjsbeendet sich nur mit 0 oder 2. - Exit 2 ist niemals ein sauberes Ergebnis und zählt nicht als Reparaturrunde. Wenn
check.mjsdie Seite nicht erreichen kann und das Projekt ein offensichtliches Dev-Skript hat (npm run devusw.), starte es einmal im Hintergrund und versuche es erneut. Andernfalls frage den Benutzer. Nenne, was fehlt (Chrome, Node 22, ein nicht laufender Server). - Wenn die Prüfung immer noch nicht ausgeführt werden kann, sagt der Bericht
unverified: <Grund>. - Web-Stacks: Führe
rules.mjsauf dem Quellcode aus, danncheck.mjsauf der Dev-Server-URL oder der Build-Datei. Breiten sind 375, 768 und 1280. Screenshots landen in.uix/shots:<w>.pngist die gesamte Seite, und<w>-<n>.pngsind Kacheln von maximal 1600 px. Betrachte die Kacheln, nicht das gesamte Bild; dieses wird auf unlesbare Größe verkleinert.check.mjsscrollt die Seite zuerst, damit Inhalte, die beim Scrollen erscheinen, sichtbar sind. - Wenn das Projekt mehrere Themes definiert (
[data-theme],[data-skin],.dark), übergib sie mit--themes, z. B.--themes data-skin=oatmeal,roseoder--themes class=dark. Jedes Theme wird bei der letzten Breite geprüft; seine Findings enthaltentheme. - Kontrast-Fundstücke werden pro Farbpaar gruppiert (
count,sample,selectors). Korrigiere das Token, nicht jedes Element. - React Native (Expo): Führe
rules.mjsaus, dannnode <skill>/scripts/check-mobile.mjs --app exp://127.0.0.1:<port>gegen einen laufenden Metro-Server; füge--platform androidfür Android-Emulatoren hinzu (Flags und die Routen-Datei befinden sich im Stack-Leitfaden). Es gibt{shots, findings, notes}aus und beendet sich mit 0, 1 oder 2 wiecheck.mjs. Ein Hinweis, der mitmaestro missing:beginnt, bedeutet, dass Hierarchie und Fluss nicht ausgeführt wurden; melde es alsunverified: <Grund>, nicht als erfolgreichen Lauf. Aufnahmen landen in.uix/mobile-shots. Ein Fundstückroute-not-navigatedist ein Fehler und niemals ein sauberes Ergebnis: Der Screenshot zeigt einen anderen Bildschirm. Reparaturschleife: Überprüfe erneut mit--only <routen>und einem--devices-Eintrag, nicht der gesamten Matrix. - Andere mobile Stacks: Führe
rules.mjsaus. Native iOS-Apps (SwiftUI) verwenden danncheck-mobile.mjs --native(Flags im Stack-Leitfaden); bei einem Audit übergib--out "$(mktemp -d)". Andere verwenden das manuelle Screenshot-Rezept in der Stack-Datei unter „How to check“ (hell, dunkel,xxxl-Text). Kein Simulator verfügbar:unverified: <Grund>. Die 2-Runden-Begrenzung gilt. - Andere native Stacks: Führe
rules.mjsaus, dann die manuelle Checkliste in der Stack-Datei unter „How to check“. Es gibt keine Browser-Prüfung. - Behebe
error-Fundstücke vorwarn. Eine Warnung, die du behältst, benötigt einen einzeiligen Grund. - Reparaturschleife: Prüfen, korrigieren, erneut prüfen. Maximal 2 Runden. Dann anhalten und berichten.
- Regel-IDs und ihre Korrekturen befinden sich in
references/anti-slop.md. Es listet auch Beurteilungsregeln auf, die kein Skript abfängt; überprüfe diese selbst.
Befehlsverträge
init
- Projekt einlesen, Stack erkennen, seinen Leitfaden laden.
- Vorhandene Tokens oder DESIGN.md: Siehe „Vorhandene Designsysteme gewinnen“.
- Andernfalls die 3 Fragen stellen, 3 klar unterschiedliche Richtungen anbieten, warten.
Jeder Stack: Erkenne die Inhaltssprache (
lang, i18n-Dateien, Text) und wähle nurdata/fonts.csv-Zeilen aus, derenscripts-Spalte sie abdeckt. - DESIGN.md schreiben. Linten:
npx --yes @google/[email protected] lint DESIGN.md. Fehler beheben. - Berichte die gewählte Richtung, die geschriebenen Dateien und das Lint-Ergebnis.
build
- DESIGN.md, den Stack-Leitfaden und die Layout-Datei lesen.
- Eine Struktur auswählen. Sage in einer Zeile, welche und warum.
- Den ersten Abschnitt vollständig bauen. Dann den Rest.
- Die Prüfungen ausführen. In maximal 2 Runden korrigieren.
- Berichten.
audit
- Stack erkennen und seinen Leitfaden laden.
- Die Prüfungen ausführen. Die Beurteilungsregeln überprüfen. Übergib
--out "$(mktemp -d)"ancheck.mjsund auch ancheck-mobile.mjs, damit Audit nichts in das Projekt schreibt. - Eine Tabelle ausgeben. Nichts bearbeiten.
| Vorher | Nachher | Grund |
|---|---|---|
| was jetzt da ist | was sein sollte | die Regel-ID oder Begründung |
polish
- Stack erkennen und seinen Leitfaden laden.
- Zuerst ein Audit ausführen.
- Die wichtigsten Probleme beheben, zuerst Fehler. Logik, Routen und Textbedeutung nicht ändern.
- Die Prüfungen erneut ausführen. Maximal 2 Runden. Berichten.
motion
- Lade
references/motion.md(Mobile Stacks:references/mobile-motion.md). Beantworte seine 4 Fragen schriftlich für jede Animation: benötigt, was sie kommuniziert, welche Beschleunigung, wie lange. - Entferne jede Animation ohne klare Antwort. Füge
prefers-reduced-motion-Behandlung hinzu (der Stack-Leitfaden nennt das native Äquivalent). - Gib eine Tabelle Vorher / Nachher / Grund aus. Wende die Änderung nur an, wenn der Benutzer darum gebeten hat, Bewegung hinzuzufügen oder zu korrigieren, nicht zur Überprüfung.
Bericht
Beende jede Ausführung mit:
- Was sich geändert hat (Dateien).
- Fundstücke, die verbleiben, jeweils mit Regel-ID und Grund.
- Screenshot- und Kachelpfade in
.uix/shots(Web), Aufnahmepfade in.uix/mobile-shots(Mobil) oder die durchgeführten manuellen Prüfungen (andere native). - Hinzugefügte Bildquellenangaben.