Communitygithub.com

Chakra UI Refactoring & Review

Überprüfen, konvertieren und verbessern Sie UI-Code mit Chakra UI v3. Verwenden Sie dieses Skill bei Fragen zu Chakra-Code, zur Konvertierung von HTML/CSS, Tailwind, CSS Modules oder styled-components zu Chakra oder bei Anfragen wie „ist das korrekt?“, „Review meines Components“ oder „Chakra-ify this“.

Was ist Chakra UI Refactoring & Review?

Dieses Skill unterstützt Entwickler dabei, UI-Code für Chakra UI v3 zu überprüfen, zu refaktorisieren und zu konvertieren. Es analysiert vorhandenen Code auf Barrierefreiheit, Responsivität, korrekte Chakra-API-Nutzung, Token-Verwendung und Komponentenstruktur. Das Skill gibt entweder eine strukturierte Code-Review-Kritik oder direkt umgeschriebenen Code aus. Es unterstützt die Konvertierung aus Plain HTML/CSS, Tailwind CSS, CSS Modules und styled-components und erkennt automatisch, ob der Benutzer eine reine Überprüfung, eine Refaktorisierung oder beides wünscht. Es läuft plattformunabhängig in KI-gestützten Entwicklungsumgebungen und passt sich an das verwendete Framework (Next.js, Vite, React) an. Neben der Analyse und Umwandlung werden klar formatierte, ausführbare Codeblöcke mit korrekten Importen sowie eine Zusammenfassung der wesentlichen Änderungen ausgegeben. Das Skill fragt bei unklarem Kontext nach und kommuniziert explizit getroffene Annahmen zu Beginn jeder Antwort.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/0xAlchemist-cs/personal-ui-system/tree/HEAD/.agents/skills/chakra-ui-refactor

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Chakra UI Refactoring & Review?

Sie überprüfen und verbessern UI-Code mit Chakra UI v3. Abhängig davon, was der Entwickler benötigt, erstellen Sie eine strukturierte Kritik, umgeschriebenen Code oder beides. Lesen Sie den Code und den Projektkontext vollständig, bevor Sie eine Ausgabe produzieren.


Schritt 1 — Orientieren und Absicht ermitteln

Vor jeder Ausgabe stellen Sie fest:

  • Chakra UI Version — Überprüfen Sie package.json; standardmäßig v3 verwenden
  • Framework — Next.js App Router, Pages Router, Vite, einfaches React
  • Quelltyp — vorhandenes Chakra, einfaches HTML/CSS, Tailwind, CSS Modules, styled-components
  • Was der Benutzer verlangt:
    • Nur Überprüfung — „Überprüfe dies“, „ist das korrekt/idiomatisch“, „was ist falsch?“, „Review meines Codes“ → erstellen Sie eine Kritik mit gezielten Korrekturen, keine vollständige Neuschreibung
    • Refaktorisieren / Konvertieren — „Refaktoriere dies“, „konvertiere von Tailwind“, „räume das auf“ → erstellen Sie umgeschriebenen Code
    • Beides — „Überprüfe und korrigiere“ → zuerst Kritik, dann den umgeschriebenen Code

Geben Sie Ihre Lesart am Anfang der Antwort an (z.B. „Überprüfung als vorhandener Chakra v3 Code. Nehmen Sie Next.js App Router an.“).

Wenn Code noch nicht geteilt wurde, fragen Sie danach. Überprüfen Sie keine Beschreibung von Code.


Schritt 2 — Analysieren des Codes

Arbeiten Sie den Code unabhängig vom Ausgabemodus in diesen Dimensionen durch. Bei einer Überprüfung werden daraus Erkenntnisse. Bei einer Refaktorisierung werden sie zur Checkliste, was zu korrigieren ist.

Barrierefreiheit

  • Haben alle interaktiven Elemente zugängliche Labels? (aria-label bei IconButtons, htmlFor/id bei Label+Input-Paaren, alt bei Bildern)
  • Ist die Tastaturnavigation möglich? (Fokusringe nicht unterdrückt, interaktive Elemente sind tatsächlich fokussierbar)
  • Ist die Überschriftenhierarchie sinnvoll? (keine übersprungenen Ebenen, kein h1 als Stilabkürzung)
  • Sind Formularfelder in Field.Root mit Field.Label und Field.ErrorText eingebettet?
  • Funktioniert die Komponente ohne Farbe als einziges Signal?

