Claude Code için yeni her özellik için UI bileşenlerini manuel olarak açıklamak, sınıflar olmadan CSS yazmaya benzer; tekrarlayıcı, tutarsız ve ekipler arasında ölçeklendirilmesi imkansızdır. Claude Code'un UI oluşturmaya yönelik Becerileri, tasarım sisteminizi bileşenleri, düzenleri ve stilleri öngörülebilir parametrelerle ve sıfır hazır kodla oluşturan yürütülebilir araçlara dönüştürür.
UI Oluşturmaya Yönelik Claude Code Becerileri Nelerdir?
Claude Code Becerileri, UI oluşturma mantığını, Claude Code'un Model Bağlam Protokolü (MCP) aracılığıyla keşfedip çağırabileceği yeniden kullanılabilir, sürüm kontrollü araçlar halinde paketler. "Tailwind ile duyarlı bir kart bileşeni oluştur, sola hizalı resim, sağa hizalı metin ve birincil düğme ekle" gibi uzun istemler oluşturmak yerine, bir building-ui becerisini bir kez tanımlar ve onu kısa parametrelerle çağırırsınız: component: "card", layout: "image-left".
Her beceri, şunları tanımlayan bir SKILL.md dosyasından oluşur:
- Araç adı ve açıklaması: Becerinin ne yaptığı ve Claude'un onu ne zaman kullanması gerektiği
- Parametre şeması: Doğrulama özellikli tür güvenli girişler
- Örnekler: Claude'u eğitmek için somut kullanım kalıpları
- Uygulama: Kodu oluşturan asıl işleyici
Resmi depodaki building-ui becerisi, bileşenler, düzenler, temalar ve formlar için kalıplar sunar. Ad-hoc UI üretimini sistematik, tekrarlanabilir bir sürece dönüştürür.

Ham İstemlere Göre Temel Avantajlar
- Tutarlılık: Her zaman aynı bileşen yapısı
- Tür güvenliği: Claude, oluşturmadan önce parametreleri doğrular
- Sürüm kontrolü: Beceriler Git'te bulunur, izlenebilir ve gözden geçirilebilir
- Ekip paylaşımı: Tek bir beceri, tüm bir mühendislik organizasyonuna hizmet eder
- Performans: Tasarım belirteçlerini veya boşluk ölçeklerini yeniden açıklamanıza gerek yok
Geliştirici Ekibinizin maksimum üretkenlikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?
Apidog tüm taleplerinizi karşılar ve Postman'ın yerini çok daha uygun bir fiyata alır!
building-ui Becerisini Kurma
Adım 1: Claude Code'u Yükleyin ve MCP'yi Etkinleştirin
Claude Code CLI'yı yüklemediyseniz:
npm install -g @anthropic-ai/claude-code
claude --version # >= 2.0.70 olmalı
MCP yapılandırma dizinini ve dosyasını oluşturun:
# macOS/Linux
mkdir -p ~/.config/claude-code
touch ~/.config/claude-code/config.json
# Windows
mkdir %APPDATA%\claude-code
echo {} > %APPDATA%\claude-code\config.json

