tillerhand 3.42.1 → 3.47.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/.claude/agents/board-chair.md +20 -20
- package/.claude/agents/code-reviewer.md +20 -20
- package/.claude/agents/council-advisor.md +14 -14
- package/.claude/agents/security-auditor.md +30 -30
- package/.claude/agents/test-writer.md +22 -21
- package/.claude/board/board-ai.md +25 -25
- package/.claude/board/board-api.md +25 -25
- package/.claude/board/board-architect.md +28 -28
- package/.claude/board/board-devops.md +25 -25
- package/.claude/board/board-mobile.md +25 -25
- package/.claude/board/board-performance.md +24 -24
- package/.claude/board/board-privacy.md +25 -25
- package/.claude/board/board-product.md +26 -26
- package/.claude/board/board-qa.md +28 -28
- package/.claude/board/board-ux.md +26 -26
- package/.claude/board/council.md +76 -76
- package/.claude/board/rules.md +61 -61
- package/.claude/claude-security-guidance.md +10 -10
- package/.claude/commands/adopt.md +70 -69
- package/.claude/commands/ask-mode.md +9 -9
- package/.claude/commands/board.md +15 -15
- package/.claude/commands/build.md +47 -47
- package/.claude/commands/dashboard.md +17 -17
- package/.claude/commands/design.md +31 -31
- package/.claude/commands/findings-all.md +14 -14
- package/.claude/commands/findings-business.md +7 -7
- package/.claude/commands/findings-legal.md +7 -7
- package/.claude/commands/findings-perf.md +7 -7
- package/.claude/commands/findings-security.md +9 -9
- package/.claude/commands/findings-tech.md +7 -7
- package/.claude/commands/findings-ux.md +7 -7
- package/.claude/commands/fix-bug.md +15 -15
- package/.claude/commands/freeze.md +8 -8
- package/.claude/commands/handoff.md +38 -38
- package/.claude/commands/kit-update.md +17 -14
- package/.claude/commands/language.md +13 -0
- package/.claude/commands/maintain.md +19 -19
- package/.claude/commands/plan-task.md +32 -32
- package/.claude/commands/qa.md +17 -17
- package/.claude/commands/release.md +40 -40
- package/.claude/commands/research.md +31 -31
- package/.claude/commands/retro.md +32 -32
- package/.claude/commands/review-changes.md +15 -15
- package/.claude/commands/rollback.md +24 -24
- package/.claude/commands/start.md +116 -113
- package/.claude/commands/tools.md +11 -11
- package/.claude/commands/user-feedback.md +11 -11
- package/.claude/commands/wrap-up.md +18 -18
- package/.claude/findings/lenses/business.md +24 -24
- package/.claude/findings/lenses/legal.md +29 -29
- package/.claude/findings/lenses/perf.md +19 -19
- package/.claude/findings/lenses/security.md +30 -30
- package/.claude/findings/lenses/tech.md +23 -23
- package/.claude/findings/lenses/ux.md +19 -19
- package/.claude/findings/protocol.md +54 -54
- package/.claude/findings/report-template.md +30 -30
- package/.claude/hooks/budget.mjs +7 -7
- package/.claude/hooks/checkpoint.mjs +12 -12
- package/.claude/hooks/commit-gate.mjs +50 -34
- package/.claude/hooks/cost.mjs +2 -2
- package/.claude/hooks/council.mjs +3 -3
- package/.claude/hooks/dashboard-data.mjs +3 -2
- package/.claude/hooks/dashboard.mjs +164 -149
- package/.claude/hooks/destructive-guard.mjs +74 -64
- package/.claude/hooks/edit-rounds.mjs +3 -3
- package/.claude/hooks/flow.mjs +10 -10
- package/.claude/hooks/freeze-guard.mjs +27 -23
- package/.claude/hooks/gate.mjs +25 -25
- package/.claude/hooks/guard-secrets.mjs +11 -11
- package/.claude/hooks/lang.mjs +114 -0
- package/.claude/hooks/messages.mjs +495 -0
- package/.claude/hooks/models.mjs +14 -11
- package/.claude/hooks/notify.mjs +3 -2
- package/.claude/hooks/package-gate.mjs +17 -15
- package/.claude/hooks/plugins-sync.mjs +9 -9
- package/.claude/hooks/prefs.mjs +19 -19
- package/.claude/hooks/preview.mjs +11 -11
- package/.claude/hooks/progress.mjs +14 -14
- package/.claude/hooks/qa-report.mjs +11 -10
- package/.claude/hooks/reminder.mjs +6 -3
- package/.claude/hooks/session-start.mjs +23 -17
- package/.claude/hooks/shared.mjs +1 -1
- package/.claude/hooks/status-read.mjs +5 -4
- package/.claude/hooks/statusline.mjs +14 -11
- package/.claude/hooks/structure-guard.mjs +9 -9
- package/.claude/hooks/test-guard.mjs +61 -20
- package/.claude/hooks/tools.mjs +28 -29
- package/.claude/hooks/usage.mjs +18 -15
- package/.claude/output-styles/anlatici.md +28 -28
- package/.claude/security-patterns.json +3 -3
- package/.claude/settings.json +6 -0
- package/.claude/skills/logo-design/SKILL.md +42 -42
- package/.claude/skills/motion-video/SKILL.md +52 -52
- package/.claude/skills/source-research/SKILL.md +35 -35
- package/.claude/skills/ui-motion/SKILL.md +38 -38
- package/.github/workflows/kit-tests.yml +7 -7
- package/.github/workflows/npm-publish.yml +16 -16
- package/AGENTS.md +56 -56
- package/CHANGELOG.md +7 -7
- package/CLAUDE.md +5 -5
- package/README.md +199 -172
- package/README.tr.md +292 -0
- package/docs/architecture/overview.md +31 -31
- package/docs/architecture/stack.md +2 -2
- package/docs/archive/README.md +4 -4
- package/docs/decisions/adr-template.md +14 -14
- package/docs/decisions/log.md +10 -10
- package/docs/findings/README.md +13 -13
- package/docs/findings/config.md +13 -13
- package/docs/legal/privacy-kvkk.md +1 -1
- package/docs/operations/accounts.md +25 -25
- package/docs/operations/deploy-setup.md +64 -64
- package/docs/operations/feature-flags.md +17 -17
- package/docs/operations/maintenance.md +48 -48
- package/docs/operations/release-checklist.md +61 -61
- package/docs/operations/spend-alarms.md +28 -28
- package/docs/product/feedback.md +9 -8
- package/docs/product/glossary.md +16 -16
- package/docs/product/launch.md +28 -28
- package/docs/product/prd.md +43 -42
- package/docs/product/roadmap.md +31 -30
- package/docs/product/specs/_template.md +13 -12
- package/docs/product/unit-economics.md +23 -22
- package/docs/quality/metrics.md +14 -14
- package/docs/quality/retros.md +11 -11
- package/docs/quality/test-plan.md +48 -48
- package/docs/security/checklist.md +57 -57
- package/docs/workflow/board.md +7 -7
- package/docs/workflow/cost-log.md +4 -4
- package/docs/workflow/decision-protocol.md +70 -70
- package/docs/workflow/learning.md +4 -4
- package/docs/workflow/mcp-catalog.md +31 -31
- package/docs/workflow/models.md +35 -35
- package/docs/workflow/progress.md +7 -7
- package/docs/workflow/skills.md +108 -108
- package/docs/workflow/usage-limits.md +62 -62
- package/kit/CHANGELOG.md +879 -839
- package/kit/VERSION +1 -1
- package/kit/guide.html +713 -477
- package/kit/guide.tr.html +1328 -0
- package/kit/kit.mjs +56 -54
- package/kit/project/README.md +29 -29
- package/kit/project/gitignore +12 -12
- package/kit/templates/addons/ai/.env.example.append +5 -5
- package/kit/templates/addons/ai/ai/evals/README.md +11 -11
- package/kit/templates/addons/ai/ai/evals/cases.jsonl +2 -2
- package/kit/templates/addons/ai/ai/prompts/README.md +8 -8
- package/kit/templates/addons/ai/docs/ai/guide.md +56 -56
- package/kit/templates/backend/.claude/hooks/format.mjs +1 -1
- package/kit/templates/backend/.claude/structure.json +1 -1
- package/kit/templates/backend/.env.example +6 -6
- package/kit/templates/backend/.github/dependabot.yml +1 -1
- package/kit/templates/backend/.github/workflows/ci.yml +13 -13
- package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/backend/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +14 -14
- package/kit/templates/backend/.pre-commit-config.yaml +3 -3
- package/kit/templates/backend/docs/architecture/stack.md +98 -98
- package/kit/templates/backend/docs/architecture/structure.md +34 -34
- package/kit/templates/mobile/.claude/structure.json +1 -1
- package/kit/templates/mobile/.env.example +6 -6
- package/kit/templates/mobile/.github/dependabot.yml +2 -2
- package/kit/templates/mobile/.github/workflows/ci.yml +18 -18
- package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/mobile/.gitignore.append +2 -2
- package/kit/templates/mobile/docs/architecture/stack.md +113 -113
- package/kit/templates/mobile/docs/architecture/structure.md +33 -33
- package/kit/templates/mobile/docs/design/design-guide.md +37 -37
- package/kit/templates/mobile/tests/security/rls.mjs +22 -22
- package/kit/templates/web-saas/.claude/structure.json +1 -1
- package/kit/templates/web-saas/.env.example +11 -11
- package/kit/templates/web-saas/.github/dependabot.yml +3 -3
- package/kit/templates/web-saas/.github/workflows/ci.yml +20 -20
- package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +12 -12
- package/kit/templates/web-saas/docs/architecture/stack.md +116 -116
- package/kit/templates/web-saas/docs/architecture/structure.md +44 -44
- package/kit/templates/web-saas/docs/design/design-guide.md +38 -38
- package/kit/templates/web-saas/tests/live/smoke.spec.ts +4 -4
- package/kit/templates/web-saas/tests/security/rls.mjs +22 -22
- package/kit/tools/codex/.codex/hooks.json +1 -1
- package/package.json +2 -2
- package/README.en.md +0 -267
|
@@ -0,0 +1,1328 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="tr">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>TillerHand · Kodu AI yazar, dümen sende</title>
|
|
7
|
+
<meta name="description" content="TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götüren başlangıç kiti. Kodu AI yazar, kararları sen verirsin.">
|
|
8
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 72'%3E%3Ccircle cx='36' cy='36' r='30' fill='none' stroke='%230f172a' stroke-width='6'/%3E%3Cpath d='M36 36 L57 15' stroke='%232a78d6' stroke-width='6' stroke-linecap='round'/%3E%3Ccircle cx='57' cy='15' r='10' fill='%232a78d6'/%3E%3C/svg%3E">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap">
|
|
12
|
+
<style>
|
|
13
|
+
:root {
|
|
14
|
+
--bg: #ffffff;
|
|
15
|
+
--bg-soft: #f6f8fb;
|
|
16
|
+
--surface: #ffffff;
|
|
17
|
+
--fg: #0f172a;
|
|
18
|
+
--fg-2: #334155;
|
|
19
|
+
--muted: #5b6577;
|
|
20
|
+
--line: #e4e8ee;
|
|
21
|
+
--line-strong: #cfd6e0;
|
|
22
|
+
--accent: #2a78d6;
|
|
23
|
+
--accent-ink: #1d5fb0;
|
|
24
|
+
--accent-soft: #eaf2fc;
|
|
25
|
+
--ok: #1f8a4c;
|
|
26
|
+
--ok-soft: #e7f5ec;
|
|
27
|
+
--warn: #9a6200;
|
|
28
|
+
--warn-soft: #fdf4e3;
|
|
29
|
+
--bad: #c2362b;
|
|
30
|
+
--bad-soft: #fdecea;
|
|
31
|
+
--code-bg: #f3f5f8;
|
|
32
|
+
--term-bg: #0f172a;
|
|
33
|
+
--term-fg: #dbe4f0;
|
|
34
|
+
--term-dim: #7d8aa0;
|
|
35
|
+
--shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 8px 24px rgba(15, 23, 42, .06);
|
|
36
|
+
--font: "Manrope", -apple-system, "Segoe UI", system-ui, sans-serif;
|
|
37
|
+
--mono: "JetBrains Mono", ui-monospace, Consolas, monospace;
|
|
38
|
+
--radius: 14px;
|
|
39
|
+
color-scheme: light;
|
|
40
|
+
}
|
|
41
|
+
@media (prefers-color-scheme: dark) {
|
|
42
|
+
:root:not([data-theme="light"]) {
|
|
43
|
+
--bg: #0b0f16; --bg-soft: #10161f; --surface: #121923; --fg: #e8eef6; --fg-2: #c3cdda; --muted: #94a0b2;
|
|
44
|
+
--line: #222c39; --line-strong: #2f3a49; --accent: #5aa2ec; --accent-ink: #8cc0f5; --accent-soft: #14253a;
|
|
45
|
+
--ok: #4cc27f; --ok-soft: #12261b; --warn: #e9b44c; --warn-soft: #2a2213; --bad: #f07167; --bad-soft: #2c1615;
|
|
46
|
+
--code-bg: #18212d; --term-bg: #070a10; --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.35);
|
|
47
|
+
color-scheme: dark;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
:root[data-theme="dark"] {
|
|
51
|
+
--bg: #0b0f16; --bg-soft: #10161f; --surface: #121923; --fg: #e8eef6; --fg-2: #c3cdda; --muted: #94a0b2;
|
|
52
|
+
--line: #222c39; --line-strong: #2f3a49; --accent: #5aa2ec; --accent-ink: #8cc0f5; --accent-soft: #14253a;
|
|
53
|
+
--ok: #4cc27f; --ok-soft: #12261b; --warn: #e9b44c; --warn-soft: #2a2213; --bad: #f07167; --bad-soft: #2c1615;
|
|
54
|
+
--code-bg: #18212d; --term-bg: #070a10; --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.35);
|
|
55
|
+
color-scheme: dark;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
* { box-sizing: border-box; }
|
|
59
|
+
html { scroll-behavior: smooth; scroll-padding-top: 76px; }
|
|
60
|
+
body { margin: 0; background: var(--bg); color: var(--fg); font: 16px/1.65 var(--font); -webkit-font-smoothing: antialiased; }
|
|
61
|
+
a { color: var(--accent-ink); text-decoration: none; }
|
|
62
|
+
a:hover { text-decoration: underline; text-underline-offset: 3px; }
|
|
63
|
+
code { font: .86em var(--mono); background: var(--code-bg); padding: .12em .4em; border-radius: 6px; }
|
|
64
|
+
h1, h2, h3 { line-height: 1.2; letter-spacing: -.02em; margin: 0; }
|
|
65
|
+
p { margin: 0 0 1em; }
|
|
66
|
+
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 6px; }
|
|
67
|
+
.container { max-width: 1160px; margin: 0 auto; padding: 0 24px; }
|
|
68
|
+
|
|
69
|
+
/* Üst menü */
|
|
70
|
+
.nav { position: sticky; top: 0; z-index: 20; background: color-mix(in srgb, var(--bg) 85%, transparent); backdrop-filter: saturate(1.4) blur(10px); border-bottom: 1px solid var(--line); }
|
|
71
|
+
.nav .container { display: flex; align-items: center; gap: 24px; height: 60px; }
|
|
72
|
+
.brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 18px; color: var(--fg); letter-spacing: -.02em; }
|
|
73
|
+
.brand:hover { text-decoration: none; }
|
|
74
|
+
.mark { width: 26px; height: 26px; flex: none; }
|
|
75
|
+
.nav-links { display: flex; gap: 22px; margin-left: auto; font-size: 14.5px; }
|
|
76
|
+
.nav-links a { color: var(--fg-2); font-weight: 500; }
|
|
77
|
+
.nav-links a:hover { color: var(--fg); text-decoration: none; }
|
|
78
|
+
.btn { display: inline-flex; align-items: center; gap: 8px; height: 44px; padding: 0 20px; border-radius: 10px; font-weight: 600; font-size: 15px; border: 1px solid transparent; transition: transform .15s ease, background .15s ease; }
|
|
79
|
+
.btn:hover { text-decoration: none; transform: translateY(-1px); }
|
|
80
|
+
.btn.primary { background: var(--accent); color: #fff; }
|
|
81
|
+
.btn.primary:hover { background: var(--accent-ink); }
|
|
82
|
+
.btn.ghost { border-color: var(--line-strong); color: var(--fg); background: var(--surface); }
|
|
83
|
+
.btn.small { height: 36px; padding: 0 14px; font-size: 14px; }
|
|
84
|
+
.lang { display: inline-flex; flex: none; gap: 2px; padding: 2px; border: 1px solid var(--line-strong); border-radius: 999px; background: var(--surface); font-size: 13px; font-weight: 600; line-height: 1.2; }
|
|
85
|
+
.lang a, .lang span { padding: 4px 11px; border-radius: 999px; color: var(--muted); }
|
|
86
|
+
.lang a:hover { color: var(--fg); text-decoration: none; }
|
|
87
|
+
.lang span[aria-current="true"] { background: var(--accent-soft); color: var(--accent-ink); }
|
|
88
|
+
|
|
89
|
+
/* Hero */
|
|
90
|
+
.hero { padding: 88px 0 72px; background: radial-gradient(1000px 420px at 85% -10%, var(--accent-soft), transparent 70%); }
|
|
91
|
+
.hero .container { display: grid; grid-template-columns: 1.05fr .95fr; gap: 56px; align-items: center; }
|
|
92
|
+
.pill { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 500; color: var(--fg-2); border: 1px solid var(--line-strong); background: var(--surface); padding: 4px 12px 4px 6px; border-radius: 999px; margin-bottom: 22px; }
|
|
93
|
+
.pill b { background: var(--accent-soft); color: var(--accent-ink); font-weight: 600; padding: 1px 8px; border-radius: 999px; font-size: 12px; }
|
|
94
|
+
.hero h1 { font-size: clamp(40px, 5.6vw, 64px); font-weight: 800; letter-spacing: -.035em; line-height: 1.04; margin-bottom: 22px; }
|
|
95
|
+
.hero h1 em { font-style: normal; color: var(--accent); }
|
|
96
|
+
.hero .sub { font-size: 19px; color: var(--fg-2); max-width: 34em; margin-bottom: 30px; }
|
|
97
|
+
.install { display: flex; align-items: center; gap: 10px; max-width: 520px; background: var(--term-bg); color: var(--term-fg); border-radius: 12px; padding: 12px 12px 12px 18px; font: 14px var(--mono); }
|
|
98
|
+
.install + .install { margin-top: 10px; }
|
|
99
|
+
.install span { flex: 1; min-width: 0; overflow-wrap: anywhere; }
|
|
100
|
+
.install span::before { content: "$ "; color: var(--term-dim); }
|
|
101
|
+
.copy { flex: none; background: rgba(255,255,255,.08); color: var(--term-fg); border: 1px solid rgba(255,255,255,.14); border-radius: 8px; font: 500 12.5px var(--font); padding: 6px 10px; cursor: pointer; }
|
|
102
|
+
.copy:hover { background: rgba(255,255,255,.16); }
|
|
103
|
+
.hero-note { font-size: 13.5px; color: var(--muted); margin-top: 14px; }
|
|
104
|
+
|
|
105
|
+
/* Ürün kartları (çizilmiş ekranlar) */
|
|
106
|
+
.window { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; }
|
|
107
|
+
.window .bar { display: flex; align-items: center; gap: 7px; padding: 11px 14px; border-bottom: 1px solid var(--line); background: var(--bg-soft); font-size: 12.5px; color: var(--muted); }
|
|
108
|
+
.window .bar i { width: 10px; height: 10px; border-radius: 50%; background: var(--line-strong); }
|
|
109
|
+
.window .bar span { margin-left: 8px; font-weight: 500; }
|
|
110
|
+
.window .body { padding: 20px; }
|
|
111
|
+
.ctx { font-size: 12.5px; color: var(--muted); margin-bottom: 8px; }
|
|
112
|
+
.q { font-weight: 700; font-size: 17px; margin-bottom: 14px; letter-spacing: -.01em; }
|
|
113
|
+
.opt { display: block; border: 1px solid var(--line); border-radius: 10px; padding: 11px 14px; margin-bottom: 8px; font-size: 14px; }
|
|
114
|
+
.opt b { display: block; font-size: 14.5px; }
|
|
115
|
+
.opt span { color: var(--muted); font-size: 13px; line-height: 1.45; display: block; margin-top: 2px; }
|
|
116
|
+
.opt.rec { border-color: var(--accent); background: var(--accent-soft); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent); }
|
|
117
|
+
.opt.rec b { color: var(--accent-ink); }
|
|
118
|
+
.board-row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--line-strong); font-size: 12.5px; color: var(--muted); align-items: center; }
|
|
119
|
+
.tag { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 600; padding: 3px 9px; border-radius: 999px; background: var(--ok-soft); color: var(--ok); }
|
|
120
|
+
.tag.warn { background: var(--warn-soft); color: var(--warn); }
|
|
121
|
+
.tag.bad { background: var(--bad-soft); color: var(--bad); }
|
|
122
|
+
.tag.info { background: var(--accent-soft); color: var(--accent-ink); }
|
|
123
|
+
|
|
124
|
+
/* Bölümler */
|
|
125
|
+
.band { padding: 96px 0; }
|
|
126
|
+
.band.soft { background: var(--bg-soft); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
|
|
127
|
+
.kicker { font-size: 13px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--accent-ink); margin-bottom: 12px; }
|
|
128
|
+
.band h2 { font-size: clamp(30px, 3.6vw, 42px); font-weight: 800; letter-spacing: -.03em; margin-bottom: 16px; }
|
|
129
|
+
.band .lead { font-size: 18px; color: var(--fg-2); max-width: 46em; margin-bottom: 48px; }
|
|
130
|
+
.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
|
|
131
|
+
.grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
|
|
132
|
+
.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px; }
|
|
133
|
+
.card h3 { font-size: 18px; margin-bottom: 10px; }
|
|
134
|
+
.card p { color: var(--fg-2); font-size: 15px; margin: 0; }
|
|
135
|
+
.problem .was { font-size: 14px; color: var(--muted); padding-bottom: 14px; margin-bottom: 14px; border-bottom: 1px solid var(--line); }
|
|
136
|
+
.problem .was b { color: var(--bad); font-weight: 600; display: block; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 4px; }
|
|
137
|
+
.problem .now b { color: var(--ok); font-weight: 600; display: block; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 4px; }
|
|
138
|
+
.card:has(.icon) { display: grid; grid-template-columns: 24px minmax(0, 1fr); column-gap: 14px; }
|
|
139
|
+
.card:has(.icon) > :not(.icon) { grid-column: 2; }
|
|
140
|
+
.icon { grid-row: 1 / span 2; color: var(--accent); padding-top: 1px; }
|
|
141
|
+
.icon svg { width: 24px; height: 24px; }
|
|
142
|
+
|
|
143
|
+
/* Döngü */
|
|
144
|
+
.cycle { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0; position: relative; margin-top: 8px; }
|
|
145
|
+
.cycle li { list-style: none; position: relative; padding: 0 14px; text-align: center; }
|
|
146
|
+
.cycle li::after { content: ""; position: absolute; top: 27px; left: calc(50% + 34px); right: calc(-50% + 34px); height: 2px; background: var(--line-strong); }
|
|
147
|
+
.cycle li:last-child::after { display: none; }
|
|
148
|
+
.cycle .dot { width: 56px; height: 56px; border-radius: 50%; margin: 0 auto 16px; display: grid; place-items: center; font-weight: 800; font-size: 18px; border: 2px solid var(--line-strong); background: var(--surface); color: var(--fg-2); animation: pulse 10s infinite; }
|
|
149
|
+
.cycle li:nth-child(1) .dot { animation-delay: 0s; }
|
|
150
|
+
.cycle li:nth-child(2) .dot { animation-delay: 2s; }
|
|
151
|
+
.cycle li:nth-child(3) .dot { animation-delay: 4s; }
|
|
152
|
+
.cycle li:nth-child(4) .dot { animation-delay: 6s; }
|
|
153
|
+
.cycle li:nth-child(5) .dot { animation-delay: 8s; }
|
|
154
|
+
.cycle li.you .dot { border-color: var(--accent); color: var(--accent-ink); }
|
|
155
|
+
@keyframes pulse { 0%, 18%, 100% { background: var(--surface); transform: scale(1); } 6%, 12% { background: var(--accent); color: #fff; border-color: var(--accent); transform: scale(1.08); } }
|
|
156
|
+
.cycle h3 { font-size: 16px; margin-bottom: 6px; }
|
|
157
|
+
.cycle p { font-size: 14px; color: var(--muted); margin: 0; }
|
|
158
|
+
.back { text-align: center; margin-top: 28px; font-size: 14px; color: var(--muted); }
|
|
159
|
+
.back span { display: inline-block; border: 1px dashed var(--line-strong); border-radius: 999px; padding: 6px 16px; }
|
|
160
|
+
|
|
161
|
+
/* Anlar */
|
|
162
|
+
.moments { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
|
|
163
|
+
.moment h3 { font-size: 17px; margin: 18px 0 6px; }
|
|
164
|
+
.moment > p { color: var(--muted); font-size: 15px; margin: 0; }
|
|
165
|
+
.term { background: var(--term-bg); color: var(--term-fg); font: 13px/1.7 var(--mono); padding: 18px 20px; border-radius: 12px; white-space: pre-wrap; overflow-wrap: anywhere; margin: 0 0 1.2em; }
|
|
166
|
+
.term .c { color: var(--term-dim); }
|
|
167
|
+
.term .r { color: #ff8a80; font-weight: 600; }
|
|
168
|
+
.term .g { color: #7ee2a8; }
|
|
169
|
+
.term .y { color: #ffd479; }
|
|
170
|
+
.window .term { border-radius: 0; margin: 0; }
|
|
171
|
+
|
|
172
|
+
/* Ölçüm */
|
|
173
|
+
.stats { display: grid; grid-template-columns: 1.2fr 1fr; gap: 24px; align-items: stretch; }
|
|
174
|
+
.bars .row { display: grid; grid-template-columns: 120px 1fr 56px; gap: 14px; align-items: center; margin-bottom: 16px; font-size: 15px; }
|
|
175
|
+
.bars .track { height: 14px; background: var(--code-bg); border-radius: 999px; overflow: hidden; }
|
|
176
|
+
.bars .fill { height: 100%; border-radius: 999px; background: var(--line-strong); }
|
|
177
|
+
.bars .fill.kit { background: var(--accent); }
|
|
178
|
+
.bars .val { font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }
|
|
179
|
+
.big { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
|
|
180
|
+
.big .card { padding: 22px; }
|
|
181
|
+
.big .num { font-size: 40px; font-weight: 800; letter-spacing: -.03em; line-height: 1; margin-bottom: 8px; color: var(--accent-ink); font-variant-numeric: tabular-nums; }
|
|
182
|
+
.big .card p { font-size: 14px; }
|
|
183
|
+
.fine { font-size: 13.5px; color: var(--muted); margin-top: 20px; }
|
|
184
|
+
|
|
185
|
+
/* Rehber düzeni */
|
|
186
|
+
.docs { display: grid; grid-template-columns: 236px minmax(0, 1fr); gap: 56px; padding-top: 24px; padding-bottom: 96px; }
|
|
187
|
+
.side { position: sticky; top: 84px; align-self: start; max-height: calc(100vh - 100px); overflow-y: auto; font-size: 14px; padding-right: 8px; }
|
|
188
|
+
.side p { font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin: 20px 0 8px; }
|
|
189
|
+
.side p:first-child { margin-top: 0; }
|
|
190
|
+
.side a { display: block; color: var(--fg-2); padding: 5px 12px; border-left: 2px solid var(--line); }
|
|
191
|
+
.side a:hover { color: var(--fg); text-decoration: none; border-left-color: var(--line-strong); }
|
|
192
|
+
.side a.on { color: var(--accent-ink); border-left-color: var(--accent); font-weight: 600; }
|
|
193
|
+
.doc section { padding-top: 56px; margin-top: 8px; border-top: 1px solid var(--line); }
|
|
194
|
+
.doc section:first-child { border-top: 0; padding-top: 8px; }
|
|
195
|
+
.doc .path { font: 12.5px var(--mono); color: var(--muted); margin-bottom: 8px; }
|
|
196
|
+
.doc h2 { font-size: 30px; font-weight: 800; letter-spacing: -.025em; margin-bottom: 12px; }
|
|
197
|
+
.doc h3 { font-size: 19px; margin: 32px 0 12px; }
|
|
198
|
+
.doc .lead { font-size: 17px; color: var(--fg-2); margin-bottom: 26px; max-width: 48em; }
|
|
199
|
+
.doc ol, .doc ul { padding-left: 1.3em; }
|
|
200
|
+
.doc li { margin-bottom: 6px; }
|
|
201
|
+
.note { background: var(--bg-soft); border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px; font-size: 14.5px; color: var(--fg-2); margin: 20px 0; }
|
|
202
|
+
.note.accent { background: var(--accent-soft); border-color: color-mix(in srgb, var(--accent) 30%, transparent); }
|
|
203
|
+
.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 12px; margin: 0 0 20px; }
|
|
204
|
+
table { width: 100%; border-collapse: collapse; font-size: 14.5px; }
|
|
205
|
+
th { text-align: left; font-weight: 600; font-size: 13px; color: var(--muted); background: var(--bg-soft); padding: 11px 14px; border-bottom: 1px solid var(--line); white-space: nowrap; }
|
|
206
|
+
td { padding: 11px 14px; border-bottom: 1px solid var(--line); vertical-align: top; color: var(--fg-2); }
|
|
207
|
+
tr:last-child td { border-bottom: 0; }
|
|
208
|
+
td.f { font: 13px var(--mono); color: var(--fg); white-space: nowrap; }
|
|
209
|
+
.tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 14px; margin: 0 0 20px; }
|
|
210
|
+
.tile { border: 1px solid var(--line); border-radius: 12px; padding: 18px; background: var(--surface); }
|
|
211
|
+
.tile h3 { font-size: 15.5px; margin: 0 0 4px; }
|
|
212
|
+
.tile .stack { font: 12px var(--mono); color: var(--muted); margin-bottom: 10px; }
|
|
213
|
+
.tile ul { margin: 0; padding-left: 1.1em; font-size: 14px; color: var(--fg-2); }
|
|
214
|
+
.tile ul li { margin-bottom: 3px; }
|
|
215
|
+
.tile p { font-size: 14px; color: var(--fg-2); margin: 0; }
|
|
216
|
+
.flow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 22px; }
|
|
217
|
+
.flow span { font-size: 13.5px; border: 1px solid var(--line-strong); background: var(--surface); border-radius: 999px; padding: 5px 13px; }
|
|
218
|
+
.flow i { font-style: normal; color: var(--muted); }
|
|
219
|
+
.phase { display: grid; grid-template-columns: 44px 1fr; gap: 18px; margin-bottom: 28px; }
|
|
220
|
+
.phase .n { width: 44px; height: 44px; border-radius: 12px; background: var(--accent-soft); color: var(--accent-ink); font-weight: 800; display: grid; place-items: center; }
|
|
221
|
+
.phase .when { font-size: 12.5px; color: var(--muted); margin: 0 0 2px; font-weight: 500; }
|
|
222
|
+
.phase h3 { margin: 0 0 10px; }
|
|
223
|
+
.chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
|
|
224
|
+
.chips span { font: 12.5px var(--mono); background: var(--code-bg); border-radius: 6px; padding: 3px 8px; }
|
|
225
|
+
.gate { border: 1px solid color-mix(in srgb, var(--warn) 35%, transparent); background: var(--warn-soft); border-radius: 10px; padding: 12px 16px; font-size: 14px; }
|
|
226
|
+
.gate b { color: var(--warn); font-size: 12px; letter-spacing: .06em; text-transform: uppercase; }
|
|
227
|
+
.gate ul { margin: 6px 0 0; }
|
|
228
|
+
.rules { counter-reset: r; list-style: none; padding: 0 !important; display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
|
|
229
|
+
.rules li { counter-increment: r; border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px 16px 58px; position: relative; margin: 0; }
|
|
230
|
+
.rules li::before { content: counter(r, decimal-leading-zero); position: absolute; left: 18px; top: 16px; font: 600 13px var(--mono); color: var(--accent-ink); }
|
|
231
|
+
.rules b { display: block; margin-bottom: 2px; }
|
|
232
|
+
.rules span { font-size: 14px; color: var(--muted); }
|
|
233
|
+
|
|
234
|
+
::selection { background: color-mix(in srgb, var(--accent) 26%, transparent); }
|
|
235
|
+
|
|
236
|
+
/* Okuma ilerlemesi (menünün alt çizgisi) */
|
|
237
|
+
.progress { position: absolute; left: 0; bottom: -1px; width: 100%; height: 2px; background: var(--accent); transform-origin: 0 50%; transform: scaleX(0); }
|
|
238
|
+
|
|
239
|
+
/* Kurulum seçici */
|
|
240
|
+
.setup { max-width: 540px; }
|
|
241
|
+
.seg { display: inline-flex; gap: 4px; padding: 4px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 12px; margin-bottom: 12px; }
|
|
242
|
+
.seg button { font: 600 14px var(--font); color: var(--muted); background: none; border: 0; border-radius: 9px; padding: 7px 14px; cursor: pointer; transition: background .2s, color .2s, box-shadow .2s; }
|
|
243
|
+
.seg button:hover { color: var(--fg); }
|
|
244
|
+
.seg button[aria-selected="true"] { background: var(--surface); color: var(--fg); box-shadow: 0 1px 2px rgba(15, 23, 42, .08), 0 3px 10px rgba(15, 23, 42, .06); }
|
|
245
|
+
.setup .install { max-width: none; }
|
|
246
|
+
.install.chat span::before { content: "› "; }
|
|
247
|
+
.via { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; margin-top: 12px; font-size: 13.5px; color: var(--muted); }
|
|
248
|
+
.via button { font: 500 13.5px var(--font); color: var(--muted); background: none; border: 0; padding: 2px 0; cursor: pointer; border-bottom: 1.5px solid transparent; }
|
|
249
|
+
.via button:hover { color: var(--fg); }
|
|
250
|
+
.via button[aria-pressed="true"] { color: var(--fg); border-bottom-color: var(--accent); }
|
|
251
|
+
.setup .next { margin: 14px 0 0; font-size: 14.5px; color: var(--fg-2); }
|
|
252
|
+
.setup .next b { color: var(--fg); }
|
|
253
|
+
|
|
254
|
+
/* Hero demosu: JS yoksa son hali görünür */
|
|
255
|
+
.demo .prompt { font: 13px var(--mono); color: var(--fg-2); margin: 0 0 14px; padding-bottom: 12px; border-bottom: 1px dashed var(--line-strong); min-height: 1.7em; }
|
|
256
|
+
.demo .prompt b { color: var(--accent-ink); font-weight: 500; }
|
|
257
|
+
.demo .caret { display: inline-block; width: 7px; height: 1.05em; margin-left: 2px; vertical-align: -2px; background: var(--accent); animation: blink 1s steps(1) infinite; }
|
|
258
|
+
@keyframes blink { 50% { opacity: 0; } }
|
|
259
|
+
.demo [data-s] { transition: opacity .5s cubic-bezier(.16, 1, .3, 1), transform .5s cubic-bezier(.16, 1, .3, 1); }
|
|
260
|
+
.demo.run [data-s]:not(.in) { opacity: 0; transform: translateY(6px); }
|
|
261
|
+
.opt { transition: border-color .35s ease, background .35s ease, box-shadow .35s ease; }
|
|
262
|
+
.demo.run .opt.rec:not(.picked) { border-color: var(--line); background: transparent; box-shadow: none; }
|
|
263
|
+
.demo.run .opt.rec:not(.picked) b { color: var(--fg); }
|
|
264
|
+
|
|
265
|
+
/* Yol seçici */
|
|
266
|
+
.routes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin: 4px 0 32px; }
|
|
267
|
+
.route { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--radius); padding: 22px 22px 20px; background: var(--surface); box-shadow: var(--shadow); transition: transform .25s cubic-bezier(.16, 1, .3, 1), border-color .25s ease; }
|
|
268
|
+
.route:hover { transform: translateY(-2px); border-color: var(--line-strong); }
|
|
269
|
+
.route.primary { border-color: color-mix(in srgb, var(--accent) 45%, var(--line)); background: linear-gradient(180deg, var(--accent-soft), var(--surface) 60%); }
|
|
270
|
+
.doc .route h3 { font-size: 19px; margin: 0 0 4px; }
|
|
271
|
+
.route .for { font-size: 14px; color: var(--muted); margin-bottom: 18px; }
|
|
272
|
+
.steps { list-style: none; padding: 0 !important; margin: 0 0 18px; flex: 1; }
|
|
273
|
+
.doc .steps li { position: relative; margin: 0; padding: 0 0 12px 26px; font-size: 14.5px; color: var(--fg-2); }
|
|
274
|
+
.steps li::before { content: ""; position: absolute; left: 3px; top: 7px; width: 11px; height: 11px; border-radius: 50%; background: var(--surface); border: 2px solid var(--accent); }
|
|
275
|
+
.steps li::after { content: ""; position: absolute; left: 8px; top: 20px; bottom: 0; width: 2px; background: var(--line-strong); }
|
|
276
|
+
.doc .steps li:last-child { padding-bottom: 0; }
|
|
277
|
+
.steps li:last-child::after { display: none; }
|
|
278
|
+
.route .go { font-weight: 600; font-size: 14.5px; align-self: flex-start; }
|
|
279
|
+
|
|
280
|
+
/* Koruma akışı */
|
|
281
|
+
.gflow { margin: 0 0 24px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--bg-soft); padding: 20px 22px; }
|
|
282
|
+
.gflow .lane + .lane { margin-top: 16px; padding-top: 16px; border-top: 1px dashed var(--line-strong); }
|
|
283
|
+
.gflow .lane-h { font-size: 12.5px; font-weight: 600; color: var(--muted); margin: 0 0 10px; }
|
|
284
|
+
.gflow ol { list-style: none; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 0; padding: 0 !important; margin: 0; }
|
|
285
|
+
.doc .gflow li { display: flex; align-items: center; margin: 0; font-size: 13.5px; }
|
|
286
|
+
.gflow li + li::before { content: ""; width: 16px; height: 2px; margin: 0 6px; background: var(--line-strong); }
|
|
287
|
+
.gflow .node { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line-strong); background: var(--surface); color: var(--fg); border-radius: 999px; padding: 5px 12px; }
|
|
288
|
+
.gflow .node svg { width: 14px; height: 14px; flex: none; }
|
|
289
|
+
.gflow .start .node { background: var(--term-bg); color: var(--term-fg); border-color: var(--term-bg); font-family: var(--mono); font-size: 12.5px; }
|
|
290
|
+
.gflow .stop .node { border-color: color-mix(in srgb, var(--bad) 55%, transparent); background: var(--bad-soft); color: var(--bad); font-weight: 600; }
|
|
291
|
+
.gflow .pass .node { border-color: color-mix(in srgb, var(--ok) 55%, transparent); background: var(--ok-soft); color: var(--ok); font-weight: 600; }
|
|
292
|
+
.gflow figcaption { font-size: 13.5px; color: var(--muted); margin-top: 14px; }
|
|
293
|
+
|
|
294
|
+
footer { border-top: 1px solid var(--line); padding: 40px 0; font-size: 14px; color: var(--muted); }
|
|
295
|
+
footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content: space-between; align-items: center; }
|
|
296
|
+
|
|
297
|
+
@media (max-width: 960px) {
|
|
298
|
+
.hero .container, .stats, .moments { grid-template-columns: minmax(0, 1fr); }
|
|
299
|
+
.grid3 { grid-template-columns: minmax(0, 1fr); }
|
|
300
|
+
.docs { grid-template-columns: minmax(0, 1fr); gap: 0; }
|
|
301
|
+
.side { position: static; max-height: none; display: flex; flex-wrap: wrap; gap: 6px; padding: 0 0 8px; }
|
|
302
|
+
.side p { display: none; }
|
|
303
|
+
.side a { border: 1px solid var(--line); border-radius: 999px; padding: 4px 12px; font-size: 13px; }
|
|
304
|
+
.cycle { grid-template-columns: 1fr; gap: 22px; }
|
|
305
|
+
.cycle li { display: grid; grid-template-columns: 56px 1fr; gap: 16px; text-align: left; padding: 0; }
|
|
306
|
+
.cycle li::after { display: none; }
|
|
307
|
+
.cycle .dot { margin: 0; }
|
|
308
|
+
}
|
|
309
|
+
@media (max-width: 720px) {
|
|
310
|
+
.container { padding: 0 16px; }
|
|
311
|
+
.nav-links a:not(.btn) { display: none; }
|
|
312
|
+
.nav .container { gap: 12px; }
|
|
313
|
+
.lang a, .lang span { padding: 4px 9px; }
|
|
314
|
+
.hero { padding: 56px 0 48px; }
|
|
315
|
+
.band { padding: 64px 0; }
|
|
316
|
+
.grid2, .rules, .big, .routes { grid-template-columns: minmax(0, 1fr); }
|
|
317
|
+
.bars .row { grid-template-columns: 92px 1fr 48px; }
|
|
318
|
+
}
|
|
319
|
+
@media (max-width: 480px) {
|
|
320
|
+
.nav-links { display: none; }
|
|
321
|
+
.lang { margin-left: auto; }
|
|
322
|
+
}
|
|
323
|
+
@media (prefers-reduced-motion: reduce) {
|
|
324
|
+
html { scroll-behavior: auto; }
|
|
325
|
+
.cycle .dot { animation: none; }
|
|
326
|
+
.btn, .route, .seg button, .opt, .demo [data-s] { transition: none; }
|
|
327
|
+
.demo .caret { animation: none; }
|
|
328
|
+
.route:hover { transform: none; }
|
|
329
|
+
}
|
|
330
|
+
</style>
|
|
331
|
+
</head>
|
|
332
|
+
<body>
|
|
333
|
+
|
|
334
|
+
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
|
335
|
+
<symbol id="mark" viewBox="0 0 72 72">
|
|
336
|
+
<circle cx="36" cy="36" r="30" fill="none" stroke="currentColor" stroke-width="5"/>
|
|
337
|
+
<path d="M36 36 L57 15" stroke="var(--accent)" stroke-width="5" stroke-linecap="round"/>
|
|
338
|
+
<circle cx="57" cy="15" r="9" fill="var(--accent)"/>
|
|
339
|
+
<circle cx="36" cy="36" r="5" fill="currentColor"/>
|
|
340
|
+
</symbol>
|
|
341
|
+
</svg>
|
|
342
|
+
|
|
343
|
+
<header class="nav">
|
|
344
|
+
<div class="container">
|
|
345
|
+
<a class="brand" href="#top"><svg class="mark"><use href="#mark"/></svg>TillerHand</a>
|
|
346
|
+
<nav class="nav-links" aria-label="Ana menü">
|
|
347
|
+
<a href="#nasil">Nasıl çalışır</a>
|
|
348
|
+
<a href="#ekranlar">Ekranlar</a>
|
|
349
|
+
<a href="#olcum">Ölçüm</a>
|
|
350
|
+
<a href="#rehber">Rehber</a>
|
|
351
|
+
<a class="btn ghost small" href="https://github.com/burakdogrul/TillerHand">GitHub</a>
|
|
352
|
+
</nav>
|
|
353
|
+
<div class="lang" role="group" aria-label="Dil"><a href="guide.html" hreflang="en" lang="en">English</a><span aria-current="true">Türkçe</span></div>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="progress" aria-hidden="true"></div>
|
|
356
|
+
</header>
|
|
357
|
+
|
|
358
|
+
<main id="top">
|
|
359
|
+
|
|
360
|
+
<!-- ============ HERO ============ -->
|
|
361
|
+
<section class="hero">
|
|
362
|
+
<div class="container">
|
|
363
|
+
<div>
|
|
364
|
+
<span class="pill"><b>v3.47.0</b> Claude Code için başlangıç kiti · MIT</span>
|
|
365
|
+
<h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
|
|
366
|
+
<p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
|
|
367
|
+
<div class="setup">
|
|
368
|
+
<div class="seg" role="tablist" aria-label="Projenin durumu">
|
|
369
|
+
<button type="button" role="tab" aria-selected="true" data-path="new">Yeni proje</button>
|
|
370
|
+
<button type="button" role="tab" aria-selected="false" data-path="old">Var olan proje</button>
|
|
371
|
+
</div>
|
|
372
|
+
<div class="install"><span id="cmd">npx tillerhand init</span><button class="copy" type="button" data-copy="cmd">Kopyala</button></div>
|
|
373
|
+
<div class="via" role="group" aria-label="Nerede çalıştıracaksın">
|
|
374
|
+
<span>Nerede:</span>
|
|
375
|
+
<button type="button" aria-pressed="true" data-via="term">Terminal</button>
|
|
376
|
+
<button type="button" aria-pressed="false" data-via="chat">Claude uygulaması</button>
|
|
377
|
+
</div>
|
|
378
|
+
<p class="next" aria-live="polite">Proje klasöründe çalıştır. Sonra aynı klasörde yeni oturum aç ve <code>/start fikrin</code> yaz.</p>
|
|
379
|
+
</div>
|
|
380
|
+
<p class="hero-note">Tek komut yeter; plugin ve git yolları <a href="#baslangic">Kurulum</a>'da · Codex ve Antigravity'de de çalışır · Kod bilmen gerekmez</p>
|
|
381
|
+
</div>
|
|
382
|
+
<div class="window demo" aria-label="Örnek: AI'nın sana sorduğu bir karar sorusu">
|
|
383
|
+
<div class="bar"><i></i><i></i><i></i><span>Claude Code · /start</span></div>
|
|
384
|
+
<div class="body">
|
|
385
|
+
<p class="prompt"><b>›</b> <span class="typed">/start Serbest çalışanlar için fatura takibi</span><span class="caret" aria-hidden="true"></span></p>
|
|
386
|
+
<p class="ctx" data-s="1">Adım 4/9 · Teknoloji · Bu karar tüm veri katmanını belirler; sonradan değiştirmek pahalı.</p>
|
|
387
|
+
<p class="q" data-s="1">Veritabanı ve kimlik doğrulama hangisi olsun?</p>
|
|
388
|
+
<div class="opt rec" data-s="2"><b>Supabase (Önerilen)</b><span>Postgres, kimlik ve dosya depolama tek yerde. Satır bazlı güvenlik hazır; ücretsiz katman MVP için yeterli.</span></div>
|
|
389
|
+
<div class="opt" data-s="3"><b>Neon + Better Auth</b><span>Daha fazla kontrol, sağlayıcıya bağımlılık az. Kimlik kodu sende kalır.</span></div>
|
|
390
|
+
<div class="opt" data-s="4"><b>Firebase</b><span>Gerçek zamanlı ve mobil ile ortak backend. NoSQL; ilişkisel sorgu zayıf.</span></div>
|
|
391
|
+
<div class="board-row" data-s="6">Kurul görüşü: <span class="tag" data-s="6">Mimar ✓</span><span class="tag" data-s="7">Güvenlik ✓</span><span class="tag warn" data-s="8">Maliyet: izle</span></div>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</section>
|
|
396
|
+
|
|
397
|
+
<!-- ============ SORUN ============ -->
|
|
398
|
+
<section class="band soft">
|
|
399
|
+
<div class="container">
|
|
400
|
+
<p class="kicker">Neden</p>
|
|
401
|
+
<h2>AI ile kod yazmak hızlı. Ürün çıkarmak başka iş.</h2>
|
|
402
|
+
<p class="lead">"Vibe coding" ile bir demo bir öğleden sonra çıkar. Gerçek kullanıcıya açılan bir ürün ise sessizce verilen kararları, testsiz kodu, sızan anahtarları ve dağılan klasörleri kaldırmaz. TillerHand hızı korur, bu dört açığı kapatır.</p>
|
|
403
|
+
<div class="grid2">
|
|
404
|
+
<div class="card problem">
|
|
405
|
+
<div class="was"><b>Genelde</b>AI veritabanını, kütüphaneyi, veri modelini kendi seçer. Neden öyle olduğunu kimse bilmez.</div>
|
|
406
|
+
<div class="now"><b>TillerHand'de</b>Her karar 2-4 seçenekle sana gelir: önerilen ilk sırada, her birinin ne zaman daha iyi olduğu ve bedeli yanında. Cevabın günlüğe yazılır, bir daha sorulmaz.</div>
|
|
407
|
+
</div>
|
|
408
|
+
<div class="card problem">
|
|
409
|
+
<div class="was"><b>Genelde</b>"Çalışıyor" denir, test yoktur. Bir sonraki değişiklik eskisini bozar.</div>
|
|
410
|
+
<div class="now"><b>TillerHand'de</b>Kabul testleri koddan önce yazılır ve önce kırmızı olur. "Bitti" demeden kanıt gösterilir: test çıktısı, ekran görüntüsü.</div>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="card problem">
|
|
413
|
+
<div class="was"><b>Genelde</b>API anahtarı koda girer, prod veritabanı yanlışlıkla silinir, test geçsin diye test zayıflatılır.</div>
|
|
414
|
+
<div class="now"><b>TillerHand'de</b>Hook'lar bunları daha olmadan durdurur. AI bu korumaları atlatamaz; prod'a giden her adım senin onayını ister.</div>
|
|
415
|
+
</div>
|
|
416
|
+
<div class="card problem">
|
|
417
|
+
<div class="was"><b>Genelde</b>Üç ay sonra kimse dosyaların nerede olduğunu bilmez; <code>final-v2-old.tsx</code> çoğalır.</div>
|
|
418
|
+
<div class="now"><b>TillerHand'de</b>Özellik bazlı bir klasör haritası yazım anında, CI'da ve kurulda korunur. Dağınıklık dosyaları engellenir.</div>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
</section>
|
|
423
|
+
|
|
424
|
+
<!-- ============ DÖNGÜ ============ -->
|
|
425
|
+
<section class="band" id="nasil">
|
|
426
|
+
<div class="container">
|
|
427
|
+
<p class="kicker">Nasıl çalışır</p>
|
|
428
|
+
<h2>Her görevde aynı döngü. Ortasında sen varsın.</h2>
|
|
429
|
+
<p class="lead">TillerHand bir komut listesi değil, bir çalışma düzeni. Fikrini yazarsın, gerisini AI ile birlikte adım adım yürütürsün. Önemli hiçbir şey senin haberin olmadan olmaz.</p>
|
|
430
|
+
<ol class="cycle">
|
|
431
|
+
<li><div class="dot">1</div><div><h3>AI planlar</h3><p>Görevi okur, karar noktalarını bulur, seçenekleri hazırlar.</p></div></li>
|
|
432
|
+
<li class="you"><div class="dot">2</div><div><h3>Sen karar verirsin</h3><p>Önerilen ilk sırada; ne zaman hangisi daha iyi, bedeli ne.</p></div></li>
|
|
433
|
+
<li><div class="dot">3</div><div><h3>Önce test, sonra kod</h3><p>Testleri ayrı bir ajan yazar, kırmızı başlar; kod onları yeşile çevirir.</p></div></li>
|
|
434
|
+
<li><div class="dot">4</div><div><h3>Kurul denetler</h3><p>İlgili uzmanlar inceler; kritik bulguda iş bitmez.</p></div></li>
|
|
435
|
+
<li><div class="dot">5</div><div><h3>Kanıtla kaydedilir</h3><p>Kapı yeşilse commit, pano güncellenir, sıradaki görev.</p></div></li>
|
|
436
|
+
</ol>
|
|
437
|
+
<p class="back"><span>↺ Her görevde tekrar · faz sonunda bulgu raporları ve kurul toplantısı</span></p>
|
|
438
|
+
|
|
439
|
+
<div class="grid3" style="margin-top:56px">
|
|
440
|
+
<div class="card">
|
|
441
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg></div>
|
|
442
|
+
<h3>Kararı sen verirsin</h3>
|
|
443
|
+
<p>Ürün, teknik, tasarım, veri, güvenlik ve maliyet kararları gerekçeli seçeneklerle sorulur. Tasarım soruları gerçek içerikli görsel önizlemeyle gelir.</p>
|
|
444
|
+
</div>
|
|
445
|
+
<div class="card">
|
|
446
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg></div>
|
|
447
|
+
<h3>Uzman kurulu denetler</h3>
|
|
448
|
+
<p>Ürün, Mimar, Güvenlik, UX, KVKK ve QA gibi üyeler planı, görevi, commit'i ve fazı inceler. Önemli kararlarda farklı modellerden bir konsey toplanır.</p>
|
|
449
|
+
</div>
|
|
450
|
+
<div class="card">
|
|
451
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg></div>
|
|
452
|
+
<h3>Korumalar durdurur</h3>
|
|
453
|
+
<p>Sır engeli, yıkıcı komut kalkanı, paket kapısı, test koruması, commit kapısı. Kurallar yazılı, kontroller otomatik; AI atlatamaz.</p>
|
|
454
|
+
</div>
|
|
455
|
+
<div class="card">
|
|
456
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v18h18"/><path d="M7 15l4-4 3 3 5-6"/></svg></div>
|
|
457
|
+
<h3>Her an neredesin, bilirsin</h3>
|
|
458
|
+
<p>Her cevabın sonunda durum bloğu, alt çubukta görev ve limit, tarayıcıda canlı bir kontrol paneli.</p>
|
|
459
|
+
</div>
|
|
460
|
+
<div class="card">
|
|
461
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg></div>
|
|
462
|
+
<h3>Bir uzman gözüyle tarar</h3>
|
|
463
|
+
<p>Teknik, iş, güvenlik, UX, performans ve hukuk için en önemli 20 bulgu; kanıtlı, puanlı ve düzeltme yöntemiyle.</p>
|
|
464
|
+
</div>
|
|
465
|
+
<div class="card">
|
|
466
|
+
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg></div>
|
|
467
|
+
<h3>Canlıya ve ötesine</h3>
|
|
468
|
+
<p>Hosting, alan adı ve yedek kurulumu adım adım; onaylı prod deploy; canlı izleme ve düzenli bakım.</p>
|
|
469
|
+
</div>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</section>
|
|
473
|
+
|
|
474
|
+
<!-- ============ EKRANLAR ============ -->
|
|
475
|
+
<section class="band soft" id="ekranlar">
|
|
476
|
+
<div class="container">
|
|
477
|
+
<p class="kicker">Çalışırken</p>
|
|
478
|
+
<h2>TillerHand ile bir gün böyle görünür.</h2>
|
|
479
|
+
<p class="lead">Aşağıdakiler gerçek çıktıların sadeleştirilmiş halleri. Hepsi Claude Code oturumunda, sohbetin içinde olur.</p>
|
|
480
|
+
<div class="moments">
|
|
481
|
+
<div class="moment">
|
|
482
|
+
<div class="window">
|
|
483
|
+
<div class="bar"><i></i><i></i><i></i><span>Kurul · görev sonu toplantısı</span></div>
|
|
484
|
+
<pre class="term">MEMBER: Güvenlik · VERDICT: <span class="r">RET</span>
|
|
485
|
+
FINDINGS:
|
|
486
|
+
<span class="r">[KRİTİK]</span> app/api/invoice/[id]/route.ts:14
|
|
487
|
+
Fatura sahibi kontrol edilmiyor; başka
|
|
488
|
+
kullanıcının id'siyle fatura okunur.
|
|
489
|
+
<span class="g">→ Sorguya user_id koşulu ekle.</span>
|
|
490
|
+
MEMBER: QA · VERDICT: <span class="g">ONAY</span>
|
|
491
|
+
ASK THE USER: yok</pre>
|
|
492
|
+
</div>
|
|
493
|
+
<h3>Kurul bir açığı yakalar</h3>
|
|
494
|
+
<p>Kritik bulgu (RET) varsa görev bitmiş sayılmaz. Sana üç yol sunulur: düzelt, riski gerekçesiyle kabul et ya da görevi geri al.</p>
|
|
495
|
+
</div>
|
|
496
|
+
<div class="moment">
|
|
497
|
+
<div class="window">
|
|
498
|
+
<div class="bar"><i></i><i></i><i></i><span>Koruma · AI bir dosyaya yazmaya çalışıyor</span></div>
|
|
499
|
+
<pre class="term"><span class="c">Write lib/stripe.ts</span>
|
|
500
|
+
<span class="r">ENGELLENDİ:</span> lib/stripe.ts dosyasına sır
|
|
501
|
+
yazılıyor (Stripe gizli anahtarı).
|
|
502
|
+
Sırrı koda yazma; ortam değişkeninden oku
|
|
503
|
+
ve adını .env.example'a boş değerle ekle.
|
|
504
|
+
|
|
505
|
+
<span class="c">Bash vercel deploy --prod</span>
|
|
506
|
+
<span class="y">ONAY GEREKİYOR:</span> Prod ortamına deploy.</pre>
|
|
507
|
+
</div>
|
|
508
|
+
<h3>Korumalar hatayı daha olmadan durdurur</h3>
|
|
509
|
+
<p>Engel sohbetin içinde açıklamasıyla gelir. Prod'a, veriye ve paraya dokunan her adım senin onayını bekler.</p>
|
|
510
|
+
</div>
|
|
511
|
+
<div class="moment">
|
|
512
|
+
<div class="window">
|
|
513
|
+
<div class="bar"><i></i><i></i><i></i><span>Her cevabın sonunda</span></div>
|
|
514
|
+
<pre class="term">── Durum ─────────────────────────────
|
|
515
|
+
Aşama: Faz 1 · Görev: G-012 (7/23)
|
|
516
|
+
Soru modu: açık · Limit: 5s %34 hf %5
|
|
517
|
+
Yapıldı: kayıt formu + doğrulama, test yeşil
|
|
518
|
+
Kurul: <span class="g">ONAY</span> (ux, qa)
|
|
519
|
+
Sıradaki: G-013 şifre sıfırlama
|
|
520
|
+
Bekleyen karar: e-posta servisi</pre>
|
|
521
|
+
</div>
|
|
522
|
+
<h3>Nerede olduğunu her an bilirsin</h3>
|
|
523
|
+
<p>Aşama, görev, limit, kurulun kararı ve sıradaki adım her cevabın sonunda. Bırakıp döndüğünde kaldığın yer hazır.</p>
|
|
524
|
+
</div>
|
|
525
|
+
<div class="moment">
|
|
526
|
+
<div class="window">
|
|
527
|
+
<div class="bar"><i></i><i></i><i></i><span>dashboard.html</span></div>
|
|
528
|
+
<div class="body">
|
|
529
|
+
<p class="ctx">Şimdi · Faz 1 · G-012 kayıt formu</p>
|
|
530
|
+
<div class="bars" style="margin:6px 0 14px">
|
|
531
|
+
<div class="row"><span>Yol haritası</span><div class="track"><div class="fill kit" style="width:30%"></div></div><span class="val">7/23</span></div>
|
|
532
|
+
<div class="row"><span>Güvenlik</span><div class="track"><div class="fill kit" style="width:86%"></div></div><span class="val">86</span></div>
|
|
533
|
+
<div class="row"><span>UX</span><div class="track"><div class="fill kit" style="width:74%"></div></div><span class="val">74</span></div>
|
|
534
|
+
</div>
|
|
535
|
+
<div class="board-row" style="margin-top:0">Dikkat: <span class="tag bad">1 kritik bulgu</span><span class="tag warn">alan adı 21 gün</span><span class="tag info">2 karar bekliyor</span></div>
|
|
536
|
+
</div>
|
|
537
|
+
</div>
|
|
538
|
+
<h3>Proje tek sayfada</h3>
|
|
539
|
+
<p>Kararlar, kurul, bulgular, kalite, operasyon ve limit; her Claude cevabından sonra kendiliğinden güncellenir.</p>
|
|
540
|
+
</div>
|
|
541
|
+
</div>
|
|
542
|
+
</div>
|
|
543
|
+
</section>
|
|
544
|
+
|
|
545
|
+
<!-- ============ ÖLÇÜM ============ -->
|
|
546
|
+
<section class="band" id="olcum">
|
|
547
|
+
<div class="container">
|
|
548
|
+
<p class="kicker">Ölçüm</p>
|
|
549
|
+
<h2>Fark, hataları yakalayan testlerde.</h2>
|
|
550
|
+
<p class="lead">Aynı görevler TillerHand ile ve onsuz <code>claude -p</code> ile koşuldu ve gizli testlerle puanlandı. Sonra koda bilerek hatalar eklendi: Ajanın yazdığı testler bu hataları yakalıyor mu?</p>
|
|
551
|
+
<div class="stats">
|
|
552
|
+
<div class="card bars">
|
|
553
|
+
<h3 style="margin-bottom:22px">Bilerek eklenen hataları yakalayan testler</h3>
|
|
554
|
+
<div class="row"><span><b>TillerHand</b></span><div class="track"><div class="fill kit" style="width:63%"></div></div><span class="val">%63</span></div>
|
|
555
|
+
<div class="row"><span>Kitsiz</span><div class="track"><div class="fill" style="width:31%"></div></div><span class="val">%31</span></div>
|
|
556
|
+
<p class="fine" style="margin-top:8px">Fark en çok örtük gereksinim ve Türkçe sıralama tuzağı olan görevlerde çıktı.</p>
|
|
557
|
+
</div>
|
|
558
|
+
<div class="big">
|
|
559
|
+
<div class="card"><div class="num">24/24</div><p>TillerHand her koşuda testi koddan önce yazdı. Kitsiz koşu hiçbirinde yazmadı.</p></div>
|
|
560
|
+
<div class="card"><div class="num">81/81</div><p>İki koşul da gizli testlerin hepsini geçti; bu boyuttaki görevleri model kitsiz de çözüyor.</p></div>
|
|
561
|
+
<div class="card" style="grid-column:1 / -1"><div class="num">48</div><p>Koşu: hata düzeltme, yeni özellik, yetki güvenliği, sayfalama, Türkçe sıralama ve çöp kutusu olmak üzere 6 farklı görev; her koşul 24 kez.</p></div>
|
|
562
|
+
</div>
|
|
563
|
+
</div>
|
|
564
|
+
<p class="fine">Sürüm 3.18.2 · Sonnet · 6 görev · koşul başına 24 koşu. Düzenek ve sonuçlar depoda: <code>kit/eval/</code>.</p>
|
|
565
|
+
</div>
|
|
566
|
+
</section>
|
|
567
|
+
|
|
568
|
+
<!-- ============ REHBER ============ -->
|
|
569
|
+
<div class="band soft" style="padding:72px 0 0" id="rehber">
|
|
570
|
+
<div class="container">
|
|
571
|
+
<p class="kicker">Rehber</p>
|
|
572
|
+
<h2>Ayrıntılı rehber</h2>
|
|
573
|
+
<p class="lead" style="margin-bottom:40px">Kurulumdan bakıma kadar her şey: komutlar, kurul, korumalar, araçlar ve kurallar.</p>
|
|
574
|
+
</div>
|
|
575
|
+
</div>
|
|
576
|
+
|
|
577
|
+
<div class="container docs">
|
|
578
|
+
<nav class="side" aria-label="Rehber içindekiler">
|
|
579
|
+
<p>Başla</p>
|
|
580
|
+
<a href="#baslangic">Kurulum</a>
|
|
581
|
+
<a href="#hic-bilmiyorsan">Hiç bilmiyorsan</a>
|
|
582
|
+
<a href="#adopt">Var olan proje</a>
|
|
583
|
+
<a href="#gunluk">Her gün</a>
|
|
584
|
+
<p>Çalışma şekli</p>
|
|
585
|
+
<a href="#protokol">Karar protokolü</a>
|
|
586
|
+
<a href="#sihirbaz">/start sihirbazı</a>
|
|
587
|
+
<a href="#tasarim">Tasarım akışı</a>
|
|
588
|
+
<a href="#asamalar">Dört aşama</a>
|
|
589
|
+
<a href="#kurul">Uzman kurulu</a>
|
|
590
|
+
<p>Kalite ve güvenlik</p>
|
|
591
|
+
<a href="#kontroller">Koruma katmanları</a>
|
|
592
|
+
<a href="#bulgular">Bulgu raporları</a>
|
|
593
|
+
<a href="#yapi">Proje yapısı</a>
|
|
594
|
+
<p>Takip</p>
|
|
595
|
+
<a href="#rapor">Raporlama ve pano</a>
|
|
596
|
+
<a href="#limit">Limit farkındalığı</a>
|
|
597
|
+
<p>Araçlar</p>
|
|
598
|
+
<a href="#yetenekler">Yetenek paketleri</a>
|
|
599
|
+
<a href="#skiller">Hangi işte hangi skill</a>
|
|
600
|
+
<a href="#araclar">Codex ve Antigravity</a>
|
|
601
|
+
<p>Referans</p>
|
|
602
|
+
<a href="#komutlar">Komutlar</a>
|
|
603
|
+
<a href="#kit">Güncelleme ve bakım</a>
|
|
604
|
+
<a href="#kurallar">Altın kurallar</a>
|
|
605
|
+
</nav>
|
|
606
|
+
|
|
607
|
+
<div class="doc">
|
|
608
|
+
|
|
609
|
+
<section id="baslangic">
|
|
610
|
+
<p class="path">Başlamadan</p>
|
|
611
|
+
<h2>Kurulum</h2>
|
|
612
|
+
<p class="lead">Önce yolunu seç: boş bir klasörde yeni bir fikirle mi başlıyorsun, yoksa kodun zaten var mı? Kurulum ikisinde de aynı; değişen, kurulumdan sonra yazacağın komut.</p>
|
|
613
|
+
<div class="routes">
|
|
614
|
+
<article class="route primary">
|
|
615
|
+
<h3>Yeni fikrim var</h3>
|
|
616
|
+
<p class="for">Boş klasör, kod yok</p>
|
|
617
|
+
<ol class="steps">
|
|
618
|
+
<li>Klasörde <code>npx tillerhand init</code></li>
|
|
619
|
+
<li>Aynı klasörde yeni oturum, <code>/start fikrin</code>: dokuz adımda plan</li>
|
|
620
|
+
<li>Faz 0: CI ve ilk deploy</li>
|
|
621
|
+
<li>Her gün <code>/build</code>: sıradaki görev</li>
|
|
622
|
+
</ol>
|
|
623
|
+
<a class="go" href="#sihirbaz">/start sihirbazı →</a>
|
|
624
|
+
</article>
|
|
625
|
+
<article class="route">
|
|
626
|
+
<h3>Kodum zaten var</h3>
|
|
627
|
+
<p class="for">İlerlemiş, beğenmediğin ya da düzene sokmak istediğin proje</p>
|
|
628
|
+
<ol class="steps">
|
|
629
|
+
<li>Projenin kökünde <code>npx tillerhand init</code>; dosyaların ezilmez</li>
|
|
630
|
+
<li>Yeni oturum, <code>/adopt</code>: kod taranır, belgeler koddan çıkar</li>
|
|
631
|
+
<li>Kritik akışlara önce testler</li>
|
|
632
|
+
<li>Uyum görevleri <code>/build</code> ile, özellik özellik</li>
|
|
633
|
+
</ol>
|
|
634
|
+
<a class="go" href="#adopt">/adopt nasıl çalışır →</a>
|
|
635
|
+
</article>
|
|
636
|
+
</div>
|
|
637
|
+
<p><b>Gereksinimler:</b> <a href="https://claude.com/claude-code">Claude Code</a>, Git, Node.js 18+.</p>
|
|
638
|
+
<p>Kurulum için <b>tek bir yol seç</b>; üçü de projeye aynı dosyaları kopyalar (<code>.claude/</code>, <code>CLAUDE.md</code>, <code>AGENTS.md</code>, <code>docs/</code>) ve git deposu yoksa açar. Emin değilsen npm. Proje tipi kurulumda değil, <code>/start</code> sırasında sorulur.</p>
|
|
639
|
+
<div class="table-wrap"><table>
|
|
640
|
+
<thead><tr><th>Yol</th><th>Ne zaman</th></tr></thead>
|
|
641
|
+
<tbody>
|
|
642
|
+
<tr><td><b>1. npm</b> (önerilen)</td><td>En kısa yol. Terminalde ya da Claude'a "bu klasörde <code>npx tillerhand init</code> çalıştır" diyerek</td></tr>
|
|
643
|
+
<tr><td><b>2. Claude Code plugin</b></td><td>Bilgisayara bir kez kurulur, sonra her yeni projede <code>/tillerhand:init</code>. Plugin yalnız kurulumu yapar ve her seferinde son sürümü çeker</td></tr>
|
|
644
|
+
<tr><td><b>3. git</b></td><td>Kitin kaynağını görmek, değiştirmek ya da katkı vermek için. Kit proje içinde <code>vibe-kit/</code> klasöründe durur, <code>.gitignore</code>'a girer</td></tr>
|
|
645
|
+
</tbody>
|
|
646
|
+
</table></div>
|
|
647
|
+
<pre class="term"><span class="c"># 1. npm: proje klasöründe</span>
|
|
648
|
+
npx tillerhand init
|
|
649
|
+
<span class="c"># 2. plugin: bir kez (masaüstünde /plugin açılmazsa terminalde: claude plugin marketplace add … ve claude plugin install …)</span>
|
|
650
|
+
/plugin marketplace add burakdogrul/TillerHand
|
|
651
|
+
/plugin install tillerhand@tillerhand
|
|
652
|
+
<span class="c"># sonra her yeni projede:</span>
|
|
653
|
+
/tillerhand:init
|
|
654
|
+
<span class="c"># 3. git: proje klasöründe</span>
|
|
655
|
+
git clone https://github.com/burakdogrul/TillerHand.git vibe-kit
|
|
656
|
+
node vibe-kit/kit/kit.mjs init</pre>
|
|
657
|
+
<p>Kurulumdan sonra aynı klasörde <b>yeni bir Claude Code oturumu</b> aç; kitin komutları ve korumaları yeni oturumda yüklenir. Sonra yeni projede <code>/start fikrin</code>, var olan projede <code>/adopt</code>.</p>
|
|
658
|
+
<div class="note"><b>Hangi araç:</b> <code>init</code>, Claude Code, Codex ve Antigravity'den hangisiyle (birden fazlası olabilir) çalışacağını sorar. Doğrudan da verebilirsin: <code>init --tool codex</code>. Kit başka bir klasördeyse: <code>node <kit>/kit/kit.mjs init --project <proje></code>. Türkiye eki için <code>--addons tr</code>.</div>
|
|
659
|
+
<div class="note"><b>Eklentiler:</b> Proje ilk açıldığında Claude Code, <code>.claude/settings.json</code>'da tanımlı skill eklentilerini kurmayı önerir: Caveman, Impeccable, Taste Skill, UI UX Pro Max, Humanizer, Ponytail ve Matt Pocock. <code>/start</code> onayınla eksikleri proje kapsamında kurar (<code>plugins-sync.mjs --install</code>). Tasarım, güvenlik, yayın ve video paketleri kurulur ama kapalı kalır; ilgili komut gerektiğinde açmayı sorar.</div>
|
|
660
|
+
<div class="note"><b>Önerilen: kod haritası.</b> <a href="https://github.com/DeusData/codebase-memory-mcp">codebase-memory-mcp</a> bağlıysa AI kodu dosya dosya okumak yerine sorgular; proje büyüdükçe ciddi token tasarrufu sağlar. <code>/start</code> kurmak isteyip istemediğini sorar; kurulumu kendi terminalinde yaparsın.</div>
|
|
661
|
+
</section>
|
|
662
|
+
|
|
663
|
+
<section id="hic-bilmiyorsan">
|
|
664
|
+
<p class="path">Kod bilmeden</p>
|
|
665
|
+
<h2>Hiç bilmiyorsan: adım adım</h2>
|
|
666
|
+
<p class="lead">Kod yazmayı bilmen gerekmez. Git, terminal ve kurulum işlerini Claude yapar ve önemli her adımda sana sorar. Sen ne istediğini anlatır ve seçim yaparsın.</p>
|
|
667
|
+
<ol>
|
|
668
|
+
<li><b>Hesaplar (bir kez):</b> <a href="https://github.com">GitHub</a> hesabı (ücretsiz) ve Claude <b>Pro</b> veya <b>Max</b> aboneliği.</li>
|
|
669
|
+
<li><b>Programlar (bir kez):</b> <a href="https://claude.com/download">Claude masaüstü uygulaması</a>, <a href="https://nodejs.org">Node.js</a> (LTS sürümü), <a href="https://git-scm.com/downloads">Git</a>. İstersen <a href="https://desktop.github.com">GitHub Desktop</a> da kurabilirsin.</li>
|
|
670
|
+
<li><b>Proje:</b> Projen için bir klasör aç ve Claude masaüstü uygulamasında <b>Code</b> sekmesinde seç. Claude'a "bu klasörde <code>npx tillerhand init</code> komutunu çalıştır" yaz. TillerHand plugin'ini <a href="#baslangic">bir kez kurduysan</a> bunun yerine <code>/tillerhand:init</code> da olur.</li>
|
|
671
|
+
<li><b>Aç:</b> Aynı klasörde <b>yeni oturum</b> aç; kitin komutları ve korumaları yeni oturumda yüklenir. Eklentileri kurmayı önerirse kabul et.</li>
|
|
672
|
+
<li><b>Başlat:</b> <code>/start fikrin</code> yaz (kodun zaten varsa <a href="#adopt"><code>/adopt</code></a>). <b>Her sorunun ilk seçeneği önerilendir</b>; emin değilsen onu seç. Pro'daysan ilk sorular için öneri: profil <b>Hafif</b>, planlama derinliği <b>Hızlı</b> (5 saatlik limitin ~%25-35'i), pano <b>Evet</b>, anlatıcı mod <b>Evet</b>.</li>
|
|
673
|
+
</ol>
|
|
674
|
+
<div class="note accent"><b>Bilmen gerekenler.</b> Pro'da 5 saatlik ve haftalık kullanım limiti var; Claude %90, %95 ve %99'da uyarır ama işi durdurmaz. Limit dolup iş kesilirse yenilenince <code>/build</code> ile kaldığın yerden devam edersin. Veritabanı, tasarım ve maliyet gibi kararlar sorulmadan verilmez; ödeme, veri silme ve canlıya alma gibi geri dönüşü zor işler her zaman onay ister. Projeyi başkasına bırakacaksan <code>/handoff</code>; devralan <code>/handoff devral</code> ile aynı yerden devam eder.</div>
|
|
675
|
+
</section>
|
|
676
|
+
|
|
677
|
+
<section id="adopt">
|
|
678
|
+
<p class="path">Kodun zaten varsa</p>
|
|
679
|
+
<h2>/adopt: var olan projeyi kite al</h2>
|
|
680
|
+
<p class="lead"><code>/start</code>'ın var olan kod için karşılığı. Fikirden değil koddan başlar ama kararları yine sen verirsin. Bu oturumda uygulama koduna dokunulmaz ve dosya taşınmaz; taşıma ve düzeltmeler sonradan <code>/build</code> görevleriyle yapılır.</p>
|
|
681
|
+
<pre class="term"><span class="c"># projenin kökünde</span>
|
|
682
|
+
npx tillerhand init
|
|
683
|
+
<span class="c"># aynı klasörde yeni oturum</span>
|
|
684
|
+
/adopt</pre>
|
|
685
|
+
<div class="phase">
|
|
686
|
+
<div class="n">1</div>
|
|
687
|
+
<div>
|
|
688
|
+
<p class="when">Salt okunur</p>
|
|
689
|
+
<h3>Tarar</h3>
|
|
690
|
+
<p>Stack, klasör yapısı, özellikler, testlerin durumu ve son 30 commit çıkarılır. Hızlı tarama 5 saatlik limitin yaklaşık %10-20'si; derin taramada seçtiğin bulgu raporları da çalışır.</p>
|
|
691
|
+
</div>
|
|
692
|
+
</div>
|
|
693
|
+
<div class="phase">
|
|
694
|
+
<div class="n">2</div>
|
|
695
|
+
<div>
|
|
696
|
+
<p class="when">Senin cevaplarınla</p>
|
|
697
|
+
<h3>Belgeleri koddan çıkarır</h3>
|
|
698
|
+
<p>PRD, stack ve mimari koddan taslak olarak yazılır, anlaşılmayan yer sorulur: neyi beğenmiyorsun, neyi iyileştirmek istiyorsun? Eski <code>CLAUDE.md</code>'deki kurallar tek tek sorulup <code>AGENTS.md</code>'ye taşınır. Kitin dosyası projeninkiyle çakışırsa <code>.kit-new</code> olarak yanına konur, birleştirme sorulur.</p>
|
|
699
|
+
</div>
|
|
700
|
+
</div>
|
|
701
|
+
<div class="phase">
|
|
702
|
+
<div class="n">3</div>
|
|
703
|
+
<div>
|
|
704
|
+
<p class="when">Taşımadan önce</p>
|
|
705
|
+
<h3>Kritik akışlara test</h3>
|
|
706
|
+
<p>Giriş, ödeme, veri kaydı gibi 3-7 akış seçilir ve her birinin doğru davranışı sana sorulur. Test kodun bugünkü haline göre değil, senin cevabına göre yazılır; ikisi çelişirse bulgu olur.</p>
|
|
707
|
+
</div>
|
|
708
|
+
</div>
|
|
709
|
+
<div class="phase">
|
|
710
|
+
<div class="n">4</div>
|
|
711
|
+
<div>
|
|
712
|
+
<p class="when">Yol haritası</p>
|
|
713
|
+
<h3>Uyum görevleri</h3>
|
|
714
|
+
<div class="chips"><span>Faz 0 güvenli zemin</span><span>Faz 1 yapıyı taşı</span><span>Faz 2 bulgular</span><span>Faz 3 yeni özellikler</span></div>
|
|
715
|
+
<p>Yapı ayrı bir dalda, özellik özellik taşınır. Her görevden sonra testler ve uygulama çalışıyor olmalı; bozulursa <code>/rollback</code>. Sonra her gün olduğu gibi <code>/build</code>.</p>
|
|
716
|
+
</div>
|
|
717
|
+
</div>
|
|
718
|
+
</section>
|
|
719
|
+
|
|
720
|
+
<section id="gunluk">
|
|
721
|
+
<p class="path">Rutin</p>
|
|
722
|
+
<h2>Her gün</h2>
|
|
723
|
+
<div class="table-wrap"><table>
|
|
724
|
+
<thead><tr><th>Ne zaman</th><th>Ne yazarsın</th></tr></thead>
|
|
725
|
+
<tbody>
|
|
726
|
+
<tr><td>Çalışmaya başlarken</td><td><code>/build</code>: görev kodu yazmana gerek yok; sıradaki görevi kendisi alır, test eder</td></tr>
|
|
727
|
+
<tr><td>Durumu merak edersen</td><td><code>ne durumdayız?</code> veya <code>/dashboard</code></td></tr>
|
|
728
|
+
<tr><td>Bir şey bozulursa</td><td><code>/rollback</code>: son çalışan hale güvenle döner</td></tr>
|
|
729
|
+
<tr><td>Hata görürsen</td><td><code>/fix-bug belirti</code>: kök nedeni bulur, önce kırmızı test yazar, sonra düzeltir</td></tr>
|
|
730
|
+
<tr><td>Bırakırken</td><td><code>/wrap-up</code> (her şeyi kaydeder), sonra <code>/clear</code>. Temiz ekranda sıradaki komut yazar</td></tr>
|
|
731
|
+
</tbody>
|
|
732
|
+
</table></div>
|
|
733
|
+
</section>
|
|
734
|
+
|
|
735
|
+
<section id="protokol">
|
|
736
|
+
<p class="path">docs/workflow/decision-protocol.md</p>
|
|
737
|
+
<h2>Kararı sen verirsin</h2>
|
|
738
|
+
<p class="lead">Ürün, teknik, tasarım, içerik, veri, güvenlik ve maliyetle ilgili her seçim bir karar noktasıdır. AI seçenekleri hazırlar, önerisini ilk sıraya koyar, her seçeneğin ne zaman daha iyi olduğunu ve bedelini yazar. Cevabın <code>docs/decisions/log.md</code>'ye kaydedilir, sonra uygulanır ve bir daha sorulmaz.</p>
|
|
739
|
+
<div class="grid2" style="margin-bottom:20px">
|
|
740
|
+
<div class="window">
|
|
741
|
+
<div class="bar"><i></i><i></i><i></i><span>Örnek soru</span></div>
|
|
742
|
+
<div class="body">
|
|
743
|
+
<p class="ctx">Aşama: Başlangıç 4/9 · Teknoloji. Bu karar tüm backend kodunu belirler; sonradan değiştirmek pahalı.</p>
|
|
744
|
+
<p class="q">Backend'i hangi dil ve framework ile yazalım?</p>
|
|
745
|
+
<div class="opt rec"><b>Python + FastAPI (Önerilen)</b><span>Fikrinde belge okuma ve AI özetleme var; Python bu işlerde en güçlü ekosistem.</span></div>
|
|
746
|
+
<div class="opt"><b>Node.js + Hono</b><span>Frontend de TypeScript olacaksa tek dil ve tip paylaşımı sağlar.</span></div>
|
|
747
|
+
<div class="opt"><b>Go</b><span>Çok yüksek trafik ve düşük sunucu maliyeti gerekiyorsa; geliştirme daha yavaş.</span></div>
|
|
748
|
+
</div>
|
|
749
|
+
</div>
|
|
750
|
+
<div class="table-wrap" style="margin:0"><table>
|
|
751
|
+
<thead><tr><th>Sen ne dersin</th><th>Ne olur</th></tr></thead>
|
|
752
|
+
<tbody>
|
|
753
|
+
<tr><td>"tasarımda sorma"</td><td>Sadece <code>tasarim</code> konusu kapanır. AI önerilen seçeneği seçer, kararı "otomatik" diye kaydeder ve durum bloğunda bildirir. Önizlemeler yine üretilir.</td></tr>
|
|
754
|
+
<tr><td>"hiç sorma"</td><td>Tüm konular kapanır.</td></tr>
|
|
755
|
+
<tr><td>"tekrar sor"</td><td>Konu(lar) yeniden açılır.</td></tr>
|
|
756
|
+
<tr><td><code>/ask-mode</code></td><td>Mevcut modu ve otomatik verilen kararları gösterir; <code>on</code> / <code>off <konu></code> ile değiştirir.</td></tr>
|
|
757
|
+
</tbody>
|
|
758
|
+
</table></div>
|
|
759
|
+
</div>
|
|
760
|
+
<div class="table-wrap"><table>
|
|
761
|
+
<thead><tr><th>Konu</th><th>Örnek kararlar</th></tr></thead>
|
|
762
|
+
<tbody>
|
|
763
|
+
<tr><td class="f">urun</td><td>MVP kapsamı, öncelik, kullanıcı akışı, fiyat</td></tr>
|
|
764
|
+
<tr><td class="f">teknik</td><td>Dil, framework, veritabanı, auth, hosting, kütüphane ekleme, API stili</td></tr>
|
|
765
|
+
<tr><td class="f">tasarim</td><td>Stil yönü, renk, yazı tipi, düzen, bileşen stili, animasyon, koyu tema</td></tr>
|
|
766
|
+
<tr><td class="f">icerik</td><td>Metinler, ses tonu, sen/siz, başlık ve CTA alternatifleri</td></tr>
|
|
767
|
+
<tr><td class="f">veri</td><td>Veri modeli, silme davranışı, saklama süresi</td></tr>
|
|
768
|
+
<tr><td class="f">guvenlik</td><td>Roller, oturum süresi, hız sınırları, kişisel veri</td></tr>
|
|
769
|
+
<tr><td class="f">maliyet</td><td>Ücretli servis, plan seviyesi, AI modeli, harcama limiti</td></tr>
|
|
770
|
+
</tbody>
|
|
771
|
+
</table></div>
|
|
772
|
+
<div class="note">Geri dönüşü zor kararlarda (veritabanı, auth, ödeme, veri modeli; "tek yönlü kapı") önce kurulun ve gerekirse konseyin görüşü alınır. Soru modundan bağımsız olarak her zaman onay istenir: veri silme, prod'a deploy, para harcatan işlem, geri dönülemez komutlar. Dosya ve değişken adı gibi uygulama ayrıntıları sorulmaz, raporlanır.</div>
|
|
773
|
+
</section>
|
|
774
|
+
|
|
775
|
+
<section id="sihirbaz">
|
|
776
|
+
<p class="path">.claude/commands/start.md</p>
|
|
777
|
+
<h2>/start: dokuz adımlı sihirbaz</h2>
|
|
778
|
+
<p class="lead">Uygulama kodu yazmadan projenin tüm temel kararlarını alır. Kararlar verildiği anda günlüğe yazılır ve panoda görünür. Yarıda kalırsa kaldığı adımdan devam eder.</p>
|
|
779
|
+
<div class="table-wrap"><table>
|
|
780
|
+
<thead><tr><th>Adım</th><th>Ne olur</th><th>Örnek soru</th><th>Skill</th></tr></thead>
|
|
781
|
+
<tbody>
|
|
782
|
+
<tr><td class="f">0 Hazırlık</td><td>Profil (Hafif / Standart / Tam), planlama derinliği (maliyetiyle), araç, pano, node, git, skill, limit ve kod haritası kontrolü</td><td>"Planlama derinliği: Hızlı (~%25-35) / Standart (~%50-70) / Ayrıntılı (~%80-100)?"</td><td>caveman</td></tr>
|
|
783
|
+
<tr><td class="f">1 Fikir</td><td>Fikir turlar halinde sorgulanır, PRD yazılır</td><td>"İlk sürümde hangi özellikler olsun?" (çoklu seçim; seçilmeyenler kapsam dışı)</td><td>grilling</td></tr>
|
|
784
|
+
<tr><td class="f">2 Tip</td><td>Web/SaaS, mobil veya backend; AI özelliği var mı</td><td>"Kullanıcın masa başında çalışıyor; web öneriyorum. Uygun mu?"</td><td>-</td></tr>
|
|
785
|
+
<tr><td class="f">3 Kurulum</td><td><code>node kit/kit.mjs install</code> tipi ve klasör haritasını yerleştirir</td><td>-</td><td>-</td></tr>
|
|
786
|
+
<tr><td class="f">4 Teknoloji</td><td>Tipin karar kataloğundaki 10-12 karar tek tek</td><td>"Veritabanı ve kimlik: Supabase / Neon + Better Auth / Firebase?"</td><td>research</td></tr>
|
|
787
|
+
<tr><td class="f">5 Mimari</td><td>Veri modeli, giriş yöntemleri, roller, servisler ve maliyet, sözlük, birim ekonomisi</td><td>"Silinen fatura çöp kutusuna mı gitsin, kalıcı mı silinsin?"</td><td>domain-modeling, codebase-design</td></tr>
|
|
788
|
+
<tr><td class="f">6 Kurul</td><td>Tipe göre önerilen uzman kurulu; üyeler inceleme rolünün modeliyle çalışır, ajanlar projede üretilir. Pahalı adım: önce maliyet, sonra "Yap / Hafif yap / Sonraya bırak"</td><td>"Kurulda kimler olsun?" (çoklu seçim)</td><td>-</td></tr>
|
|
789
|
+
<tr><td class="f">7 Tasarım</td><td><code>/design general</code>: görsel önizlemelerle stil, renk, yazı tipi, detaylar. Pahalı adım: önce maliyet sorulur</td><td>"Bu üç açılış sayfasından hangisi?"</td><td>taste, impeccable, ui-ux-pro-max</td></tr>
|
|
790
|
+
<tr><td class="f">8 Yol haritası</td><td>Kabul testi önce gelen görevler, ilk özellik, lansman hedefi</td><td>"Faz 1'de önce hangi özellikle başlayalım?"</td><td>-</td></tr>
|
|
791
|
+
<tr><td class="f">9 Kapanış</td><td>Özet, sonraya bırakılan adımlar, ilk görev</td><td>-</td><td>-</td></tr>
|
|
792
|
+
</tbody>
|
|
793
|
+
</table></div>
|
|
794
|
+
<div class="note">Stack seçilince projenin README'sindeki Gereksinimler/Kurulum bölümü ve sürüm dosyası (<code>.nvmrc</code> / <code>.python-version</code>) doldurulur; proje başka bilgisayarda aynı şekilde kurulabilir. <code>/release</code> ve aylık <code>/maintain</code> bunu temiz bir klasörde kurarak sınar.</div>
|
|
795
|
+
</section>
|
|
796
|
+
|
|
797
|
+
<section id="tasarim">
|
|
798
|
+
<p class="path">/design · görsel önizleme</p>
|
|
799
|
+
<h2>Tasarımı görerek seçersin</h2>
|
|
800
|
+
<p class="lead">Her tasarım kararında seçenek başına gerçek içerikle bir örnek üretilir (<code>.previews/</code>), tarayıcıda açılır, ekran görüntüsü gösterilir; sonra sorulur. Her stil yönü kendi skill'iyle çizilir, böylece seçenekler arasındaki fark gerçek olur.</p>
|
|
801
|
+
<div class="flow" role="list" aria-label="Tasarım akışı">
|
|
802
|
+
<span role="listitem">Stil yönü · 3 örnek</span><i aria-hidden="true">→</i>
|
|
803
|
+
<span role="listitem">Renk · 3 palet</span><i aria-hidden="true">→</i>
|
|
804
|
+
<span role="listitem">Yazı tipi · 3 çift</span><i aria-hidden="true">→</i>
|
|
805
|
+
<span role="listitem">Detaylar</span><i aria-hidden="true">→</i>
|
|
806
|
+
<span role="listitem">DESIGN.md</span><i aria-hidden="true">→</i>
|
|
807
|
+
<span role="listitem">Sayfa yapısı</span><i aria-hidden="true">→</i>
|
|
808
|
+
<span role="listitem">Metin + humanizer</span><i aria-hidden="true">→</i>
|
|
809
|
+
<span role="listitem">Uygula</span><i aria-hidden="true">→</i>
|
|
810
|
+
<span role="listitem">critique · audit · polish</span>
|
|
811
|
+
</div>
|
|
812
|
+
<div class="tiles">
|
|
813
|
+
<article class="tile"><h3>Premium / Apple tarzı</h3><p class="stack">taste-skill:high-end-visual-design</p><ul><li>Bol boşluk, büyük ve ince tipografi, yumuşak geçişler</li><li>Tüketici ürünü, marka algısı, yüksek fiyat</li></ul></article>
|
|
814
|
+
<article class="tile"><h3>Minimal editoryal</h3><p class="stack">taste-skill:minimalist-ui</p><ul><li>Sıcak monokrom, tipografi odaklı, düz yüzeyler</li><li>İçerik, portfolyo, sakin SaaS</li></ul></article>
|
|
815
|
+
<article class="tile"><h3>Cesur ve hareketli</h3><p class="stack">taste-skill:gpt-taste</p><ul><li>Dev tipografi, kaydırmaya bağlı animasyon, bento</li><li>Lansman sayfası, genç kitle</li></ul></article>
|
|
816
|
+
<article class="tile"><h3>Endüstriyel / brutalist</h3><p class="stack">taste-skill:industrial-brutalist-ui</p><ul><li>Ham ızgara, terminal estetiği</li><li>Geliştirici aracı, veri yoğun pano</li></ul></article>
|
|
817
|
+
<article class="tile"><h3>İşlevsel ürün arayüzü</h3><p class="stack">impeccable + ui-ux-pro-max:ui-styling</p><ul><li>Sade, yoğun bilgi, hızlı kullanım</li><li>Panel, admin, B2B araç</li></ul></article>
|
|
818
|
+
<article class="tile"><h3>Her yönde ortak</h3><p class="stack">impeccable · ui-ux-pro-max · humanizer</p><ul><li>PRODUCT.md ve DESIGN.md Impeccable'da</li><li>Palet ve yazı adayları UI UX Pro Max'ten</li><li>Metinler Humanizer'dan geçer</li></ul></article>
|
|
819
|
+
</div>
|
|
820
|
+
<div class="note"><b>İlham markası (isteğe bağlı):</b> Beğendiğin bir ürünün DESIGN.md'si (awesome-design-md) indirilir ve Impeccable ile ilkeleri damıtılır. Logo, ad ve birebir palet alınmaz; marka taklidi yoktur.</div>
|
|
821
|
+
</section>
|
|
822
|
+
|
|
823
|
+
<section id="asamalar">
|
|
824
|
+
<p class="path">/start sonrası</p>
|
|
825
|
+
<h2>Dört aşama</h2>
|
|
826
|
+
<p class="lead">Her aşamanın bir çıkış kapısı var: kapıdaki maddeler tamamlanmadan bir sonrakine geçilmez.</p>
|
|
827
|
+
<div class="phase">
|
|
828
|
+
<div class="n">1</div>
|
|
829
|
+
<div>
|
|
830
|
+
<p class="when">İlk gün · Faz 0</p>
|
|
831
|
+
<h3>Kurulum ve ilk deploy</h3>
|
|
832
|
+
<div class="chips"><span>/build G-001</span><span>… G-007</span><span>CI yeşil</span><span>prod URL</span><span>Sentry</span><span>belirteçler kodda</span></div>
|
|
833
|
+
<div class="gate"><b>Çıkış kapısı</b><ul><li>dev, test, lint, build komutları çalışıyor</li><li>Sır içeren deneme commit'i reddediliyor, GitHub'da CI yeşil</li><li>"Merhaba dünya" prod URL'de açılıyor, hata takibi çalışıyor</li></ul></div>
|
|
834
|
+
</div>
|
|
835
|
+
</div>
|
|
836
|
+
<div class="phase">
|
|
837
|
+
<div class="n">2</div>
|
|
838
|
+
<div>
|
|
839
|
+
<p class="when">Her görev · Faz 1–2</p>
|
|
840
|
+
<h3>Geliştirme döngüsü</h3>
|
|
841
|
+
<div class="flow" role="list" aria-label="Görev döngüsü">
|
|
842
|
+
<span role="listitem">/plan-task · karar noktaları sorulur</span><i aria-hidden="true">→</i>
|
|
843
|
+
<span role="listitem">/build · testleri test-writer yazar</span><i aria-hidden="true">→</i>
|
|
844
|
+
<span role="listitem">kanıt</span><i aria-hidden="true">→</i>
|
|
845
|
+
<span role="listitem">/review-changes</span><i aria-hidden="true">→</i>
|
|
846
|
+
<span role="listitem">kapı + kurul → commit</span><i aria-hidden="true">→</i>
|
|
847
|
+
<span role="listitem">/wrap-up</span>
|
|
848
|
+
</div>
|
|
849
|
+
<div class="gate"><b>"Bitti" tanımı</b><ul><li>Görevde çıkan tüm kararlar soruldu ve kaydedildi</li><li>Testler yeşil, çalıştığına dair kanıt gösterildi</li><li>Arayüz varsa DESIGN.md'ye uygun, Impeccable critique yapıldı, metinler Humanizer'dan geçti</li><li>Görev sonu kurul toplantısında RET yok</li></ul></div>
|
|
850
|
+
</div>
|
|
851
|
+
</div>
|
|
852
|
+
<div class="phase">
|
|
853
|
+
<div class="n">3</div>
|
|
854
|
+
<div>
|
|
855
|
+
<p class="when">Lansman · ve her sürüm</p>
|
|
856
|
+
<h3>Canlıya alma</h3>
|
|
857
|
+
<div class="chips"><span>/release first</span><span>/release</span><span>security-auditor</span><span>security-review</span><span>ponytail-audit</span><span>impeccable audit</span></div>
|
|
858
|
+
<p><code>/release first</code> ilk lansmanda hosting, ortam değişkenleri, alan adı ve DNS, yedek ve zamana geri dönüş (PITR) ile geri alma provasını sağlayıcıya göre adım adım kurdurur (Vercel, Supabase, Railway, EAS). Adımlar resmî dokümandan, kaynak ve tarihle; sırrı sen panelde girersin.</p>
|
|
859
|
+
<div class="gate"><b>Çıkış kapısı</b><ul><li>Tüm ❌ maddeleri kapandı; senin kontrol etmen gerekenler soruldu</li><li>Yedekten geri yükleme denendi, geri alma yolu yazılı</li><li>KVKK metinleri yayında, harcama limitleri ayarlı, canlı izleme açık</li></ul></div>
|
|
860
|
+
</div>
|
|
861
|
+
</div>
|
|
862
|
+
<div class="phase">
|
|
863
|
+
<div class="n">4</div>
|
|
864
|
+
<div>
|
|
865
|
+
<p class="when">Canlıdayken · düzenli</p>
|
|
866
|
+
<h3>Bakım</h3>
|
|
867
|
+
<div class="chips"><span>/maintain weekly</span><span>monthly · ponytail-debt</span><span>quarterly · ponytail-audit</span><span>/user-feedback</span><span>/retro</span></div>
|
|
868
|
+
<p>Canlı izleme 3 saatte bir kritik akışı ve yanıt süresini dener; bozulunca GitHub issue açılır, panoda uyarı çıkar ve <code>/fix-bug</code> önerilir.</p>
|
|
869
|
+
<div class="gate"><b>Olay anında sırayla</b><ul><li><b>Durdur</b>, <b>Kaydet</b>, <b>Düzelt</b>, <b>Bildir</b> (kişisel veri ihlalinde Kurul'a 72 saat içinde), <b>Öğren</b></li></ul></div>
|
|
870
|
+
</div>
|
|
871
|
+
</div>
|
|
872
|
+
</section>
|
|
873
|
+
|
|
874
|
+
<section id="kurul">
|
|
875
|
+
<p class="path">.claude/agents/board-* · docs/workflow/board.md</p>
|
|
876
|
+
<h2>Uzman kurulu</h2>
|
|
877
|
+
<p class="lead">Seçilen ürün tipine göre uzman ajanlar senin projende oluşturulur ve stack'e göre özelleştirilir. İşleri sürekli denetler, karar önerir ve seni bilgilendirir. Danışmandırlar; sadece kritik bulguda işi durdururlar. Karar her zaman sende.</p>
|
|
878
|
+
<div class="tiles">
|
|
879
|
+
<article class="tile"><h3>Web / SaaS</h3><p class="stack">ürün · mimar · güvenlik · ux · performans · kvkk · qa</p><ul><li>+ devops, + ai (AI eki varsa)</li></ul></article>
|
|
880
|
+
<article class="tile"><h3>Mobil</h3><p class="stack">ürün · mimar · güvenlik · ux · mobil · kvkk · qa</p><ul><li>+ devops, + ai</li></ul></article>
|
|
881
|
+
<article class="tile"><h3>Backend</h3><p class="stack">ürün · mimar · güvenlik · api · devops · qa</p><ul><li>+ kvkk (kişisel veri varsa), + ai</li></ul></article>
|
|
882
|
+
</div>
|
|
883
|
+
<div class="table-wrap"><table>
|
|
884
|
+
<thead><tr><th>Toplantı</th><th>Ne zaman</th><th>Kim</th><th>Model</th></tr></thead>
|
|
885
|
+
<tbody>
|
|
886
|
+
<tr><td>Plan · konsey</td><td>/plan-task sonunda, onaydan önce</td><td>Ürün + Mimar + ilgili üyeler (en fazla 4) + başkan</td><td>inceleme rolü · başkan opus</td></tr>
|
|
887
|
+
<tr><td>Görev sonu</td><td>/build sonunda</td><td>İlgili üyeler (en fazla 3)</td><td>inceleme rolü</td></tr>
|
|
888
|
+
<tr><td>Commit (hafif)</td><td>Her commit öncesi; hook zorunlu kılar. Görev sonu toplantısı aynı değişiklikleri onayladıysa yapılmaz</td><td>İlgili en fazla 2 üye, yalnız son onaydan sonra değişen dosyalar</td><td>haiku</td></tr>
|
|
889
|
+
<tr><td>Faz sonu · canlıya alma</td><td>/board convene, /release first</td><td>Tüm kurul + başkan</td><td>inceleme rolü · başkan opus</td></tr>
|
|
890
|
+
<tr><td>Karar konseyi</td><td>Tek yönlü kapı kararı, /board council</td><td>3 danışman aynı soruyu cevaplar + başkan</td><td>haiku · sonnet · opus · başkan opus</td></tr>
|
|
891
|
+
</tbody>
|
|
892
|
+
</table></div>
|
|
893
|
+
<h3>Konsey: üç aşama</h3>
|
|
894
|
+
<p>Karpathy'nin <a href="https://github.com/karpathy/llm-council">llm-council</a> yapısı kurula uyarlandı. Ağır toplantılar ve geri dönüşü pahalı kararlar üç aşamadan geçer:</p>
|
|
895
|
+
<div class="tiles">
|
|
896
|
+
<article class="tile"><h3>1 · İlk görüşler</h3><p>Üyeler (veya farklı modellerdeki danışmanlar) birbirinden habersiz, paralel çalışır. Görüşler A, B, C diye etiketlenir; bulgular A1, A2…</p></article>
|
|
897
|
+
<article class="tile"><h3>2 · Anonim çapraz oy</h3><p>Her üye diğerlerinin görüşünü kimin yazdığını bilmeden okur, her bulguya DOĞRU · ABARTILI · YANLIŞ oyu verir, eksik olanı yazar ve görüşleri sıralar.</p></article>
|
|
898
|
+
<article class="tile"><h3>Sayım (kod)</h3><p><code>council.mjs</code> ortalama sırayı, bulgu oylarını ve uzlaşma yüzdesini kodla hesaplar; model sayıyı değiştiremez.</p></article>
|
|
899
|
+
<article class="tile"><h3>3 · Başkan</h3><p>board-chair (opus) tutanağı okur, kararı yazar, çürütülen bulguları gerekçesiyle eler, azınlık görüşünü korur. Tartışmalı kritik bulguyu eleyemez; sana sorar.</p></article>
|
|
900
|
+
</div>
|
|
901
|
+
<p><b>Profil</b> konseyin ne zaman toplanacağını belirler (bir konsey Pro'da 5 saatlik limitin yaklaşık %12'si):</p>
|
|
902
|
+
<div class="table-wrap"><table>
|
|
903
|
+
<thead><tr><th></th><th>Hafif (Pro için önerilen)</th><th>Standart</th><th>Tam</th></tr></thead>
|
|
904
|
+
<tbody>
|
|
905
|
+
<tr><td>Eklentiler</td><td>Çekirdek 6 + tipin LSP ve stack skill'leri</td><td>Çekirdek 8 + stack; paketler gerekince</td><td>Çekirdek 8 + stack; paketler gerekince</td></tr>
|
|
906
|
+
<tr><td>Commit denetimi</td><td>Kapalı</td><td>Açık</td><td>Açık</td></tr>
|
|
907
|
+
<tr><td>Komut listesi</td><td>10 çekirdek komut açıklamalı, gerisi sadece adıyla (~1.100 token az)</td><td>Hafif gibi</td><td>Hepsi açıklamalı</td></tr>
|
|
908
|
+
<tr><td>Toplantı konseyi</td><td>Yok</td><td>Faz sonu, canlıya alma</td><td>Plan, faz sonu, canlıya alma, RET</td></tr>
|
|
909
|
+
<tr><td>Karar konseyi</td><td>Veritabanı, auth</td><td>Veritabanı, auth</td><td>Tüm tek yönlü kararlar</td></tr>
|
|
910
|
+
</tbody>
|
|
911
|
+
</table></div>
|
|
912
|
+
<p>Karar konseyinde sana sorulan sorunun "(Önerilen)" seçeneği konseyden gelir; her seçeneğin altında konseyin oyu ve azınlık görüşü yazar. Tutanaklar <code>docs/workflow/council/</code>'da, özeti panonun Kurul sekmesinde.</p>
|
|
913
|
+
<div class="note">RET geldiğinde görev bitmiş sayılmaz. Sana üç seçenek sunulur: düzelt (önerilen), riski kabul et ve gerekçeyi kaydet, ya da görevi geri al. Üyeler arasında görüş ayrılığı varsa iki görüş yan yana konur ve karar sana sorulur.</div>
|
|
914
|
+
</section>
|
|
915
|
+
|
|
916
|
+
<section id="kontroller">
|
|
917
|
+
<p class="path">Kurallar yazılı, kontroller otomatik</p>
|
|
918
|
+
<h2>Koruma katmanları</h2>
|
|
919
|
+
<p class="lead">Kararlar Claude Code'un izin katmanında verilir (izin ver · sor · engelle); AI bunları atlatamaz. Codex ve Antigravity'de aynı betikler o aracın hook'larıyla çalışır.</p>
|
|
920
|
+
<figure class="gflow" aria-label="Örnek: korumaların sırası ve bir durdurma">
|
|
921
|
+
<div class="lane">
|
|
922
|
+
<p class="lane-h">Her dosya yazımında ve komutta</p>
|
|
923
|
+
<ol>
|
|
924
|
+
<li class="start"><span class="node">AI yazar / çalıştırır</span></li>
|
|
925
|
+
<li><span class="node">Sır engeli</span></li>
|
|
926
|
+
<li><span class="node">Yıkıcı komut kalkanı</span></li>
|
|
927
|
+
<li><span class="node">Paket kapısı</span></li>
|
|
928
|
+
<li><span class="node">Yapı ve kapsam</span></li>
|
|
929
|
+
<li class="stop"><span class="node"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true"><path d="M18 6L6 18M6 6l12 12"/></svg>Test ayrımı: durdu</span></li>
|
|
930
|
+
</ol>
|
|
931
|
+
</div>
|
|
932
|
+
<div class="lane">
|
|
933
|
+
<p class="lane-h">Her commit'te</p>
|
|
934
|
+
<ol>
|
|
935
|
+
<li><span class="node">Deterministik kapı</span></li>
|
|
936
|
+
<li><span class="node">Test kaynağı</span></li>
|
|
937
|
+
<li><span class="node">Kurul</span></li>
|
|
938
|
+
<li class="pass"><span class="node"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg>Commit</span></li>
|
|
939
|
+
</ol>
|
|
940
|
+
</div>
|
|
941
|
+
<figcaption>Örnek: kod ajanı bir test dosyasını değiştirmek istedi, test ayrımı durdurdu. Her katman ayrı bir betik; biri durdurursa işlem olmaz, "sor" kararında onay sana gelir.</figcaption>
|
|
942
|
+
</figure>
|
|
943
|
+
<div class="table-wrap"><table>
|
|
944
|
+
<thead><tr><th>Katman</th><th>Ne yapar</th></tr></thead>
|
|
945
|
+
<tbody>
|
|
946
|
+
<tr><td>Sır engeli</td><td>Koda veya dokümana yazılan API anahtarını (Anthropic, OpenAI, Stripe, AWS, GitHub, Supabase…) engeller; commit öncesi de tarar</td></tr>
|
|
947
|
+
<tr><td>Yıkıcı komut kalkanı</td><td><code>DROP</code>, <code>TRUNCATE</code>, koşulsuz <code>DELETE</code>, <code>db reset</code> ve prod ortam değişkenlerini makineye çekmek engellenir; prod deploy, geri alma, mağazaya gönderim ve migration sorulur</td></tr>
|
|
948
|
+
<tr><td>Paket kapısı</td><td>Kurulan ya da <code>npx</code>, <code>uvx</code> ile indirilip çalıştırılan paket kayıt defterinden doğrulanır: yoksa engellenir; çok yeni, az indirilmiş veya popüler bir pakete benziyorsa sorulur</td></tr>
|
|
949
|
+
<tr><td>Yapı koruyucu</td><td>Harita dışı yeni dosya sorulur; <code>*.bak</code>, <code>*-old.*</code>, kopya ve <code>temp/</code> gibi dağınıklıklar engellenir</td></tr>
|
|
950
|
+
<tr><td>Yapılandırma onayı</td><td><code>CLAUDE.md</code>, <code>AGENTS.md</code>, <code>.claude/</code>, <code>.codex/</code>, <code>.mcp.json</code> ve iş akışı dosyaları onayın olmadan değişmez</td></tr>
|
|
951
|
+
<tr><td>Test ayrımı</td><td>Testleri kodu yazan değil, ayrı bir ajan (<code>test-writer</code>, farklı model önerilir) koddan önce yazar. Test dosyasına bu ajan dışında kimse yazamaz: ana oturum ve kod ajanı denerse engellenir. Patch veya betikle dolaylı değişen test dosyası da commit kapısında durur. Böylece kodu yazan testi kendi koduna göre şekillendiremez</td></tr>
|
|
952
|
+
<tr><td>Test koruması</td><td>Beklenti silmek veya yoruma almak, <code>.skip</code>/<code>.only</code>, gevşek beklenti, test dosyasını silmek veya taşımak ve test ayarında kapsamı daraltmak sorulur; kabukla test dosyasına yazmak da</td></tr>
|
|
953
|
+
<tr><td>Deterministik kapı</td><td><code>gate.mjs --run</code>: lint, tip kontrolü, test ve Semgrep çalışır; çıktı kurula girdi olur, kırmızı kontrol RET sayılır. Spec'teki "değişmemesi gereken" davranışların testi yoksa veya kırmızıysa kapı kırmızıdır. Eklenen bir satırda bu makineye özel bir yol (proje klasörünün ya da ev klasörünün tam yolu) varsa da kırmızıdır. Yeni veya değişen komut önce sana gösterilip onaylatılır</td></tr>
|
|
954
|
+
<tr><td>Commit kapısı</td><td>Kurul denetimi ve aynı değişiklikler için yeşil kapı olmadan commit atılmaz; görev sonu onayı commit için de geçerli, aynı değişiklik iki kez denetlenmez; denetimi atlamak (<code>--skip</code>) her seferinde sorulur</td></tr>
|
|
955
|
+
<tr><td>Düzenleme kilidi</td><td><code>/freeze <klasör></code> açıkken AI sadece o klasöre yazar; kabukla dışarı yazmak sorulur, sembolik bağdan kaçılamaz</td></tr>
|
|
956
|
+
<tr><td>Kapsam kalkanı</td><td><code>/plan-task</code> onayından sonra planın dosya listesi kaydedilir; listede olmayan mevcut dosyaya yazım sorulur. Kalkanı açmak ve kapatmak da sorulur</td></tr>
|
|
957
|
+
<tr><td>Düzenleme turu sayacı</td><td>Aynı kod dosyası bir oturumda 5., 10. kez düzenlenince Semgrep ve güvenlik incelemesi hatırlatılır</td></tr>
|
|
958
|
+
<tr><td>Dev/prod ayrımı</td><td>Yerel ortam ve AI (salt-okunur MCP dahil) sadece dev projesine bağlanır; prod sırları barındırma panelinde kalır</td></tr>
|
|
959
|
+
<tr><td>Güvenlik incelemesi</td><td><code>security-guidance</code>: yazarken riskli kalıp uyarısı (istemcide service_role, kişisel veri logu, innerHTML), commit'te ayrı modelle inceleme</td></tr>
|
|
960
|
+
</tbody>
|
|
961
|
+
</table></div>
|
|
962
|
+
<div class="table-wrap"><table>
|
|
963
|
+
<thead><tr><th>Ne zaman</th><th>Nerede</th><th>Ne yakalar</th></tr></thead>
|
|
964
|
+
<tbody>
|
|
965
|
+
<tr><td>Push ve PR</td><td>GitHub Actions</td><td>Lint, tip, test, build, Semgrep, kopya kod, klasör yapısı, bağımlılık açıkları, tüm geçmişte sır taraması; değişen dosyalarda karmaşıklık bütçesi (fonksiyon 15 karmaşıklık / 80 satır, dosya 400 satır); Supabase varsa yerel Supabase'e karşı RLS saldırgan testi</td></tr>
|
|
966
|
+
<tr><td>Canlıda</td><td>Canlı izleme · bulut ajanları (isteğe bağlı)</td><td>3 saatte bir kritik akış ve yanıt süresi testi, bozulunca issue ve panoda uyarı; kırmızı CI'a düzeltme önerisi; haftalık bakım raporu</td></tr>
|
|
967
|
+
<tr><td>Her hafta</td><td>Dependabot</td><td>Eskiyen bağımlılıklar; majörler planlı</td></tr>
|
|
968
|
+
</tbody>
|
|
969
|
+
</table></div>
|
|
970
|
+
</section>
|
|
971
|
+
|
|
972
|
+
<section id="bulgular">
|
|
973
|
+
<p class="path">/findings-* · docs/findings/</p>
|
|
974
|
+
<h2>Bulgu raporları</h2>
|
|
975
|
+
<p class="lead">Projeyi bir uzman gözüyle tarar; en önemli en fazla 20 bulguyu kanıtla, 0-100 önem puanıyla ve teknik düzeltme yöntemiyle sıralar. Her rapor alan için bir sağlık puanı verir ve bir öncekiyle karşılaştırılır (yeni / devam / kötüleşti / çözüldü).</p>
|
|
976
|
+
<div class="table-wrap"><table>
|
|
977
|
+
<thead><tr><th>Komut</th><th>Bakış açısı</th><th>Örnek bulgu</th></tr></thead>
|
|
978
|
+
<tbody>
|
|
979
|
+
<tr><td class="f">/findings-tech</td><td>Kıdemli mimar</td><td>Aynı yetki kontrolü 4 yerde tekrar yazılmış; kullanılmayan export; N+1 sorgu</td></tr>
|
|
980
|
+
<tr><td class="f">/findings-business</td><td>Sektörün kıdemli uzmanı (bankacılıkta bankacı); web araştırmalı</td><td>Mutabakat akışı yok; iade kuralı tanımsız; rakiplerin standart özelliği eksik</td></tr>
|
|
981
|
+
<tr><td class="f">/findings-security</td><td>Saldırgan</td><td>Başkasının faturası okunabiliyor (IDOR); webhook imzası doğrulanmıyor</td></tr>
|
|
982
|
+
<tr><td class="f">/findings-ux</td><td>Kullanıcı ve UX araştırmacısı</td><td>Boş liste ekranı yönlendirmiyor; kontrast 3.1:1</td></tr>
|
|
983
|
+
<tr><td class="f">/findings-perf</td><td>Performans ve FinOps</td><td>Panel sayfası 480 KB istemci JS; AI çağrısında max_tokens yok</td></tr>
|
|
984
|
+
<tr><td class="f">/findings-legal</td><td>Uyum uzmanı (hukuki görüş değildir)</td><td>Vergi numarası veri envanterinde yok; çerez bandı onaydan önce analitik yüklüyor</td></tr>
|
|
985
|
+
<tr><td class="f">/findings-all</td><td>Seçilenlerin hepsi, paralel</td><td>Birleşik özet ve ortak düzeltme planı</td></tr>
|
|
986
|
+
</tbody>
|
|
987
|
+
</table></div>
|
|
988
|
+
<div class="note">Önem puanı = etki (40) + olasılık (25) + yayılım (20) + aciliyet (15). Seviyeler: Kritik ≥80 · Yüksek 60-79 · Orta 40-59 · Düşük <40. Sağlık = 100 − ceza (kritik 15 · yüksek 8 · orta 4 · düşük 1). Raporun sonunda düzeltme planı, ilgili kurul üyesinin görüşü ve hangi bulguların yol haritasına gireceği sorusu var.</div>
|
|
989
|
+
</section>
|
|
990
|
+
|
|
991
|
+
<section id="yapi">
|
|
992
|
+
<p class="path">.claude/structure.json · docs/architecture/structure.md</p>
|
|
993
|
+
<h2>Proje yapısı korunur</h2>
|
|
994
|
+
<p class="lead">Kod özellik bazlıdır: bir özelliğe ait her şey <code>features/<özellik>/</code> altında. Yeni bir dosya yapı haritası dışına yazılmak istenirse sana sorulur; dağınıklık dosyaları engellenir. Deneme işleri <code>sandbox/</code>, eski dokümanlar <code>docs/archive/</code> altına gider.</p>
|
|
995
|
+
<pre class="term">.claude/ <span class="c"># komutlar, ajanlar, hook'lar, kurul, bulgular, structure.json</span>
|
|
996
|
+
.github/ <span class="c"># CI, Dependabot, canlı izleme, bulut ajanları</span>
|
|
997
|
+
docs/
|
|
998
|
+
product/ prd · roadmap · glossary · launch · feedback · unit-economics · specs/
|
|
999
|
+
architecture/ overview · stack · structure
|
|
1000
|
+
design/ design-guide
|
|
1001
|
+
decisions/ log.md + adr-NNNN-*.md
|
|
1002
|
+
quality/ test-plan · metrics · retros · qa/
|
|
1003
|
+
security/ checklist
|
|
1004
|
+
legal/ privacy-kvkk
|
|
1005
|
+
operations/ release-checklist · deploy-setup · maintenance · accounts · feature-flags · spend-alarms
|
|
1006
|
+
workflow/ progress · decision-protocol · skills · board · usage-limits · cost-log
|
|
1007
|
+
findings/ /findings-* raporları
|
|
1008
|
+
archive/
|
|
1009
|
+
src/features/<özellik>/{components,hooks,server,__tests__} <span class="c"># web</span>
|
|
1010
|
+
tests/
|
|
1011
|
+
sandbox/ <span class="c"># git'e girmez</span>
|
|
1012
|
+
AGENTS.md · CLAUDE.md · README.md · CHANGELOG.md</pre>
|
|
1013
|
+
<div class="note"><code>AGENTS.md</code> ortak kuralları tutar (Claude Code, Codex, Antigravity okur); <code>CLAUDE.md</code> onu içe alır ve Claude Code'a özel ekleri taşır. Yapı dört yerde korunur: yazım anında hook, her PR'da CI, kurul Mimarı ve <code>/findings-tech</code>. Haritayı değiştirmek teknik bir karardır; sana sorulur ve ADR olarak kaydedilir.</div>
|
|
1014
|
+
</section>
|
|
1015
|
+
|
|
1016
|
+
<section id="rapor">
|
|
1017
|
+
<p class="path">Her an neredeyiz</p>
|
|
1018
|
+
<h2>Raporlama ve pano</h2>
|
|
1019
|
+
<div class="grid2">
|
|
1020
|
+
<div>
|
|
1021
|
+
<h3 style="margin-top:0">Her cevabın sonunda: durum bloğu</h3>
|
|
1022
|
+
<pre class="term">── Durum ─────────────────────────────
|
|
1023
|
+
Aşama: Faz 1 · Görev: G-012 (7/23) · Soru modu: açık · Limit: 5s %34 hf %5
|
|
1024
|
+
Yapıldı: kayıt formu + doğrulama, test yeşil · Kurul: ONAY (ux, qa)
|
|
1025
|
+
Otomatik kararlar: yok
|
|
1026
|
+
Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
1027
|
+
<h3>Her zaman: alt durum çubuğu</h3>
|
|
1028
|
+
<pre class="term">▶ Faz 1 · G-012 · görev 7/23 · soru: açık · 5s %34 · hf %5 · bağlam %42</pre>
|
|
1029
|
+
</div>
|
|
1030
|
+
<div>
|
|
1031
|
+
<h3 style="margin-top:0">dashboard.html</h3>
|
|
1032
|
+
<ul>
|
|
1033
|
+
<li><b>Üstte:</b> Şimdi (aşama, görev, sıradaki adım), Dikkat gerektirenler (önem sırasıyla), sağlık rozeti ve özet kutucuklar</li>
|
|
1034
|
+
<li><b>10 sekme:</b> Genel · Yol haritası · Kararlar · Kurul · Bulgular · Kalite · Aktivite · Ürün ve teknik · Operasyon · Limit ve maliyet</li>
|
|
1035
|
+
<li><b>Ürün ve teknik:</b> PRD, MVP ve kabul testleri, birim ekonomisi, geri bildirim, stack, tasarım, marka paketi, tanıtım videoları, araştırma notları</li>
|
|
1036
|
+
<li><b>Limit ve maliyet:</b> 5 saatlik ve haftalık limit, bağlam, son 30 günün token ve API karşılığı maliyeti (ccusage), görev başı limit maliyeti</li>
|
|
1037
|
+
<li>Sıradaki adımın ve uyarılardaki komutların yanında <b>Kopyala</b> düğmesi: komutu Claude sohbetine yapıştırırsın</li>
|
|
1038
|
+
<li>Her Claude cevabından sonra güncellenir, açıkken 30 saniyede bir yenilenir; ek token harcamaz</li>
|
|
1039
|
+
</ul>
|
|
1040
|
+
<h3>Masaüstü bildirimi</h3>
|
|
1041
|
+
<ul>
|
|
1042
|
+
<li>Claude soru sorduğunda veya onay beklediğinde</li>
|
|
1043
|
+
<li>90 saniyeden uzun bir iş bittiğinde · kapatmak için <code>KIT_NOTIFY=off</code></li>
|
|
1044
|
+
</ul>
|
|
1045
|
+
</div>
|
|
1046
|
+
</div>
|
|
1047
|
+
</section>
|
|
1048
|
+
|
|
1049
|
+
<section id="limit">
|
|
1050
|
+
<p class="path">docs/workflow/usage-limits.md</p>
|
|
1051
|
+
<h2>Limit farkındalığı</h2>
|
|
1052
|
+
<p class="lead">İş başlamadan 5 saatlik ve haftalık limit okunur: masaüstünde <code>get_usage</code> aracıyla, terminal ve IDE'de Claude Code'un durum çubuğuna gönderdiği bilgiyle. Limit sadece uyarı sebebidir: iş durmaz, sen "dur" demedikçe devam eder.</p>
|
|
1053
|
+
<div class="grid2">
|
|
1054
|
+
<div class="table-wrap" style="margin:0"><table>
|
|
1055
|
+
<thead><tr><th>Çalışırken</th><th>Ne olur</th></tr></thead>
|
|
1056
|
+
<tbody>
|
|
1057
|
+
<tr><td>%90</td><td>Tek satır hatırlatma ve sıfırlanma saati; iş devam eder</td></tr>
|
|
1058
|
+
<tr><td>%95</td><td>"Limit çok azaldı" uyarısı; kaldığı yer sessizce kaydedilir</td></tr>
|
|
1059
|
+
<tr><td>%99</td><td>"İş yarım kalabilir" uyarısı; adımlar küçük tutulur, WIP commit önerilir</td></tr>
|
|
1060
|
+
<tr><td>"dur" dersen</td><td>Güvenli durur: adımı tamamlar, testleri çalıştırır, kaldığı yeri yazar</td></tr>
|
|
1061
|
+
</tbody>
|
|
1062
|
+
</table></div>
|
|
1063
|
+
<div class="table-wrap" style="margin:0"><table>
|
|
1064
|
+
<thead><tr><th>Seviye</th><th>5 saatlik</th><th>Haftalık</th><th>Davranış</th></tr></thead>
|
|
1065
|
+
<tbody>
|
|
1066
|
+
<tr><td><span class="tag">yeşil</span></td><td>< %60</td><td>< %70</td><td>Normal çalışır</td></tr>
|
|
1067
|
+
<tr><td><span class="tag warn">sarı</span></td><td>%60–84</td><td>%70–89</td><td>Tahmini maliyeti söyler, kurul yarıya iner</td></tr>
|
|
1068
|
+
<tr><td><span class="tag bad">kırmızı</span></td><td>≥ %85</td><td>≥ %90</td><td>Maliyeti ve kalan payı tek satırla söyler</td></tr>
|
|
1069
|
+
</tbody>
|
|
1070
|
+
</table></div>
|
|
1071
|
+
</div>
|
|
1072
|
+
<div class="note">Görev maliyetleri <code>docs/workflow/cost-log.md</code>'ye yazılır; tahminler zamanla gerçek verilere oturur. Oturum açılışında sadece özet kurallar ve <code>docs/workflow/progress.md</code> yüklenir (yaklaşık 1.700 token). Kod haritası bağlıysa kod, dosyalar okunmadan sorgulanır. Ana oturumun bağlamı da küçük tutulur: bağımsız sorular tek turda sorulur, kapı ve alt ajan raporları kısa gelir, görev bitip commit atılınca <code>/clear</code> önerilir.</div>
|
|
1073
|
+
</section>
|
|
1074
|
+
|
|
1075
|
+
<section id="yetenekler">
|
|
1076
|
+
<p class="path">.claude/skills · MCP</p>
|
|
1077
|
+
<h2>Yetenek paketleri</h2>
|
|
1078
|
+
<p class="lead">Çekirdek işler dışarıdan kurulan araçlara değil, kitin kendi skill'lerine dayanır; dış araçlar sadece fark yarattığı yerde ve proje tipine göre açılır.</p>
|
|
1079
|
+
<div class="tiles">
|
|
1080
|
+
<article class="tile"><h3>Doğru kaynak</h3><p class="stack">source-research · Context7 · Firecrawl (isteğe bağlı)</p><ul><li>Önce resmî doküman, mevzuat, standart</li><li>Her iddiaya kaynak, tarih, güven seviyesi (A-D)</li><li>Kütüphane dokümanı Context7'den güncel</li><li>Firecrawl API anahtarı senin ortam değişkeninde kalır</li></ul></article>
|
|
1081
|
+
<article class="tile"><h3>Dağıtım kurulumu</h3><p class="stack">/release first · deploy-setup.md</p><ul><li>Hosting, ortam değişkenleri, alan adı ve DNS, yedek, geri alma provası</li><li>Vercel, Supabase, Railway, EAS; adımlar kaynaklı ve tarihli</li><li>Sırrı sen panelde girersin; sohbete ve dosyaya yazılmaz</li></ul></article>
|
|
1082
|
+
<article class="tile"><h3>Öğrenen kurallar</h3><p class="stack">/fix-bug · /retro · hookify · AGENTS.md</p><ul><li>Aynı hata sınıfı ikinci kez gelince /fix-bug kural önerir; panoda da uyarı çıkar</li><li>Mekanik kural hookify'a, gerisi AGENTS.md'ye; sen onaylamadan yazılmaz</li><li>Her kuralda kaynak ve tarih; /maintain 90 günden eskileri sorar</li><li>Auto memory /start'ta sorulur, önerilen kapalı</li></ul></article>
|
|
1083
|
+
<article class="tile"><h3>Kişisel tercihler</h3><p class="stack">~/.vibe-kit/tercihler.md · prefs.mjs</p><ul><li>Bir davranışı düzelttiğinde ya da nasıl çalışmak istediğini söylediğinde AI not alır</li><li>Görev ve oturum sonunda "tercih olarak kaydedeyim mi?" diye sorar; onaylamadığın yazılmaz</li><li>Tercihler tüm projelerinde geçerli, her oturumda yüklenir; git'e girmez</li><li>Listele: <code>node .claude/hooks/prefs.mjs --list</code>, sil: <code>--remove <no></code></li></ul></article>
|
|
1084
|
+
<article class="tile"><h3>Rol bazlı model</h3><p class="stack">docs/workflow/models.md · models.mjs</p><ul><li>Beş rol: planlama, kod yazma, test yazma, inceleme, doküman ve araştırma</li><li>Her görevin başında rol başına tek soru (model ve effort birlikte), iki ekranda</li><li>Önerilen: plan Opus, kod Sonnet, test Opus, inceleme Sonnet, doküman Haiku; hepsi yüksek effort. Test, koddan farklı model: aynı kör noktayı paylaşmaz</li><li>Test, inceleme ve doküman işleri seçilen modelle alt ajanda; plan ana oturumda</li><li>Roadmap işareti, maliyet satırı ve progress etiketleri <code>progress.mjs</code> ile yazılır; model çağrısı harcanmaz, biçim bozulmaz</li><li>Alt ajan yalnız karlıysa: <code>flow.mjs</code> görev büyüklüğüne, bağlama ve limite bakar; küçük görev ana oturumda kalır, kurul üyeleri değişen yollardan seçilir, sayısı limite göre azalır; üye en fazla 5 bulgu yazar</li></ul></article>
|
|
1085
|
+
<article class="tile"><h3>Türkiye eki</h3><p class="stack">--addons tr · docs/legal/turkiye.md</p><ul><li>KVKK yurt dışı aktarım: standart sözleşme, 5 iş günü bildirim</li><li>e-Fatura ve e-Arşiv eşikleri (GİB)</li><li>iyzico ve PayTR bildirim imzası kodu ve saldırgan testi</li><li>İ/ı ve Türkçe sıralama testleri; hukuki görüş değildir</li></ul></article>
|
|
1086
|
+
<article class="tile"><h3>Tarayıcıda QA ve önizleme</h3><p class="stack">/qa · preview.mjs · Playwright CLI</p><ul><li>Arayüz kriterleri gerçek tarayıcıda test olarak koşar</li><li>Rapor test sonucundan yazılır, panoda kart</li><li>/build arayüz görevinde masaüstü ve mobil ekran görüntüsü</li></ul></article>
|
|
1087
|
+
<article class="tile"><h3>Spec ve sapma kontrolü</h3><p class="stack">docs/product/specs/ · gate.mjs</p><ul><li>Mevcut, beklenen ve değişmemesi gereken davranış</li><li>"Değişmemesi gereken" satırların testi kapıda denetlenir</li><li>3+ dosyalık işte /plan-task, her hatada /fix-bug yazar</li></ul></article>
|
|
1088
|
+
<article class="tile"><h3>Logo</h3><p class="stack">logo-design · SVG</p><ul><li>Marka soruları, 4-6 konsept görsel önizlemeyle</li><li>16 px okunurluk, tek renk hal, koyu zemin</li><li>Favicon, uygulama ikonları, PNG boyutları</li></ul></article>
|
|
1089
|
+
<article class="tile"><h3>Tanıtım videosu</h3><p class="stack">motion-video · renderAt(t) · Playwright · ffmpeg</p><ul><li>Tek kesintisiz dönüşüm, gerçek imleç, 120 BPM</li><li>Kapalı formlu yaylar (testle doğrulandı)</li><li>Önce vuruş haritası ve 4 kare onayı, sonra MP4</li></ul></article>
|
|
1090
|
+
<article class="tile"><h3>Arayüz hareketi ve 3D</h3><p class="stack">ui-motion · Motion · Reanimated · GSAP · three.js</p><ul><li>Süre belirteçleri, yaylar, sadece transform/opacity</li><li>Hareket azaltma tercihi zorunlu</li><li>3D: tembel yükleme, statik yedek, mobil GPU</li></ul></article>
|
|
1091
|
+
<article class="tile"><h3>İnceleme ve keşif</h3><p class="stack">rea · Understand-Anything · awesome-design-md</p><ul><li>Rakip özelliği nasıl çalışıyor: sadece yetkili olduğun yazılımda, önce onay</li><li>İnsan için kod haritası: /adopt, /handoff, /release first önerir</li></ul></article>
|
|
1092
|
+
<article class="tile"><h3>Güvenlik</h3><p class="stack">security-guidance · claude-security · Trail of Bits</p><ul><li>Yazarken: riskli kalıp uyarısı</li><li>Commit'te: ayrı modelle inceleme</li><li>/findings-security: çok ajanlı, doğrulanmış tarama</li></ul></article>
|
|
1093
|
+
<article class="tile"><h3>Kod zekâsı ve stack kuralları</h3><p class="stack">typescript-lsp · pyright-lsp · Vercel · Expo · Supabase</p><ul><li>Her düzenlemeden sonra tip hatası; uydurma API derlemeden yakalanır</li><li>React, React Native, Postgres, Core Web Vitals kuralları tipe göre açılır</li></ul></article>
|
|
1094
|
+
<article class="tile"><h3>Mobil test ve servisler</h3><p class="stack">Maestro · Expo MCP · servis kataloğu</p><ul><li>Kabul testleri cihazda veya simülatörde</li><li>EAS build, TestFlight çökme kayıtları</li><li>GitHub, Stripe, PostHog, Figma: servis seçilince</li></ul></article>
|
|
1095
|
+
<article class="tile"><h3>Ölçüm ve maliyet</h3><p class="stack">Playwright CLI · Chrome DevTools MCP · ccusage</p><ul><li>Konsol, ağ, ekran görüntüsü CLI ile; performans izi MCP ile</li><li>Proje başına token ve maliyet panoda</li></ul></article>
|
|
1096
|
+
<article class="tile"><h3>Geri alma</h3><p class="stack">/rollback · checkpoint.mjs</p><ul><li>Testler yeşilken çalışan nokta kaydedilir</li><li>Geri dönüş yeni bir commit'tir, geçmiş silinmez</li><li>Yarım iş saklanır, .env'e dokunulmaz</li></ul></article>
|
|
1097
|
+
<article class="tile"><h3>Senin dilinde</h3><p class="stack">.kit.json → lang</p><ul><li><code>/start</code> ve <code>/adopt</code> ilk iş dili sorar: Turkish / English / Other</li><li>Sorular, cevaplar, belgeler, pano ve durum çubuğu o dilde; <code>/language</code> ile değişir</li></ul></article>
|
|
1098
|
+
<article class="tile"><h3>Anlatıcı mod</h3><p class="stack">output style: anlatici</p><ul><li>Her adımdan sonra: ne yaptım, neden, nasıl görürsün</li><li>Görev sonunda en fazla 2 anlama sorusu; cevaplar panoda</li></ul></article>
|
|
1099
|
+
<article class="tile"><h3>Harcama alarmı</h3><p class="stack">spend-alarms.md · pano</p><ul><li>Sağlayıcı tavanı ve %50/%80 uyarısı</li><li>Kodda kullanıcı kotası, günlük bütçe, otomatik kapatma</li><li>/release ve /maintain kontrol eder</li></ul></article>
|
|
1100
|
+
</div>
|
|
1101
|
+
</section>
|
|
1102
|
+
|
|
1103
|
+
<section id="skiller">
|
|
1104
|
+
<p class="path">docs/workflow/skills.md</p>
|
|
1105
|
+
<h2>Hangi işte hangi skill</h2>
|
|
1106
|
+
<div class="table-wrap"><table>
|
|
1107
|
+
<thead><tr><th>İş</th><th>Skill</th></tr></thead>
|
|
1108
|
+
<tbody>
|
|
1109
|
+
<tr><td>Her kod değişikliği</td><td class="f">ponytail:ponytail</td></tr>
|
|
1110
|
+
<tr><td>Kritik akış (auth, ödeme, veri)</td><td class="f">mattpocock-skills:tdd</td></tr>
|
|
1111
|
+
<tr><td>Hata ayıklama</td><td class="f">mattpocock-skills:diagnosing-bugs · /freeze <klasör></td></tr>
|
|
1112
|
+
<tr><td>Fikri ve büyük planları sorgulamak</td><td class="f">mattpocock-skills:grilling</td></tr>
|
|
1113
|
+
<tr><td>Sözlük, karar kaydı, veri modeli</td><td class="f">mattpocock-skills:domain-modeling</td></tr>
|
|
1114
|
+
<tr><td>Modül sınırları, mimari</td><td class="f">mattpocock-skills:codebase-design</td></tr>
|
|
1115
|
+
<tr><td>Elle yapılacak kurulum (DNS, panel, mağaza)</td><td class="f">mattpocock-skills:wizard</td></tr>
|
|
1116
|
+
<tr><td>Değişebilen bilgi: sürüm, fiyat, mevzuat, rakip</td><td class="f">source-research · Context7</td></tr>
|
|
1117
|
+
<tr><td>Stil yönüne göre arayüz</td><td class="f">taste-skill:*</td></tr>
|
|
1118
|
+
<tr><td>Ürün bağlamı, tasarım sistemi, critique/audit/polish</td><td class="f">impeccable:impeccable</td></tr>
|
|
1119
|
+
<tr><td>Palet, yazı tipi, belirteçler</td><td class="f">ui-ux-pro-max:*</td></tr>
|
|
1120
|
+
<tr><td>Kullanıcıya görünen her metin</td><td class="f">humanizer:humanizer</td></tr>
|
|
1121
|
+
<tr><td>Logo, ikon, marka paketi</td><td class="f">logo-design</td></tr>
|
|
1122
|
+
<tr><td>Uygulama içi hareket</td><td class="f">ui-motion</td></tr>
|
|
1123
|
+
<tr><td>Kaydırma animasyonu (cesur yön)</td><td class="f">gsap-skills</td></tr>
|
|
1124
|
+
<tr><td>3D sahne (seçilirse)</td><td class="f">threejs-fundamentals · threejs-performance · threejs-react-three-fiber</td></tr>
|
|
1125
|
+
<tr><td>Tanıtım videosu</td><td class="f">motion-video</td></tr>
|
|
1126
|
+
<tr><td>Durum blokları, ilerleme notları</td><td class="f">caveman:caveman</td></tr>
|
|
1127
|
+
<tr><td>React/Next performansı · React Native</td><td class="f">react-best-practices · composition-patterns · react-native-guidelines</td></tr>
|
|
1128
|
+
<tr><td>Veritabanı şeması, sorgu, indeks</td><td class="f">postgres-best-practices · supabase</td></tr>
|
|
1129
|
+
<tr><td>Expo build, yükseltme, mağaza</td><td class="f">expo</td></tr>
|
|
1130
|
+
<tr><td>Core Web Vitals, erişilebilirlik, SEO</td><td class="f">web-quality-skills</td></tr>
|
|
1131
|
+
<tr><td>CLAUDE.md denetimi · oturum dersleri</td><td class="f">claude-md-improver · /revise-claude-md</td></tr>
|
|
1132
|
+
<tr><td>"Bunu bir daha yapma" → kalıcı kural</td><td class="f">/hookify</td></tr>
|
|
1133
|
+
<tr><td>İnceleme · denetim · borç listesi</td><td class="f">ponytail-review · ponytail-audit · ponytail-debt</td></tr>
|
|
1134
|
+
<tr><td>Derin güvenlik taraması</td><td class="f">/claude-security · Trail of Bits</td></tr>
|
|
1135
|
+
</tbody>
|
|
1136
|
+
</table></div>
|
|
1137
|
+
<div class="note"><b>Bağlam paketleri:</b> Skill listesi bağlamın %1'iyle sınırlı; taşınca skill'ler kaçırılır. Çekirdek eklentiler hep açık; tasarım, güvenlik, yayın ve video paketleri kapalı gelir ve ilgili komut gerektiğinde açmayı sorar (<code>/tools</code>). Yeni eklenti eklemek teknik bir karardır; üçüncü taraf skill'ler kurulmadan önce okunur.</div>
|
|
1138
|
+
<div class="note"><b>Bilerek eklenmeyenler:</b> superpowers, gstack, spec-kit, BMAD, GSD, OpenSpec kitin soru, plan ve kurul akışının yerine geçer; iyi fikirleri kitin kendi kurallarına işlendi. claude-mem ve Serena, kitin ilerleme dosyası ve kod haritasıyla aynı işi yapar.</div>
|
|
1139
|
+
</section>
|
|
1140
|
+
|
|
1141
|
+
<section id="araclar">
|
|
1142
|
+
<p class="path">Başka araçla</p>
|
|
1143
|
+
<h2>Codex ve Antigravity</h2>
|
|
1144
|
+
<p class="lead">TillerHand Claude Code için yazıldı. Kurallar, komutlar ve korumalar OpenAI Codex ve Google Antigravity'de de çalışır. Kurul tek modelle yürür; soru arayüzü, durum çubuğu ve commit kapısı bu araçlarda yok.</p>
|
|
1145
|
+
<pre class="term">npx tillerhand init --tool codex <span class="c"># ya da antigravity, ya da claude,codex</span>
|
|
1146
|
+
<span class="c"># var olan projeye araç eklemek</span>
|
|
1147
|
+
/kit-update --tool claude,codex</pre>
|
|
1148
|
+
<div class="table-wrap"><table>
|
|
1149
|
+
<thead><tr><th>Parça</th><th>Claude Code</th><th>Codex</th><th>Antigravity</th></tr></thead>
|
|
1150
|
+
<tbody>
|
|
1151
|
+
<tr><td>Kurallar</td><td>CLAUDE.md (AGENTS.md'yi içe alır)</td><td>AGENTS.md</td><td>AGENTS.md</td></tr>
|
|
1152
|
+
<tr><td>Komutlar</td><td class="f">/start, /build…</td><td>Skill: <code>$start</code> ya da <code>/skills</code></td><td>Skill: <code>/start</code></td></tr>
|
|
1153
|
+
<tr><td>Korumalar</td><td>.claude/settings.json</td><td>.codex/hooks.json</td><td>.agents/hooks.json</td></tr>
|
|
1154
|
+
<tr><td>"Sor" kararı</td><td>Onay penceresi</td><td>Engellenir; AI sana sorar, onaylarsan işlemi sen yaparsın</td><td>Onay penceresi</td></tr>
|
|
1155
|
+
<tr><td>Seçenekli sorular</td><td>AskUserQuestion</td><td>Numaralı düz metin</td><td>ask_question</td></tr>
|
|
1156
|
+
<tr><td>Kurul ve konsey</td><td>Ayrı ajanlar ve modeller</td><td>Tek model rolleri sırayla üstlenir</td><td>Tek model</td></tr>
|
|
1157
|
+
<tr><td>Test ayrımı</td><td>Hook zorlar: test dosyasına yalnız test-writer yazar</td><td>Kural metinde (ajan kimliği yok)</td><td>Kural metinde (ajan kimliği yok)</td></tr>
|
|
1158
|
+
<tr><td>Durum çubuğu, limit, pano yenileme, commit kapısı</td><td>Var</td><td>Yok</td><td>Yok</td></tr>
|
|
1159
|
+
</tbody>
|
|
1160
|
+
</table></div>
|
|
1161
|
+
<div class="note">Komutların kaynağı tektir (<code>.claude/commands/</code>); <code>.agents/skills/</code> altındaki kopyaları <code>init</code>, <code>install</code> ve <code>update</code> üretir. Codex proje hook'larını sadece klasöre güvendiğinde ve <code>/hooks</code> ile onayladığında çalıştırır; bunu ilk oturumda yap. İlk kullanımda bir sır yazma denemesiyle korumaların çalıştığını gör.</div>
|
|
1162
|
+
</section>
|
|
1163
|
+
|
|
1164
|
+
<section id="komutlar">
|
|
1165
|
+
<p class="path">.claude/commands</p>
|
|
1166
|
+
<h2>Komutlar</h2>
|
|
1167
|
+
<div class="table-wrap"><table>
|
|
1168
|
+
<thead><tr><th>Komut</th><th>Ne yapar</th></tr></thead>
|
|
1169
|
+
<tbody>
|
|
1170
|
+
<tr><td class="f">/start [fikir]</td><td>Dokuz adımlı sihirbaz: fikir, tip, kurulum, teknoloji, mimari, kurul, tasarım, yol haritası</td></tr>
|
|
1171
|
+
<tr><td class="f">/adopt</td><td>Var olan projeyi kite alır: tarar, belgeleri koddan çıkarır, AGENTS.md ve CLAUDE.md'yi yeniden yazar, kritik akış testleri ve özellik özellik taşıma ile uyum yol haritası</td></tr>
|
|
1172
|
+
<tr><td class="f">/plan-task [görev]</td><td>Karar noktalarını sorar, kurul görüşüyle plan çıkarır, onay alır; 3+ dosyalık işte spec yazar</td></tr>
|
|
1173
|
+
<tr><td class="f">/build [görev]</td><td>Önce kabul ve saldırgan testlerini ayrı bir ajan (<code>test-writer</code>) yazar, sonra kod; yeni karar çıkarsa durur; kanıt (arayüzde masaüstü ve mobil ekran görüntüsü) ve kurul denetimi</td></tr>
|
|
1174
|
+
<tr><td class="f">/design [kapsam]</td><td>Görsel önizlemeli tasarım kararları ve uygulama</td></tr>
|
|
1175
|
+
<tr><td class="f">/review-changes [aralık]</td><td>code-reviewer + security-auditor + ponytail-review; düzeltilecekleri çoklu seçimle sorar</td></tr>
|
|
1176
|
+
<tr><td class="f">/fix-bug [belirti]</td><td>Yeniden üret, kanıtla, hata spec'i; kırmızı testi <code>test-writer</code> yazar, sonra düzelt, kapı; aynı hata sınıfı tekrar ederse kural önerir</td></tr>
|
|
1177
|
+
<tr><td class="f">/qa [kriterler]</td><td>Arayüz kriterlerini tarayıcıda Playwright testi olarak koşar; rapor test sonucundan, panoda kart</td></tr>
|
|
1178
|
+
<tr><td class="f">/freeze <klasör> | off</td><td>Düzenlemeyi tek klasöre kilitler; iş başka dosyalara yayılmaz</td></tr>
|
|
1179
|
+
<tr><td class="f">/rollback [nokta]</td><td>Son çalışan hale güvenle döner: yarım iş saklanır, geçmiş silinmez</td></tr>
|
|
1180
|
+
<tr><td class="f">/findings-<tür></td><td>tech · business · security · ux · perf · legal · all: puanlı bulgu raporu</td></tr>
|
|
1181
|
+
<tr><td class="f">/board [setup|convene|council]</td><td>Uzman kurulunu kurar, toplar; <code>council <soru></code> karar konseyi</td></tr>
|
|
1182
|
+
<tr><td class="f">/ask-mode [on|off] [konu]</td><td>Soru modunu yönetir</td></tr>
|
|
1183
|
+
<tr><td class="f">/dashboard</td><td>Ayrıntılı rapor ve kontrol paneli</td></tr>
|
|
1184
|
+
<tr><td class="f">/wrap-up</td><td>İlerleme, kararlar, CHANGELOG ve pano; oturumu kapatır</td></tr>
|
|
1185
|
+
<tr><td class="f">/release [first]</td><td>Canlıya alma kontrolleri; <code>first</code> hosting, alan adı, yedek ve geri almayı sağlayıcıya göre adım adım kurdurur</td></tr>
|
|
1186
|
+
<tr><td class="f">/maintain [weekly|monthly|quarterly]</td><td>Düzenli bakım</td></tr>
|
|
1187
|
+
<tr><td class="f">/user-feedback</td><td>Kullanıcı geri bildirimini temalara ayırır, yol haritasına aldırır</td></tr>
|
|
1188
|
+
<tr><td class="f">/retro</td><td>Dersleri projeye yazar; kite önerileri TillerHand reposunda bir dala</td></tr>
|
|
1189
|
+
<tr><td class="f">/research [konu]</td><td>Makaleler, GitHub'daki benzer projeler ve rakip ürünler; fark tablosu; seçilen özellikler PRD'ye</td></tr>
|
|
1190
|
+
<tr><td class="f">/handoff [devral]</td><td>Projeyi başka kişiye veya hesaba devreder ya da devralır; aynı yerden devam</td></tr>
|
|
1191
|
+
<tr><td class="f">/tools [ac|kapat|olc|komutlar]</td><td>Bağlam paketlerini gösterir, açar veya kapatır; skill yükünü ölçer; komut listesini hafif veya tam yapar</td></tr>
|
|
1192
|
+
<tr><td class="f">/kit-update</td><td>Projeyi TillerHand'in son sürümüne çeker; çakışmaları sorar; <code>--tool</code> ile araç, <code>--addons</code> ile ek ekler</td></tr>
|
|
1193
|
+
<tr><td class="f">/language [dil]</td><td>Konuşma dilini değiştirir (Türkçe, İngilizce ya da başka bir dil); hook metinlerinin çevirisini ve panoyu yeniler</td></tr>
|
|
1194
|
+
</tbody>
|
|
1195
|
+
</table></div>
|
|
1196
|
+
</section>
|
|
1197
|
+
|
|
1198
|
+
<section id="kit">
|
|
1199
|
+
<p class="path">TillerHand de bir proje</p>
|
|
1200
|
+
<h2>Güncelleme ve bakım</h2>
|
|
1201
|
+
<p class="lead">Projelerde öğrenilen dersler kite geri döner; kitin yeni sürümleri projelere güvenle gelir.</p>
|
|
1202
|
+
<div class="flow" role="list" aria-label="Kit geri bildirim döngüsü">
|
|
1203
|
+
<span role="listitem">/retro</span><i aria-hidden="true">→</i>
|
|
1204
|
+
<span role="listitem">TillerHand reposunda dal</span><i aria-hidden="true">→</i>
|
|
1205
|
+
<span role="listitem">onayla push / PR</span><i aria-hidden="true">→</i>
|
|
1206
|
+
<span role="listitem">VERSION + CHANGELOG + tag</span><i aria-hidden="true">→</i>
|
|
1207
|
+
<span role="listitem">/kit-update</span>
|
|
1208
|
+
</div>
|
|
1209
|
+
<div class="table-wrap"><table>
|
|
1210
|
+
<thead><tr><th>Dosya türü</th><th>Güncellemede ne olur</th></tr></thead>
|
|
1211
|
+
<tbody>
|
|
1212
|
+
<tr><td>Kitin dosyaları: komutlar, ajanlar, hook'lar, decision-protocol, skills, güvenlik kontrol listesi, release-checklist, deploy-setup, maintenance, privacy-kvkk</td><td>Sen değiştirmediysen yenisiyle değişir. Değiştirdiysen seninki kalır, yeni hali <code>.kit-new</code> olarak gelir ve nasıl birleştirileceği sorulur.</td></tr>
|
|
1213
|
+
<tr><td>Projenin dosyaları: AGENTS.md, CLAUDE.md, PRD, stack, tasarım, settings.json…</td><td>Dokunulmaz. CHANGELOG'daki "elle uyarla" maddeleri tek tek sorulur.</td></tr>
|
|
1214
|
+
<tr><td>Codex ve Antigravity skill kopyaları (<code>.agents/skills/</code>)</td><td>Her güncellemede komutlardan yeniden üretilir.</td></tr>
|
|
1215
|
+
<tr><td>Kitte yeni eklenmiş dosya</td><td>Projede yoksa eklenir. Daha önce bilerek sildiysen geri getirilmez.</td></tr>
|
|
1216
|
+
</tbody>
|
|
1217
|
+
</table></div>
|
|
1218
|
+
<div class="note"><b>Değerlendirme:</b> <code>node kit/eval/run.mjs</code> aynı görevi kitli ve kitsiz çalıştırır, gizli kabul ve saldırgan testleriyle puanlar. Son ölçüm yukarıda, <a href="#olcum">Ölçüm</a> bölümünde.</div>
|
|
1219
|
+
</section>
|
|
1220
|
+
|
|
1221
|
+
<section id="kurallar">
|
|
1222
|
+
<p class="path">Her projede</p>
|
|
1223
|
+
<h2>Altın kurallar</h2>
|
|
1224
|
+
<ol class="rules">
|
|
1225
|
+
<li><b>Kararı sen verirsin.</b><span>AI önerir ve gerekçelendirir; seçim senin. "Sorma" demediğin konuda kendi başına seçmez.</span></li>
|
|
1226
|
+
<li><b>Tasarımı görerek seç.</b><span>Yazıyla tarif edilen stil değil, önizlemedeki ekran seçilir.</span></li>
|
|
1227
|
+
<li><b>Önce yaz, sonra kodlat.</b><span>PRD ve kapsam dışı listesi olmadan kod yok.</span></li>
|
|
1228
|
+
<li><b>Tek görev, tek oturum.</b><span>Büyük görevi böl.</span></li>
|
|
1229
|
+
<li><b>Her çalışan adım bir commit.</b><span>AI yolunu kaybederse oraya dönersin.</span></li>
|
|
1230
|
+
<li><b>İlk gün canlıya al.</b><span>Deploy hattı ve CI baştan çalışsın.</span></li>
|
|
1231
|
+
<li><b>Bağlam dosyada yaşar.</b><span><code>/wrap-up</code> ve <code>/clear</code> alışkanlık olsun.</span></li>
|
|
1232
|
+
<li><b>"Çalışıyor" değil, kanıt.</b><span>Ekran görüntüsü, istek/yanıt, test çıktısı.</span></li>
|
|
1233
|
+
<li><b>İki deneme kuralı.</b><span>Aynı hata iki kez çözülmediyse dur, geri al, yeniden planla.</span></li>
|
|
1234
|
+
<li><b>Sır istemciye gitmez.</b><span>Tarayıcıya ve mobil pakete giden her şey herkese açıktır.</span></li>
|
|
1235
|
+
<li><b>Denenmemiş yedek, yedek değildir.</b><span>Geri yüklemeyi lansmandan önce dene.</span></li>
|
|
1236
|
+
<li><b>Tekrarlayan hatayı kurala çevir.</b><span><code>/retro</code> ile kite yaz; mümkünse hook veya CI adımına dönüştür.</span></li>
|
|
1237
|
+
</ol>
|
|
1238
|
+
</section>
|
|
1239
|
+
|
|
1240
|
+
</div>
|
|
1241
|
+
</div>
|
|
1242
|
+
|
|
1243
|
+
</main>
|
|
1244
|
+
|
|
1245
|
+
<footer>
|
|
1246
|
+
<div class="container">
|
|
1247
|
+
<a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
|
|
1248
|
+
<span>Sürüm 3.47.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
|
|
1249
|
+
</div>
|
|
1250
|
+
</footer>
|
|
1251
|
+
|
|
1252
|
+
<script>
|
|
1253
|
+
document.querySelectorAll('.copy').forEach((b) => b.addEventListener('click', async () => {
|
|
1254
|
+
try { await navigator.clipboard.writeText(document.getElementById(b.dataset.copy).textContent); b.textContent = 'Kopyalandı'; setTimeout(() => (b.textContent = 'Kopyala'), 1500); } catch {}
|
|
1255
|
+
}));
|
|
1256
|
+
const links = [...document.querySelectorAll('.side a')];
|
|
1257
|
+
const spy = new IntersectionObserver((entries) => {
|
|
1258
|
+
for (const e of entries) if (e.isIntersecting) links.forEach((a) => a.classList.toggle('on', a.hash === '#' + e.target.id));
|
|
1259
|
+
}, { rootMargin: '-20% 0px -70% 0px' });
|
|
1260
|
+
document.querySelectorAll('.doc section').forEach((s) => spy.observe(s));
|
|
1261
|
+
|
|
1262
|
+
// Kurulum seçici: yol (yeni / var olan) sonraki adımı, yer (terminal / Claude) komutu değiştirir
|
|
1263
|
+
const setup = { path: 'new', via: 'term' };
|
|
1264
|
+
const cmd = document.getElementById('cmd');
|
|
1265
|
+
const next = document.querySelector('.setup .next');
|
|
1266
|
+
function renderSetup() {
|
|
1267
|
+
cmd.textContent = setup.via === 'term' ? 'npx tillerhand init' : 'bu klasörde npx tillerhand init komutunu çalıştır';
|
|
1268
|
+
cmd.parentElement.classList.toggle('chat', setup.via === 'chat');
|
|
1269
|
+
const where = setup.via === 'term' ? 'Proje klasöründe çalıştır.' : 'Claude uygulamasında proje klasörünü seç ve bunu yaz.';
|
|
1270
|
+
next.innerHTML = setup.path === 'new'
|
|
1271
|
+
? `${where} Sonra aynı klasörde yeni oturum aç ve <code>/start fikrin</code> yaz.`
|
|
1272
|
+
: `${where} Dosyaların ezilmez. Sonra yeni oturumda <code>/adopt</code> yaz; kod taranır, belgeler koddan çıkar.`;
|
|
1273
|
+
}
|
|
1274
|
+
document.querySelectorAll('.seg button').forEach((b) => b.addEventListener('click', () => {
|
|
1275
|
+
setup.path = b.dataset.path;
|
|
1276
|
+
document.querySelectorAll('.seg button').forEach((x) => x.setAttribute('aria-selected', String(x === b)));
|
|
1277
|
+
renderSetup();
|
|
1278
|
+
}));
|
|
1279
|
+
document.querySelectorAll('.via button').forEach((b) => b.addEventListener('click', () => {
|
|
1280
|
+
setup.via = b.dataset.via;
|
|
1281
|
+
document.querySelectorAll('.via button').forEach((x) => x.setAttribute('aria-pressed', String(x === b)));
|
|
1282
|
+
renderSetup();
|
|
1283
|
+
}));
|
|
1284
|
+
|
|
1285
|
+
// Okuma ilerlemesi
|
|
1286
|
+
const bar = document.querySelector('.progress');
|
|
1287
|
+
let ticking = false;
|
|
1288
|
+
addEventListener('scroll', () => {
|
|
1289
|
+
if (ticking) return;
|
|
1290
|
+
ticking = true;
|
|
1291
|
+
requestAnimationFrame(() => {
|
|
1292
|
+
const max = document.documentElement.scrollHeight - innerHeight;
|
|
1293
|
+
bar.style.transform = `scaleX(${max > 0 ? scrollY / max : 0})`;
|
|
1294
|
+
ticking = false;
|
|
1295
|
+
});
|
|
1296
|
+
}, { passive: true });
|
|
1297
|
+
|
|
1298
|
+
// Hero demosu: yazılır, soru gelir, önerilen seçilir, kurul görüşü düşer; hareket azaltılmışsa son hali durur
|
|
1299
|
+
const demo = document.querySelector('.demo');
|
|
1300
|
+
if (demo && !matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
|
1301
|
+
const typed = demo.querySelector('.typed'), text = typed.textContent;
|
|
1302
|
+
const parts = [...demo.querySelectorAll('[data-s]')], rec = demo.querySelector('.opt.rec');
|
|
1303
|
+
const wait = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
1304
|
+
const visible = () => new Promise((r) => {
|
|
1305
|
+
const io = new IntersectionObserver(([e]) => { if (e.isIntersecting && !document.hidden) { io.disconnect(); r(); } });
|
|
1306
|
+
io.observe(demo);
|
|
1307
|
+
});
|
|
1308
|
+
(async function loop() {
|
|
1309
|
+
for (;;) {
|
|
1310
|
+
await visible();
|
|
1311
|
+
demo.classList.add('run');
|
|
1312
|
+
parts.forEach((p) => p.classList.remove('in'));
|
|
1313
|
+
rec.classList.remove('picked');
|
|
1314
|
+
typed.textContent = '';
|
|
1315
|
+
for (const ch of text) { typed.textContent += ch; await wait(38); }
|
|
1316
|
+
await wait(500);
|
|
1317
|
+
for (let s = 1; s <= 8; s++) {
|
|
1318
|
+
parts.filter((p) => +p.dataset.s === s).forEach((p) => p.classList.add('in'));
|
|
1319
|
+
if (s === 4) { await wait(700); rec.classList.add('picked'); }
|
|
1320
|
+
await wait(s < 5 ? 380 : 260);
|
|
1321
|
+
}
|
|
1322
|
+
await wait(5200);
|
|
1323
|
+
}
|
|
1324
|
+
})();
|
|
1325
|
+
}
|
|
1326
|
+
</script>
|
|
1327
|
+
</body>
|
|
1328
|
+
</html>
|