tillerhand 3.43.0 → 3.47.1

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.
Files changed (185) hide show
  1. package/.claude/agents/board-chair.md +20 -20
  2. package/.claude/agents/code-reviewer.md +20 -20
  3. package/.claude/agents/council-advisor.md +14 -14
  4. package/.claude/agents/security-auditor.md +30 -30
  5. package/.claude/agents/test-writer.md +22 -22
  6. package/.claude/board/board-ai.md +25 -25
  7. package/.claude/board/board-api.md +25 -25
  8. package/.claude/board/board-architect.md +28 -28
  9. package/.claude/board/board-devops.md +25 -25
  10. package/.claude/board/board-mobile.md +25 -25
  11. package/.claude/board/board-performance.md +24 -24
  12. package/.claude/board/board-privacy.md +25 -25
  13. package/.claude/board/board-product.md +26 -26
  14. package/.claude/board/board-qa.md +28 -28
  15. package/.claude/board/board-ux.md +26 -26
  16. package/.claude/board/council.md +76 -76
  17. package/.claude/board/rules.md +61 -61
  18. package/.claude/claude-security-guidance.md +10 -10
  19. package/.claude/commands/adopt.md +70 -69
  20. package/.claude/commands/ask-mode.md +9 -9
  21. package/.claude/commands/board.md +15 -15
  22. package/.claude/commands/build.md +47 -47
  23. package/.claude/commands/dashboard.md +17 -17
  24. package/.claude/commands/design.md +31 -31
  25. package/.claude/commands/findings-all.md +14 -14
  26. package/.claude/commands/findings-business.md +7 -7
  27. package/.claude/commands/findings-legal.md +7 -7
  28. package/.claude/commands/findings-perf.md +7 -7
  29. package/.claude/commands/findings-security.md +9 -9
  30. package/.claude/commands/findings-tech.md +7 -7
  31. package/.claude/commands/findings-ux.md +7 -7
  32. package/.claude/commands/fix-bug.md +15 -15
  33. package/.claude/commands/freeze.md +8 -8
  34. package/.claude/commands/handoff.md +38 -38
  35. package/.claude/commands/kit-update.md +17 -14
  36. package/.claude/commands/language.md +13 -0
  37. package/.claude/commands/maintain.md +19 -19
  38. package/.claude/commands/plan-task.md +32 -32
  39. package/.claude/commands/qa.md +17 -17
  40. package/.claude/commands/release.md +40 -40
  41. package/.claude/commands/research.md +31 -31
  42. package/.claude/commands/retro.md +32 -32
  43. package/.claude/commands/review-changes.md +15 -15
  44. package/.claude/commands/rollback.md +24 -24
  45. package/.claude/commands/start.md +116 -113
  46. package/.claude/commands/tools.md +11 -11
  47. package/.claude/commands/user-feedback.md +11 -11
  48. package/.claude/commands/wrap-up.md +18 -18
  49. package/.claude/findings/lenses/business.md +24 -24
  50. package/.claude/findings/lenses/legal.md +29 -29
  51. package/.claude/findings/lenses/perf.md +19 -19
  52. package/.claude/findings/lenses/security.md +30 -30
  53. package/.claude/findings/lenses/tech.md +23 -23
  54. package/.claude/findings/lenses/ux.md +19 -19
  55. package/.claude/findings/protocol.md +54 -54
  56. package/.claude/findings/report-template.md +30 -30
  57. package/.claude/hooks/budget.mjs +7 -7
  58. package/.claude/hooks/checkpoint.mjs +12 -12
  59. package/.claude/hooks/commit-gate.mjs +38 -37
  60. package/.claude/hooks/cost.mjs +2 -2
  61. package/.claude/hooks/council.mjs +3 -3
  62. package/.claude/hooks/dashboard-data.mjs +4 -3
  63. package/.claude/hooks/dashboard.mjs +164 -149
  64. package/.claude/hooks/destructive-guard.mjs +74 -64
  65. package/.claude/hooks/edit-rounds.mjs +3 -3
  66. package/.claude/hooks/flow.mjs +10 -10
  67. package/.claude/hooks/freeze-guard.mjs +27 -23
  68. package/.claude/hooks/gate.mjs +25 -25
  69. package/.claude/hooks/guard-secrets.mjs +11 -11
  70. package/.claude/hooks/lang.mjs +114 -0
  71. package/.claude/hooks/messages.mjs +495 -0
  72. package/.claude/hooks/models.mjs +14 -11
  73. package/.claude/hooks/notify.mjs +3 -2
  74. package/.claude/hooks/package-gate.mjs +17 -15
  75. package/.claude/hooks/plugins-sync.mjs +9 -9
  76. package/.claude/hooks/prefs.mjs +19 -19
  77. package/.claude/hooks/preview.mjs +11 -11
  78. package/.claude/hooks/progress.mjs +14 -14
  79. package/.claude/hooks/qa-report.mjs +11 -10
  80. package/.claude/hooks/reminder.mjs +6 -3
  81. package/.claude/hooks/session-start.mjs +23 -17
  82. package/.claude/hooks/shared.mjs +1 -1
  83. package/.claude/hooks/status-read.mjs +5 -4
  84. package/.claude/hooks/statusline.mjs +14 -11
  85. package/.claude/hooks/structure-guard.mjs +9 -9
  86. package/.claude/hooks/test-guard.mjs +12 -12
  87. package/.claude/hooks/tools.mjs +28 -29
  88. package/.claude/hooks/usage.mjs +18 -15
  89. package/.claude/output-styles/anlatici.md +28 -28
  90. package/.claude/security-patterns.json +3 -3
  91. package/.claude/settings.json +2 -0
  92. package/.claude/skills/logo-design/SKILL.md +42 -42
  93. package/.claude/skills/motion-video/SKILL.md +52 -52
  94. package/.claude/skills/source-research/SKILL.md +35 -35
  95. package/.claude/skills/ui-motion/SKILL.md +38 -38
  96. package/.github/workflows/kit-tests.yml +7 -7
  97. package/.github/workflows/npm-publish.yml +16 -16
  98. package/AGENTS.md +56 -56
  99. package/CHANGELOG.md +7 -7
  100. package/CLAUDE.md +5 -5
  101. package/README.md +199 -172
  102. package/README.tr.md +292 -0
  103. package/docs/architecture/overview.md +31 -31
  104. package/docs/architecture/stack.md +2 -2
  105. package/docs/archive/README.md +4 -4
  106. package/docs/decisions/adr-template.md +14 -14
  107. package/docs/decisions/log.md +10 -10
  108. package/docs/findings/README.md +13 -13
  109. package/docs/findings/config.md +13 -13
  110. package/docs/legal/privacy-kvkk.md +1 -1
  111. package/docs/operations/accounts.md +25 -25
  112. package/docs/operations/deploy-setup.md +64 -64
  113. package/docs/operations/feature-flags.md +17 -17
  114. package/docs/operations/maintenance.md +48 -48
  115. package/docs/operations/release-checklist.md +61 -61
  116. package/docs/operations/spend-alarms.md +28 -28
  117. package/docs/product/feedback.md +9 -8
  118. package/docs/product/glossary.md +16 -16
  119. package/docs/product/launch.md +28 -28
  120. package/docs/product/prd.md +43 -42
  121. package/docs/product/roadmap.md +31 -30
  122. package/docs/product/specs/_template.md +13 -12
  123. package/docs/product/unit-economics.md +23 -22
  124. package/docs/quality/metrics.md +14 -14
  125. package/docs/quality/retros.md +11 -11
  126. package/docs/quality/test-plan.md +48 -48
  127. package/docs/security/checklist.md +57 -57
  128. package/docs/workflow/board.md +7 -7
  129. package/docs/workflow/cost-log.md +4 -4
  130. package/docs/workflow/decision-protocol.md +70 -70
  131. package/docs/workflow/learning.md +4 -4
  132. package/docs/workflow/mcp-catalog.md +31 -31
  133. package/docs/workflow/models.md +35 -35
  134. package/docs/workflow/progress.md +7 -7
  135. package/docs/workflow/skills.md +108 -108
  136. package/docs/workflow/usage-limits.md +62 -62
  137. package/kit/CHANGELOG.md +882 -841
  138. package/kit/VERSION +1 -1
  139. package/kit/guide.html +713 -477
  140. package/kit/guide.tr.html +1328 -0
  141. package/kit/kit.mjs +56 -54
  142. package/kit/project/README.md +29 -29
  143. package/kit/project/gitignore +12 -12
  144. package/kit/templates/addons/ai/.env.example.append +5 -5
  145. package/kit/templates/addons/ai/ai/evals/README.md +11 -11
  146. package/kit/templates/addons/ai/ai/evals/cases.jsonl +2 -2
  147. package/kit/templates/addons/ai/ai/prompts/README.md +8 -8
  148. package/kit/templates/addons/ai/docs/ai/guide.md +56 -56
  149. package/kit/templates/backend/.claude/hooks/format.mjs +1 -1
  150. package/kit/templates/backend/.claude/structure.json +1 -1
  151. package/kit/templates/backend/.env.example +6 -6
  152. package/kit/templates/backend/.github/dependabot.yml +1 -1
  153. package/kit/templates/backend/.github/workflows/ci.yml +13 -13
  154. package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +19 -19
  155. package/kit/templates/backend/.github/workflows/claude-maintenance.yml +18 -18
  156. package/kit/templates/backend/.github/workflows/live-monitoring.yml +14 -14
  157. package/kit/templates/backend/.pre-commit-config.yaml +3 -3
  158. package/kit/templates/backend/docs/architecture/stack.md +98 -98
  159. package/kit/templates/backend/docs/architecture/structure.md +34 -34
  160. package/kit/templates/mobile/.claude/structure.json +1 -1
  161. package/kit/templates/mobile/.env.example +6 -6
  162. package/kit/templates/mobile/.github/dependabot.yml +2 -2
  163. package/kit/templates/mobile/.github/workflows/ci.yml +18 -18
  164. package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +19 -19
  165. package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +18 -18
  166. package/kit/templates/mobile/.gitignore.append +2 -2
  167. package/kit/templates/mobile/docs/architecture/stack.md +113 -113
  168. package/kit/templates/mobile/docs/architecture/structure.md +33 -33
  169. package/kit/templates/mobile/docs/design/design-guide.md +37 -37
  170. package/kit/templates/mobile/tests/security/rls.mjs +22 -22
  171. package/kit/templates/web-saas/.claude/structure.json +1 -1
  172. package/kit/templates/web-saas/.env.example +11 -11
  173. package/kit/templates/web-saas/.github/dependabot.yml +3 -3
  174. package/kit/templates/web-saas/.github/workflows/ci.yml +20 -20
  175. package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +19 -19
  176. package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +18 -18
  177. package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +12 -12
  178. package/kit/templates/web-saas/docs/architecture/stack.md +116 -116
  179. package/kit/templates/web-saas/docs/architecture/structure.md +44 -44
  180. package/kit/templates/web-saas/docs/design/design-guide.md +38 -38
  181. package/kit/templates/web-saas/tests/live/smoke.spec.ts +4 -4
  182. package/kit/templates/web-saas/tests/security/rls.mjs +22 -22
  183. package/kit/tools/codex/.codex/hooks.json +1 -1
  184. package/package.json +2 -2
  185. package/README.en.md +0 -267
