claudient 0.1.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-plugin/plugin.json +42 -0
- package/CONTEXT.md +58 -0
- package/README.md +165 -0
- package/agents/build-resolvers/de/python-resolver.md +64 -0
- package/agents/build-resolvers/de/typescript-resolver.md +65 -0
- package/agents/build-resolvers/es/python-resolver.md +64 -0
- package/agents/build-resolvers/es/typescript-resolver.md +65 -0
- package/agents/build-resolvers/fr/python-resolver.md +64 -0
- package/agents/build-resolvers/fr/typescript-resolver.md +65 -0
- package/agents/build-resolvers/nl/python-resolver.md +64 -0
- package/agents/build-resolvers/nl/typescript-resolver.md +65 -0
- package/agents/build-resolvers/python-resolver.md +62 -0
- package/agents/build-resolvers/typescript-resolver.md +63 -0
- package/agents/core/architect.md +64 -0
- package/agents/core/code-reviewer.md +78 -0
- package/agents/core/de/architect.md +66 -0
- package/agents/core/de/code-reviewer.md +80 -0
- package/agents/core/de/planner.md +63 -0
- package/agents/core/de/security-reviewer.md +93 -0
- package/agents/core/es/architect.md +66 -0
- package/agents/core/es/code-reviewer.md +80 -0
- package/agents/core/es/planner.md +63 -0
- package/agents/core/es/security-reviewer.md +93 -0
- package/agents/core/fr/architect.md +66 -0
- package/agents/core/fr/code-reviewer.md +80 -0
- package/agents/core/fr/planner.md +63 -0
- package/agents/core/fr/security-reviewer.md +93 -0
- package/agents/core/nl/architect.md +66 -0
- package/agents/core/nl/code-reviewer.md +80 -0
- package/agents/core/nl/planner.md +63 -0
- package/agents/core/nl/security-reviewer.md +93 -0
- package/agents/core/planner.md +61 -0
- package/agents/core/security-reviewer.md +91 -0
- package/guides/agent-orchestration.md +231 -0
- package/guides/de/agent-orchestration.md +174 -0
- package/guides/de/getting-started.md +164 -0
- package/guides/de/hooks-cookbook.md +160 -0
- package/guides/de/memory-management.md +153 -0
- package/guides/de/security.md +180 -0
- package/guides/de/skill-authoring.md +214 -0
- package/guides/de/token-optimization.md +156 -0
- package/guides/es/agent-orchestration.md +174 -0
- package/guides/es/getting-started.md +164 -0
- package/guides/es/hooks-cookbook.md +160 -0
- package/guides/es/memory-management.md +153 -0
- package/guides/es/security.md +180 -0
- package/guides/es/skill-authoring.md +214 -0
- package/guides/es/token-optimization.md +156 -0
- package/guides/fr/agent-orchestration.md +174 -0
- package/guides/fr/getting-started.md +164 -0
- package/guides/fr/hooks-cookbook.md +227 -0
- package/guides/fr/memory-management.md +169 -0
- package/guides/fr/security.md +180 -0
- package/guides/fr/skill-authoring.md +214 -0
- package/guides/fr/token-optimization.md +158 -0
- package/guides/getting-started.md +164 -0
- package/guides/hooks-cookbook.md +423 -0
- package/guides/memory-management.md +192 -0
- package/guides/nl/agent-orchestration.md +174 -0
- package/guides/nl/getting-started.md +164 -0
- package/guides/nl/hooks-cookbook.md +160 -0
- package/guides/nl/memory-management.md +153 -0
- package/guides/nl/security.md +180 -0
- package/guides/nl/skill-authoring.md +214 -0
- package/guides/nl/token-optimization.md +156 -0
- package/guides/security.md +229 -0
- package/guides/skill-authoring.md +226 -0
- package/guides/token-optimization.md +169 -0
- package/hooks/lifecycle/cost-tracker.md +49 -0
- package/hooks/lifecycle/cost-tracker.sh +59 -0
- package/hooks/lifecycle/pre-compact-save.md +56 -0
- package/hooks/lifecycle/pre-compact-save.sh +37 -0
- package/hooks/lifecycle/session-start.md +50 -0
- package/hooks/lifecycle/session-start.sh +47 -0
- package/hooks/post-tool-use/audit-log.md +53 -0
- package/hooks/post-tool-use/audit-log.sh +53 -0
- package/hooks/post-tool-use/prettier.md +53 -0
- package/hooks/post-tool-use/prettier.sh +49 -0
- package/hooks/pre-tool-use/block-dangerous.md +48 -0
- package/hooks/pre-tool-use/block-dangerous.sh +76 -0
- package/hooks/pre-tool-use/git-push-confirm.md +46 -0
- package/hooks/pre-tool-use/git-push-confirm.sh +36 -0
- package/mcp/configs/github.json +11 -0
- package/mcp/configs/postgres.json +11 -0
- package/mcp/de/recommended-servers.md +170 -0
- package/mcp/es/recommended-servers.md +170 -0
- package/mcp/fr/recommended-servers.md +170 -0
- package/mcp/nl/recommended-servers.md +170 -0
- package/mcp/recommended-servers.md +168 -0
- package/package.json +45 -0
- package/prompts/project-starters/de/fastapi-project.md +62 -0
- package/prompts/project-starters/de/nextjs-project.md +82 -0
- package/prompts/project-starters/es/fastapi-project.md +62 -0
- package/prompts/project-starters/es/nextjs-project.md +82 -0
- package/prompts/project-starters/fastapi-project.md +60 -0
- package/prompts/project-starters/fr/fastapi-project.md +62 -0
- package/prompts/project-starters/fr/nextjs-project.md +82 -0
- package/prompts/project-starters/nextjs-project.md +80 -0
- package/prompts/project-starters/nl/fastapi-project.md +62 -0
- package/prompts/project-starters/nl/nextjs-project.md +82 -0
- package/prompts/system-prompts/ai-product.md +80 -0
- package/prompts/system-prompts/data-pipeline.md +76 -0
- package/prompts/system-prompts/de/ai-product.md +82 -0
- package/prompts/system-prompts/de/data-pipeline.md +78 -0
- package/prompts/system-prompts/de/saas-backend.md +71 -0
- package/prompts/system-prompts/es/ai-product.md +82 -0
- package/prompts/system-prompts/es/data-pipeline.md +78 -0
- package/prompts/system-prompts/es/saas-backend.md +71 -0
- package/prompts/system-prompts/fr/ai-product.md +82 -0
- package/prompts/system-prompts/fr/data-pipeline.md +78 -0
- package/prompts/system-prompts/fr/saas-backend.md +71 -0
- package/prompts/system-prompts/nl/ai-product.md +82 -0
- package/prompts/system-prompts/nl/data-pipeline.md +78 -0
- package/prompts/system-prompts/nl/saas-backend.md +71 -0
- package/prompts/system-prompts/saas-backend.md +69 -0
- package/prompts/task-specific/changelog.md +81 -0
- package/prompts/task-specific/de/changelog.md +83 -0
- package/prompts/task-specific/de/debugging.md +78 -0
- package/prompts/task-specific/de/pr-description.md +69 -0
- package/prompts/task-specific/debugging.md +76 -0
- package/prompts/task-specific/es/changelog.md +83 -0
- package/prompts/task-specific/es/debugging.md +78 -0
- package/prompts/task-specific/es/pr-description.md +69 -0
- package/prompts/task-specific/fr/changelog.md +83 -0
- package/prompts/task-specific/fr/debugging.md +78 -0
- package/prompts/task-specific/fr/pr-description.md +69 -0
- package/prompts/task-specific/nl/changelog.md +83 -0
- package/prompts/task-specific/nl/debugging.md +78 -0
- package/prompts/task-specific/nl/pr-description.md +69 -0
- package/prompts/task-specific/pr-description.md +67 -0
- package/rules/common/coding-style.md +45 -0
- package/rules/common/de/coding-style.md +47 -0
- package/rules/common/de/git.md +48 -0
- package/rules/common/de/performance.md +40 -0
- package/rules/common/de/security.md +45 -0
- package/rules/common/de/testing.md +45 -0
- package/rules/common/es/coding-style.md +47 -0
- package/rules/common/es/git.md +48 -0
- package/rules/common/es/performance.md +40 -0
- package/rules/common/es/security.md +45 -0
- package/rules/common/es/testing.md +45 -0
- package/rules/common/fr/coding-style.md +47 -0
- package/rules/common/fr/git.md +48 -0
- package/rules/common/fr/performance.md +40 -0
- package/rules/common/fr/security.md +45 -0
- package/rules/common/fr/testing.md +45 -0
- package/rules/common/git.md +46 -0
- package/rules/common/nl/coding-style.md +47 -0
- package/rules/common/nl/git.md +48 -0
- package/rules/common/nl/performance.md +40 -0
- package/rules/common/nl/security.md +45 -0
- package/rules/common/nl/testing.md +45 -0
- package/rules/common/performance.md +38 -0
- package/rules/common/security.md +43 -0
- package/rules/common/testing.md +43 -0
- package/rules/language-specific/de/go.md +48 -0
- package/rules/language-specific/de/python.md +38 -0
- package/rules/language-specific/de/typescript.md +51 -0
- package/rules/language-specific/es/go.md +48 -0
- package/rules/language-specific/es/python.md +38 -0
- package/rules/language-specific/es/typescript.md +51 -0
- package/rules/language-specific/fr/go.md +48 -0
- package/rules/language-specific/fr/python.md +38 -0
- package/rules/language-specific/fr/typescript.md +51 -0
- package/rules/language-specific/go.md +46 -0
- package/rules/language-specific/nl/go.md +48 -0
- package/rules/language-specific/nl/python.md +38 -0
- package/rules/language-specific/nl/typescript.md +51 -0
- package/rules/language-specific/python.md +36 -0
- package/rules/language-specific/typescript.md +49 -0
- package/scripts/cli.js +161 -0
- package/scripts/link-skills.sh +35 -0
- package/scripts/list-skills.sh +34 -0
- package/skills/ai-engineering/agent-construction.md +285 -0
- package/skills/ai-engineering/claude-api.md +248 -0
- package/skills/ai-engineering/de/agent-construction.md +287 -0
- package/skills/ai-engineering/de/claude-api.md +250 -0
- package/skills/ai-engineering/es/agent-construction.md +287 -0
- package/skills/ai-engineering/es/claude-api.md +250 -0
- package/skills/ai-engineering/fr/agent-construction.md +287 -0
- package/skills/ai-engineering/fr/claude-api.md +250 -0
- package/skills/ai-engineering/nl/agent-construction.md +287 -0
- package/skills/ai-engineering/nl/claude-api.md +250 -0
- package/skills/backend/dotnet/csharp.md +304 -0
- package/skills/backend/dotnet/de/csharp.md +306 -0
- package/skills/backend/dotnet/es/csharp.md +306 -0
- package/skills/backend/dotnet/fr/csharp.md +306 -0
- package/skills/backend/dotnet/nl/csharp.md +306 -0
- package/skills/backend/go/de/go.md +307 -0
- package/skills/backend/go/es/go.md +307 -0
- package/skills/backend/go/fr/go.md +307 -0
- package/skills/backend/go/go.md +305 -0
- package/skills/backend/go/nl/go.md +307 -0
- package/skills/backend/nodejs/de/nestjs.md +274 -0
- package/skills/backend/nodejs/de/nextjs.md +222 -0
- package/skills/backend/nodejs/es/nestjs.md +274 -0
- package/skills/backend/nodejs/es/nextjs.md +222 -0
- package/skills/backend/nodejs/fr/nestjs.md +274 -0
- package/skills/backend/nodejs/fr/nextjs.md +222 -0
- package/skills/backend/nodejs/nestjs.md +272 -0
- package/skills/backend/nodejs/nextjs.md +220 -0
- package/skills/backend/nodejs/nl/nestjs.md +274 -0
- package/skills/backend/nodejs/nl/nextjs.md +222 -0
- package/skills/backend/python/de/django.md +285 -0
- package/skills/backend/python/de/fastapi.md +244 -0
- package/skills/backend/python/django.md +283 -0
- package/skills/backend/python/es/django.md +285 -0
- package/skills/backend/python/es/fastapi.md +244 -0
- package/skills/backend/python/fastapi.md +242 -0
- package/skills/backend/python/fr/django.md +285 -0
- package/skills/backend/python/fr/fastapi.md +244 -0
- package/skills/backend/python/nl/django.md +285 -0
- package/skills/backend/python/nl/fastapi.md +244 -0
- package/skills/data-ml/dbt-data-pipelines.md +155 -0
- package/skills/data-ml/de/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/de/pandas-polars.md +147 -0
- package/skills/data-ml/de/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/es/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/es/pandas-polars.md +147 -0
- package/skills/data-ml/es/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/fr/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/fr/pandas-polars.md +147 -0
- package/skills/data-ml/fr/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/nl/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/nl/pandas-polars.md +147 -0
- package/skills/data-ml/nl/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/pandas-polars.md +145 -0
- package/skills/data-ml/pytorch-tensorflow.md +169 -0
- package/skills/database/de/graphql.md +181 -0
- package/skills/database/es/graphql.md +181 -0
- package/skills/database/fr/graphql.md +181 -0
- package/skills/database/graphql.md +179 -0
- package/skills/database/nl/graphql.md +181 -0
- package/skills/devops-infra/de/docker.md +133 -0
- package/skills/devops-infra/de/github-actions.md +179 -0
- package/skills/devops-infra/de/kubernetes.md +129 -0
- package/skills/devops-infra/de/terraform.md +130 -0
- package/skills/devops-infra/docker.md +131 -0
- package/skills/devops-infra/es/docker.md +133 -0
- package/skills/devops-infra/es/github-actions.md +179 -0
- package/skills/devops-infra/es/kubernetes.md +129 -0
- package/skills/devops-infra/es/terraform.md +130 -0
- package/skills/devops-infra/fr/docker.md +133 -0
- package/skills/devops-infra/fr/github-actions.md +179 -0
- package/skills/devops-infra/fr/kubernetes.md +129 -0
- package/skills/devops-infra/fr/terraform.md +130 -0
- package/skills/devops-infra/github-actions.md +177 -0
- package/skills/devops-infra/kubernetes.md +127 -0
- package/skills/devops-infra/nl/docker.md +133 -0
- package/skills/devops-infra/nl/github-actions.md +179 -0
- package/skills/devops-infra/nl/kubernetes.md +129 -0
- package/skills/devops-infra/nl/terraform.md +130 -0
- package/skills/devops-infra/terraform.md +128 -0
- package/skills/finance-payments/de/stripe.md +187 -0
- package/skills/finance-payments/es/stripe.md +187 -0
- package/skills/finance-payments/fr/stripe.md +187 -0
- package/skills/finance-payments/nl/stripe.md +187 -0
- package/skills/finance-payments/stripe.md +185 -0
- package/workflows/code-review.md +151 -0
- package/workflows/de/code-review.md +153 -0
- package/workflows/de/debugging-session.md +146 -0
- package/workflows/de/feature-development.md +155 -0
- package/workflows/de/new-project-bootstrap.md +175 -0
- package/workflows/de/refactor-safely.md +150 -0
- package/workflows/debugging-session.md +144 -0
- package/workflows/es/code-review.md +153 -0
- package/workflows/es/debugging-session.md +146 -0
- package/workflows/es/feature-development.md +155 -0
- package/workflows/es/new-project-bootstrap.md +175 -0
- package/workflows/es/refactor-safely.md +150 -0
- package/workflows/feature-development.md +153 -0
- package/workflows/fr/code-review.md +153 -0
- package/workflows/fr/debugging-session.md +146 -0
- package/workflows/fr/feature-development.md +155 -0
- package/workflows/fr/new-project-bootstrap.md +175 -0
- package/workflows/fr/refactor-safely.md +150 -0
- package/workflows/new-project-bootstrap.md +173 -0
- package/workflows/nl/code-review.md +153 -0
- package/workflows/nl/debugging-session.md +146 -0
- package/workflows/nl/feature-development.md +155 -0
- package/workflows/nl/new-project-bootstrap.md +175 -0
- package/workflows/nl/refactor-safely.md +150 -0
- package/workflows/refactor-safely.md +148 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../new-project-bootstrap.md).
|
|
2
|
+
|
|
3
|
+
# Flujo de Trabajo de Bootstrap de Nuevo Proyecto
|
|
4
|
+
|
|
5
|
+
CĂłmo arrancar un nuevo proyecto con Claude Code — estructurado, con opiniĂłn y listo para construir desde el primer dĂa.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Cuándo usar este flujo de trabajo
|
|
10
|
+
- Comenzar una nueva aplicaciĂłn desde cero
|
|
11
|
+
- Configurar un nuevo servicio en un sistema existente
|
|
12
|
+
- Crear un nuevo repositorio para un proyecto personal o un encargo de cliente
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Paso 1 — Define qué estás construyendo
|
|
17
|
+
|
|
18
|
+
Antes de tocar cualquier cĂłdigo o configuraciĂłn, responde estas preguntas claramente.
|
|
19
|
+
|
|
20
|
+
**Prompt para Claude:**
|
|
21
|
+
```
|
|
22
|
+
I am starting a new project. Help me define it clearly before we write any code.
|
|
23
|
+
|
|
24
|
+
What I want to build: [describe in 2–3 sentences]
|
|
25
|
+
|
|
26
|
+
Ask me the following questions one at a time and wait for my answer before asking the next:
|
|
27
|
+
1. Who are the users and what is the primary thing they do?
|
|
28
|
+
2. What is the expected scale at launch? (users, requests/sec, data volume)
|
|
29
|
+
3. What are the hard constraints? (budget, timeline, team size, existing tech stack)
|
|
30
|
+
4. What does "done" look like for v1?
|
|
31
|
+
5. What is explicitly out of scope for v1?
|
|
32
|
+
|
|
33
|
+
After I answer all five, summarize what we're building and confirm with me before proceeding.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
No procedas hasta que el alcance esté confirmado por escrito.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Paso 2 — Elige el stack
|
|
41
|
+
|
|
42
|
+
**Prompt para Claude:**
|
|
43
|
+
```
|
|
44
|
+
Based on what we're building:
|
|
45
|
+
- [paste summary from Step 1]
|
|
46
|
+
|
|
47
|
+
Recommend a specific stack. For each component (backend, frontend, database, auth, deployment), recommend:
|
|
48
|
+
- Your recommended choice and why it fits our constraints
|
|
49
|
+
- What we'd be giving up vs the next-best alternative
|
|
50
|
+
- No more than 2 options per component — I need a decision, not a menu
|
|
51
|
+
|
|
52
|
+
Be opinionated. I will push back if I disagree.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Bloquea el stack antes de escribir cualquier cĂłdigo. Registra las decisiones en `docs/adr/` si no son obvias.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Paso 3 — Bootstrap de la estructura del proyecto
|
|
60
|
+
|
|
61
|
+
**Prompt para Claude:**
|
|
62
|
+
```
|
|
63
|
+
Set up the initial project structure for: [stack from Step 2]
|
|
64
|
+
|
|
65
|
+
Create:
|
|
66
|
+
1. The directory structure (show as a tree before creating anything)
|
|
67
|
+
2. Package/dependency files with pinned versions
|
|
68
|
+
3. Configuration files (TypeScript, ESLint, Prettier, etc.)
|
|
69
|
+
4. .gitignore appropriate for this stack
|
|
70
|
+
5. A minimal working "hello world" that proves the stack runs
|
|
71
|
+
|
|
72
|
+
Do not add features yet. The goal is a running skeleton.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Verifica que funcione antes de continuar.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Paso 4 — Configura CLAUDE.md
|
|
80
|
+
|
|
81
|
+
**Prompt para Claude:**
|
|
82
|
+
```
|
|
83
|
+
Create a CLAUDE.md for this project.
|
|
84
|
+
|
|
85
|
+
Include:
|
|
86
|
+
1. What this project is (one paragraph)
|
|
87
|
+
2. Stack summary (language, framework, key libraries, DB)
|
|
88
|
+
3. Directory structure with purpose of each directory
|
|
89
|
+
4. Coding conventions specific to this stack
|
|
90
|
+
5. Commands to run (dev server, tests, build, lint)
|
|
91
|
+
6. Decisions already made (from Steps 1–3) that should not be revisited
|
|
92
|
+
7. What NOT to do in this project
|
|
93
|
+
|
|
94
|
+
Make it dense and useful — not a tutorial. A senior developer should be able to start contributing after reading it.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Paso 5 — Configura el entorno de desarrollo
|
|
100
|
+
|
|
101
|
+
**Prompt para Claude:**
|
|
102
|
+
```
|
|
103
|
+
Set up the development environment:
|
|
104
|
+
|
|
105
|
+
1. Docker Compose file for local dependencies (database, cache, queues)
|
|
106
|
+
2. Environment variable template (.env.example with all required vars, no real values)
|
|
107
|
+
3. Database migrations setup (initial schema if applicable)
|
|
108
|
+
4. Test setup (test runner config, example test, CI-ready)
|
|
109
|
+
5. A Makefile or scripts/ directory with common commands:
|
|
110
|
+
- make dev (start local environment)
|
|
111
|
+
- make test (run tests)
|
|
112
|
+
- make build (production build)
|
|
113
|
+
- make lint (lint and format check)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Paso 6 — Configura el CI
|
|
119
|
+
|
|
120
|
+
**Prompt para Claude:**
|
|
121
|
+
```
|
|
122
|
+
Set up a GitHub Actions CI pipeline:
|
|
123
|
+
|
|
124
|
+
On every PR:
|
|
125
|
+
- Install dependencies (with cache)
|
|
126
|
+
- Run lint
|
|
127
|
+
- Run tests
|
|
128
|
+
- Build (if applicable)
|
|
129
|
+
|
|
130
|
+
Use the github-actions skill for best practices:
|
|
131
|
+
- Pin action versions
|
|
132
|
+
- Explicit permissions
|
|
133
|
+
- Dependency caching
|
|
134
|
+
- Fail fast on test failures
|
|
135
|
+
|
|
136
|
+
The pipeline must pass on the current skeleton before we add features.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Verifica que el CI pase en el commit inicial antes de avanzar al desarrollo de funcionalidades.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Paso 7 — Planificación de la primera funcionalidad
|
|
144
|
+
|
|
145
|
+
Una vez que el esqueleto está funcionando y el CI está en verde:
|
|
146
|
+
|
|
147
|
+
**Prompt para Claude:**
|
|
148
|
+
```
|
|
149
|
+
The project is bootstrapped. Now plan the first feature:
|
|
150
|
+
|
|
151
|
+
Feature: [describe the first user-facing capability]
|
|
152
|
+
|
|
153
|
+
Use the feature-development workflow to plan and implement it.
|
|
154
|
+
Start with Step 1 of that workflow.
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Ver `workflows/feature-development.md`.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Lista de verificaciĂłn del bootstrap
|
|
162
|
+
|
|
163
|
+
- [ ] Alcance definido y confirmado por escrito
|
|
164
|
+
- [ ] Stack decidido con razonamiento documentado
|
|
165
|
+
- [ ] Estructura del proyecto creada y funcionando ("hello world" funciona)
|
|
166
|
+
- [ ] CLAUDE.md escrito y con commit
|
|
167
|
+
- [ ] Docker Compose / dependencias locales funcionando
|
|
168
|
+
- [ ] .env.example con commit con todas las variables requeridas
|
|
169
|
+
- [ ] Pruebas configuradas y al menos una pasando
|
|
170
|
+
- [ ] Pipeline de CI en verde en el primer push
|
|
171
|
+
- [ ] `docs/adr/` creado con las decisiones arquitectĂłnicas iniciales
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../refactor-safely.md).
|
|
2
|
+
|
|
3
|
+
# Flujo de Trabajo de Refactoring Seguro
|
|
4
|
+
|
|
5
|
+
Cómo refactorizar código con Claude Code sin romper el comportamiento — usando las pruebas como red de seguridad en todo momento.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Cuándo usar este flujo de trabajo
|
|
10
|
+
- Extraer funciones de un método grande
|
|
11
|
+
- Renombrar y reorganizar mĂłdulos
|
|
12
|
+
- Reemplazar un patrĂłn con uno mejor en mĂşltiples archivos
|
|
13
|
+
- Reducir la duplicaciĂłn en el codebase
|
|
14
|
+
- Mejorar la estructura de un mĂłdulo sin cambiar su comportamiento externo
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## La regla de oro
|
|
19
|
+
|
|
20
|
+
**Nunca refactorices y cambies el comportamiento en el mismo commit.** Un refactoring preserva el comportamiento externo. Si las pruebas fallan, o cambiaste el comportamiento o las pruebas estaban probando detalles de implementación (también es un problema).
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Paso 1 — Establece una lĂnea base de pruebas
|
|
25
|
+
|
|
26
|
+
Antes de cambiar cualquier cosa, confirma que tienes cobertura de pruebas adecuada.
|
|
27
|
+
|
|
28
|
+
**Prompt para Claude:**
|
|
29
|
+
```
|
|
30
|
+
I want to refactor: [describe what you're refactoring and why]
|
|
31
|
+
|
|
32
|
+
First, assess the current test coverage:
|
|
33
|
+
1. Read the relevant files: [list files]
|
|
34
|
+
2. What behaviors are currently tested?
|
|
35
|
+
3. What behaviors are NOT tested that could break during refactoring?
|
|
36
|
+
4. Write any missing tests now, before we touch production code
|
|
37
|
+
|
|
38
|
+
Do not change production code yet. Tests only.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Haz commit de las adiciones de pruebas antes de refactorizar.** Esto deja claro quĂ© pruebas existĂan antes vs. las que se agregaron como parte del refactoring.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Paso 2 — Define el alcance del refactoring
|
|
46
|
+
|
|
47
|
+
**Prompt para Claude:**
|
|
48
|
+
```
|
|
49
|
+
Here is what I want to refactor: [describe the goal]
|
|
50
|
+
|
|
51
|
+
Read the relevant files: [list files]
|
|
52
|
+
|
|
53
|
+
Define the scope:
|
|
54
|
+
1. What will change structurally? (function signatures, file locations, module boundaries)
|
|
55
|
+
2. What will NOT change? (external behavior, API contracts, database schema)
|
|
56
|
+
3. What are the riskiest parts of this refactor?
|
|
57
|
+
4. What is the smallest first step that makes progress without risk?
|
|
58
|
+
|
|
59
|
+
Do not start the refactor yet.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Paso 3 — Refactoriza en incrementos pequeños y verificables
|
|
65
|
+
|
|
66
|
+
Divide el refactoring en pasos lo suficientemente pequeños como para que las pruebas puedan verificar cada uno.
|
|
67
|
+
|
|
68
|
+
**Para cada incremento:**
|
|
69
|
+
```
|
|
70
|
+
Refactor step [N]: [describe the specific structural change]
|
|
71
|
+
|
|
72
|
+
Rules:
|
|
73
|
+
- Change only what's needed for this step
|
|
74
|
+
- Do not change any behavior
|
|
75
|
+
- After this change, all existing tests must still pass
|
|
76
|
+
- Tell me what to verify after this step
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Después de cada incremento:**
|
|
80
|
+
```bash
|
|
81
|
+
# Ejecuta las pruebas — deben estar en verde antes del siguiente paso
|
|
82
|
+
npm test # o pytest, go test, etc.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Si las pruebas fallan después de un cambio puramente estructural: detente, entiende por qué, corrige antes de continuar. Una prueba que falla después de un refactoring significa que o el refactoring cambió el comportamiento o la prueba estaba probando la implementación (ambos son problemas a corregir ahora).
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Paso 4 — Verifica que el comportamiento externo no cambió
|
|
90
|
+
|
|
91
|
+
Después de todos los incrementos:
|
|
92
|
+
|
|
93
|
+
**Prompt para Claude:**
|
|
94
|
+
```
|
|
95
|
+
The refactor is structurally complete. Verify that external behavior is unchanged:
|
|
96
|
+
|
|
97
|
+
1. Run the full test suite
|
|
98
|
+
2. Check that all public APIs/interfaces are identical to before (same inputs, same outputs)
|
|
99
|
+
3. Check that database queries produce identical results
|
|
100
|
+
4. Check that error cases still produce the same errors
|
|
101
|
+
5. If there are integration tests or end-to-end tests, run them
|
|
102
|
+
|
|
103
|
+
Report any behavioral differences — even small ones.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Paso 5 — Limpieza
|
|
109
|
+
|
|
110
|
+
**Prompt para Claude:**
|
|
111
|
+
```
|
|
112
|
+
Before committing, clean up:
|
|
113
|
+
|
|
114
|
+
1. Remove any debugging code or temporary comments added during refactoring
|
|
115
|
+
2. Remove any dead code that the refactor made unreachable
|
|
116
|
+
3. Update any documentation or comments that referenced the old structure
|
|
117
|
+
4. Check that import paths are clean (no unused imports)
|
|
118
|
+
|
|
119
|
+
Do not introduce new logic in this step.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Paso 6 — Commit con un mensaje claro
|
|
125
|
+
|
|
126
|
+
Estructura los commits del refactoring para contar una historia clara:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
refactor: extract payment processing into PaymentService
|
|
130
|
+
|
|
131
|
+
Moves payment logic out of OrderController into a dedicated service.
|
|
132
|
+
No behavior change — all existing tests pass.
|
|
133
|
+
Motivation: OrderController was 600 lines; this makes both units testable in isolation.
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Nunca mezcles un commit de refactoring con un commit de funcionalidad o correcciĂłn de bug. Mantenlos separados.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Anti-patrones de refactoring
|
|
141
|
+
|
|
142
|
+
- **"Ya que estoy aquĂ..."** — hacer un refactoring y una funcionalidad al mismo tiempo. Detente. Termina el refactoring primero.
|
|
143
|
+
- **Refactorizar sin pruebas** — romperás algo y no lo sabrás
|
|
144
|
+
- **Refactoring big-bang** — cambiar todo a la vez. Hazlo de forma incremental.
|
|
145
|
+
- **Renombrar como último paso** — renombra primero (mecánico, bajo riesgo), luego reestructura
|
|
146
|
+
- **Saltarse la lĂnea base** — asumir que las pruebas son adecuadas sin verificar primero
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Feature Development Workflow
|
|
2
|
+
|
|
3
|
+
End-to-end workflow for taking a feature from idea to merged PR using Claude Code.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## When to use this workflow
|
|
8
|
+
- Building a new feature that touches more than one file
|
|
9
|
+
- Implementing a spec or ticket that needs breaking down before coding
|
|
10
|
+
- Any feature where you want a structured, reviewable process
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Step 1 — Define and validate scope
|
|
15
|
+
|
|
16
|
+
Before writing code, establish exactly what you're building.
|
|
17
|
+
|
|
18
|
+
**Prompt Claude:**
|
|
19
|
+
```
|
|
20
|
+
I need to build: [describe the feature in one paragraph]
|
|
21
|
+
|
|
22
|
+
Read the relevant files first:
|
|
23
|
+
- [list key files: routes, models, services]
|
|
24
|
+
- CLAUDE.md and CONTEXT.md if present
|
|
25
|
+
|
|
26
|
+
Then tell me:
|
|
27
|
+
1. What files will need to change?
|
|
28
|
+
2. What new files will be created?
|
|
29
|
+
3. What are the edge cases I should handle?
|
|
30
|
+
4. What decisions do I need to make before we start?
|
|
31
|
+
5. Are there any risks or dependencies I'm missing?
|
|
32
|
+
|
|
33
|
+
Do not write code yet.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**What to look for in the response:**
|
|
37
|
+
- Files you hadn't considered
|
|
38
|
+
- Edge cases that would cause bugs if missed
|
|
39
|
+
- Decisions that should go in CLAUDE.md once made
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Step 2 — Plan the implementation
|
|
44
|
+
|
|
45
|
+
Once scope is clear, get a sequenced plan.
|
|
46
|
+
|
|
47
|
+
**Prompt Claude:**
|
|
48
|
+
```
|
|
49
|
+
Based on the scope we just defined, create a numbered implementation plan.
|
|
50
|
+
|
|
51
|
+
Each step must be:
|
|
52
|
+
- A concrete, bounded action (not "implement auth" — "add JWT validation middleware to src/middleware/auth.ts")
|
|
53
|
+
- Completable in a single session
|
|
54
|
+
- Independently testable
|
|
55
|
+
|
|
56
|
+
Include which files change in each step. Note dependencies between steps.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Review the plan. If a step is too large, ask Claude to break it down further. Lock in the plan before touching code.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Step 3 — Implement step by step
|
|
64
|
+
|
|
65
|
+
Execute one plan step at a time. Do not skip ahead.
|
|
66
|
+
|
|
67
|
+
**For each step:**
|
|
68
|
+
```
|
|
69
|
+
Implement step [N]: [paste the step description]
|
|
70
|
+
|
|
71
|
+
Rules:
|
|
72
|
+
- Only change what's needed for this step
|
|
73
|
+
- Write or update tests for this step's behavior
|
|
74
|
+
- Do not refactor code outside the scope of this step
|
|
75
|
+
- Tell me when this step is complete and what to verify
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**After each step:**
|
|
79
|
+
- Run tests: confirm green before moving to the next step
|
|
80
|
+
- Review the diff yourself: is this what you intended?
|
|
81
|
+
- If a step reveals new complexity, update the plan before continuing
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Step 4 — Integration check
|
|
86
|
+
|
|
87
|
+
Once all steps are complete, verify the full feature works end-to-end.
|
|
88
|
+
|
|
89
|
+
**Prompt Claude:**
|
|
90
|
+
```
|
|
91
|
+
All implementation steps are complete. Now:
|
|
92
|
+
|
|
93
|
+
1. Run the full test suite — report any failures
|
|
94
|
+
2. Check that all edge cases from Step 1 are handled — list each one and confirm
|
|
95
|
+
3. Check for any TODOs or incomplete error handling introduced during implementation
|
|
96
|
+
4. Verify the feature works with [specific test scenario relevant to this feature]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Fix any issues found before proceeding.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 5 — Self-review
|
|
104
|
+
|
|
105
|
+
Before creating a PR, review your own changes.
|
|
106
|
+
|
|
107
|
+
**Prompt Claude:**
|
|
108
|
+
```
|
|
109
|
+
Review the changes on this branch against main.
|
|
110
|
+
|
|
111
|
+
Focus on:
|
|
112
|
+
1. CRITICAL issues (bugs, security, data loss risks)
|
|
113
|
+
2. Missing tests for changed behavior
|
|
114
|
+
3. Convention violations vs this project's CLAUDE.md
|
|
115
|
+
4. Anything that would confuse a reader in 6 months
|
|
116
|
+
|
|
117
|
+
Format: CRITICAL / SUGGESTED / NITPICK
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Fix all CRITICAL issues. Use judgment on SUGGESTED items.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Step 6 — PR description
|
|
125
|
+
|
|
126
|
+
**Prompt Claude:**
|
|
127
|
+
```
|
|
128
|
+
Write a PR description for these changes.
|
|
129
|
+
|
|
130
|
+
Include:
|
|
131
|
+
- What this PR does (one paragraph)
|
|
132
|
+
- Why it's needed (the problem it solves)
|
|
133
|
+
- How to test it (specific steps a reviewer can follow)
|
|
134
|
+
- Any decisions made and why (reference CLAUDE.md or ADRs if relevant)
|
|
135
|
+
- Screenshots or output if applicable
|
|
136
|
+
|
|
137
|
+
Do not include a list of files changed — the diff covers that.
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Checklist before merging
|
|
143
|
+
|
|
144
|
+
- [ ] All tests pass
|
|
145
|
+
- [ ] Self-review complete, no CRITICAL issues
|
|
146
|
+
- [ ] Edge cases from Step 1 are all handled
|
|
147
|
+
- [ ] PR description written
|
|
148
|
+
- [ ] CLAUDE.md updated if any new decisions were made
|
|
149
|
+
- [ ] CONTEXT.md updated if new domain terms were introduced
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
> **Work with us:** Claudient is backed by [Uitbreiden](https://uitbreiden.com/) — we build AI products and B2B solutions with developer communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
> 🇫🇷 This is the French translation. [English version](../code-review.md).
|
|
2
|
+
|
|
3
|
+
# Workflow de Révision de Code
|
|
4
|
+
|
|
5
|
+
Comment exécuter une révision de code structurée et automatisée avec Claude Code avant ou en parallèle de la révision humaine.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quand utiliser ce workflow
|
|
10
|
+
- Auto-réviser vos propres changements avant de pousser
|
|
11
|
+
- Pré-screening d'une PR avant de demander une révision humaine
|
|
12
|
+
- Réviser du code généré par l'IA avant de l'accepter
|
|
13
|
+
- Révision d'intégration : comprendre ce qui a changé dans une PR inconnue
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Étape 1 — Préparer le contexte
|
|
18
|
+
|
|
19
|
+
Donnez à Claude tout ce dont il a besoin pour réviser de manière significative.
|
|
20
|
+
|
|
21
|
+
**Prompt Claude :**
|
|
22
|
+
```
|
|
23
|
+
I need you to review the following changes.
|
|
24
|
+
|
|
25
|
+
Project context:
|
|
26
|
+
- Stack: [language, framework, key libraries]
|
|
27
|
+
- Testing approach: [unit/integration, mocking policy]
|
|
28
|
+
- Key conventions: [paste relevant CLAUDE.md sections]
|
|
29
|
+
|
|
30
|
+
Changed files:
|
|
31
|
+
[paste git diff output OR list files and ask Claude to read them]
|
|
32
|
+
|
|
33
|
+
This PR: [one sentence on what it's supposed to do]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Étape 2 — Révision de correction
|
|
39
|
+
|
|
40
|
+
**Prompt Claude :**
|
|
41
|
+
```
|
|
42
|
+
Review these changes for correctness only.
|
|
43
|
+
|
|
44
|
+
Check:
|
|
45
|
+
1. Does the code do what the PR description says it does?
|
|
46
|
+
2. Are there edge cases not handled? (null inputs, empty collections, concurrent access, large inputs)
|
|
47
|
+
3. Are there off-by-one errors, wrong comparisons, or logic inversions?
|
|
48
|
+
4. Are error paths handled — can this panic, throw, or silently fail?
|
|
49
|
+
5. Are there race conditions if this code runs concurrently?
|
|
50
|
+
|
|
51
|
+
Format: [FILE:LINE] — [issue description] — [suggested fix]
|
|
52
|
+
Only report real issues. Do not nitpick style.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Étape 3 — Révision de sécurité
|
|
58
|
+
|
|
59
|
+
**Prompt Claude :**
|
|
60
|
+
```
|
|
61
|
+
Review these changes for security issues.
|
|
62
|
+
|
|
63
|
+
Check:
|
|
64
|
+
1. Is any user input used in SQL, shell commands, file paths, or HTML without sanitization?
|
|
65
|
+
2. Are there missing authentication or authorization checks?
|
|
66
|
+
3. Are secrets, tokens, or credentials exposed in logs, errors, or responses?
|
|
67
|
+
4. Are there insecure direct object references (IDOR)?
|
|
68
|
+
5. Are there missing rate limits on sensitive endpoints?
|
|
69
|
+
|
|
70
|
+
Severity: CRITICAL / HIGH / MEDIUM / LOW
|
|
71
|
+
Format: [SEVERITY] [FILE:LINE] — [vulnerability] — [fix]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Étape 4 — Vérification de la couverture de test
|
|
77
|
+
|
|
78
|
+
**Prompt Claude :**
|
|
79
|
+
```
|
|
80
|
+
Review the test coverage for these changes.
|
|
81
|
+
|
|
82
|
+
Check:
|
|
83
|
+
1. Is every new function or method covered by at least one test?
|
|
84
|
+
2. Is the happy path tested?
|
|
85
|
+
3. Is at least one error/edge case tested?
|
|
86
|
+
4. Do the tests actually assert meaningful behavior, or just that the function runs?
|
|
87
|
+
5. Are there behaviors changed by this PR that existing tests don't cover?
|
|
88
|
+
|
|
89
|
+
List: [what is tested] and [what is missing]
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Étape 5 — Révision de maintenabilité
|
|
95
|
+
|
|
96
|
+
**Prompt Claude :**
|
|
97
|
+
```
|
|
98
|
+
Review these changes for maintainability.
|
|
99
|
+
|
|
100
|
+
Check:
|
|
101
|
+
1. Will a developer unfamiliar with this code understand it in 6 months?
|
|
102
|
+
2. Are function names and variable names clear and accurate?
|
|
103
|
+
3. Is there duplicated logic that should be extracted?
|
|
104
|
+
4. Are there magic numbers or strings that should be named constants?
|
|
105
|
+
5. Does this introduce unnecessary coupling between modules?
|
|
106
|
+
|
|
107
|
+
Only flag real maintainability issues — not style preferences.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Étape 6 — Consolider les résultats
|
|
113
|
+
|
|
114
|
+
**Prompt Claude :**
|
|
115
|
+
```
|
|
116
|
+
Consolidate all findings from the review into a final report.
|
|
117
|
+
|
|
118
|
+
Format:
|
|
119
|
+
## CRITICAL (must fix before merge)
|
|
120
|
+
[list]
|
|
121
|
+
|
|
122
|
+
## HIGH (strongly recommended)
|
|
123
|
+
[list]
|
|
124
|
+
|
|
125
|
+
## SUGGESTED (worth doing)
|
|
126
|
+
[list]
|
|
127
|
+
|
|
128
|
+
## NITPICK (optional)
|
|
129
|
+
[list]
|
|
130
|
+
|
|
131
|
+
## VERDICT
|
|
132
|
+
[ ] Approved — no blockers
|
|
133
|
+
[ ] Approved with suggestions — merge after addressing CRITICAL
|
|
134
|
+
[ ] Changes requested — must address before merge
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Utiliser l'agent Réviseur de Code
|
|
140
|
+
|
|
141
|
+
Pour les PRs plus grandes, déléguer à l'agent Réviseur de Code plutôt que de l'exécuter en ligne :
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
Spawn a Code Reviewer agent (Sonnet 4.6) to review [list of files].
|
|
145
|
+
Give it the project context from CLAUDE.md and the PR description.
|
|
146
|
+
Have it return a structured CRITICAL/SUGGESTED/NITPICK report.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Voir `agents/core/code-reviewer.md` pour la définition complète de l'agent.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
> **Travaillez avec nous :** Claudient est soutenu par [Uitbreiden](https://uitbreiden.com/) — nous construisons des produits IA et des solutions B2B avec des communautés de développeurs. [uitbreiden.com](https://uitbreiden.com/)
|