Adım 2: building-ui Becerisini Klonlayın ve Oluşturun
git clone https://github.com/anthropics/skills.git
cd skills/skills/building-ui
npm install
npm run build
Bu, TypeScript işleyicilerini dist/index.js'e derler.
Adım 3: Beceriyi Yüklemek için MCP'yi Yapılandırın
~/.config/claude-code/config.json dosyasını düzenleyin:
{
"mcpServers": {
"building-ui": {
"command": "node",
"args": ["/absolute/path/to/skills/building-ui/dist/index.js"],
"env": {
"UI_LIBRARY": "react",
"STYLE_SYSTEM": "tailwind",
"THEME_CONFIG": "~/project/design-tokens.json"
}
}
}
}
Önemli:
argsiçin mutlak yollar kullanın. Claude süreci başlattığında göreli yollar başarısız olur- Beceriyi küresel olarak yapılandırmak için ortam değişkenlerini ayarlayın:
UI_LIBRARY:react,vue,svelteSTYLE_SYSTEM:tailwind,styled-components,css-modulesTHEME_CONFIG: Tasarım belirteci dosyanızın yolu
Adım 4: Kurulumu Doğrulayın
claude
Yüklendikten sonra şunu çalıştırın:
/list-tools
Şunları görmelisiniz:
Mevcut araçlar:
- building-ui:generate-component
- building-ui:create-layout
- building-ui:apply-theme
- building-ui:generate-form
Araçlar görünmezse, günlükleri kontrol edin:
# macOS/Linux
tail -f ~/.cache/claude-code/logs/mcp.log
# Windows
type %APPDATA%\claude-code\logs\mcp.log
Yaygın sorunlar:
- ENOENT:
dist/index.jsyolunda hata - Eksik env değişkenleri: Beceri tema yapılandırmasını yükleyemiyor
- Sürüm uyuşmazlığı: Claude Code sürümü MCP özelliklerini desteklemiyor
Becerilerle Temel UI Oluşturma Kalıpları
building-ui becerisi dört ana araç dışa aktarır. Her biri yapılandırılmış parametreleri kabul eder ve oluşturulan kodu döndürür.
1. Bileşen Oluşturma Aracı
Araç adı: building-ui:generate-component
Kullanım durumu: Yeniden kullanılabilir UI bileşenleri oluşturma
Parametreler:
component: Bileşen adı (düğme, kart, modal, giriş, seçme)variants: Stil varyantları dizisi (birincil, ikincil, dış hat)size: küçük | orta | büyükcustomProps: Ek özelliklerin kaydıchildren: Boolean (bileşenin alt öğeleri kabul edip etmediği)
Örnek: Varyantlarla bir düğme oluşturun
Varyantları birincil, ikincil ve dış hat, boyutu orta ve devre dışı durumu desteği olan bir düğme bileşeni oluşturmak için generate-component aracını kullanın.
Oluşturulan çıktı (React + Tailwind):
// Button.tsx
import React from 'react';
import clsx from 'clsx';
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'primary' | 'secondary' | 'outline';
size?: 'small' | 'medium' | 'large';
}
export const Button: React.FC<ButtonProps> = ({
variant = 'primary',
size = 'medium',
disabled,
children,
className,
...props
}) => {
const baseClasses = 'font-semibold rounded-lg transition-colors';
const variantClasses = {
primary: 'bg-blue-600 text-white hover:bg-blue-700',
secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-50'
};
const sizeClasses = {
small: 'px-3 py-1.5 text-sm',
medium: 'px-4 py-2 text-base',
large: 'px-6 py-3 text-lg'
};
return (
<button
disabled={disabled}
className={clsx(
baseClasses,
variantClasses[variant],
sizeClasses[size],
disabled && 'opacity-50 cursor-not-allowed',
className
)}
{...props}
>
{children}
</button>
);
};
Beceri, ortam değişkenlerinize göre TypeScript türlerini, erişilebilirlik özelliklerini ve stil sınıflarını çıkarır.
2. Düzen Oluşturma Aracı
Araç adı: building-ui:create-layout
Kullanım durumu: Duyarlı sayfa düzenleri oluşturma
Parametreler:
type: grid | flex | stack | sidebarcolumns: Sütun sayısı (ızgara için)gap: Boşluk ölçeği (0, 1, 2, 3, 4, 5, 6, 8, 10, 12)responsive: Kesme noktası yapılandırmalarına sahip nesneareas: Adlandırılmış ızgara alanları (örneğin, "başlık başlık", "kenar çubuğu ana")
Örnek: Duyarlı kenar çubuğuna sahip kontrol paneli düzeni
Daraltılabilir kenar çubuğu, başlık, ana içerik alanı ve altbilgiye sahip duyarlı bir kontrol paneli düzeni oluşturmak için create-layout kullanın. gap-4 kullanın ve kenar çubuğunu masaüstünde 256px genişliğinde, mobilde tam genişlikte yapın.
Oluşturulan çıktı:
// DashboardLayout.tsx
import React, { useState } from 'react';
import clsx from 'clsx';
interface DashboardLayoutProps {
header?: React.ReactNode;
sidebar?: React.ReactNode;
main: React.ReactNode;
footer?: React.ReactNode;
}
export const DashboardLayout: React.FC<DashboardLayoutProps> = ({
header,
sidebar,
main,
footer
}) => {
const [sidebarOpen, setSidebarOpen] = useState(false);
return (
<div className="min-h-screen flex flex-col">
{/* Header */}
<header className="bg-white shadow-sm border-b border-gray-200 z-10">
<div className="px-4 sm:px-6 lg:px-8 py-4">
{header}
</div>
</header>
<div className="flex flex-1">
{/* Mobile menu button */}
<button
className="lg:hidden fixed bottom-4 right-4 bg-blue-600 text-white p-3 rounded-full shadow-lg z-20"
onClick={() => setSidebarOpen(!sidebarOpen)}
>
☰
</button>
{/* Sidebar */}
<aside className={clsx(
'bg-gray-50 border-r border-gray-200',
'fixed lg:relative inset-y-0 left-0 z-30',
'w-64 transform transition-transform lg:translate-x-0',
sidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'
)}>
<div className="p-4">
{sidebar}
</div>
</aside>
{/* Main content */}
<main className="flex-1 p-4 sm:p-6 lg:p-8">
{main}
</main>
</div>
{/* Footer */}
{footer && (
<footer className="bg-gray-50 border-t border-gray-200 mt-auto">
<div className="px-4 sm:px-6 lg:px-8 py-4">
{footer}
</div>
</footer>
)}
</div>
);
};
Beceri otomatik olarak mobil menü mantığı, kesme noktasına duyarlı sınıflar ve erişilebilir özellikler ekler.
3. Tema Uygulama Aracı
Araç adı: building-ui:apply-theme
Kullanım durumu: Bileşenler arasında tasarım belirteçlerini uygulama
Parametreler:
component: Hedef bileşen adıcolorScheme: light | dark | systemspacingScale: 0-12 (Tailwind boşluk ölçeği)typography: Font boyutları, ağırlıkları, aileleri ile nesnecustomTokens: CSS özel özelliklerinin kaydı
Örnek: Bir kart bileşenine koyu tema uygulama
Bir Kart bileşenini koyu mod için arduvaz renk paleti, 4 boşluk ölçeği ve Inter yazı tipi ailesiyle yapılandırmak için apply-theme kullanın.
Oluşturulan çıktı:
// card-theme.ts
export const cardTheme = {
light: {
background: 'bg-white',
border: 'border-gray-200',
text: 'text-gray-900',
subText: 'text-gray-600'
},
dark: {
background: 'bg-slate-800',
border: 'border-slate-700',
text: 'text-slate-100',
subText: 'text-slate-400'
}
};
// Card.tsx'te kullanım
import { cardTheme } from './card-theme';
interface CardProps {
variant?: 'light' | 'dark';
children: React.ReactNode;
}
export const Card: React.FC<CardProps> = ({ variant = 'light', children }) => {
const theme = cardTheme[variant];
return (
<div className={clsx(
'rounded-lg p-4 border',
theme.background,
theme.border
)}>
{children}
</div>
);
};
Beceri, THEME_CONFIG dosyanızı okur ve temaya özgü belirteç eşlemeleri oluşturur. Eğer THEME_CONFIG bir JSON dosyasını işaret ediyorsa:
{
"colors": {
"primary": "#3B82F6",
"secondary": "#6B7280"
},
"fonts": {
"sans": "Inter",
"mono": "JetBrains Mono"
}
}
Oluşturulan kod, Tailwind varsayılanları yerine bu tam değerleri kullanır.
4. Form Oluşturma Aracı
Araç adı: building-ui:generate-form
Kullanım durumu: Şemalardan doğrulanmış formlar oluşturma
Parametreler:
fields: Alan tanımlarının dizisi (ad, tür, etiket, doğrulama)submitAction: Fonksiyon adı veya API uç noktasıvalidationMode: onBlur | onChange | onSubmitlayout: vertical | horizontal | grid
Örnek: Doğrulamalı kullanıcı kayıt formu
generate-form'u kullanarak ad (metin, gerekli), e-posta (e-posta, gerekli), parola (parola, minimum 8 karakter) ve acceptTerms (onay kutusu) alanlarına sahip bir kullanıcı kayıt formu oluşturun. onBlur doğrulamasıyla /api/register'a gönderin.
Oluşturulan çıktı:
// UserRegistrationForm.tsx
import React, { useState } from 'react';
import { z } from 'zod';
import { zodResolver } from '@hookform/resolvers/zod';
import { useForm, SubmitHandler } from 'react-hook-form';
const schema = z.object({
name: z.string().min(1, 'Ad gerekli'),
email: z.string().email('Geçersiz e-posta adresi'),
password: z.string().min(8, 'Parola en az 8 karakter olmalı'),
acceptTerms: z.boolean().refine(val => val === true, {
message: 'Şartları kabul etmelisiniz'
})
});
type FormData = z.infer<typeof schema>;
export const UserRegistrationForm: React.FC = () => {
const [isSubmitting, setIsSubmitting] = useState(false);
const {
register,
handleSubmit,
formState: { errors },
trigger
} = useForm<FormData>({
resolver: zodResolver(schema),
mode: 'onBlur'
});
const onSubmit: SubmitHandler<FormData> = async (data) => {
setIsSubmitting(true);
try {
const response = await fetch('/api/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (!response.ok) throw new Error('Kayıt başarısız oldu');
// Başarıyı yönet
console.log('Kullanıcı kaydedildi:', await response.json());
} catch (error) {
console.error('Kayıt hatası:', error);
} finally {
setIsSubmitting(false);
}
};
return (
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4 max-w-md">
<div>
<label htmlFor="name" className="block text-sm font-medium text-gray-700">
Ad
</label>
<input
id="name"
{...register('name')}
className={clsx(
'mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500',
errors.name && 'border-red-500'
)}
/>
{errors.name && (
<p className="mt-1 text-sm text-red-600">{errors.name.message}</p>
)}
</div>
<div>
<label htmlFor="email" className="block text-sm font-medium text-gray-700">
E-posta
</label>
<input
id="email"
type="email"
{...register('email')}
className={clsx(
'mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500',
errors.email && 'border-red-500'
)}
/>
{errors.email && (
<p className="mt-1 text-sm text-red-600">{errors.email.message}</p>
)}
</div>
<div>
<label htmlFor="password" className="block text-sm font-medium text-gray-700">
Parola
</label>
<input
id="password"
type="password"
{...register('password')}
className={clsx(
'mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500',
errors.password && 'border-red-500'
)}
/>
{errors.password && (
<p className="mt-1 text-sm text-red-600">{errors.password.message}</p>
)}
</div>
<div className="flex items-center">
<input
id="acceptTerms"
type="checkbox"
{...register('acceptTerms')}
className="h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"
/>
<label htmlFor="acceptTerms" className="ml-2 block text-sm text-gray-900">
Şartları ve koşulları kabul ediyorum
</label>
</div>
{errors.acceptTerms && (
<p className="text-sm text-red-600">{errors.acceptTerms.message}</p>
)}
<button
type="submit"
disabled={isSubmitting}
className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50"
>
{isSubmitting ? 'Kaydediliyor...' : 'Kaydol'}
</button>
</form>
);
};
Beceri, react-hook-form, zod doğrulamasını, erişilebilirlik özelliklerini ve yükleme durumlarını otomatik olarak ayarlar.
Gelişmiş Teknikler Kullanarak Dinamik UI Oluşturma
Koşullu Render Mantığı
Bazı UI'lar parametrelere bağlı olarak koşullu bölümler gerektirir. Beceri, alan tanımlarında conditions'ı destekler:
"accountType" "business" ise "company" alanının yalnızca göründüğü bir kullanıcı profili formu oluşturun.
Bu, koşullu render özelliğine sahip bir form üretir:
{accountType === 'business' && (
<div>
<label htmlFor="company">Şirket</label>
<input id="company" {...register('company')} />
</div>
)}
Bileşen Kompozisyonu
Beceri çağrılarını zincirleyerek karmaşık UI'lar oluşturun:
İlk olarak, kenar çubuğu ve başlığı olan bir DashboardLayout bileşeni oluşturun. Ardından, metrikler için bir StatCard bileşeni oluşturun. Son olarak, her ikisine de koyu tema uygulayın.
Claude Code bunları sırayla yürütür ve çağrılar arasında bağlam aktarır. Düzen bileşeni, kart oluşturulurken kullanılabilir, bu da doğru entegrasyonu sağlar.
Çalışma Zamanında Tema Değiştirme
Beceriyi, tema farkında kod yaymak üzere yapılandırın:
{
"building-ui": {
"command": "node",
"args": ["dist/index.js"],
"env": {
"UI_LIBRARY": "react",
"STYLE_SYSTEM": "tailwind",
"THEME_CONFIG": "~/project/themes.json",
"SUPPORT_THEME_TOGGLE": "true"
}
}
}
Şimdi oluşturulan bileşenler bir ThemeProvider sarmalayıcısı içerir:
// App.tsx
import { ThemeProvider } from './ThemeProvider';
import { DashboardLayout } from './DashboardLayout';
function App() {
return (
<ThemeProvider defaultTheme="light" enableSystem>
<DashboardLayout />
</ThemeProvider>
);
}
UI Oluşturma Becerilerinde Hata Ayıklama ve Yineleme
.claude-cache İçindeki Oluşturulan Kodu Görüntüleme
Claude Code, beceri çıktılarını önbelleğe alır. Onları inceleyin:
# macOS/Linux
cat ~/.cache/claude-code/last-skill-output.tsx
# Windows
type %APPDATA%\claude-code\last-skill-output.tsx
Oluşturulan kod beklentilerle eşleşmiyorsa, parametrelerinizi iyileştirin. Daha fazla ayrıntı ekleyin:
Şunun yerine: "Bir kart oluştur"
Şunu kullanın: "16px dolgu, 8px kenarlık yarıçapı ve hafif bir kutu gölgeli bir kart oluştur"
Proje Başına Beceri Varsayılanlarını Geçersiz Kılma
Proje kök dizininizde .claude-ui-config.json oluşturun:
{
"uiLibrary": "vue",
"styleSystem": "css-modules",
"themeConfig": "./design-tokens.json"
}
Bu, yalnızca o proje için genel MCP ayarlarını geçersiz kılar.
Becerileri Sürümleme
building-ui becerisini güncellediğinizde, sürümleri etiketleyin:
cd skills/building-ui
npm version patch # Veya minor/major
git tag -a v1.1.0 -m "Vue 3.5 desteği eklendi"
Sürümleri sabitlemek için Claude Code yapılandırmasını güncelleyin:
{
"mcpServers": {
"building-ui": {
"command": "node",
"args": ["/path/to/skills/building-ui-v1.1.0/dist/index.js"]
}
}
}
Bu, bozulmaya yol açan değişikliklerin üretim iş akışlarını etkilemesini önler.
Sonuç
UI oluşturmaya yönelik Claude Code Becerileri, doğal dili cerrahi hassasiyetle üretime hazır bileşenlere, düzenlere, temalara ve formlara dönüştürür. Kuruluma 15 dakika ayırarak, tasarım tutarlılığını sağlayan, hazır kodları ortadan kaldıran ve özellik geliştirmeyi hızlandıran yeniden kullanılabilir bir araç seti elde edersiniz. Dört temel araçla başlayın—bileşen oluşturma, düzen oluşturma, tema uygulama ve form oluşturma—ardından belirli tasarım sisteminiz için bunları genişletin.
Becerileriniz API tüketen UI'lar oluşturduğunda, yapay zeka tarafından oluşturulan arayüzlerinizin güvenilir arka uçlarla iletişim kurduğundan emin olmak için bu uç noktaları Apidog ile doğrulayın.