@@ -1,39 +1,39 @@
1
- # Hesaplar ve Son Tarihler
1
+ # Accounts and Deadlines
2
2
 
3
- > Projenin bağlı olduğu her dış hesap burada. Tek kişilik projelerde en sık yaşanan felaketler kod değil:
4
- > alan adının süresinin dolması, kartın geçersiz olup servisin durması, 2FA'sız hesabın ele geçirilmesi,
5
- > kimde olduğu unutulan bir anahtar. `/dashboard` panosu **30 gün içinde dolan tarihleri** "Dikkat" alanında gösterir.
3
+ > Every external account the project depends on is listed here. In one-person projects the most common disasters are not code:
4
+ > an expired domain, an invalid card that stops a service, a hijacked account without 2FA,
5
+ > a key nobody remembers owning. The `/dashboard` dashboard shows **dates expiring within 30 days** in the "Needs attention" area.
6
6
  >
7
- > **Buraya asla şifre, anahtar veya token yazma.** Sadece hangi hesap, kimde, ne zaman bitiyor.
8
- > Tarihler `YYYY-AA-GG` biçiminde olmalı (pano okur).
7
+ > **Never write a password, key or token here.** Write only which account, who holds it, when it ends.
8
+ > Dates must use the `YYYY-AA-GG` format (the dashboard reads them).
9
9
 
10
10
  ## Hesaplar
11
11
 
12
- | Servis | Amaç | Hesap sahibi | 2FA | Plan / aylık maliyet | Bitiş / yenileme | Anahtar yenileme | Not |
12
+ | Service | Purpose | Account owner | 2FA | Plan / monthly cost | Expiry / renewal | Key rotation | Note |
13
13
  |---|---|---|---|---|---|---|---|
