@hd-agent-kit/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -0
- package/bin/cli.js +52 -0
- package/package.json +27 -0
- package/src/index.js +151 -0
- package/templates/.agents/skills/analyze/SKILL.md +328 -0
- package/templates/.agents/skills/commit/SKILL.md +257 -0
- package/templates/.agents/skills/document/SKILL.md +322 -0
- package/templates/.agents/skills/performance-check/SKILL.md +250 -0
- package/templates/.agents/skills/refactor/SKILL.md +240 -0
- package/templates/.agents/skills/security-scan/SKILL.md +319 -0
- package/templates/.agents/skills/write-tests/SKILL.md +389 -0
- package/templates/AGENTS.md +823 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# /commit — Akıllı Commit Skill'i
|
|
2
|
+
|
|
3
|
+
> **Tetikleyici:** `/commit`
|
|
4
|
+
> **Amaç:** Mevcut değişiklikleri analiz ederek uygun, anlamlı bir commit mesajı önermek ve kullanıcı onayıyla commit oluşturmak.
|
|
5
|
+
> **Çıktı:** Commit mesaj önerisi → Onay → Commit
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Temel İlkeler
|
|
10
|
+
|
|
11
|
+
- **Commit mesajı her zaman İngilizce olmalı** (proje kurallarında farklı bir dil belirtilmediği sürece).
|
|
12
|
+
- **Proje kuralları öncelikli.** `project-rules.md` dosyasında Git/commit kuralları varsa onlara uy.
|
|
13
|
+
- **Conventional Commits formatı varsayılan.** Proje kurallarında farklı bir format belirtilmediği sürece.
|
|
14
|
+
- **Asla otomatik commit yapma.** Önce öneri sun, onay al, sonra commit et.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Uygulama Adımları
|
|
19
|
+
|
|
20
|
+
### Adım 1: Proje Commit Convention Tespiti
|
|
21
|
+
|
|
22
|
+
Önce projedeki mevcut commit kurallarını tespit et:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Kontrol sırası:
|
|
26
|
+
1. project-rules.md → "Git Kuralları" bölümü var mı?
|
|
27
|
+
2. .commitlintrc / commitlint.config.js → Commitlint kuralları var mı?
|
|
28
|
+
3. .czrc / .cz.json / package.json "config.commitizen" → Commitizen config var mı?
|
|
29
|
+
4. Son 10-15 commit mesajını incele (git log --oneline -15) → Mevcut pattern ne?
|
|
30
|
+
5. CONTRIBUTING.md → Commit format rehberi var mı?
|
|
31
|
+
6. Husky / lint-staged → Pre-commit hook'lar var mı?
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Tespit sonuçlarını not al:**
|
|
35
|
+
- Commit format: [Conventional Commits / Gitmoji / Serbest / Özel format]
|
|
36
|
+
- Dil: [İngilizce / Türkçe / Karma]
|
|
37
|
+
- Scope zorunlu mu: [Evet / Hayır]
|
|
38
|
+
- Body/footer convention: [var/yok]
|
|
39
|
+
- Breaking change formatı: [var/yok]
|
|
40
|
+
- Issue/ticket referansı: [var/yok, format: #123 / JIRA-123 / LINEAR-123]
|
|
41
|
+
|
|
42
|
+
### Adım 2: Değişiklikleri Analiz Et
|
|
43
|
+
|
|
44
|
+
Aşağıdaki git komutlarını çalıştır:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Staged ve unstaged değişiklikleri gör
|
|
48
|
+
git status
|
|
49
|
+
|
|
50
|
+
# Staged değişikliklerin detayı
|
|
51
|
+
git diff --cached
|
|
52
|
+
|
|
53
|
+
# Unstaged değişikliklerin detayı (staged yoksa)
|
|
54
|
+
git diff
|
|
55
|
+
|
|
56
|
+
# Yeni eklenen dosyalar
|
|
57
|
+
git ls-files --others --exclude-standard
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Değişiklik analizi:**
|
|
61
|
+
- Hangi dosyalar değişmiş?
|
|
62
|
+
- Değişiklik tipi ne? (yeni özellik, bug fix, refactor, stil, test, docs, chore)
|
|
63
|
+
- Kaç dosya etkilenmiş?
|
|
64
|
+
- Breaking change var mı?
|
|
65
|
+
- Birden fazla bağımsız değişiklik var mı? (ayrı commit önerisi gerekebilir)
|
|
66
|
+
|
|
67
|
+
### Adım 3: Commit Mesajı Oluştur
|
|
68
|
+
|
|
69
|
+
#### Conventional Commits Formatı (Varsayılan)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
<type>(<scope>): <description>
|
|
73
|
+
|
|
74
|
+
[optional body]
|
|
75
|
+
|
|
76
|
+
[optional footer(s)]
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Type seçimi:**
|
|
80
|
+
|
|
81
|
+
| Type | Kullanım |
|
|
82
|
+
|------|----------|
|
|
83
|
+
| `feat` | Yeni özellik ekleme |
|
|
84
|
+
| `fix` | Bug düzeltme |
|
|
85
|
+
| `refactor` | Kod yapısı değişikliği (davranış değişmez) |
|
|
86
|
+
| `style` | Formatlama, boşluk, noktalama (kod değişmez) |
|
|
87
|
+
| `docs` | Dokümantasyon değişikliği |
|
|
88
|
+
| `test` | Test ekleme/düzeltme |
|
|
89
|
+
| `chore` | Build, CI, dependency, config değişiklikleri |
|
|
90
|
+
| `perf` | Performans iyileştirmesi |
|
|
91
|
+
| `ci` | CI/CD pipeline değişiklikleri |
|
|
92
|
+
| `build` | Build sistemi veya bağımlılık değişiklikleri |
|
|
93
|
+
| `revert` | Önceki commit'i geri alma |
|
|
94
|
+
|
|
95
|
+
**Scope belirleme:**
|
|
96
|
+
- Değişiklik tek bir modül/feature'a aitse: `feat(auth): add login form validation`
|
|
97
|
+
- Değişiklik genel ise: `fix: resolve memory leak in event listeners`
|
|
98
|
+
- Proje scope convention'ı varsa ona uy
|
|
99
|
+
|
|
100
|
+
**Description kuralları:**
|
|
101
|
+
- İngilizce, küçük harfle başla
|
|
102
|
+
- Imperative mood kullan ("add" not "added", "fix" not "fixed")
|
|
103
|
+
- 50 karakteri geçme (type ve scope dahil ~72 karakter)
|
|
104
|
+
- Nokta ile bitirme
|
|
105
|
+
- "Ne" yapıldığını değil "neden" yapıldığını vurgula (mümkünse)
|
|
106
|
+
|
|
107
|
+
**Body kuralları (opsiyonel):**
|
|
108
|
+
- Description yeterli değilse detay ekle
|
|
109
|
+
- "Ne" ve "neden" sorusuna cevap ver
|
|
110
|
+
- 72 karakter satır limiti
|
|
111
|
+
- Boş satırla description'dan ayır
|
|
112
|
+
|
|
113
|
+
**Footer kuralları (opsiyonel):**
|
|
114
|
+
- Breaking change: `BREAKING CHANGE: <açıklama>`
|
|
115
|
+
- Issue referansı: `Closes #123`, `Fixes #456`, `Refs JIRA-789`
|
|
116
|
+
|
|
117
|
+
### Adım 4: Öneriyi Sun
|
|
118
|
+
|
|
119
|
+
Kullanıcıya şu formatta sun:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
📋 Değişiklik Özeti:
|
|
123
|
+
- [N] dosya değişti
|
|
124
|
+
- [kısa açıklama]
|
|
125
|
+
|
|
126
|
+
💬 Commit Mesajı Önerisi:
|
|
127
|
+
|
|
128
|
+
feat(auth): add email validation to login form
|
|
129
|
+
|
|
130
|
+
Add Zod schema validation for email and password fields.
|
|
131
|
+
Display inline error messages on invalid input.
|
|
132
|
+
|
|
133
|
+
Closes #42
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
Bu mesajı kullanmak ister misiniz?
|
|
137
|
+
(E) Onayla | (D) Düzenle | (İ) İptal
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Birden fazla bağımsız değişiklik varsa:**
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
⚠️ Birden fazla bağımsız değişiklik tespit ettim.
|
|
144
|
+
Bunları ayrı commit'lere ayırmayı öneriyorum:
|
|
145
|
+
|
|
146
|
+
Commit 1: feat(auth): add email validation to login form
|
|
147
|
+
Dosyalar: src/features/auth/LoginForm.tsx, src/schemas/auth.ts
|
|
148
|
+
|
|
149
|
+
Commit 2: fix(ui): resolve button hover state on mobile
|
|
150
|
+
Dosyalar: src/components/Button.tsx
|
|
151
|
+
|
|
152
|
+
Ayrı commit'ler olarak mı, tek commit mi oluşturalım?
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Adım 5: Commit Oluştur
|
|
156
|
+
|
|
157
|
+
Kullanıcı onayladıktan sonra:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# Değişiklikleri stage'le (henüz staged değilse)
|
|
161
|
+
git add <ilgili dosyalar>
|
|
162
|
+
|
|
163
|
+
# Commit oluştur
|
|
164
|
+
git commit -m "<onaylanan mesaj>"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Dikkat:**
|
|
168
|
+
- `git add .` veya `git add -A` kullanma — sadece ilgili dosyaları stage'le
|
|
169
|
+
- Sensitive dosyaları (.env, credentials) commit'leme, uyar
|
|
170
|
+
- Pre-commit hook varsa ve başarısız olursa, sorunu düzelt ve YENİ commit oluştur (amend yapma)
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Özel Durumlar
|
|
175
|
+
|
|
176
|
+
### Gitmoji Projesi
|
|
177
|
+
|
|
178
|
+
Projede gitmoji kullanılıyorsa:
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
🎨 :art: — Kod yapısı/formatı iyileştirme
|
|
182
|
+
⚡ :zap: — Performans iyileştirme
|
|
183
|
+
🔥 :fire: — Kod/dosya silme
|
|
184
|
+
🐛 :bug: — Bug düzeltme
|
|
185
|
+
✨ :sparkles: — Yeni özellik
|
|
186
|
+
📝 :memo: — Dokümantasyon
|
|
187
|
+
🚀 :rocket: — Deploy
|
|
188
|
+
💄 :lipstick: — UI/stil güncelleme
|
|
189
|
+
🎉 :tada: — İlk commit
|
|
190
|
+
✅ :white_check_mark: — Test ekleme/düzeltme
|
|
191
|
+
🔒 :lock: — Güvenlik düzeltme
|
|
192
|
+
♻️ :recycle: — Refactor
|
|
193
|
+
➕ :heavy_plus_sign: — Dependency ekleme
|
|
194
|
+
➖ :heavy_minus_sign: — Dependency silme
|
|
195
|
+
🔧 :wrench: — Config değişikliği
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Monorepo Projeleri
|
|
199
|
+
|
|
200
|
+
Scope olarak paket/app adını kullan:
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
feat(web): add dark mode toggle
|
|
204
|
+
fix(ui-kit): resolve button focus ring color
|
|
205
|
+
chore(shared): update zod to v4
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Boş Değişiklik
|
|
209
|
+
|
|
210
|
+
Stage'de veya working tree'de değişiklik yoksa:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
ℹ️ Commit edilecek değişiklik bulunamadı.
|
|
214
|
+
Tüm değişiklikler zaten commit edilmiş görünüyor.
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Merge Conflict Sonrası
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
⚠️ Merge sonrası commit tespit ettim.
|
|
221
|
+
Varsayılan merge commit mesajını kullanmanızı öneriyorum:
|
|
222
|
+
|
|
223
|
+
Merge branch 'feature/auth' into develop
|
|
224
|
+
|
|
225
|
+
Özelleştirmek ister misiniz?
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Kötü vs İyi Commit Mesajları
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
❌ Kötü:
|
|
234
|
+
- "fix bug"
|
|
235
|
+
- "update code"
|
|
236
|
+
- "changes"
|
|
237
|
+
- "wip"
|
|
238
|
+
- "asdfgh"
|
|
239
|
+
- "fix: fixed the thing that was broken"
|
|
240
|
+
|
|
241
|
+
✅ İyi:
|
|
242
|
+
- "fix(cart): prevent duplicate items on rapid add-to-cart clicks"
|
|
243
|
+
- "feat(search): add debounced search with 300ms delay"
|
|
244
|
+
- "refactor(api): extract auth middleware into separate module"
|
|
245
|
+
- "chore(deps): upgrade next.js from 14.2 to 15.0"
|
|
246
|
+
- "docs(readme): add environment setup instructions"
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Çıktı Formatı
|
|
252
|
+
|
|
253
|
+
1. **Proje convention tespiti** — Mevcut commit formatı ne?
|
|
254
|
+
2. **Değişiklik özeti** — Hangi dosyalar, ne tip değişiklik
|
|
255
|
+
3. **Commit mesaj önerisi** — Convention'a uygun, anlamlı mesaj
|
|
256
|
+
4. **Kullanıcı onayı** — Onayla / Düzenle / İptal
|
|
257
|
+
5. **Commit oluşturma** — Onay sonrası git commit
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# /document — Dokümantasyon Skill'i
|
|
2
|
+
|
|
3
|
+
> **Tetikleyici:** `/document [dosya/modül/proje]`
|
|
4
|
+
> **Amaç:** JSDoc/TSDoc comment'leri, README veya API dokümantasyonu üretmek.
|
|
5
|
+
> **Çıktı:** Mevcut dokümantasyon stiline uygun, kapsamlı dokümantasyon
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Temel İlkeler
|
|
10
|
+
|
|
11
|
+
- **Mevcut dokümantasyon stiline uy.** Projede JSDoc varsa JSDoc, TSDoc varsa TSDoc devam et.
|
|
12
|
+
- **Gereksiz yorum yazma.** Kodu açıklayan değil, "neden"i açıklayan yorumlar yaz.
|
|
13
|
+
- **Güncel tut.** Kod değiştiğinde dokümantasyonun da güncellenmesi gerektiğini belirt.
|
|
14
|
+
- **Tutarlılık.** Tüm dokümantasyon aynı formatta ve dilde olsun.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Kullanım Formatları
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/document src/components/Button.tsx ← Dosya seviyesi JSDoc/TSDoc
|
|
22
|
+
/document src/hooks/ ← Klasör seviyesi (tüm dosyalar)
|
|
23
|
+
/document src/services/api.ts ← API service dokümantasyonu
|
|
24
|
+
/document project ← Proje README oluştur
|
|
25
|
+
/document api ← API endpoint dokümantasyonu
|
|
26
|
+
/document UserService ← Modül adı ile
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Uygulama Adımları
|
|
32
|
+
|
|
33
|
+
### Adım 1: Hedef Analizi
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
📋 Dokümantasyon Hedefi:
|
|
37
|
+
├── Hedef: [dosya / klasör / proje / API]
|
|
38
|
+
├── Mevcut dokümantasyon: [var/yok, format]
|
|
39
|
+
├── Dokümantasyon dili: [Türkçe / İngilizce — projeden tespit et]
|
|
40
|
+
├── Mevcut JSDoc/TSDoc stili: [format örneği]
|
|
41
|
+
└── Hedef kitle: [Geliştirici / Son kullanıcı / Her ikisi]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Adım 2: Dokümantasyon Tipi Belirleme
|
|
45
|
+
|
|
46
|
+
Hedefe göre uygun dokümantasyon tipini seç:
|
|
47
|
+
|
|
48
|
+
| Hedef | Dokümantasyon Tipi |
|
|
49
|
+
|-------|-------------------|
|
|
50
|
+
| Tekil dosya (component/hook/util) | JSDoc/TSDoc inline comment'leri |
|
|
51
|
+
| Service/API katmanı | API dokümantasyonu + JSDoc |
|
|
52
|
+
| Tüm proje | README.md + CONTRIBUTING.md |
|
|
53
|
+
| Kütüphane/paket | API reference + kullanım örnekleri |
|
|
54
|
+
| Klasör | Her dosya için JSDoc + klasör INDEX.md |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Dosya Seviyesi Dokümantasyon (JSDoc/TSDoc)
|
|
59
|
+
|
|
60
|
+
### Component Dokümantasyonu
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
/**
|
|
64
|
+
* Kullanıcı profil kartını görüntüler.
|
|
65
|
+
*
|
|
66
|
+
* Avatar, isim, rol bilgisi ve aksiyonları içerir.
|
|
67
|
+
* Responsive tasarıma sahiptir ve mobilde stack layout'a geçer.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* <UserCard
|
|
72
|
+
* user={userData}
|
|
73
|
+
* onEdit={handleEdit}
|
|
74
|
+
* variant="compact"
|
|
75
|
+
* />
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @see {@link UserCardProps} — Props detayları
|
|
79
|
+
* @see {@link useUser} — İlgili hook
|
|
80
|
+
*/
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Props/Interface Dokümantasyonu
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
/**
|
|
87
|
+
* UserCard component'inin prop tanımları.
|
|
88
|
+
*/
|
|
89
|
+
interface UserCardProps {
|
|
90
|
+
/** Görüntülenecek kullanıcı verisi */
|
|
91
|
+
user: User;
|
|
92
|
+
|
|
93
|
+
/** Kart görünüm varyantı
|
|
94
|
+
* - `default`: Tam genişlik, tüm bilgiler
|
|
95
|
+
* - `compact`: Küçük boyut, sadece temel bilgiler
|
|
96
|
+
* - `minimal`: Sadece avatar ve isim
|
|
97
|
+
* @default 'default'
|
|
98
|
+
*/
|
|
99
|
+
variant?: 'default' | 'compact' | 'minimal';
|
|
100
|
+
|
|
101
|
+
/** Düzenleme butonuna tıklandığında çağrılır */
|
|
102
|
+
onEdit?: (userId: string) => void;
|
|
103
|
+
|
|
104
|
+
/** Kartın yüklenme durumunu gösterir
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
107
|
+
isLoading?: boolean;
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Hook Dokümantasyonu
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
/**
|
|
115
|
+
* Kullanıcı kimlik doğrulama state'ini ve işlemlerini yönetir.
|
|
116
|
+
*
|
|
117
|
+
* Login, logout, token yenileme ve kullanıcı bilgisi sorgulama
|
|
118
|
+
* işlemlerini tek bir hook altında toplar.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```tsx
|
|
122
|
+
* function LoginPage() {
|
|
123
|
+
* const { user, login, logout, isAuthenticated } = useAuth();
|
|
124
|
+
*
|
|
125
|
+
* if (isAuthenticated) {
|
|
126
|
+
* return <Dashboard user={user} onLogout={logout} />;
|
|
127
|
+
* }
|
|
128
|
+
* return <LoginForm onSubmit={login} />;
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @returns Auth state ve işlemleri
|
|
133
|
+
* @throws {AuthError} Token geçersiz olduğunda
|
|
134
|
+
*
|
|
135
|
+
* @see {@link AuthProvider} — Gerekli context provider
|
|
136
|
+
* @see {@link usePermissions} — İlgili yetki hook'u
|
|
137
|
+
*/
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Utility/Service Dokümantasyonu
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
/**
|
|
144
|
+
* Tarih değerini kullanıcı dostu formata dönüştürür.
|
|
145
|
+
*
|
|
146
|
+
* Locale-aware formatlama yapar ve relative time desteği sunar.
|
|
147
|
+
*
|
|
148
|
+
* @param date - Formatlanacak tarih (Date, string veya timestamp)
|
|
149
|
+
* @param options - Formatlama seçenekleri
|
|
150
|
+
* @param options.format - Çıktı formatı ('short' | 'long' | 'relative')
|
|
151
|
+
* @param options.locale - Hedef locale (varsayılan: 'tr-TR')
|
|
152
|
+
* @returns Formatlanmış tarih string'i
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* formatDate(new Date()) // "17 Şubat 2026"
|
|
157
|
+
* formatDate('2026-01-01', { format: 'relative' }) // "47 gün önce"
|
|
158
|
+
* formatDate(1708128000, { format: 'short' }) // "17.02.2026"
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* @throws {TypeError} Geçersiz tarih değeri verildiğinde
|
|
162
|
+
*/
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Proje Seviyesi Dokümantasyon
|
|
168
|
+
|
|
169
|
+
### README.md Şablonu
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
# Proje Adı
|
|
173
|
+
|
|
174
|
+
Kısa açıklama — projenin ne yaptığı, 1-2 cümle.
|
|
175
|
+
|
|
176
|
+
## Özellikler
|
|
177
|
+
|
|
178
|
+
- Özellik 1
|
|
179
|
+
- Özellik 2
|
|
180
|
+
- Özellik 3
|
|
181
|
+
|
|
182
|
+
## Teknolojiler
|
|
183
|
+
|
|
184
|
+
| Kategori | Teknoloji |
|
|
185
|
+
|----------|-----------|
|
|
186
|
+
| Framework | Next.js 15 |
|
|
187
|
+
| Styling | Tailwind CSS 4 |
|
|
188
|
+
| State | Zustand |
|
|
189
|
+
| Test | Vitest + Testing Library |
|
|
190
|
+
|
|
191
|
+
## Başlangıç
|
|
192
|
+
|
|
193
|
+
### Gereksinimler
|
|
194
|
+
|
|
195
|
+
- Node.js >= 20
|
|
196
|
+
- pnpm >= 9
|
|
197
|
+
|
|
198
|
+
### Kurulum
|
|
199
|
+
|
|
200
|
+
\```bash
|
|
201
|
+
pnpm install
|
|
202
|
+
cp .env.example .env.local
|
|
203
|
+
pnpm dev
|
|
204
|
+
\```
|
|
205
|
+
|
|
206
|
+
### Ortam Değişkenleri
|
|
207
|
+
|
|
208
|
+
| Değişken | Açıklama | Zorunlu |
|
|
209
|
+
|----------|----------|---------|
|
|
210
|
+
| `DATABASE_URL` | PostgreSQL bağlantı URL'i | Evet |
|
|
211
|
+
| `NEXT_PUBLIC_API_URL` | API base URL | Evet |
|
|
212
|
+
|
|
213
|
+
## Proje Yapısı
|
|
214
|
+
|
|
215
|
+
\```
|
|
216
|
+
src/
|
|
217
|
+
├── app/ → Next.js App Router sayfaları
|
|
218
|
+
├── components/ → Paylaşılan UI component'leri
|
|
219
|
+
├── features/ → Feature-based modüller
|
|
220
|
+
├── hooks/ → Custom React hook'ları
|
|
221
|
+
├── lib/ → Utility ve helper fonksiyonlar
|
|
222
|
+
├── services/ → API service katmanı
|
|
223
|
+
├── store/ → Global state yönetimi
|
|
224
|
+
└── types/ → TypeScript tip tanımları
|
|
225
|
+
\```
|
|
226
|
+
|
|
227
|
+
## Script'ler
|
|
228
|
+
|
|
229
|
+
| Komut | Açıklama |
|
|
230
|
+
|-------|----------|
|
|
231
|
+
| `pnpm dev` | Development server başlat |
|
|
232
|
+
| `pnpm build` | Production build oluştur |
|
|
233
|
+
| `pnpm test` | Test'leri çalıştır |
|
|
234
|
+
| `pnpm lint` | Linting kontrolü |
|
|
235
|
+
|
|
236
|
+
## Katkıda Bulunma
|
|
237
|
+
|
|
238
|
+
[CONTRIBUTING.md](./CONTRIBUTING.md) dosyasına bakın.
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### API Dokümantasyonu Şablonu
|
|
242
|
+
|
|
243
|
+
```markdown
|
|
244
|
+
# API Dokümantasyonu
|
|
245
|
+
|
|
246
|
+
## Base URL
|
|
247
|
+
\`\`\`
|
|
248
|
+
Development: http://localhost:3000/api
|
|
249
|
+
Production: https://api.example.com
|
|
250
|
+
\`\`\`
|
|
251
|
+
|
|
252
|
+
## Endpoints
|
|
253
|
+
|
|
254
|
+
### Users
|
|
255
|
+
|
|
256
|
+
#### GET /api/users
|
|
257
|
+
Tüm kullanıcıları listeler.
|
|
258
|
+
|
|
259
|
+
**Query Parameters:**
|
|
260
|
+
| Parametre | Tip | Zorunlu | Açıklama |
|
|
261
|
+
|-----------|-----|---------|----------|
|
|
262
|
+
| page | number | Hayır | Sayfa numarası (varsayılan: 1) |
|
|
263
|
+
| limit | number | Hayır | Sayfa başına kayıt (varsayılan: 20) |
|
|
264
|
+
| search | string | Hayır | İsim veya email ile arama |
|
|
265
|
+
|
|
266
|
+
**Response (200):**
|
|
267
|
+
\`\`\`json
|
|
268
|
+
{
|
|
269
|
+
"data": [{ "id": "1", "name": "John", "email": "john@example.com" }],
|
|
270
|
+
"meta": { "total": 100, "page": 1, "limit": 20 }
|
|
271
|
+
}
|
|
272
|
+
\`\`\`
|
|
273
|
+
|
|
274
|
+
**Error Responses:**
|
|
275
|
+
| Status | Code | Açıklama |
|
|
276
|
+
|--------|------|----------|
|
|
277
|
+
| 401 | UNAUTHORIZED | Token eksik veya geçersiz |
|
|
278
|
+
| 500 | INTERNAL_ERROR | Sunucu hatası |
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Dokümantasyon Kalite Kuralları
|
|
284
|
+
|
|
285
|
+
### YAPILACAKLAR
|
|
286
|
+
- Her public fonksiyon/component'e `@example` ekle
|
|
287
|
+
- Parametre ve return tiplerini açıkla
|
|
288
|
+
- Side effect'leri belirt (`@throws`, `@fires`, `@emits`)
|
|
289
|
+
- İlgili dosyalara cross-reference ver (`@see`)
|
|
290
|
+
- Deprecation uyarılarını ekle (`@deprecated`)
|
|
291
|
+
|
|
292
|
+
### YAPILMAYACAKLAR
|
|
293
|
+
- Kodun ne yaptığını tekrar etme (kodu oku zaten anlarsın)
|
|
294
|
+
- Getter/setter gibi trivial fonksiyonları dokümante etme
|
|
295
|
+
- Private/internal fonksiyonları aşırı dokümante etme
|
|
296
|
+
- Tarihi bilgi ekleme ("Bu fonksiyon v2.0'da eklendi" gibi — git log var)
|
|
297
|
+
|
|
298
|
+
### İyi vs Kötü Dokümantasyon
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
// ❌ Kötü — kodu tekrar ediyor
|
|
302
|
+
/** Kullanıcı ID'sini döndürür */
|
|
303
|
+
function getUserId(): string { ... }
|
|
304
|
+
|
|
305
|
+
// ✅ İyi — "neden" ve "ne zaman" açıklıyor
|
|
306
|
+
/**
|
|
307
|
+
* Oturum açmış kullanıcının ID'sini döndürür.
|
|
308
|
+
* Auth context'ten okur; context dışında kullanılırsa hata fırlatır.
|
|
309
|
+
* @throws {AuthError} AuthProvider dışında çağrıldığında
|
|
310
|
+
*/
|
|
311
|
+
function getUserId(): string { ... }
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Çıktı Formatı
|
|
317
|
+
|
|
318
|
+
1. **Dokümantasyon planı** — Ne dokümante edilecek, hangi formatta
|
|
319
|
+
2. **Mevcut stil analizi** — Projedeki dokümantasyon convention'ı
|
|
320
|
+
3. **Kullanıcı onayı** — Plan uygun mu?
|
|
321
|
+
4. **Dokümantasyon üretimi** — İnline JSDoc veya ayrı dosya
|
|
322
|
+
5. **Gözden geçirme** — Eksik/tutarsız yer var mı kontrolü
|