Responsivität

  • Geben Layoutkomponenten das Verhalten bei mehreren Breakpoints an?
  • Gibt es fest codierte Pixelwerte, wo responsive Tokens besser funktionieren würden?
  • Würde dies auf Mobilgeräten brechen? (feste Breiten, overflow: hidden auf kleinen Viewports)

Korrektheit der Chakra API

  • Werden v3-Prop-Namen verwendet? (disabled nicht isDisabled, colorPalette nicht colorScheme, gap nicht spacing, open nicht isOpen)
  • Werden zusammengesetzte Komponenten korrekt verwendet? (Field.Root/Field.Label, Dialog.Root/Dialog.Content, usw.)
  • Ist "use client" im Next.js App Router korrekt platziert?
  • Sind noch v2-Muster vorhanden? (extendTheme, ColorModeScript, useColorModeValue, sx-Prop)

Token- und Stilverwendung

  • Werden fest codierte Farben verwendet, wo semantische Tokens besser wären? (bg="#f9fafb" → bg="bg.subtle")
  • Werden rohe Hex- oder Palettenwerte anstelle von semantischen Tokens verwendet? Diese respektieren den Dark Mode nicht.
  • Gibt es Inline-style={{}}-Props, die Chakra-Style-Props sein sollten?

Komponentenstruktur

  • Gibt es unnötige Verschachtelungen? (Box > Box > Box wenn eine ausreicht)
  • Wird manuelles Spacing (mt={4} bei jedem Kind) verwendet, wo Stack gap={4} sauberer wäre?
  • Werden die richtigen Layout-Primitiven verwendet? (Flex vs. Stack vs. Grid vs. SimpleGrid)

Wartbarkeit

  • Wiederholt sich dasselbe visuelle Muster 3+ Mal? (Kandidat für eine Komponente oder ein Recipe)
  • Gibt es einmalige Style-Überschreibungen, die auf ein Recipe oder Slot-Recipe hindeuten?
  • Sind Prop-Typen / TypeScript-Typen vorhanden und korrekt?

Schritt 3a — Ausgabe der Überprüfung

Verwenden Sie dies, wenn der Benutzer eine Kritik wünscht, keine Neuschreibung.

Kategorisieren Sie Erkenntnisse nach Auswirkung:

Kritisch — Fehler und Barrierefreiheitsprobleme, die das Verhalten beeinträchtigen oder Benutzer ausschließen

  • Fehlendes aria-label bei einem Icon-Only-Button
  • Formularfeld ohne Labelzuordnung
  • Interaktive Box mit onClick aber ohne Tastaturzugriff
  • Falscher v3-Prop-Name, der stillschweigend nichts tut (isDisabled deaktiviert in v3 nicht)
  • Fehlendes "use client" bei einer Komponente, die Hooks im App Router verwendet

Verbesserungen — Korrektheits- und Qualitätsprobleme, die nicht dringend sind

  • Fest codierte Farben, die den Dark Mode brechen
  • Fehlende responsive Breakpoints
  • Unnötige Verschachtelung oder falsche Layout-Primitive
  • v2-Muster, die noch funktionieren, aber aktualisiert werden sollten

Optionale Vorschläge — nicht blockierende Ideen

  • Wiederholtes Muster in eine Komponente auslagern
  • Einmaligen Stil durch eine Recipe-Variante ersetzen
  • Fehlenden TypeScript-Typ hinzufügen

Für jedes kritische Problem und jede signifikante Verbesserung zeigen Sie einen minimalen Fix:

**Fehlendes aria-label am Schließen-Button** (Kritisch)
Der IconButton zum Schließen des Dialogs hat kein zugängliches Label.

// Vorher
<IconButton icon={<CloseIcon />} onClick={onClose} />
// Nachher
<IconButton aria-label="Dialog schließen" icon={<CloseIcon />} onClick={onClose} />

Überspringen Sie Abschnitte ohne Meldungen. Passen Sie die Länge dem Code an — eine 20-zeilige Komponente benötigt eine knappe Überprüfung, keine erschöpfende.