14
- | [GitHub] | Kod deposu | [e-posta] | [evet/hayır] | [Ücretsiz] | - | - | |
15
- | [Alan adı kayıt firması] | Alan adı | | | | [YYYY-AA-GG] | - | Otomatik yenileme açık mı? |
14
+ | [GitHub] | Code repository | [email] | [yes/no] | [Free] | - | - | |
15
+ | [Domain registrar] | Domain name | | | | [YYYY-AA-GG] | - | Is auto-renewal on? |
16
16
  | [Hosting] | | | | | | | |
17
- | [Veritabanı] | | | | | | [YYYY-AA-GG] | |
18
- | [E-posta servisi] | | | | | | | |
19
- | [Ödeme sağlayıcı] | | | | | | | |
20
- | [Hata takibi] | | | | | | | |
21
- | [AI sağlayıcı] | | | | | | [YYYY-AA-GG] | Harcama limiti: |
22
- | [Apple / Google geliştirici] | Mağaza | | | | [YYYY-AA-GG] | | Yıllık üyelik |
17
+ | [Database] | | | | | | [YYYY-AA-GG] | |
18
+ | [Email service] | | | | | | | |
19
+ | [Payment provider] | | | | | | | |
20
+ | [Error tracking] | | | | | | | |
21
+ | [AI provider] | | | | | | [YYYY-AA-GG] | Spend limit: |
22
+ | [Apple / Google developer] | Store | | | | [YYYY-AA-GG] | | Annual membership |
23
23
 
24
24
  ## Ortamlar (dev / prod)
25
25
 
26
- > Proje ref'i ve URL sır değildir; anahtarlar yine buraya yazılmaz. `/release` bu tabloyu okur: prod ref'i
27
- > `.mcp.json`'da, `.claude/`'da veya kodda geçerse yayını engeller.
26
+ > A project ref and a URL are not secrets; keys are still not written here. `/release` reads this table: it blocks the release
27
+ > if the prod ref appears in `.mcp.json`, in `.claude/` or in code.
28
28
 
29
- | Ortam | Servis | Proje ref / URL | Kim bağlanır |
29
+ | Environment | Service | Project ref / URL | Who connects |
30
30
  |---|---|---|---|
31
- | dev | [Supabase] | [dev ref] | Yerel ortam, AI (MCP salt-okunur ve `supabase-dev`), CI dışındaki denemeler |
32
- | prod | [Supabase] | [prod ref] | Sadece barındırma (Vercel / EAS ortam değişkenleri). AI ve yerel ortam bağlanmaz |
31
+ | dev | [Supabase] | [dev ref] | Local environment, AI (MCP read-only and `supabase-dev`), trials outside CI |
32
+ | prod | [Supabase] | [prod ref] | Hosting only (Vercel / EAS environment variables). AI and the local environment do not connect |
33
33
 
34
- ## Kurallar
34
+ ## Rules
35
35
 
36
- - Her yeni dış servis eklendiğinde (`/start` Adım 5, yeni entegrasyon) bu tabloya satır eklenir.
37
- - Kritik hesaplarda 2FA zorunlu: kod deposu, hosting, veritabanı, alan adı, ödeme, e-posta.
38
- - Ödeme kartının son kullanma tarihini de "Bitiş" sütununa yaz (kart bitince servisler durur).
39
- - `/maintain quarterly` bu tabloyu gözden geçirir; `/release ilk` boş satır bırakmaz.
36
+ - Add a row to this table whenever a new external service is added (`/start` Step 5, a new integration).
37
+ - 2FA is mandatory on critical accounts: code repository, hosting, database, domain, payment, email.
38
+ - Also write the payment card's expiry date in the "Expiry" column (services stop when the card expires).
39
+ - `/maintain quarterly` reviews this table; `/release first` leaves no empty row.
@@ -1,105 +1,105 @@
1
- # Dağıtım Kurulumu
1
+ # Deploy Setup
2
2
 
3
- > `/release first` → "Dağıtım kurulumu" bu dosyayı kullanır. Sadece `docs/architecture/stack.md`'deki sağlayıcıların bölümü okunur.
4
- > Adımlar sağlayıcıların resmî dokümanından alındı; her bölümde kaynak ve kontrol tarihi var. Paneller değişir:
5
- > kullanmadan önce kaynak sayfayı `source-research` ile yeniden aç. Bir şey değiştiyse güncel kaynağa göre ilerle ve farkı raporda yaz.
6
- > Bir yıldan eski kaynak tarihi ⚠️ ile işaretlidir.
3
+ > `/release first` → "Deploy setup" uses this file. Only the section for the providers in `docs/architecture/stack.md` is read.
4
+ > The steps come from the providers' official docs; each section has the source and the check date. Panels change:
5
+ > before using, reopen the source page with `source-research`. If something changed, follow the current source and write the difference in the report.
6
+ > A source date older than a year is marked with ⚠️.
7
7
 
8
- ## Kurallar
8
+ ## Rules
9
9
 
10
- - **Sır değeri sohbete ve dosyaya yazılmaz.** Bu dosyaya, `accounts.md`'ye ve koda da. AI sadece değişken adını söyler (`.env.example`'daki gibi); değeri kullanıcı sağlayıcının panelinde kendisi girer.
11
- - `mattpocock-skills:wizard` betiği prod sırrı istemez ve `.env`'e prod değeri yazmaz. Prod değeri panelde girilir. Betik sadece CI sırlarını (ör. `LIVE_TEST_*`) kullanıcının terminalinde gizli girişle `gh secret set`'e verir. Betik `sandbox/` altında durur, iş bitince silinir.
12
- - Prod deploy, geri alma provası ve yedekten geri yükleme onaysız başlamaz.
13
- - AI ve yerel ortam prod veritabanına bağlanmaz (`accounts.md` → Ortamlar). Tek istisna: kullanıcının kendi terminalinde aldığı yedek (Supabase → Yedek).
14
- - Her adımın sonucu `accounts.md`'ye (servis, sahip, 2FA, plan, bitiş; Ortamlar'da prod ref ve URL) ve `/release` raporuna işlenir.
15
- - Bu dosya kitle güncellenir; projede düzenleme. Kaynakla çelişen adımı raporda yaz.
10
+ - **A secret value is never written in chat or in a file.** Not in this file, not in `accounts.md`, not in code. The AI says only the variable name (as in `.env.example`); the user enters the value in the provider's panel themselves.
11
+ - The `mattpocock-skills:wizard` script does not ask for a prod secret and does not write a prod value to `.env`. The prod value is entered in the panel. The script passes only CI secrets (e.g. `LIVE_TEST_*`) to `gh secret set` with hidden input in the user's terminal. The script stays under `sandbox/` and is deleted when the work is done.
12
+ - A prod deploy, a rollback drill and a restore from backup do not start without approval.
13
+ - The AI and the local environment do not connect to the prod database (`accounts.md` → Ortamlar). The only exception: the backup the user takes in their own terminal (Supabase → Backup).
14
+ - The result of each step goes into `accounts.md` (service, owner, 2FA, plan, expiry; the prod ref and URL under Ortamlar) and into the `/release` report.
15
+ - The kit updates this file; do not edit it in the project. Write a step that conflicts with the source in the report.
16
16
 
