Not in the top 1,000 by GitHub stars
Guksu/suta
Reduce AI Slop in Design
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/suta/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 5fbd648c57b2
No earlier version was observed for comparison.
Verified commit 5fbd648c57b2abb5c372eef4be306da411ed3bff
git clone --filter=blob:none --no-checkout https://github.com/Guksu/suta.git .hotskills/guksu-suta && git -C .hotskills/guksu-suta checkout --detach 5fbd648c57b2abb5c372eef4be306da411ed3bff
# Copy each selected skill directory from .hotskills/guksu-suta into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/Guksu/suta.git .hotskills/guksu-suta && git -C .hotskills/guksu-suta checkout --detach 5fbd648c57b2abb5c372eef4be306da411ed3bff
# Copy each selected skill directory from .hotskills/guksu-suta into .agents/skills/<skill-name>/Heat
3.8- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- suta
skills/suta
How it works
suta
When your agent uses it
웹·React Native 앱의 UI를 만들거나 고칠 때 AI 슬롭(AI slop) — 모든 것을 감싼 카드와 제각각인 여백, 기본 파랑·연노랑을 뿌린 탁한 색, 아무 데나 붙인 transition, 레이아웃을 흔드는 애니메이션, 동작 줄이기 설정 무시, 키보드로 못 쓰는 컴포넌트처럼 AI가 만든 티가 나는 UI — 을 없앤다. 이를 막는 레이아웃·색·글꼴·문구·모션 기준과 검증된 UI 패턴 57종의 코드(모달·바텀시트·토스트·드롭다운·캐러셀·탭·폼·제스처)를 제공한다. "로그인·목록·상세·설정·채팅 화면 만들어줘, 페이지 구현, 컴포넌트 추가, 레이아웃·여백 다듬어줘, 버튼 애니메이션 넣어줘, 문구 다듬어줘, 모바일 제스처, AI 티 안 나게" 요청과 UI, landing page, screen, layout, spacing, component, modal, dropdown, toast, animation, keyboard accessibility 작업에 쓴다. 화면이 없는 백엔드·데이터·문서 작업에는 쓰지 않는다.
What it loads into context
Frontmatter
298 tokensAlways available to the agent
SKILL.md
16,824 tokensWhen the skill is activated
Reference documents
152,998 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 폴더 지도
- 작업 절차
- AI 슬롭 금지선
- 레이아웃 값
- 모션 값
- 마무리 체크리스트
- 패턴 카탈로그
- 쓰지 않는 경우·한계
Scripts executed separately
patterns/accordion/assets/Accordion.tsxpatterns/accordion/assets/accordionCore.tspatterns/bottom-nav/assets/BottomNav.tsxpatterns/bottom-nav/assets/bottomNavCore.tspatterns/bottom-sheet/assets/BottomSheet.tsxpatterns/bottom-sheet/assets/createSheetDrag.tspatterns/card-expand/assets/runCardExpand.tspatterns/card-expand/assets/useCardExpand.tspatterns/card-stack/assets/CardStack.tsxpatterns/card-stack/assets/stackLayout.tspatterns/carousel/assets/carouselCore.tspatterns/carousel/assets/createCarouselAutoplay.tspatterns/carousel/assets/useCarousel.tspatterns/cart-fly/assets/flyToTarget.tspatterns/cart-fly/assets/useCartFly.tspatterns/celebration/assets/Celebration.tsxpatterns/celebration/assets/createCelebration.tspatterns/checkbox-radio/assets/Checkbox.tsxpatterns/checkbox-radio/assets/Radio.tsxpatterns/count-up/assets/CountUp.tsxpatterns/count-up/assets/createCountUp.tspatterns/drag-to-reorder/assets/createDragReorder.tspatterns/drag-to-reorder/assets/useDragReorder.tspatterns/dropdown-menu/assets/DropdownMenu.tsxpatterns/dropdown-menu/assets/createMenu.tspatterns/dropdown-menu/assets/placeMenu.tspatterns/edge-swipe-back/assets/animateSpring.tspatterns/edge-swipe-back/assets/createEdgeSwipe.tspatterns/edge-swipe-back/assets/edgeSwipeCore.tspatterns/edge-swipe-back/assets/spring.tspatterns/edge-swipe-back/assets/useEdgeSwipeBack.tspatterns/enter-exit/assets/Presence.tsxpatterns/enter-exit/assets/createPresence.tspatterns/file-upload/assets/FileDropZone.tsxpatterns/file-upload/assets/createDropZone.tspatterns/file-upload/assets/validateFiles.tspatterns/flip-list/assets/captureFlip.tspatterns/flip-list/assets/useFlipList.tspatterns/floating-label/assets/TextField.tsxpatterns/form-shake-error/assets/ShakeField.tsxpatterns/form-shake-error/assets/shakeCore.tspatterns/glass-nav/assets/createGlassNav.tspatterns/glass-nav/assets/navScrollCore.tspatterns/glass-nav/assets/navSpyCore.tspatterns/glass-nav/assets/useGlassNav.tspatterns/glass-surface/assets/Glass.tsxpatterns/hamburger-menu/assets/HamburgerMenu.tsxpatterns/infinite-scroll/assets/createInfiniteScroll.tspatterns/infinite-scroll/assets/useInfiniteScroll.tspatterns/layout-audit/assets/audit.mjspatterns/layout-audit/assets/auditCore.tspatterns/layout-audit/assets/auditLayout.tspatterns/layout-audit/assets/layoutTokens.tspatterns/layout-principles/assets/Icon.tsxpatterns/layout-principles/assets/Illustration.tsxpatterns/layout-principles/assets/icons.tspatterns/layout-principles/assets/illustrations.tspatterns/layout-principles/assets/layoutTokens.tspatterns/layout-principles/assets/palette.tspatterns/like-pop/assets/DoubleTapArea.tsxpatterns/like-pop/assets/LikeButton.tsxpatterns/like-pop/assets/createDoubleTap.tspatterns/loading-button/assets/LoadingButton.tsxpatterns/loading-button/assets/createAsyncAction.tspatterns/loading-button/assets/useAsyncAction.tspatterns/long-press-menu/assets/LongPressMenu.tsxpatterns/long-press-menu/assets/createLongPress.tspatterns/long-press-menu/assets/placeContextMenu.tspatterns/modal-dialog/assets/Modal.tsxpatterns/motion-audit/assets/audit.mjspatterns/motion-audit/assets/auditCore.tspatterns/motion-audit/assets/auditMotion.tspatterns/motion-principles/assets/motionTokens.tspatterns/otp-input/assets/OtpInput.tsxpatterns/otp-input/assets/createOtpInput.tspatterns/otp-input/assets/shakeCore.tspatterns/page-transition/assets/runPageTransition.tspatterns/page-transition/assets/usePageStack.tspatterns/pinch-zoom/assets/PinchZoom.tsxpatterns/pinch-zoom/assets/createPinchZoom.tspatterns/pinch-zoom/assets/pinchCore.tspatterns/progress-ring/assets/ActivityRings.tsxpatterns/progress-ring/assets/ProgressRing.tsxpatterns/progress-ring/assets/ringGeometry.tspatterns/pull-to-refresh/assets/PullToRefresh.tsxpatterns/pull-to-refresh/assets/createPullToRefresh.tspatterns/quantity-stepper/assets/QuantityStepper.tsxpatterns/quantity-stepper/assets/createHoldRepeat.tspatterns/range-slider/assets/RangeSlider.tsxpatterns/range-slider/assets/rangeValues.tspatterns/scroll-reveal/assets/ScrollReveal.tsxpatterns/scroll-reveal/assets/revealOnScroll.tspatterns/scroll-reveal/assets/useScrollReveal.tspatterns/search-suggest/assets/createSuggestSearch.tspatterns/search-suggest/assets/useSearchSuggest.tspatterns/segmented-control/assets/SegmentedControl.tsxpatterns/segmented-control/assets/moveSegmentThumb.tspatterns/segmented-control/assets/useSegmentedControl.tspatterns/select/assets/Select.tsxpatterns/select/assets/selectCore.tspatterns/skeleton/assets/Skeleton.tsxpatterns/spring-physics/assets/animateSpring.tspatterns/spring-physics/assets/spring.tspatterns/spring-physics/assets/useSpring.tspatterns/sticky-header/assets/observeHeaderCollapse.tspatterns/sticky-header/assets/useStickyHeader.tspatterns/story-progress/assets/createStoryProgress.tspatterns/story-progress/assets/useStoryProgress.tspatterns/stretchy-header/assets/createStretchyHeader.tspatterns/stretchy-header/assets/stretchCore.tspatterns/stretchy-header/assets/useStretchyHeader.tspatterns/swipe-dismiss-viewer/assets/SwipeDismissViewer.tsxpatterns/swipe-dismiss-viewer/assets/animateSpring.tspatterns/swipe-dismiss-viewer/assets/createSwipeDismiss.tspatterns/swipe-dismiss-viewer/assets/dismissCore.tspatterns/swipe-dismiss-viewer/assets/spring.tspatterns/swipe-to-delete/assets/SwipeToDelete.tsxpatterns/swipe-to-delete/assets/createSwipeDelete.tspatterns/switch/assets/Switch.tsxpatterns/tab-indicator/assets/moveTabIndicator.tspatterns/tab-indicator/assets/useTabIndicator.tspatterns/theme-toggle/assets/ThemeToggle.tsxpatterns/theme-toggle/assets/runThemeTransition.tspatterns/theme-toggle/assets/useTheme.tspatterns/toast-stack/assets/createToastStack.tspatterns/toast-stack/assets/useToastStack.tspatterns/tooltip/assets/Tooltip.tsxpatterns/tooltip/assets/createTooltipTrigger.tspatterns/virtual-list/assets/useVirtualList.tspatterns/virtual-list/assets/virtualRange.tspatterns/wheel-picker/assets/WheelPicker.tsxpatterns/wheel-picker/assets/createWheel.tspatterns/wheel-picker/assets/wheelCore.tspatterns/zoom-lightbox/assets/openZoom.tsscripts/audit.mjsscripts/auditAll.tsscripts/hookCore.tsscripts/palette.mjsscripts/post-edit-hook.mjs
Files
../../.claude-plugin/marketplace.jsonasset726 bytes../../.claude-plugin/plugin.jsonasset773 bytes../../.claude-plugin/plugin.jsonasset773 bytesSKILL.mdcore57,732 bytespatterns/accordion/PATTERN.mddoc4,949 bytespatterns/accordion/assets/Accordion.tsxruns2,622 bytespatterns/accordion/assets/accordion.cssasset2,348 bytespatterns/accordion/assets/accordionCore.tsruns736 bytespatterns/bottom-nav/PATTERN.mddoc9,663 bytespatterns/bottom-nav/assets/BottomNav.tsxruns3,666 bytespatterns/bottom-nav/assets/bottom-nav.cssasset3,912 bytespatterns/bottom-nav/assets/bottomNavCore.tsruns4,880 bytespatterns/bottom-sheet/PATTERN.mddoc4,998 bytespatterns/bottom-sheet/assets/BottomSheet.tsxruns3,174 bytespatterns/bottom-sheet/assets/bottom-sheet.cssasset2,008 bytespatterns/bottom-sheet/assets/createSheetDrag.tsruns6,538 bytespatterns/card-expand/PATTERN.mddoc10,804 bytespatterns/card-expand/assets/card-expand.cssasset7,394 bytespatterns/card-expand/assets/runCardExpand.tsruns5,510 bytespatterns/card-expand/assets/useCardExpand.tsruns3,328 bytespatterns/card-stack/PATTERN.mddoc7,871 bytespatterns/card-stack/assets/CardStack.tsxruns3,758 bytespatterns/card-stack/assets/card-stack.cssasset2,845 bytespatterns/card-stack/assets/stackLayout.tsruns5,118 bytespatterns/carousel/PATTERN.mddoc5,334 bytespatterns/carousel/assets/carousel.cssasset2,264 bytespatterns/carousel/assets/carouselCore.tsruns3,601 bytespatterns/carousel/assets/createCarouselAutoplay.tsruns2,505 bytespatterns/carousel/assets/useCarousel.tsruns2,199 bytespatterns/cart-fly/PATTERN.mddoc4,260 bytespatterns/cart-fly/assets/flyToTarget.tsruns3,544 bytespatterns/cart-fly/assets/useCartFly.tsruns690 bytespatterns/celebration/PATTERN.mddoc9,186 bytespatterns/celebration/assets/Celebration.tsxruns5,874 bytespatterns/celebration/assets/celebration.cssasset5,398 bytespatterns/celebration/assets/createCelebration.tsruns3,110 bytespatterns/checkbox-radio/PATTERN.mddoc4,968 bytespatterns/checkbox-radio/assets/Checkbox.tsxruns976 bytespatterns/checkbox-radio/assets/Radio.tsxruns880 bytespatterns/checkbox-radio/assets/checkbox-radio.cssasset3,334 bytespatterns/count-up/PATTERN.mddoc4,111 bytespatterns/count-up/assets/CountUp.tsxruns1,544 bytespatterns/count-up/assets/count-up.cssasset576 bytespatterns/count-up/assets/createCountUp.tsruns2,217 bytespatterns/drag-to-reorder/PATTERN.mddoc6,550 bytespatterns/drag-to-reorder/assets/createDragReorder.tsruns10,085 bytespatterns/drag-to-reorder/assets/drag-to-reorder.cssasset2,307 bytespatterns/drag-to-reorder/assets/useDragReorder.tsruns3,091 bytespatterns/dropdown-menu/PATTERN.mddoc6,236 bytespatterns/dropdown-menu/assets/DropdownMenu.tsxruns2,987 bytespatterns/dropdown-menu/assets/createMenu.tsruns6,416 bytespatterns/dropdown-menu/assets/dropdown-menu.cssasset2,928 bytespatterns/dropdown-menu/assets/placeMenu.tsruns2,537 bytespatterns/edge-swipe-back/PATTERN.mddoc11,598 bytespatterns/edge-swipe-back/assets/animateSpring.tsruns1,987 bytespatterns/edge-swipe-back/assets/createEdgeSwipe.tsruns9,804 bytespatterns/edge-swipe-back/assets/edge-swipe-back.cssasset2,728 bytespatterns/edge-swipe-back/assets/edgeSwipeCore.tsruns2,297 bytespatterns/edge-swipe-back/assets/spring.tsruns5,177 bytespatterns/edge-swipe-back/assets/useEdgeSwipeBack.tsruns2,777 bytespatterns/enter-exit/PATTERN.mddoc4,630 bytespatterns/enter-exit/assets/Presence.tsxruns2,438 bytespatterns/enter-exit/assets/createPresence.tsruns2,605 bytespatterns/enter-exit/assets/enter-exit.cssasset1,734 bytespatterns/enter-exit/references/edge-cases.mddoc1,299 bytespatterns/file-upload/PATTERN.mddoc7,621 bytespatterns/file-upload/assets/FileDropZone.tsxruns7,384 bytespatterns/file-upload/assets/createDropZone.tsruns3,471 bytespatterns/file-upload/assets/file-upload.cssasset4,590 bytespatterns/file-upload/assets/validateFiles.tsruns2,890 bytespatterns/flip-list/PATTERN.mddoc3,695 bytespatterns/flip-list/assets/captureFlip.tsruns2,406 bytespatterns/flip-list/assets/useFlipList.tsruns1,195 bytespatterns/floating-label/PATTERN.mddoc4,060 bytespatterns/floating-label/assets/TextField.tsxruns965 bytespatterns/floating-label/assets/floating-label.cssasset2,051 bytespatterns/form-shake-error/PATTERN.mddoc5,371 bytespatterns/form-shake-error/assets/ShakeField.tsxruns1,365 bytespatterns/form-shake-error/assets/form-shake-error.cssasset2,355 bytespatterns/form-shake-error/assets/shakeCore.tsruns1,730 bytespatterns/glass-nav/PATTERN.mddoc9,856 bytespatterns/glass-nav/assets/createGlassNav.tsruns8,761 bytespatterns/glass-nav/assets/glass-nav.cssasset6,008 bytespatterns/glass-nav/assets/navScrollCore.tsruns2,821 bytespatterns/glass-nav/assets/navSpyCore.tsruns2,389 bytespatterns/glass-nav/assets/useGlassNav.tsruns2,256 bytespatterns/glass-surface/PATTERN.mddoc6,577 bytespatterns/glass-surface/assets/Glass.tsxruns1,942 bytespatterns/glass-surface/assets/glass.cssasset4,711 bytespatterns/hamburger-menu/PATTERN.mddoc5,239 bytespatterns/hamburger-menu/assets/HamburgerMenu.tsxruns2,593 bytespatterns/hamburger-menu/assets/hamburger-menu.cssasset3,558 bytespatterns/infinite-scroll/PATTERN.mddoc7,693 bytespatterns/infinite-scroll/assets/createInfiniteScroll.tsruns3,885 bytespatterns/infinite-scroll/assets/infinite-scroll.cssasset1,943 bytespatterns/infinite-scroll/assets/useInfiniteScroll.tsruns2,220 bytespatterns/layout-audit/PATTERN.mddoc16,461 bytespatterns/layout-audit/assets/audit.mjsruns2,414 bytespatterns/layout-audit/assets/auditCore.tsruns10,002 bytespatterns/layout-audit/assets/auditLayout.tsruns91,328 bytespatterns/layout-audit/assets/layoutTokens.tsruns5,255 bytespatterns/layout-principles/PATTERN.mddoc22,279 bytespatterns/layout-principles/assets/Icon.tsxruns1,485 bytespatterns/layout-principles/assets/Illustration.tsxruns1,042 bytespatterns/layout-principles/assets/content-art.cssasset12,316 bytespatterns/layout-principles/assets/icons.tsruns21,637 bytespatterns/layout-principles/assets/illustrations.tsruns109,681 bytespatterns/layout-principles/assets/layout-tokens.cssasset8,266 bytespatterns/layout-principles/assets/layoutTokens.tsruns5,255 bytespatterns/layout-principles/assets/palette.tsruns10,923 bytespatterns/layout-principles/references/copy.mddoc8,793 bytespatterns/layout-principles/references/principles.mddoc26,259 bytespatterns/layout-principles/references/react-native.mddoc7,994 bytespatterns/layout-principles/references/screen-conventions.mddoc81,239 bytespatterns/layout-principles/references/tone.mddoc29,700 bytespatterns/like-pop/PATTERN.mddoc4,546 bytespatterns/like-pop/assets/DoubleTapArea.tsxruns2,387 bytespatterns/like-pop/assets/LikeButton.tsxruns1,320 bytespatterns/like-pop/assets/createDoubleTap.tsruns1,821 bytespatterns/like-pop/assets/like-pop.cssasset2,751 bytespatterns/loading-button/PATTERN.mddoc6,015 bytespatterns/loading-button/assets/LoadingButton.tsxruns2,917 bytespatterns/loading-button/assets/createAsyncAction.tsruns3,555 bytespatterns/loading-button/assets/loading-button.cssasset5,151 bytespatterns/loading-button/assets/useAsyncAction.tsruns1,480 bytespatterns/long-press-menu/PATTERN.mddoc8,620 bytespatterns/long-press-menu/assets/LongPressMenu.tsxruns6,441 bytespatterns/long-press-menu/assets/createLongPress.tsruns4,261 bytespatterns/long-press-menu/assets/long-press-menu.cssasset4,604 bytespatterns/long-press-menu/assets/placeContextMenu.tsruns2,306 bytespatterns/modal-dialog/PATTERN.mddoc5,679 bytespatterns/modal-dialog/assets/Modal.tsxruns3,309 bytespatterns/modal-dialog/assets/modal-dialog.cssasset2,820 bytespatterns/motion-audit/PATTERN.mddoc9,297 bytespatterns/motion-audit/assets/audit.mjsruns2,273 bytespatterns/motion-audit/assets/auditCore.tsruns10,002 bytespatterns/motion-audit/assets/auditMotion.tsruns17,237 bytespatterns/motion-principles/PATTERN.mddoc7,175 bytespatterns/motion-principles/assets/motion-tokens.cssasset2,827 bytespatterns/motion-principles/assets/motionTokens.tsruns3,703 bytespatterns/motion-principles/references/decision-table.mddoc3,864 bytespatterns/otp-input/PATTERN.mddoc6,566 bytespatterns/otp-input/assets/OtpInput.tsxruns3,848 bytespatterns/otp-input/assets/createOtpInput.tsruns4,958 bytespatterns/otp-input/assets/otp-input.cssasset2,488 bytespatterns/otp-input/assets/shakeCore.tsruns1,730 bytespatterns/page-transition/PATTERN.mddoc8,002 bytespatterns/page-transition/assets/page-transition.cssasset3,451 bytespatterns/page-transition/assets/runPageTransition.tsruns2,212 bytespatterns/page-transition/assets/usePageStack.tsruns2,210 bytespatterns/pinch-zoom/PATTERN.mddoc5,093 bytespatterns/pinch-zoom/assets/PinchZoom.tsxruns1,602 bytespatterns/pinch-zoom/assets/createPinchZoom.tsruns5,075 bytespatterns/pinch-zoom/assets/pinch-zoom.cssasset2,217 bytespatterns/pinch-zoom/assets/pinchCore.tsruns1,558 bytespatterns/press-feedback/PATTERN.mddoc2,607 bytespatterns/press-feedback/assets/press-feedback.cssasset1,418 bytespatterns/progress-ring/PATTERN.mddoc7,562 bytespatterns/progress-ring/assets/ActivityRings.tsxruns2,066 bytespatterns/progress-ring/assets/ProgressRing.tsxruns3,219 bytespatterns/progress-ring/assets/progress-ring.cssasset3,460 bytespatterns/progress-ring/assets/ringGeometry.tsruns2,112 bytespatterns/pull-to-refresh/PATTERN.mddoc3,832 bytespatterns/pull-to-refresh/assets/PullToRefresh.tsxruns2,110 bytespatterns/pull-to-refresh/assets/createPullToRefresh.tsruns3,237 bytespatterns/pull-to-refresh/assets/pull-to-refresh.cssasset1,664 bytespatterns/quantity-stepper/PATTERN.mddoc5,629 bytespatterns/quantity-stepper/assets/QuantityStepper.tsxruns8,006 bytespatterns/quantity-stepper/assets/createHoldRepeat.tsruns2,142 bytespatterns/quantity-stepper/assets/quantity-stepper.cssasset2,930 bytespatterns/range-slider/PATTERN.mddoc5,892 bytespatterns/range-slider/assets/RangeSlider.tsxruns3,522 bytespatterns/range-slider/assets/range-slider.cssasset4,059 bytespatterns/range-slider/assets/rangeValues.tsruns3,016 bytespatterns/scroll-reveal/PATTERN.mddoc4,058 bytespatterns/scroll-reveal/assets/ScrollReveal.tsxruns1,079 bytespatterns/scroll-reveal/assets/revealOnScroll.tsruns1,949 bytespatterns/scroll-reveal/assets/scroll-reveal.cssasset1,131 bytespatterns/scroll-reveal/assets/useScrollReveal.tsruns1,176 bytespatterns/search-suggest/PATTERN.mddoc7,006 bytespatterns/search-suggest/assets/createSuggestSearch.tsruns3,334 bytespatterns/search-suggest/assets/search-suggest.cssasset2,713 bytespatterns/search-suggest/assets/useSearchSuggest.tsruns4,845 bytespatterns/segmented-control/PATTERN.mddoc6,652 bytespatterns/segmented-control/assets/SegmentedControl.tsxruns1,989 bytespatterns/segmented-control/assets/moveSegmentThumb.tsruns2,081 bytespatterns/segmented-control/assets/segmented-control.cssasset3,481 bytespatterns/segmented-control/assets/useSegmentedControl.tsruns1,606 bytespatterns/select/PATTERN.mddoc4,631 bytespatterns/select/assets/Select.tsxruns4,911 bytespatterns/select/assets/select.cssasset3,354 bytespatterns/select/assets/selectCore.tsruns936 bytespatterns/skeleton/PATTERN.mddoc3,572 bytespatterns/skeleton/assets/Skeleton.tsxruns1,184 bytespatterns/skeleton/assets/skeleton.cssasset2,178 bytespatterns/spring-physics/PATTERN.mddoc6,031 bytespatterns/spring-physics/assets/animateSpring.tsruns1,987 bytespatterns/spring-physics/assets/spring.tsruns5,177 bytespatterns/spring-physics/assets/useSpring.tsruns1,948 bytespatterns/sticky-header/PATTERN.mddoc3,265 bytespatterns/sticky-header/assets/observeHeaderCollapse.tsruns1,475 bytespatterns/sticky-header/assets/sticky-header.cssasset1,569 bytespatterns/sticky-header/assets/useStickyHeader.tsruns847 bytespatterns/story-progress/PATTERN.mddoc4,032 bytespatterns/story-progress/assets/createStoryProgress.tsruns2,959 bytespatterns/story-progress/assets/story-progress.cssasset750 bytespatterns/story-progress/assets/useStoryProgress.tsruns1,797 bytespatterns/stretchy-header/PATTERN.mddoc6,398 bytespatterns/stretchy-header/assets/createStretchyHeader.tsruns5,704 bytespatterns/stretchy-header/assets/stretchCore.tsruns3,371 bytespatterns/stretchy-header/assets/stretchy-header.cssasset3,159 bytespatterns/stretchy-header/assets/useStretchyHeader.tsruns1,407 bytespatterns/swipe-dismiss-viewer/PATTERN.mddoc6,110 bytespatterns/swipe-dismiss-viewer/assets/SwipeDismissViewer.tsxruns2,613 bytespatterns/swipe-dismiss-viewer/assets/animateSpring.tsruns1,987 bytespatterns/swipe-dismiss-viewer/assets/createSwipeDismiss.tsruns6,462 bytespatterns/swipe-dismiss-viewer/assets/dismissCore.tsruns2,347 bytespatterns/swipe-dismiss-viewer/assets/spring.tsruns5,177 bytespatterns/swipe-dismiss-viewer/assets/swipe-dismiss-viewer.cssasset2,055 bytespatterns/swipe-to-delete/PATTERN.mddoc8,328 bytespatterns/swipe-to-delete/assets/SwipeToDelete.tsxruns6,766 bytespatterns/swipe-to-delete/assets/createSwipeDelete.tsruns4,791 bytespatterns/swipe-to-delete/assets/swipe-to-delete.cssasset4,380 bytespatterns/switch/PATTERN.mddoc4,033 bytespatterns/switch/assets/Switch.tsxruns1,085 bytespatterns/switch/assets/switch.cssasset3,117 bytespatterns/tab-indicator/PATTERN.mddoc4,057 bytespatterns/tab-indicator/assets/moveTabIndicator.tsruns1,509 bytespatterns/tab-indicator/assets/tab-indicator.cssasset1,147 bytespatterns/tab-indicator/assets/useTabIndicator.tsruns1,530 bytespatterns/theme-toggle/PATTERN.mddoc7,483 bytespatterns/theme-toggle/assets/ThemeToggle.tsxruns2,929 bytespatterns/theme-toggle/assets/runThemeTransition.tsruns5,429 bytespatterns/theme-toggle/assets/theme-toggle.cssasset3,153 bytespatterns/theme-toggle/assets/useTheme.tsruns2,519 bytespatterns/toast-stack/PATTERN.mddoc4,722 bytespatterns/toast-stack/assets/createToastStack.tsruns3,925 bytespatterns/toast-stack/assets/toast-stack.cssasset2,110 bytespatterns/toast-stack/assets/useToastStack.tsruns1,223 bytespatterns/tooltip/PATTERN.mddoc4,874 bytespatterns/tooltip/assets/Tooltip.tsxruns1,615 bytespatterns/tooltip/assets/createTooltipTrigger.tsruns2,102 bytespatterns/tooltip/assets/tooltip.cssasset3,133 bytespatterns/virtual-list/PATTERN.mddoc8,006 bytespatterns/virtual-list/assets/useVirtualList.tsruns4,643 bytespatterns/virtual-list/assets/virtual-list.cssasset1,316 bytespatterns/virtual-list/assets/virtualRange.tsruns3,223 bytespatterns/wheel-picker/PATTERN.mddoc7,452 bytespatterns/wheel-picker/assets/WheelPicker.tsxruns3,442 bytespatterns/wheel-picker/assets/createWheel.tsruns7,675 bytespatterns/wheel-picker/assets/wheel-picker.cssasset3,008 bytespatterns/wheel-picker/assets/wheelCore.tsruns4,079 bytespatterns/zoom-lightbox/PATTERN.mddoc3,325 bytespatterns/zoom-lightbox/assets/openZoom.tsruns3,256 bytespatterns/zoom-lightbox/assets/zoom-lightbox.cssasset946 bytesscripts/audit.mjsruns2,523 bytesscripts/auditAll.tsruns1,716 bytesscripts/hookCore.tsruns8,935 bytesscripts/palette.mjsruns1,551 bytesscripts/post-edit-hook.mjsruns2,672 bytes
Read SKILL.md
# suta — AI 슬롭 없는 UI
AI에게 UI를 맡기면 어디서 본 듯한, 티 나는 결과가 나온다. 모든 섹션을 카드로 감싸고 간격을 한 값으로 맞추고, 그라데이션과 배지로 꾸민다. 장식을 걷어 내도 흰 바탕에 선만 남고, 강조색은 프레임워크 기본 파랑이고, 상태마다 연노랑·주황·연두 알약을 붙이고, 같은 정보와 버튼을 두세 곳에 반복하고, 글자는 작고 흐리다. 모든 요소에 `transition: all`을 붙이고, `height`·`top`을 움직여 화면이 버벅이고, 동작 줄이기 설정을 무시하고, `div`에 `onClick`을 달아 키보드로 쓸 수 없게 만든다. 이 스킬은 그런 UI가 나오지 않게 한다. 아래 금지선을 지키고, 검증된 패턴 57종(테스트·접근성·reduced-motion을 갖춘 코드)을 프로젝트에 맞게 가져다 쓴다.
수타(手打)는 기계가 아니라 손으로 친다는 뜻이다. 찍어낸 UI가 아니라 손으로 다듬은 UI를 목표로 한다.
## 폴더 지도
| 경로 | 내용 |
|---|---|
| `SKILL.md` | 이 문서 — 작업 절차, 금지선, 레이아웃·모션 값, 패턴 카탈로그 |
| `patterns/{패턴}/PATTERN.md` | 패턴 설명서 — 언제 쓰는가, 왜 이 기술인가, 파일 표, 사용법(React / 순수 JS), 커스터마이즈, 주의사항 |
| `patterns/{패턴}/assets/` | 복사해 쓰는 코드 — 프레임워크 무관 코어(.ts, 의존성 0) + React 래퍼(.tsx) + CSS |
| `scripts/audit.mjs` | 통합 검사 — 레이아웃·색·문구·모션 규칙을 한 번에 돌린다. 편집 후 검사 훅(`scripts/post-edit-hook.mjs`)도 같은 검사를 쓴다 |View the complete source on GitHubSkills included
- suta
Repository facts
- License
- MIT
- Created
- Aug 19, 2026
- Last pushed
- Nov 6, 2026
- Forks
- 2
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 32 notes
.claude-plugin/plugin.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/suta/patterns/layout-principles/assets/illustrations.ts:37Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:36Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:38Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:39Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:40Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:41Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:42Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:43Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:44Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:45Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:46Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:47Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:48Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:49Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:50Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:51Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:64Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:72Analysis incomplete: physical or joined line exceeds character limitskills/suta/patterns/layout-principles/assets/illustrations.ts:71Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- No dangerous shell commands
- 95 network referencesin 64 files: .claude-plugin/marketplace.json:3 suta/patterns/layout-principles/assets/icons.ts:5 suta/patterns/layout-principles/assets/illustrations.ts:7 and 61 more
- 3 obfuscation signalsin 2 files: suta/patterns/layout-principles/assets/illustrations.ts:47 suta/patterns/layout-audit/assets/auditLayout.ts:70
- No instruction overrides
- 139 executable scriptsin 139 files: suta/patterns/accordion/assets/Accordion.tsx:1 suta/patterns/accordion/assets/accordionCore.ts:1 suta/patterns/bottom-nav/assets/BottomNav.tsx:1 and 136 more
- No access to secrets
- No requests to vote in Hot
Show all 237 signals by file
.claude-plugin/marketplace.json
- Network accessline 3
"owner": { "name": "Guksu", "url": "https://github.com/Guksu" - Network accessline 4
"name": "Guksu", "url": "https://github.com/Guksu" }, - Network accessline 5
"url": "https://github.com/Guksu" - Network accessline 16
"version": "0.15.0", "author": { "name": "Guksu" }, "homepage": "https://github.com/Guksu/suta", - Network accessline 17
"author": { "name": "Guksu" }, "homepage": "https://github.com/Guksu/suta", "keywords": ["ai-slop", "frontend", "ui", "layout", "animation", "interaction", "accessibility", "css", "react"] - Network accessline 18
"homepage": "https://github.com/Guksu/suta",
.claude-plugin/plugin.json
- Network accessline 3
"description": "UI guidelines and code for 57 patterns for Claude Code and Codex. Includes layout, color, motion and accessibility guidance, with checks after supported file edits.", "version": "0.15.0", "author": { "name": "Guksu", "ur - Network accessline 4
"version": "0.15.0", "author": { "name": "Guksu", "url": "https://github.com/Guksu" }, "homepage": "https://guksu.github.io/suta/", - Network accessline 5
"author": { "name": "Guksu", "url": "https://github.com/Guksu" }, - Network accessline 6
"homepage": "https://guksu.github.io/suta/", - Network accessline 7
"repository": "https://github.com/Guksu/suta",
skills/suta/patterns/accordion/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/accordion
skills/suta/patterns/accordion/assets/Accordion.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/accordion/assets/accordionCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/bottom-nav/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/bottom-nav
skills/suta/patterns/bottom-nav/assets/BottomNav.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/bottom-nav/assets/bottomNavCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/bottom-sheet/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/bottom-sheet
skills/suta/patterns/bottom-sheet/assets/BottomSheet.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/bottom-sheet/assets/createSheetDrag.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/card-expand/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/card-expand
skills/suta/patterns/card-expand/assets/runCardExpand.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/card-expand/assets/useCardExpand.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/card-stack/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/card-stack
skills/suta/patterns/card-stack/assets/CardStack.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/card-stack/assets/stackLayout.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/carousel/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/carousel
skills/suta/patterns/carousel/assets/carouselCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/carousel/assets/createCarouselAutoplay.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/carousel/assets/useCarousel.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/cart-fly/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/cart-fly
skills/suta/patterns/cart-fly/assets/flyToTarget.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/cart-fly/assets/useCartFly.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/celebration/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/celebration
skills/suta/patterns/celebration/assets/Celebration.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/celebration/assets/createCelebration.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/checkbox-radio/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/checkbox-radio
skills/suta/patterns/checkbox-radio/assets/Checkbox.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/checkbox-radio/assets/Radio.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/count-up/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/count-up
skills/suta/patterns/count-up/assets/CountUp.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/count-up/assets/createCountUp.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/drag-to-reorder/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/drag-to-reorder
skills/suta/patterns/drag-to-reorder/assets/createDragReorder.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/drag-to-reorder/assets/useDragReorder.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/dropdown-menu/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/dropdown-menu
skills/suta/patterns/dropdown-menu/assets/DropdownMenu.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/dropdown-menu/assets/createMenu.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/dropdown-menu/assets/placeMenu.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/edge-swipe-back/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/edge-swipe-back
skills/suta/patterns/edge-swipe-back/assets/animateSpring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/edge-swipe-back/assets/createEdgeSwipe.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/edge-swipe-back/assets/edgeSwipeCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/edge-swipe-back/assets/spring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/edge-swipe-back/assets/useEdgeSwipeBack.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/enter-exit/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/enter-exit
skills/suta/patterns/enter-exit/assets/Presence.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/enter-exit/assets/createPresence.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/file-upload/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/file-upload
skills/suta/patterns/file-upload/assets/FileDropZone.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/file-upload/assets/createDropZone.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/file-upload/assets/validateFiles.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/flip-list/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/flip-list
skills/suta/patterns/flip-list/assets/captureFlip.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/flip-list/assets/useFlipList.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/floating-label/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/floating-label
skills/suta/patterns/floating-label/assets/TextField.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/form-shake-error/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/form-shake-error
skills/suta/patterns/form-shake-error/assets/ShakeField.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/form-shake-error/assets/shakeCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/glass-nav/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/glass-nav
skills/suta/patterns/glass-nav/assets/createGlassNav.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/glass-nav/assets/navScrollCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/glass-nav/assets/navSpyCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/glass-nav/assets/useGlassNav.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/glass-surface/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/glass-surface
skills/suta/patterns/glass-surface/assets/Glass.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/hamburger-menu/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/hamburger-menu
skills/suta/patterns/hamburger-menu/assets/HamburgerMenu.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/infinite-scroll/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/infinite-scroll
skills/suta/patterns/infinite-scroll/assets/createInfiniteScroll.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/infinite-scroll/assets/useInfiniteScroll.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/layout-audit/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/layout-audit
skills/suta/patterns/layout-audit/assets/audit.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/suta/patterns/layout-audit/assets/auditCore.ts
skills/suta/patterns/layout-audit/assets/auditLayout.ts
skills/suta/patterns/layout-audit/assets/layoutTokens.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/layout-principles/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/layout-principles
skills/suta/patterns/layout-principles/assets/Icon.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/layout-principles/assets/Illustration.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/layout-principles/assets/icons.ts
- Executable scriptline 1
Executable file - Network accessline 5
* 이 목록에 없는 아이콘이 필요하면 같은 출처(Lucide)에서 같은 형식으로 더한다 — 다른 아이콘 세트와 섞지 않는다. * * 경로 출처: Lucide v0.469.0 (https://lucide.dev) - Network accessline 6
* * 경로 출처: Lucide v0.469.0 (https://lucide.dev) * ISC License - Network accessline 7
* 경로 출처: Lucide v0.469.0 (https://lucide.dev) - Network accessline 197
.join('') const a11y = label ? `role="img" aria-label="${label.replace(/"/g, '"')}"` : 'aria-hidden="true"' return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 24 24" fill="${filled ? 'curr - Network accessline 198
const a11y = label ? `role="img" aria-label="${label.replace(/"/g, '"')}"` : 'aria-hidden="true"' return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 24 24" fill="${filled ? 'currentColor' : - Network accessline 199
return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 24 24" fill="${filled ? 'currentColor' : 'none'}" stroke="currentColor" stroke-width="${strokeWidth}" stroke-linecap="round" stroke-linejoin="roun
skills/suta/patterns/layout-principles/assets/illustrations.ts
- Executable scriptline 1
Executable file - Network accessline 7
* 원본의 돈주머니·지폐 그림은 달러($) 표시가 있어 원화 서비스에 어긋나서 넣지 않았다(가계부 온보딩 판정 8번이 짚었다). * * 그림 출처: Microsoft Fluent Emoji(Flat 스타일, https://github.com/microsoft/fluentui-emoji) - Network accessline 8
* * 그림 출처: Microsoft Fluent Emoji(Flat 스타일, https://github.com/microsoft/fluentui-emoji) * MIT License - Network accessline 9
* 그림 출처: Microsoft Fluent Emoji(Flat 스타일, https://github.com/microsoft/fluentui-emoji) - Possible obfuscationline 47
'bread': '<path d="M27.3408 25.5926L15 30V16.5L29 13V23.2382C29 24.2947 28.3358 25.2372 27.3408 25.5926Z" fill="#F3AD61"/><path d="M14.5898 3.26178L3.20215 7.55596L16.9999 19.0001L27.9812 15.1988C29.1895 14.7806 29.9999 13.6425 29.9999 12.3 - Possible obfuscationline 72
'hotel': '<path d="M21 8.01629C21 5.23834 18.76 3 16 3C13.24 3 11 5.24834 11 8.01629V8H3V8.01629V29.1706V30H3.83H11H21H28.17H29V29.1706V8.01629V8H21V8.01629Z" fill="#FFDEA7"/><path d="M11 8V30H10V8H11ZM22 8H21V30H22V8Z" fill="#F3AD61"/><pat - Network accessline 102
export const illustrationSvg = ({ name, size = 40, label }: { name: IllustrationName; size?: number; label?: string }) => { const a11y = label ? `role="img" aria-label="${label.replace(/"/g, '"')}"` : 'aria-hidden="true"' return `< - Network accessline 103
const a11y = label ? `role="img" aria-label="${label.replace(/"/g, '"')}"` : 'aria-hidden="true"' return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 32 32" fill="none" focusable="false" ${a1 - Network accessline 104
return `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 32 32" fill="none" focusable="false" ${a11y}>${ILLUSTRATIONS[name]}</svg>`
skills/suta/patterns/layout-principles/assets/layoutTokens.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/layout-principles/assets/palette.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/like-pop/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/like-pop - Network accessline 55
onDoubleTap: ({ x, y }) => { const rect = area.getBoundingClientRect() const heart = document.createElementNS('http://www.w3.org/2000/svg', 'svg') - Network accessline 56
const rect = area.getBoundingClientRect() const heart = document.createElementNS('http://www.w3.org/2000/svg', 'svg') heart.setAttribute('class', 'burst-heart') - Network accessline 57
const heart = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
skills/suta/patterns/like-pop/assets/DoubleTapArea.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/like-pop/assets/LikeButton.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/like-pop/assets/createDoubleTap.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/loading-button/PATTERN.md
skills/suta/patterns/loading-button/assets/LoadingButton.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/loading-button/assets/createAsyncAction.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/loading-button/assets/useAsyncAction.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/long-press-menu/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/long-press-menu
skills/suta/patterns/long-press-menu/assets/LongPressMenu.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/long-press-menu/assets/createLongPress.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/long-press-menu/assets/placeContextMenu.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/modal-dialog/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/modal-dialog
skills/suta/patterns/modal-dialog/assets/Modal.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/motion-audit/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/motion-audit
skills/suta/patterns/motion-audit/assets/audit.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/suta/patterns/motion-audit/assets/auditCore.ts
skills/suta/patterns/motion-audit/assets/auditMotion.ts
- Executable scriptline 1
Executable file - Network accessline 162
/** 실행되지 않는 글을 같은 길이의 공백으로 지운다 — 주석과 템플릿 문자열(화면에 보여 주는 예시 코드·마크업 문자열). * 문서·데모 페이지의 예시 코드에 편집 후 훅이 걸려 에이전트를 멈추지 않게 한다. 줄 번호는 그대로다. * `https://`의 `//`는 주석이 아니므로 바로 앞이 `:`이면 남긴다 */ - Network accessline 163
* 문서·데모 페이지의 예시 코드에 편집 후 훅이 걸려 에이전트를 멈추지 않게 한다. 줄 번호는 그대로다. * `https://`의 `//`는 주석이 아니므로 바로 앞이 `:`이면 남긴다 */ const scriptCode = (text: string) => - Network accessline 164
* `https://`의 `//`는 주석이 아니므로 바로 앞이 `:`이면 남긴다 */
skills/suta/patterns/motion-principles/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/motion-principles
skills/suta/patterns/motion-principles/assets/motionTokens.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/otp-input/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/otp-input
skills/suta/patterns/otp-input/assets/OtpInput.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/otp-input/assets/createOtpInput.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/otp-input/assets/shakeCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/page-transition/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/page-transition
skills/suta/patterns/page-transition/assets/runPageTransition.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/page-transition/assets/usePageStack.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/pinch-zoom/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/pinch-zoom
skills/suta/patterns/pinch-zoom/assets/PinchZoom.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/pinch-zoom/assets/createPinchZoom.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/pinch-zoom/assets/pinchCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/press-feedback/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/press-feedback
skills/suta/patterns/progress-ring/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/progress-ring
skills/suta/patterns/progress-ring/assets/ActivityRings.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/progress-ring/assets/ProgressRing.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/progress-ring/assets/ringGeometry.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/pull-to-refresh/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/pull-to-refresh
skills/suta/patterns/pull-to-refresh/assets/PullToRefresh.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/pull-to-refresh/assets/createPullToRefresh.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/quantity-stepper/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/quantity-stepper
skills/suta/patterns/quantity-stepper/assets/QuantityStepper.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/quantity-stepper/assets/createHoldRepeat.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/range-slider/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/range-slider
skills/suta/patterns/range-slider/assets/RangeSlider.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/range-slider/assets/rangeValues.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/scroll-reveal/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/scroll-reveal
skills/suta/patterns/scroll-reveal/assets/ScrollReveal.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/scroll-reveal/assets/revealOnScroll.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/scroll-reveal/assets/useScrollReveal.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/search-suggest/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/search-suggest - Network accessline 41
const search = useSearchSuggest<Menu>({ fetchSuggestions: ({ query, signal }) => fetch(`/api/menus?q=${encodeURIComponent(query)}`, { signal }).then((res) => res.json()), - Network accessline 42
fetchSuggestions: ({ query, signal }) => fetch(`/api/menus?q=${encodeURIComponent(query)}`, { signal }).then((res) => res.json()), toText: (menu) => menu.name, - Network accessline 43
fetch(`/api/menus?q=${encodeURIComponent(query)}`, { signal }).then((res) => res.json()), - Network accessline 92
const search = createSuggestSearch({ fetchSuggestions: ({ query, signal }) => fetch(`/api/menus?q=${query}`, { signal }).then((r) => r.json()), - Network accessline 93
fetchSuggestions: ({ query, signal }) => fetch(`/api/menus?q=${query}`, { signal }).then((r) => r.json()),
skills/suta/patterns/search-suggest/assets/createSuggestSearch.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/search-suggest/assets/useSearchSuggest.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/segmented-control/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/segmented-control
skills/suta/patterns/segmented-control/assets/SegmentedControl.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/segmented-control/assets/moveSegmentThumb.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/segmented-control/assets/useSegmentedControl.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/select/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/select
skills/suta/patterns/select/assets/Select.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/select/assets/selectCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/skeleton/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/skeleton
skills/suta/patterns/skeleton/assets/Skeleton.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/spring-physics/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/spring-physics
skills/suta/patterns/spring-physics/assets/animateSpring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/spring-physics/assets/spring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/spring-physics/assets/useSpring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/sticky-header/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/sticky-header
skills/suta/patterns/sticky-header/assets/observeHeaderCollapse.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/sticky-header/assets/useStickyHeader.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/story-progress/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/story-progress
skills/suta/patterns/story-progress/assets/createStoryProgress.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/story-progress/assets/useStoryProgress.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/stretchy-header/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/stretchy-header
skills/suta/patterns/stretchy-header/assets/createStretchyHeader.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/stretchy-header/assets/stretchCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/stretchy-header/assets/useStretchyHeader.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-dismiss-viewer/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/swipe-dismiss-viewer
skills/suta/patterns/swipe-dismiss-viewer/assets/SwipeDismissViewer.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-dismiss-viewer/assets/animateSpring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-dismiss-viewer/assets/createSwipeDismiss.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-dismiss-viewer/assets/dismissCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-dismiss-viewer/assets/spring.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-to-delete/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/swipe-to-delete
skills/suta/patterns/swipe-to-delete/assets/SwipeToDelete.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/swipe-to-delete/assets/createSwipeDelete.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/switch/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/switch
skills/suta/patterns/switch/assets/Switch.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/tab-indicator/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/tab-indicator
skills/suta/patterns/tab-indicator/assets/moveTabIndicator.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/tab-indicator/assets/useTabIndicator.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/theme-toggle/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/theme-toggle
skills/suta/patterns/theme-toggle/assets/ThemeToggle.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/theme-toggle/assets/runThemeTransition.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/theme-toggle/assets/useTheme.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/toast-stack/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/toast-stack
skills/suta/patterns/toast-stack/assets/createToastStack.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/toast-stack/assets/useToastStack.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/tooltip/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/tooltip
skills/suta/patterns/tooltip/assets/Tooltip.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/tooltip/assets/createTooltipTrigger.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/virtual-list/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/virtual-list
skills/suta/patterns/virtual-list/assets/useVirtualList.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/virtual-list/assets/virtualRange.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/wheel-picker/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/wheel-picker
skills/suta/patterns/wheel-picker/assets/WheelPicker.tsx
- Executable scriptline 1
Executable file
skills/suta/patterns/wheel-picker/assets/createWheel.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/wheel-picker/assets/wheelCore.ts
- Executable scriptline 1
Executable file
skills/suta/patterns/zoom-lightbox/PATTERN.md
- Network accessline 8
라이브 데모: https://guksu.github.io/suta/#/zoom-lightbox
skills/suta/patterns/zoom-lightbox/assets/openZoom.ts
- Executable scriptline 1
Executable file
skills/suta/scripts/audit.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/suta/scripts/auditAll.ts
- Executable scriptline 1
Executable file
skills/suta/scripts/hookCore.ts
- Executable scriptline 1
Executable file
skills/suta/scripts/palette.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/suta/scripts/post-edit-hook.mjs
- Executable scriptline 1
#!/usr/bin/env node
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 2 facts
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsuta/patterns/layout-principles/assets/icons.ts:199High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionsuta/patterns/layout-principles/assets/illustrations.ts:104High confidence
Signal confidence: 226 facts
- Network access in prose of documentationsuta/patterns/accordion/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/accordion/assets/Accordion.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/accordion/assets/accordionCore.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/bottom-nav/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/bottom-nav/assets/BottomNav.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/bottom-nav/assets/bottomNavCore.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/bottom-sheet/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/bottom-sheet/assets/BottomSheet.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/bottom-sheet/assets/createSheetDrag.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/card-expand/PATTERN.md:8Low confidence
- Executable script in a comment of a file that runssuta/patterns/card-expand/assets/runCardExpand.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/card-expand/assets/useCardExpand.ts:1High confidence
- Network access in prose of documentationsuta/patterns/card-stack/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/card-stack/assets/CardStack.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/card-stack/assets/stackLayout.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/carousel/PATTERN.md:8Low confidence
- Executable script in a comment of a file that runssuta/patterns/carousel/assets/carouselCore.ts:1Low confidence
- Executable script in a comment of a file that runssuta/patterns/carousel/assets/createCarouselAutoplay.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/carousel/assets/useCarousel.ts:1High confidence
- Network access in prose of documentationsuta/patterns/cart-fly/PATTERN.md:8Low confidence
- Executable script in a comment of a file that runssuta/patterns/cart-fly/assets/flyToTarget.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/cart-fly/assets/useCartFly.ts:1High confidence
- Network access in prose of documentationsuta/patterns/celebration/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/celebration/assets/Celebration.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/celebration/assets/createCelebration.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/checkbox-radio/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/checkbox-radio/assets/Checkbox.tsx:1High confidence
- Executable script in code of a file that runssuta/patterns/checkbox-radio/assets/Radio.tsx:1High confidence
- Network access in prose of documentationsuta/patterns/count-up/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/count-up/assets/CountUp.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/count-up/assets/createCountUp.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/drag-to-reorder/PATTERN.md:8Low confidence
- Executable script in a comment of a file that runssuta/patterns/drag-to-reorder/assets/createDragReorder.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/drag-to-reorder/assets/useDragReorder.ts:1High confidence
- Network access in prose of documentationsuta/patterns/dropdown-menu/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/dropdown-menu/assets/DropdownMenu.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/dropdown-menu/assets/createMenu.ts:1Low confidence
- Executable script in a comment of a file that runssuta/patterns/dropdown-menu/assets/placeMenu.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/edge-swipe-back/PATTERN.md:8Low confidence
- Executable script in a comment of a file that runssuta/patterns/edge-swipe-back/assets/animateSpring.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/edge-swipe-back/assets/createEdgeSwipe.ts:1High confidence
- Executable script in a comment of a file that runssuta/patterns/edge-swipe-back/assets/edgeSwipeCore.ts:1Low confidence
- Executable script in a comment of a file that runssuta/patterns/edge-swipe-back/assets/spring.ts:1Low confidence
- Executable script in code of a file that runssuta/patterns/edge-swipe-back/assets/useEdgeSwipeBack.ts:1High confidence
- Network access in prose of documentationsuta/patterns/enter-exit/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/enter-exit/assets/Presence.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/enter-exit/assets/createPresence.ts:1Low confidence
- Network access in prose of documentationsuta/patterns/file-upload/PATTERN.md:8Low confidence
- Executable script in code of a file that runssuta/patterns/file-upload/assets/FileDropZone.tsx:1High confidence
- Executable script in a comment of a file that runssuta/patterns/file-upload/assets/createDropZone.ts:1Low confidence
and 176 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/suta/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/suta/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/suta/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/suta/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.