Schritt 3b — Ausgabe der Refaktorisierung / Konvertierung

Verwenden Sie dies, wenn der Benutzer umgeschriebenen Code wünscht.

Konvertierungsstrategie nach Quelle

Aus einfachem HTML / CSS

HTMLChakra-Äquivalent
<div> Layout-WrapperBox, Flex, Stack, Grid
<section>, <article>Box as="section", Box as="article"
<nav>Box as="nav"
<ul> / <li>Box as="ul" / Box as="li", oder Stack
<button>Button oder IconButton
<a>Link
<img>Image (alt beibehalten)
<input>, <select>Input, NativeSelect innerhalb von Field.Root
CSSChakra-Style-Prop
display: flexFlex oder display="flex"
flex-direction: columnStack oder flexDir="column"
gap: 16pxgap={4} (1 Einheit = 4px)
padding: 16px 24pxpy={4} px={6}
border-radius: 8pxrounded="md"
color: #6b7280color="fg.muted"
background: #f9fafbbg="bg.subtle"

Aus Tailwind CSS

TailwindChakra
flex, flex-col, flex-rowFlex, flexDir
gap-4gap={4}
p-4, px-6, py-2p={4}, px={6}, py={2}
text-sm, font-boldfontSize="sm", fontWeight="bold"
rounded-lg, shadow-mdrounded="lg", shadow="md"
w-full, max-w-lgw="full", maxW="lg"
hidden md:flexdisplay={{ base: "none", md: "flex" }}
grid grid-cols-3SimpleGrid columns={3}
text-gray-500, bg-gray-100color="fg.muted", bg="bg.subtle"
hover:bg-gray-100_hover={{ bg: "bg.subtle" }}

Ersetzen Sie Tailwind-Responsive-Präfixe mit Chakras Breakpoint-Objekt-Syntax:

// Tailwind: text-sm md:base lg:text-lg
<Text fontSize={{ base: "sm", md: "md", lg: "lg" }} />

Aus CSS Modules — konvertieren Sie, was möglich ist, zu Chakra-Props; behalten Sie className für Stile, die nicht als Props ausgedrückt werden können (Animationen, komplexe Selektoren):

// Vorher
<div className={styles.card}>...</div>
// Nachher — in Props konvertiert; className nur für nicht konvertierbare Stile beibehalten
<Box p={4} rounded="lg" shadow="sm" className={styles.fadeIn}>...</Box>

Sobald alle Klassennamen eliminiert sind, entfernen Sie den Import vollständig.

Aus styled-components / @emotion/styled — mappen Sie auf Box mit äquivalenten Style-Props, entfernen Sie dann den Import und deinstallieren Sie, wenn nicht mehr anderweitig verwendet:

// Vorher
const Card = styled.div`padding: 1rem; &:hover { background: #f3f4f6; }`
// Nachher
<Box p={4} _hover={{ bg: "bg.muted" }} />

Aus vorhandenem Chakra UI (Bereinigung)

  • Flachen Sie Box > Box > Box-Verschachtelungen ab; ersetzen Sie mt/mb bei jedem Kind durch Stack gap={N}
  • Ersetzen Sie sx durch css (v3-Umbenennung); aktualisieren Sie darin verschachtelte &:hover-Selektoren
  • Ersetzen Sie bg="gray.50" → bg="bg.subtle" und andere semantische Token-Äquivalente
  • Aktualisieren Sie v2-Prop-Namen: isDisabled→disabled, colorScheme→colorPalette, spacing→gap
  • Aktualisieren Sie zusammengesetzte Komponenten: FormControl→Field.Root, Modal→Dialog, Select→NativeSelect

Verhalten bewahren — nicht verhandelbar

  • Behalten Sie alle Event-Handler, State-Variablen und bedingtes Rendering exakt bei
  • Behalten Sie aria-*-Attribute; fügen Sie fehlende hinzu, wo eindeutig nötig
  • Behalten Sie die semantische HTML-Absicht (<nav> → Box as="nav", nicht nur Box)
  • Behalten Sie "use client" dort, wo es existiert; fügen Sie es nur hinzu, wenn die Komponente es wirklich benötigt
  • Fügen Sie "use client" nicht nur hinzu, weil eine Komponente Chakra UI verwendet
  • Eine teilweise konvertierte Komponente, die funktioniert, ist besser als eine vollständig konvertierte, die nicht funktioniert

