Build UIs with Chakra UI components, layout primitives, and theming. Use when using Chakra UI, ChakraProvider, Box, Flex, Stack, or when the user mentions Chakra.
Install with Tessl CLI
npx tessl i github:jamesmoss/frontend-skills --skill chakra-uiOverall
score
86%
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillValidation for skill structure
Apply this skill when building or refactoring interfaces with Chakra UI (v2 or v3): layout, forms, feedback components, theming, or provider setup.
ChakraProvider, theme prop, useToast, useColorMode, and component props like colorScheme, size, variant.Provider with value (system), namespaced components (e.g. Dialog.Root, Dialog.Content), toaster API, and often next-themes for color mode. Theme is built with createSystem and tokens use { value: ... }.When editing existing code, match the version already in the project.
p, px, py, m, maxW, minH, bg, borderRadius, etc.direction, align, justify, wrap, gap (or gridGap in v2).spacing. Use Stack (column), HStack, VStack; props: spacing, align, direction.templateColumns, templateRows, gap, columnGap, rowGap.align="center" and justify="center").columns (and minChildWidth for responsive columns).Prefer Stack/HStack/VStack for linear layouts; use Flex when you need specific flex behavior; use Grid/SimpleGrid for grid layouts.
Button with colorScheme, variant (solid, outline, ghost, link), size (sm, md, lg), leftIcon/rightIcon, isLoading, isDisabled.FormControl with FormLabel, FormErrorMessage, FormHelperText. Use Input, InputGroup, InputLeftAddon for addons. isInvalid, isRequired on FormControl.Text for paragraphs; use as="span", as="p" when semantics matter. Props: fontSize, fontWeight, color, noOfLines (truncation).as="h1" … as="h6". Use size for visual scale.Badge with colorScheme, variant (solid, outline, subtle).Alert, AlertIcon, AlertTitle, AlertDescription; use status (success, error, warning, info).Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalFooter, ModalCloseButton. v3: Dialog.Root, Dialog.Trigger, Dialog.Backdrop, Dialog.Content, etc.useToast() and toast(). v3: toaster API (e.g. toast.success, toast.error).bg="gray.100", color="blue.600", borderRadius="md", shadow="sm".bg="background", color="text") keep light/dark consistent when using color mode.theme in extendTheme() and pass to ChakraProvider. v3: extend via createSystem(defaultConfig, { theme: { tokens: { ... } } }).p={[2, 4, 6]}, display={{ base: "block", md: "flex" }}.isDisabled={isLoading}, colorScheme={isError ? "red" : "blue"}.Modal, Menu, Tabs) so focus and ARIA are handled.aria-* and role when building custom interactive elements; pair with focusVisible styling.FormControl does this when used correctly).<Stack spacing={4}>
<Heading size="md">Form</Heading>
<FormControl isInvalid={!!errors.name} isRequired>
<FormLabel>Name</FormLabel>
<Input
placeholder="Name"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<FormErrorMessage>{errors.name}</FormErrorMessage>
</FormControl>
<HStack spacing={2} justify="flex-end">
<Button variant="ghost" onClick={onCancel}>Cancel</Button>
<Button colorScheme="blue" isLoading={isSubmitting} type="submit">
Submit
</Button>
</HStack>
</Stack>FormControl/labels for form fields (hurts accessibility and consistency).div + custom CSS) when Chakra layout primitives would suffice.If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.