17
- ## Sıra
17
+ ## Order
18
18
 
19
- 1. Hosting projesi (prod, dev'den ayrı)
20
- 2. Ortam değişkenleri (Production ve Preview ayrı değer)
21
- 3. Alan adı ve DNS
22
- 4. Yedek ve zamana geri dönüş (PITR)
23
- 5. Geri alma provası (en sonda, onaylı)
19
+ 1. Hosting project (prod, separate from dev)
20
+ 2. Environment variables (separate values for Production and Preview)
21
+ 3. Domain and DNS
22
+ 4. Backup and point-in-time recovery (PITR)
23
+ 5. Rollback drill (last, with approval)
24
24
 
25
25
  ## Vercel (web)
26
26
 
27
- Kontrol: 2026-10-25. Kaynaklar: [Environment variables](https://vercel.com/docs/environment-variables) (2026-09-17) · [Add a domain](https://vercel.com/docs/domains/working-with-domains/add-a-domain) (2026-09-16) · [A record](https://vercel.com/kb/guide/a-record-and-caa-with-vercel) (2026-10-16) · [Instant Rollback](https://vercel.com/docs/instant-rollback) (2026-07-07)
27
+ Checked: 2026-10-25. Sources: [Environment variables](https://vercel.com/docs/environment-variables) (2026-09-17) · [Add a domain](https://vercel.com/docs/domains/working-with-domains/add-a-domain) (2026-09-16) · [A record](https://vercel.com/kb/guide/a-record-and-caa-with-vercel) (2026-10-16) · [Instant Rollback](https://vercel.com/docs/instant-rollback) (2026-07-07)
28
28
 
29
- **Proje.** GitHub deposunu Vercel projesine bağla. Prod dalına (genelde `main`) push prod deploy'u, diğer dallar önizlemeyi üretir.
29
+ **Project.** Connect the GitHub repository to a Vercel project. A push to the prod branch (usually `main`) produces the prod deploy; other branches produce previews.
30
30
 
31
- **Ortam değişkenleri.** Settings → Environment Variables. Her değişken için ortam seç: Production, Preview, Development. Anahtar ve token **Secret** türünde girilir (kaydedildikten sonra okunamaz); URL gibi açık değerler **Config**. Değişiklik eski deploy'lara uygulanmaz, yeni deploy gerekir. Sınır: deploy başına toplam 64 KB (edge'de değişken başı 5 KB).
31
+ **Environment variables.** Settings → Environment Variables. For each variable pick the environment: Production, Preview, Development. Keys and tokens are entered as **Secret** (unreadable after saving); open values such as URLs as **Config**. A change does not apply to old deploys; a new deploy is needed. Limit: 64 KB total per deploy (5 KB per variable at the edge).
32
32
 
33
- **Alan adı.** Settings → Domains → Add Domain (CLI: `vercel domains add example.com <proje>`). Apex eklenince `www` önerilir: ikisini de ekle, birini diğerine yönlendir.
34
- - Apex (`example.com`): **A** kaydı. Değeri proje alan adı kartından al. Çoğu projede `76.76.21.21`, yeni projelerde farklı olabilir (ör. `216.198.79.1`); doğrulama karttaki değeri arar.
35
- - Alt alan (`www`, `app`): **CNAME**, hedef projeye özel (kartta, ör. `…vercel-dns-017.com`).
36
- - Alan başka bir Vercel hesabındaysa `_vercel` adında **TXT** doğrulaması istenir.
37
- - Nameserver'ı Vercel'e taşıyacaksan önce MX ve doğrulama TXT kayıtlarını kopyala; yoksa e-posta durur. SSL otomatik.
33
+ **Domain.** Settings → Domains → Add Domain (CLI: `vercel domains add example.com <proje>`). When you add the apex, `www` is recommended: add both and redirect one to the other.
34
+ - Apex (`example.com`): **A** record. Take the value from the project's domain card. In most projects it is `76.76.21.21`; new projects may differ (e.g. `216.198.79.1`); verification looks for the value on the card.
35
+ - Subdomain (`www`, `app`): **CNAME**, the target is project-specific (on the card, e.g. `…vercel-dns-017.com`).
36
+ - If the domain is in another Vercel account, a **TXT** verification named `_vercel` is requested.
37
+ - If you will move the nameserver to Vercel, first copy the MX and verification TXT records; otherwise email stops. SSL is automatic.
38
38
 
39
- **Yedek.** Vercel'de veri yok; veritabanının bölümüne bak.
39
+ **Backup.** There is no data in Vercel; see the database's section.
40
40
 
41
- **Geri alma.** Proje → Production Deployment kutusu → Instant Rollback (ya da Deployments → ⋮ → Instant Rollback).
42
- - Hobby sadece bir önceki prod deploy'a döner; Pro ve Enterprise prod'a çıkmış her deploy'a.
43
- - Ortam değişkenleri geri alınmaz, eski build'in değerleriyle çalışır.
44
- - Geri almadan sonra prod alan adı otomatik atanmaz: yeni push canlıya çıkmaz. Düzeltme hazır olunca "Undo Rollback" ya da `vercel promote <deploy-url>`.
41
+ **Rollback.** Project → Production Deployment box → Instant Rollback (or Deployments → ⋮ → Instant Rollback).
42
+ - Hobby returns only to the previous prod deploy; Pro and Enterprise to any deploy that went to prod.
43
+ - Environment variables are not rolled back; the old build runs with its own values.
44
+ - After a rollback the prod domain is not assigned automatically: a new push does not go live. When the fix is ready, "Undo Rollback" or `vercel promote <deploy-url>`.
45
45
 
46
- ## Supabase (veritabanı + kimlik)
46
+ ## Supabase (database + auth)
47
47
 
48
- Kontrol: 2026-10-25. Kaynaklar: [Backups](https://supabase.com/docs/guides/platform/backups) · [Backup and restore using the CLI](https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore) · [API keys](https://supabase.com/docs/guides/api/api-keys) (sayfalarda tarih yok)
48
+ Checked: 2026-10-25. Sources: [Backups](https://supabase.com/docs/guides/platform/backups) · [Backup and restore using the CLI](https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore) · [API keys](https://supabase.com/docs/guides/api/api-keys) (no dates on the pages)
49
49
 
50
- **Proje.** Prod için ayrı proje aç. Ref'ini `accounts.md` → Ortamlar → prod satırına yaz. Auth ve e-posta ayarları: `docs/architecture/stack.md` → "Canlıya alma (ek)".
50
+ **Project.** Open a separate project for prod. Write its ref in `accounts.md` → Ortamlar → prod row. Auth and email settings: `docs/architecture/stack.md` → "Go live (extra)".
51
51
 
52
- **Anahtarlar.** Yeni anahtarlar `sb_publishable_…` (istemciye gidebilir) ve `sb_secret_…` (sadece sunucuda; hosting panelinde Secret türünde). `eyJ` ile başlayan uzun anahtar eski türdür. Supabase eski `anon` ve `service_role` anahtarlarını 2026 sonuna kadar kullanımdan kaldırıyor: yeni projede yeni anahtarları kullan. `.env.example`'da eski adlar (`NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`) duruyorsa yeni anahtarı aynı adla gir.
52
+ **Keys.** The new keys are `sb_publishable_…` (can go to the client) and `sb_secret_…` (server only; as Secret in the hosting panel). A long key starting with `eyJ` is the old type. Supabase is deprecating the old `anon` and `service_role` keys by the end of 2026: use the new keys in a new project. If `.env.example` still has the old names (`NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`), enter the new key under the same name.
53
53
 
54
- **Yedek.**
55
- - Free: otomatik yedek listelenmiyor. Düzenli dış yedek al. Varsayılan `db dump` sadece şemayı alır; tam yedek üç dosyadır. Bu komutları **kullanıcı kendi terminalinde** çalıştırır: bağlantı adresinde prod veritabanı parolası var, AI komutu çalıştırmaz ve parolayı istemez. Dosyalar depoya girmez.
54
+ **Backup.**
55
+ - Free: automatic backups are not listed. Take a regular external backup. The default `db dump` takes only the schema; a full backup is three files. **The user runs** these commands **in their own terminal**: the connection address holds the prod database password, the AI does not run the command and does not ask for the password. The files do not enter the repository.
56
56
  ```bash
57
57
  npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f roles.sql --role-only
58
58
  npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f schema.sql
59
59
  npx -y supabase@2.120.0 db dump --db-url "$PROD_DB_URL" -f data.sql --use-copy --data-only -x "storage.buckets_vectors" -x "storage.vector_indexes"
60
60
  ```
61
- `PROD_DB_URL`: panelin Connect ekranındaki Session pooler adresi; kalıcı dosyaya yazılmaz. Gerekenler: Supabase CLI ve Docker.
62
- - Pro 7 gün, Team 14 gün, Enterprise 30 güne kadar günlük yedek.
63
- - PITR: Pro ve üstünde eklenti, en az Small compute. 7/14/28 gün saklama, aylık yaklaşık $100/$200/$400. En kötü durumda 2 dakikalık veri kaybı. PITR açılınca günlük yedek durur.
64
- - Geri yükleme: Database → Backups. Bu sırada proje erişilemez, süre veritabanı boyutuyla uzar. Storage dosyaları yedekte yok.
65
- - Prova: prod'u geri yükleme. Kullanıcı üç dosyayı kendi makinesinde geçici bir yerel veritabanına (`supabase start`) `psql --single-transaction` ile yükler (sıra ve bayraklar kaynak sayfada), birkaç tabloyu kontrol eder, sonra yerel veritabanını ve dosyaları siler. Dev projesine yükleme: prod'daki kişisel veri AI'nın okuduğu ortama geçer.
61
+ `PROD_DB_URL`: the Session pooler address on the panel's Connect screen; it is not written to a permanent file. Requirements: Supabase CLI and Docker.
62
+ - Pro keeps daily backups up to 7 days, Team 14 days, Enterprise 30 days.
63
+ - PITR: an add-on on Pro and above, at least Small compute. 7/14/28 days retention, about $100/$200/$400 a month. At worst 2 minutes of data loss. When PITR is turned on, daily backups stop.
64
+ - Restore: Database → Backups. The project is unreachable during this; the time grows with the database size. Storage files are not in the backup.
65
+ - Drill: do not restore prod. The user loads the three files into a temporary local database on their own machine (`supabase start`) with `psql --single-transaction` (order and flags are on the source page), checks a few tables, then deletes the local database and the files. Loading into the dev project: personal data from prod would move to the environment the AI reads.
66
66
 
67
- **Geri alma.** Migration'ı geri almak için ters migration yaz; yedekten dönüş son çaredir (kesinti ve veri kaybı).
67
+ **Rollback.** To undo a migration, write a reverse migration; restoring from backup is the last resort (downtime and data loss).
68
68
 
69
69
  ## Railway (backend)
70
70
 
71
- Kontrol: 2026-10-25. Kaynaklar: [Working with domains](https://docs.railway.com/networking/domains/working-with-domains) · [Variables](https://docs.railway.com/variables) · [Deployment actions](https://docs.railway.com/deployments/deployment-actions) · [Backups](https://docs.railway.com/volumes/backups) · [Plans](https://docs.railway.com/pricing/plans) (sayfalarda tarih yok)
71
+ Checked: 2026-10-25. Sources: [Working with domains](https://docs.railway.com/networking/domains/working-with-domains) · [Variables](https://docs.railway.com/variables) · [Deployment actions](https://docs.railway.com/deployments/deployment-actions) · [Backups](https://docs.railway.com/volumes/backups) · [Plans](https://docs.railway.com/pricing/plans) (no dates on the pages)
72
72
 
73
- **Proje.** GitHub deposundan servis oluştur. Railway adresi: servis Settings → Networking → Public Networking → Generate Domain.
73
+ **Project.** Create a service from the GitHub repository. Railway address: service Settings → Networking → Public Networking → Generate Domain.
74
74
 
75
- **Ortam değişkenleri.** Servisin Variables sekmesi. Birden çok serviste aynı olan değer: Project Settings → Shared Variables, serviste `${{shared.AD}}`. Veritabanı adresi referansla: `${{Postgres.DATABASE_URL}}` (servis adı Postgres ise). Sırları **sealed** yap: değer arayüzde ve API'de görünmez, geri açılamaz, PR ortamına kopyalanmaz. Değişiklikler önce "staged" olur; Deploy ile uygulanır.
75
+ **Environment variables.** The service's Variables tab. A value shared by several services: Project Settings → Shared Variables, in the service `${{shared.AD}}`. Database address by reference: `${{Postgres.DATABASE_URL}}` (if the service name is Postgres). Make secrets **sealed**: the value is not visible in the interface or the API, cannot be unsealed, and is not copied to a PR environment. Changes are first "staged"; Deploy applies them.
76
76
 
77
- **Alan adı.** Servis Settings → Public Networking → + Custom Domain. Panel bir **CNAME** (ör. `…up.railway.app`) ve bir **TXT** kaydı gösterir; ikisini de aynen gir. TXT yoksa alan doğrulanmaz ve 404 döner. Yayılma 72 saate kadar sürebilir.
78
- - Apex için DNS sağlayıcısı CNAME flattening veya ALIAS desteklemeli (Cloudflare, Namecheap: CNAME; DNSimple: ALIAS). Route 53, Azure DNS, GoDaddy, Hostinger, NameSilo, Squarespace desteklemez: nameserver'ı Cloudflare'e taşı.
79
- - Cloudflare proxy açıksa SSL/TLS ayarı **Full** olmalı; Full (Strict) çalışmaz.
80
- - SSL (Let's Encrypt) DNS'ten sonra 1 saat içinde. Sınır: Trial 1 alan, Hobby servis başı 2, Pro 20.
77
+ **Domain.** Service Settings → Public Networking → + Custom Domain. The panel shows a **CNAME** (e.g. `…up.railway.app`) and a **TXT** record; enter both exactly. Without the TXT the domain is not verified and returns 404. Propagation can take up to 72 hours.
78
+ - For the apex, the DNS provider must support CNAME flattening or ALIAS (Cloudflare, Namecheap: CNAME; DNSimple: ALIAS). Route 53, Azure DNS, GoDaddy, Hostinger, NameSilo, Squarespace do not support it: move the nameserver to Cloudflare.
79
+ - If the Cloudflare proxy is on, the SSL/TLS setting must be **Full**; Full (Strict) does not work.
80
+ - SSL (Let's Encrypt) within 1 hour after DNS. Limit: Trial 1 domain, Hobby 2 per service, Pro 20.
81
81
 
82
- **Yedek.** Veritabanı servisi → Backups sekmesi. Elle yedek ve zamanlama: günlük (6 gün saklanır), haftalık (27 gün), aylık (89 gün). Elle yedek volume boyutunun %50'siyle sınırlı. Geri yükleme yeni bir volume açar, eskisi bağlantısız kalır; Deploy ile uygulanır ve sadece aynı proje ve ortama yapılır. Volume silinirse yedekleri de gider: ayrıca `pg_dump` ile dış yedek al.
82
+ **Backup.** Database service → Backups tab. Manual backup and schedule: daily (kept 6 days), weekly (27 days), monthly (89 days). A manual backup is limited to 50% of the volume size. A restore opens a new volume, the old one stays detached; Deploy applies it and it works only within the same project and environment. If the volume is deleted, its backups go too: also take an external backup with `pg_dump`.
83
83
 
84
- **Geri alma.** Servis → Deployments → önceki deploy → ⋮ → Rollback. İmajı ve değişkenleri geri getirir, veritabanı şemasını getirmez. Pencere imaj saklama süresi kadar: Free/Trial 24 saat, Hobby 72 saat, Pro 120 saat. Daha eskisine yeniden deploy gerekir.
84
+ **Rollback.** Service → Deployments → previous deploy → ⋮ → Rollback. It restores the image and the variables, not the database schema. The window equals the image retention time: Free/Trial 24 hours, Hobby 72 hours, Pro 120 hours. For anything older, redeploy.
85
85
 
86
- ## EAS (mobil)
86
+ ## EAS (mobile)
87
87
 
88
- Kontrol: 2026-10-25. Kaynaklar: [Environment variables](https://docs.expo.dev/eas/environment-variables/) (2026-07-21) · [Manage variables](https://docs.expo.dev/eas/environment-variables/manage/) (2026-07-21) · [Submit](https://docs.expo.dev/submit/introduction/) (2026-10-12) · [Rollbacks](https://docs.expo.dev/eas-update/rollbacks/) (2025-03-03 ⚠️)
88
+ Checked: 2026-10-25. Sources: [Environment variables](https://docs.expo.dev/eas/environment-variables/) (2026-07-21) · [Manage variables](https://docs.expo.dev/eas/environment-variables/manage/) (2026-07-21) · [Submit](https://docs.expo.dev/submit/introduction/) (2026-10-12) · [Rollbacks](https://docs.expo.dev/eas-update/rollbacks/) (2025-03-03 ⚠️)
89
89
 
90
- **Proje ve hesaplar.** Apple Developer Program ve Google Play Console hesapları `accounts.md`'ye (yıllık yenileme tarihiyle). Mağaza listesini Play Console'da gönderimden önce hazırla. `eas submit` ilk Android sürümünü internal testing kanalına yükler. CI'da gönderim için Google servis hesabı anahtarı ve App Store Connect API anahtarı gerekir; bu dosyalar depoya girmez.
90
+ **Project and accounts.** Apple Developer Program and Google Play Console accounts go into `accounts.md` (with the yearly renewal date). Prepare the store listing in Play Console before submission. `eas submit` uploads the first Android release to the internal testing track. Submission in CI needs a Google service account key and an App Store Connect API key; these files do not enter the repository.
91
91
 
92
- **Ortam değişkenleri.** Ortamlar: development, preview, production. Görünürlük:
93
- - plain text: sitede, CLI'da ve logda görünür;
94
- - sensitive: logda gizlenir, sitede ve CLI'da okunur;
95
- - secret: sadece EAS sunucularında okunur. Derleme sırasında gereken anahtarlar içindir (ör. özel paket token'ı).
92
+ **Environment variables.** Environments: development, preview, production. Visibility:
93
+ - plain text: visible on the site, in the CLI and in the log;
94
+ - sensitive: hidden in the log, readable on the site and in the CLI;
95
+ - secret: readable only on EAS servers. For keys needed during the build (e.g. a private package token).
96
96
 
97
- Uygulamaya giren her değer (`EXPO_PUBLIC_…`) herkese açıktır: oraya sır koyma. Build profili ortamı `eas.json` → `environment` alanından seçer; güncelleme `eas update --environment production`. Değeri sitede gir: `eas env:set --value …` değeri kabuk geçmişine yazar.
97
+ Every value that goes into the app (`EXPO_PUBLIC_…`) is public: do not put a secret there. The build profile picks the environment from `eas.json` → `environment`; update with `eas update --environment production`. Enter the value on the site: `eas env:set --value …` writes the value to the shell history.
98
98
 
99
- **Yedek.** EAS'ta veri yok; backend'in bölümüne bak (Supabase veya Railway).
99
+ **Backup.** There is no data in EAS; see the backend's section (Supabase or Railway).
100
100
 
101
- **Geri alma.** `eas update:rollback`: önceki güncellemeyi yeniden yayımlar ya da build'e gömülü güncellemeye döner. Native kod değişikliği güncellemeyle geri alınmaz: yeni build ve mağaza incelemesi gerekir.
101
+ **Rollback.** `eas update:rollback`: republishes the previous update or returns to the update embedded in the build. A native code change is not rolled back with an update: a new build and store review are needed.
102
102
 
103
- ## Geri alma provası (hepsi)
103
+ ## Rollback drill (all)
104
104
 
105
- Lansmandan önce bir kez, kullanıcı onayıyla: zararsız bir değişiklik yayımla, geri al, duman testiyle eski sürümün canlıda olduğunu gör, sonra normale dön (Vercel'de "Undo Rollback"). Sonucu `/release` raporunda "Geri alma yolu" satırına yaz.
105
+ Once before launch, with user approval: publish a harmless change, roll it back, see with a smoke test that the old version is live, then return to normal (in Vercel "Undo Rollback"). Write the result in the `/release` report on the "Rollback path" line.
@@ -1,27 +1,27 @@
1
- # Özellik Bayrakları
1
+ # Feature Flags
2
2
 
3
- > Riskli özellikler bir bayrağın arkasında yayınlanır. Sorun çıkarsa **yeniden deploy etmeden** kapatılır (acil kapatma).
4
- > Unutulan bayrak teknik borçtur: her bayrağın bir kaldırma tarihi olur. `/dashboard` panosu süresi geçenleri gösterir.
5
- > Uygulama yöntemi `docs/architecture/stack.md` → "Özellik bayrakları" bölümünde.
3
+ > Risky features ship behind a flag. If something goes wrong, the flag is turned off **without a redeploy** (kill switch).
4
+ > A forgotten flag is technical debt: every flag gets a removal date. The `/dashboard` dashboard shows the overdue ones.
5
+ > The implementation method is in `docs/architecture/stack.md` → "Acceptance tests and feature flags".
6
6
 
7
- ## Ne zaman bayrak zorunlu?
7
+ ## When is a flag mandatory?
8
8
 
9
- - Ödeme, abonelik veya para hareketi
10
- - AI/LLM çağrısı yapan özellik (maliyet patlaması riski)
11
- - Toplu e-posta / bildirim gönderen özellik
12
- - Veri silen, taşıyan veya dışa aktaran özellik
13
- - Büyük arayüz değişikliği (kademeli açmak için)
9
+ - Payment, subscription or money movement
10
+ - A feature that calls an AI/LLM (risk of a cost explosion)
11
+ - A feature that sends bulk email / notifications
12
+ - A feature that deletes, moves or exports data
13
+ - A large interface change (to roll it out gradually)
14
14
 
15
15
  ## Bayraklar
16
16
 
17
- `/dashboard` panosu bu tabloyu okur. Tarih biçimi `YYYY-AA-GG`, durum `açık` / `kapalı` / `kademeli %N`.
17
+ The `/dashboard` dashboard reads this table. Date format `YYYY-AA-GG`, status `on` / `off` / `gradual %N`.
18
18
 
19
- | Bayrak | Amaç | Durum | Sahibi | Eklendi | Kaldırma tarihi | Acil kapatma test edildi |
19
+ | Flag | Purpose | Status | Owner | Added | Removal date | Kill switch tested |
20
20
  |---|---|---|---|---|---|---|
21
21
 
22
- ## Kurallar
22
+ ## Rules
23
23
 
24
- - Bayrak adı `ozellik_adi` biçiminde ve `docs/product/glossary.md` ile uyumlu.
25
- - Bayrak kapalıyken kod yolu da test edilir (iki durum için en az bir test).
26
- - Özellik herkese açıldıktan ve 2 hafta sorunsuz çalıştıktan sonra bayrak ve eski kod yolu kaldırılır.
27
- - Acil kapatma: Panelden veya ortam değişkeninden kapatma adımı bu dosyada yazılı ve en az bir kez denenmiş olmalı.
24
+ - The flag name uses the `ozellik_adi` form and matches `docs/product/glossary.md`.
25
+ - The code path is also tested while the flag is off (at least one test for each of the two states).
26
+ - After the feature is open to everyone and has run without problems for 2 weeks, the flag and the old code path are removed.
27
+ - Kill switch: the step to turn it off from the panel or an environment variable is written in this file and has been tried at least once.
@@ -1,52 +1,52 @@
1
- # Bakım ve Düzenli Kontroller
2
-
3
- > Canlıdaki proje kendi kendine bozulur: bağımlılıklar eskir, sertifikalar ve kartlar süresi dolar,
4
- > faturalar şişer, yedekler sessizce durur. Bu dosya bunları yakalar.
5
- > `/maintain weekly` · `/maintain monthly` · `/maintain quarterly` komutları ilgili listeyi çalıştırır ve kayda ekler.
6
- > Tipe özel ek maddeler: `docs/architecture/stack.md` → "Bakım".
7
-
8
- ## Haftalık (~15 dk)
9
-
10
- - [ ] Hata takibi: yeni veya artan hata var mı? Varsa `docs/product/roadmap.md`'ye görev olarak ekle.
11
- - [ ] Uptime: kesinti oldu mu?
12
- - [ ] Maliyet: hosting, DB, AI API harcaması beklenen aralıkta mı? Harcama alarmı tetiklendi mi (`docs/operations/spend-alarms.md`)?
13
- - [ ] Kullanıcı geri bildirimi / destek kutusu tarandı.
14
- - [ ] Yedekler son 7 günde başarıyla alındı mı?
15
-
16
- ## Aylık (~1 saat)
17
-
18
- - [ ] Bağımlılık güncellemesi (yama ve küçük sürümler) + testler.
19
- - [ ] Bağımlılık güvenlik taraması (`npm audit` / `uv run --with pip-audit pip-audit`).
20
- - [ ] Performans ölçümü (tipe özel hedefler, `docs/architecture/stack.md`).
21
- - [ ] Maliyet trendi: geçen aya göre artış neden?
22
- - [ ] Kullanılmayan servis, ortam değişkeni, özellik bayrağı, ölü kod temizliği.
23
- - [ ] `docs/workflow/progress.md`, `docs/architecture/overview.md` güncel mi?
24
- - [ ] Analitik: başarı kriterlerine (`docs/product/prd.md` §4) göre durum.
25
- - [ ] Kopya kod oranı (`npx jscpd --silent .`) ve `docs/quality/metrics.md`'ye aylık satır.
26
- - [ ] `docs/product/unit-economics.md` gerçek faturalarla güncel mi?
27
- - [ ] `docs/operations/feature-flags.md`: kaldırma tarihi geçen bayraklar temizlendi mi?
28
- - [ ] `docs/product/feedback.md`: yeni geri bildirimler işlendi mi (`/user-feedback`)?
29
-
30
- ## Çeyreklik (3 ayda bir, ~yarım gün)
31
-
32
- - [ ] **Yedekten tam geri yükleme tatbikatı** (ayrı bir ortama).
33
- - [ ] Erişim gözden geçirme: hosting, DB, ödeme, domain, kod deposu. Eski erişimleri kaldır.
34
- - [ ] Kritik anahtarların yenilenmesi (rotation), özellikle sızma şüphesi olanlar.
35
- - [ ] Majör sürüm güncellemeleri planla (framework, runtime, SDK).
36
- - [ ] `docs/legal/privacy-kvkk.md` ve yayındaki metinler güncel mi? Yeni veri/servis eklendi mi?
37
- - [ ] `docs/security/checklist.md` tam tur.
38
- - [ ] `docs/operations/accounts.md`: bitiş tarihleri, 2FA, artık kullanılmayan hesaplar.
39
-
40
- ## Olay müdahale (site çöktü / veri sızdı / fatura patladı)
41
-
42
- 1. **Durdur:** Zarar sürüyorsa önce durdur. Önceki sürüme dön (rollback), sızan anahtarı iptal et, servisi bakım moduna al.
43
- 2. **Kaydet:** Ne zaman başladı, kimler etkilendi, ne gördün? Ekran görüntüsü ve log al. Şimdi değil sonra hatırlamazsın.
44
- 3. **Düzelt:** Kök nedeni bul ve düzelt; regresyon testi ekle.
45
- 4. **Bildir:** Kişisel veri ihlali varsa KVKK Kurulu'na **72 saat** içinde bildirim ve etkilenen kullanıcılara bilgilendirme (`docs/legal/privacy-kvkk.md`).
46
- 5. **Öğren:** Aşağıdaki kayda yaz. Tekrarı engelleyen kontrolü ilgili listeye ekle.
1
+ # Maintenance and Regular Checks
2
+
3
+ > A live project decays on its own: dependencies age, certificates and cards expire,
4
+ > bills swell, backups stop silently. This file catches those.
5
+ > The commands `/maintain weekly` · `/maintain monthly` · `/maintain quarterly` run the matching list and add to the log.
6
+ > Project-type-specific extra items: `docs/architecture/stack.md` → "Maintenance (extra)".
7
+
8
+ ## Weekly (~15 min)
9
+
10
+ - [ ] Error tracking: any new or rising errors? If yes, add them to `docs/product/roadmap.md` as tasks.
11
+ - [ ] Uptime: was there an outage?
12
+ - [ ] Cost: is hosting, DB and AI API spend within the expected range? Did a spend alarm fire (`docs/operations/spend-alarms.md`)?
13
+ - [ ] User feedback / support inbox scanned.
14
+ - [ ] Were backups taken successfully in the last 7 days?
15
+
16
+ ## Monthly (~1 hour)
17
+
18
+ - [ ] Dependency updates (patch and minor versions) + tests.
19
+ - [ ] Dependency security scan (`npm audit` / `uv run --with pip-audit pip-audit`).
20
+ - [ ] Performance measurement (project-type-specific targets, `docs/architecture/stack.md`).
21
+ - [ ] Cost trend: why did it rise compared with last month?
22
+ - [ ] Clean up unused services, environment variables, feature flags, dead code.
23
+ - [ ] Are `docs/workflow/progress.md` and `docs/architecture/overview.md` current?
24
+ - [ ] Analytics: status against the success criteria (`docs/product/prd.md` §4).
25
+ - [ ] Duplicate code ratio (`npx jscpd --silent .`) and a monthly row in `docs/quality/metrics.md`.
26
+ - [ ] Is `docs/product/unit-economics.md` current with the real invoices?
27
+ - [ ] `docs/operations/feature-flags.md`: were the flags past their removal date cleaned up?
28
+ - [ ] `docs/product/feedback.md`: was new feedback processed (`/user-feedback`)?
29
+
30
+ ## Quarterly (every 3 months, ~half a day)
31
+
32
+ - [ ] **Full restore drill from backup** (into a separate environment).
33
+ - [ ] Access review: hosting, DB, payment, domain, code repository. Remove old access.
34
+ - [ ] Rotate critical keys, especially those suspected of a leak.
35
+ - [ ] Plan major version updates (framework, runtime, SDK).
36
+ - [ ] Are `docs/legal/privacy-kvkk.md` and the published texts current? Was new data/a new service added?
37
+ - [ ] Full pass of `docs/security/checklist.md`.
38
+ - [ ] `docs/operations/accounts.md`: expiry dates, 2FA, accounts no longer used.
39
+
40
+ ## Incident response (site down / data leaked / bill exploded)
41
+
42
+ 1. **Stop:** If damage continues, stop it first. Return to the previous version (rollback), revoke the leaked key, put the service in maintenance mode.
43
+ 2. **Record:** When did it start, who was affected, what did you see? Take screenshots and logs. You will not remember later.
44
+ 3. **Fix:** Find and fix the root cause; add a regression test.
45
+ 4. **Notify:** For a personal data breach, notify the KVKK Board within **72 hours** and inform the affected users (`docs/legal/privacy-kvkk.md`).
46
+ 5. **Learn:** Write it in the log below. Add the check that prevents a repeat to the matching list.
47
47
 
48
48
  ## Bakım kaydı
49
49
 
50
- | Tarih | Tür | Bulgular | Yapılan / açılan görev |
50
+ | Date | Type | Findings | Done / task opened |
51
51
  |---|---|---|---|
52
- | | haftalık/aylık/çeyreklik/olay | | |
52
+ | | weekly/monthly/quarterly/incident | | |