asChild für Next.js Link und Image

import NextLink from "next/link"
<ChakraLink asChild><NextLink href="/about">About</NextLink></ChakraLink>

import NextImage from "next/image"
<ChakraImage asChild><NextImage src="/hero.png" alt="Hero" width={800} height={400} /></ChakraImage>

Format der Refaktorisierungsausgabe

1. Refaktorisierter Code — vollständig, ausführbar, mit korrekten Importen

2. Was sich geändert hat — präzise Liste, fokussiert auf nicht offensichtliche Entscheidungen:

- Ersetzte <div className="flex gap-4"> mit <Flex gap={4}>
- Ersetzte bg="#f9fafb" mit bg="bg.subtle" für Dark-Mode-Kompatibilität
- Formular-Submit-Handler und Validierungslogik unverändert gelassen
- aria-label zum IconButton für Schließen hinzugefügt (fehlte)

3. Vorschläge (optional) — sinnvolle Verbesserungen über diese Refaktorisierung hinaus: eine wiederverwendbare Komponente extrahieren, ein Recipe übernehmen, ein v2-Muster migrieren.


Wann fragen vs. fortfahren

Fahren Sie fort, wenn Code und Absicht klar sind. Fragen Sie, wenn:

  • Der Code noch nicht geteilt wurde
  • Die Komponente sehr groß und der Umfang unklar ist
  • Es Kontext oder Zustand gibt, den Sie nicht sehen und der die Überprüfung ändern würde
  • Es mehrdeutiges Verhalten gibt, das auf verschiedene Arten interpretiert werden könnte

Geben Sie Annahmen am Anfang der Antwort an, wenn Sie ohne Nachfrage fortfahren.

Individual skills in this repo

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

0xAlchemist-cs/personal-ui-system

Use when the user's task involves Ant Design (antd) — writing antd components, debugging antd issues, querying antd APIs/props/tokens/demos, migrating between antd versions, or analyzing antd usage in a project. Triggers on antd-related code, imports from 'antd', or explicit antd questions.

0xAlchemist-cs/personal-ui-system

Build responsive, accessible UI components and layouts using Chakra UI v3, install or configure Chakra UI in new and existing projects, and design scalable themes using tokens, semantic tokens, recipes, and slot recipes. Use this skill whenever a user asks to build, create, or generate any UI component, page, form, dashboard, navbar, card, landing section, pricing table, or layout using Chakra UI; wants to add Chakra UI to a project, set up ChakraProvider, run CLI snippets, configure color mode, or fix provider wrapping; or asks about theming — defining brand colors, design tokens, semantic tokens, dark mode values, component recipes, slot recipes, typegen, or ejecting the default theme. Trigger on any Chakra UI building, setup, or theming or charts request, however casually phrased — "add my brand colors", "make a reusable card style", "build a bar chart", "show me a line chart", "make me a login form", "build a sidebar", "add Chakra to my app".

0xAlchemist-cs/personal-ui-system

Migrate Chakra UI projects from v2 to v3, covering package changes, codemods, provider setup, color mode, prop renaming, compound components, theming, recipes, and Next.js updates. Use this skill whenever a user is upgrading Chakra UI versions, encountering breaking changes after an upgrade, converting old v2 patterns (ColorModeScript, useColorModeValue, styleConfig, extendTheme, isDisabled, colorScheme, @chakra-ui/icons, framer-motion dependency), fixing compound component patterns, or asking about differences between Chakra UI v2 and v3 — even if they don't say "migrate" or "upgrade" explicitly.

0xAlchemist-cs/personal-ui-system

Integrates Material UI with Next.js App and Pages routers using @mui/material-nextjs, Emotion cache providers, next/font, CSS layers with Tailwind/CSS Modules, Link component prop patterns, CSS theme variables SSR notes, and App Router useSearchParams + Suspense. Use when setting up or debugging MUI in a Next.js app.

Verwandte Skills