diff --git a/.github/workflows/docs-i18n-pull.yaml b/.github/workflows/docs-i18n-pull.yaml
index 1616c85d16..919cc7bcd9 100644
--- a/.github/workflows/docs-i18n-pull.yaml
+++ b/.github/workflows/docs-i18n-pull.yaml
@@ -42,31 +42,14 @@ jobs:
token: ${{ github.token }}
ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version-file: '.nvmrc'
- cache: 'yarn'
- cache-dependency-path: 'yarn.lock'
-
- name: Install dependencies
- run: yarn install --frozen-lockfile
+ uses: ./.github/actions/yarn-install
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version-file: '.nvmrc'
- cache: 'yarn'
- cache-dependency-path: 'yarn.lock'
-
- - name: Install dependencies
- run: yarn install --frozen-lockfile
-
- - name: Setup i18n branch
+ - name: Setup i18n-docs branch
if: github.event_name != 'pull_request'
run: |
- git fetch origin i18n || true
- git checkout -B i18n origin/i18n || git checkout -b i18n
+ git fetch origin i18n-docs || true
+ git checkout -B i18n-docs origin/i18n-docs || git checkout -b i18n-docs
- name: Configure git
run: |
@@ -79,31 +62,35 @@ jobs:
git add .
git stash || true
+ # Install Crowdin CLI for downloading translations
+ - name: Install Crowdin CLI
+ if: github.event_name != 'pull_request' && (inputs.force_pull == true || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
+ run: npm install -g @crowdin/cli
+
+ # Pull docs translations from Crowdin one language at a time
+ # This avoids build timeout issues when processing all languages at once
- name: Pull translated docs from Crowdin
if: github.event_name != 'pull_request' && (inputs.force_pull == true || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
- uses: crowdin/github-action@v2
- with:
- upload_sources: false
- upload_translations: false
- download_translations: true
- source: 'packages/twenty-docs/**/*.mdx'
- translation: 'packages/twenty-docs/l/%two_letters_code%/**/%original_file_name%'
- export_only_approved: false
- localization_branch_name: i18n
- base_url: 'https://twenty.api.crowdin.com'
- skip_untranslated_files: true
- push_translations: false
- create_pull_request: false
- skip_ref_checkout: true
- dryrun_action: false
- config: 'crowdin-docs.yml'
- # Only download languages supported by Mintlify (see supported-languages.ts)
- # Using multiple -l flags since download_language only accepts single language
- download_translations_args: '-l fr -l ar -l cs -l de -l es -l it -l ja -l ko -l pt -l ro -l ru -l tr -l zh-CN'
+ run: |
+ # Languages supported by Mintlify (see packages/twenty-docs/src/shared/supported-languages.ts)
+ LANGUAGES="fr ar cs de es it ja ko pt ro ru tr zh-CN"
+
+ for lang in $LANGUAGES; do
+ echo "=== Pulling translations for $lang ==="
+ crowdin download \
+ --config crowdin-docs.yml \
+ --token "$CROWDIN_PERSONAL_TOKEN" \
+ --base-url "https://twenty.api.crowdin.com" \
+ --language "$lang" \
+ --skip-untranslated-strings=false \
+ --skip-untranslated-files=false \
+ --export-only-approved=false \
+ --verbose || echo "Warning: Failed to pull $lang, continuing with other languages..."
+ echo ""
+ done
+
+ echo "=== Download complete ==="
env:
- GITHUB_TOKEN: ${{ github.token }}
- # Docs translations project
- CROWDIN_PROJECT_ID: '2'
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Fix file permissions
@@ -147,13 +134,13 @@ jobs:
- name: Push changes
if: github.event_name != 'pull_request' && steps.check_changes.outputs.changes_detected == 'true'
- run: git push origin HEAD:i18n
+ run: git push origin HEAD:i18n-docs
- name: Create pull request
if: github.event_name != 'pull_request' && steps.check_changes.outputs.changes_detected == 'true'
run: |
if git diff --name-only origin/main..HEAD | grep -q .; then
- gh pr create -B main -H i18n --title 'i18n - docs translations' --body 'Created by Github action' || true
+ gh pr create -B main -H i18n-docs --title 'i18n - docs translations' --body 'Created by Github action' || true
else
echo "No file differences between branches, skipping PR creation"
fi
diff --git a/.github/workflows/docs-i18n-push.yaml b/.github/workflows/docs-i18n-push.yaml
index a429c7dc07..a3ccaa5b0c 100644
--- a/.github/workflows/docs-i18n-push.yaml
+++ b/.github/workflows/docs-i18n-push.yaml
@@ -7,10 +7,11 @@ on:
workflow_dispatch:
workflow_call:
push:
- branches: ['main', 'docs-localized-navigation']
+ branches: ['main']
paths:
- 'packages/twenty-docs/**/*.mdx'
- - '!packages/twenty-docs/fr/**'
+ - '!packages/twenty-docs/l/**'
+ - 'packages/twenty-docs/navigation/navigation.template.json'
- 'crowdin-docs.yml'
concurrency:
@@ -28,15 +29,8 @@ jobs:
token: ${{ github.token }}
ref: ${{ github.ref }}
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version-file: '.nvmrc'
- cache: 'yarn'
- cache-dependency-path: 'yarn.lock'
-
- name: Install dependencies
- run: yarn install --frozen-lockfile
+ uses: ./.github/actions/yarn-install
- name: Generate navigation template for Crowdin
run: yarn docs:generate-navigation-template
@@ -47,7 +41,7 @@ jobs:
upload_sources: true
upload_translations: false
download_translations: false
- localization_branch_name: i18n
+ localization_branch_name: i18n-docs
base_url: 'https://twenty.api.crowdin.com'
config: 'crowdin-docs.yml'
env:
diff --git a/.github/workflows/i18n-pull.yaml b/.github/workflows/i18n-pull.yaml
index cf8a1f2052..0025e8ccdd 100644
--- a/.github/workflows/i18n-pull.yaml
+++ b/.github/workflows/i18n-pull.yaml
@@ -85,7 +85,7 @@ jobs:
push_sources: false
skip_untranslated_strings: false
skip_untranslated_files: false
- push_translations: true
+ push_translations: false
create_pull_request: false
skip_ref_checkout: true
dryrun_action: false
@@ -116,8 +116,6 @@ jobs:
npx nx run twenty-emails:lingui:compile
npx nx run twenty-front:lingui:compile
git status
- git config --global user.name 'github-actions'
- git config --global user.email 'github-actions@twenty.com'
git add .
if ! git diff --staged --quiet --exit-code; then
git commit -m "chore: compile translations"
diff --git a/crowdin-docs.yml b/crowdin-docs.yml
index 6a03c313b3..693d677cd2 100644
--- a/crowdin-docs.yml
+++ b/crowdin-docs.yml
@@ -1,10 +1,11 @@
#
# Crowdin CLI configuration for Documentation translations
-# Project ID: 2
# See https://crowdin.github.io/crowdin-cli/configuration for more information
#
+"project_id": 2
"preserve_hierarchy": true
+"base_url": "https://twenty.api.crowdin.com"
files: [
{
diff --git a/packages/twenty-docs/docs.json b/packages/twenty-docs/docs.json
index 929b7f486d..a6d65aa339 100644
--- a/packages/twenty-docs/docs.json
+++ b/packages/twenty-docs/docs.json
@@ -911,7 +911,7 @@
"language": "ar",
"tabs": [
{
- "tab": "دليل المستخدم",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -1079,7 +1079,7 @@
]
},
{
- "group": "AI",
+ "group": "الذكاء الاصطناعي",
"icon": "robot",
"pages": [
"l/ar/user-guide/ai/overview",
@@ -1130,7 +1130,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "لوحات القيادة",
"icon": "chart-bar",
"pages": [
"l/ar/user-guide/dashboards/overview",
@@ -1170,7 +1170,7 @@
]
},
{
- "group": "Billing",
+ "group": "الفوترة",
"icon": "credit-card",
"pages": [
"l/ar/user-guide/billing/overview",
@@ -1190,7 +1190,7 @@
]
},
{
- "group": "الإعدادات",
+ "group": "\\ا\\ل\\إ\\ع\\د\\ا\\د\\ا\\ت",
"icon": "gear",
"pages": [
"l/ar/user-guide/settings/overview",
@@ -1219,7 +1219,7 @@
"tab": "المطورون",
"groups": [
{
- "group": "المطورين",
+ "group": "المطورون",
"pages": [
"l/ar/developers/introduction"
]
@@ -1267,7 +1267,7 @@
"l/ar/developers/contribute/capabilities/local-setup",
"l/ar/developers/contribute/capabilities/bug-and-requests",
{
- "group": "تطوير الواجهة",
+ "group": "تطوير الواجهة الأمامية",
"pages": [
"l/ar/developers/contribute/capabilities/frontend-development/storybook",
{
@@ -1286,13 +1286,13 @@
]
},
{
- "group": "الملاحظات",
+ "group": "التغذية الراجعة",
"pages": [
"l/ar/twenty-ui/progress-bar"
]
},
{
- "group": "Input",
+ "group": "إدخال",
"pages": [
"l/ar/twenty-ui/input/buttons",
"l/ar/twenty-ui/input/color-scheme",
@@ -1328,7 +1328,7 @@
]
},
{
- "group": "تطوير الخلفية",
+ "group": "تطوير الواجهة الخلفية",
"pages": [
"l/ar/developers/contribute/capabilities/backend-development/server-commands",
"l/ar/developers/contribute/capabilities/backend-development/feature-flags",
@@ -1351,7 +1351,7 @@
"language": "cs",
"tabs": [
{
- "tab": "Uživatelská příručka",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -1507,7 +1507,7 @@
]
},
{
- "group": "Need More Help",
+ "group": "Potřebujete další pomoc",
"pages": [
"l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting",
"l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq",
@@ -1570,7 +1570,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Panely",
"icon": "chart-bar",
"pages": [
"l/cs/user-guide/dashboards/overview",
@@ -1610,7 +1610,7 @@
]
},
{
- "group": "Billing",
+ "group": "Fakturace",
"icon": "credit-card",
"pages": [
"l/cs/user-guide/billing/overview",
@@ -1715,7 +1715,7 @@
"pages": [
"l/cs/twenty-ui/introduction",
{
- "group": "Zobrazení",
+ "group": "Zobrazit",
"pages": [
"l/cs/twenty-ui/display/checkmark",
"l/cs/twenty-ui/display/chip",
@@ -1726,13 +1726,13 @@
]
},
{
- "group": "Komentář",
+ "group": "Zpětná vazba",
"pages": [
"l/cs/twenty-ui/progress-bar"
]
},
{
- "group": "Input",
+ "group": "Vstup",
"pages": [
"l/cs/twenty-ui/input/buttons",
"l/cs/twenty-ui/input/color-scheme",
@@ -1747,7 +1747,7 @@
]
},
{
- "group": "Navigation",
+ "group": "Navigace",
"pages": [
"l/cs/twenty-ui/navigation",
"l/cs/twenty-ui/navigation/breadcrumb",
@@ -1791,7 +1791,7 @@
"language": "de",
"tabs": [
{
- "tab": "Benutzerhandbuch",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -1947,7 +1947,7 @@
]
},
{
- "group": "Need More Help",
+ "group": "Brauchen Sie mehr Hilfe",
"pages": [
"l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting",
"l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq",
@@ -1959,7 +1959,7 @@
]
},
{
- "group": "AI",
+ "group": "KI",
"icon": "robot",
"pages": [
"l/de/user-guide/ai/overview",
@@ -2050,7 +2050,7 @@
]
},
{
- "group": "Billing",
+ "group": "Abrechnung",
"icon": "credit-card",
"pages": [
"l/de/user-guide/billing/overview",
@@ -2155,7 +2155,7 @@
"pages": [
"l/de/twenty-ui/introduction",
{
- "group": "Anzeige",
+ "group": "Anzeigen",
"pages": [
"l/de/twenty-ui/display/checkmark",
"l/de/twenty-ui/display/chip",
@@ -2166,13 +2166,13 @@
]
},
{
- "group": "Feedback",
+ "group": "Rückmeldung",
"pages": [
"l/de/twenty-ui/progress-bar"
]
},
{
- "group": "Input",
+ "group": "Eingabe",
"pages": [
"l/de/twenty-ui/input/buttons",
"l/de/twenty-ui/input/color-scheme",
@@ -2231,7 +2231,7 @@
"language": "es",
"tabs": [
{
- "tab": "Guía de usuario",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -2339,7 +2339,7 @@
]
},
{
- "group": "Workflows",
+ "group": "Flujos de trabajo",
"icon": "bolt",
"pages": [
"l/es/user-guide/workflows/overview",
@@ -2399,7 +2399,7 @@
]
},
{
- "group": "AI",
+ "group": "IA",
"icon": "robot",
"pages": [
"l/es/user-guide/ai/overview",
@@ -2450,7 +2450,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Tableros",
"icon": "chart-bar",
"pages": [
"l/es/user-guide/dashboards/overview",
@@ -2490,7 +2490,7 @@
]
},
{
- "group": "Billing",
+ "group": "Facturación",
"icon": "credit-card",
"pages": [
"l/es/user-guide/billing/overview",
@@ -2648,7 +2648,7 @@
]
},
{
- "group": "Desarrollo de backend",
+ "group": "Desarrollo Backend",
"pages": [
"l/es/developers/contribute/capabilities/backend-development/server-commands",
"l/es/developers/contribute/capabilities/backend-development/feature-flags",
@@ -2671,7 +2671,7 @@
"language": "it",
"tabs": [
{
- "tab": "Guida Utente",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -2779,7 +2779,7 @@
]
},
{
- "group": "Workflows",
+ "group": "Flussi di Lavoro",
"icon": "bolt",
"pages": [
"l/it/user-guide/workflows/overview",
@@ -2890,7 +2890,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Cruscotti",
"icon": "chart-bar",
"pages": [
"l/it/user-guide/dashboards/overview",
@@ -2930,7 +2930,7 @@
]
},
{
- "group": "Billing",
+ "group": "Fatturazione",
"icon": "credit-card",
"pages": [
"l/it/user-guide/billing/overview",
@@ -3035,7 +3035,7 @@
"pages": [
"l/it/twenty-ui/introduction",
{
- "group": "Visualizzazione",
+ "group": "Mostra",
"pages": [
"l/it/twenty-ui/display/checkmark",
"l/it/twenty-ui/display/chip",
@@ -3067,7 +3067,7 @@
]
},
{
- "group": "Navigation",
+ "group": "Navigazione",
"pages": [
"l/it/twenty-ui/navigation",
"l/it/twenty-ui/navigation/breadcrumb",
@@ -4431,7 +4431,7 @@
"language": "ro",
"tabs": [
{
- "tab": "Ghid de utilizator",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -4587,7 +4587,7 @@
]
},
{
- "group": "Need More Help",
+ "group": "Ai nevoie de mai mult ajutor",
"pages": [
"l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting",
"l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq",
@@ -4620,7 +4620,7 @@
]
},
{
- "group": "Views & Pipelines",
+ "group": "Vizualizări și fluxuri",
"icon": "table",
"pages": [
"l/ro/user-guide/views-pipelines/overview",
@@ -4650,7 +4650,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Tablouri de Bord",
"icon": "chart-bar",
"pages": [
"l/ro/user-guide/dashboards/overview",
@@ -4690,7 +4690,7 @@
]
},
{
- "group": "Billing",
+ "group": "Facturare",
"icon": "credit-card",
"pages": [
"l/ro/user-guide/billing/overview",
@@ -4787,7 +4787,7 @@
"l/ro/developers/contribute/capabilities/local-setup",
"l/ro/developers/contribute/capabilities/bug-and-requests",
{
- "group": "Dezvoltare Frontend",
+ "group": "Frontend Development",
"pages": [
"l/ro/developers/contribute/capabilities/frontend-development/storybook",
{
@@ -4827,7 +4827,7 @@
]
},
{
- "group": "Navigation",
+ "group": "Navigare",
"pages": [
"l/ro/twenty-ui/navigation",
"l/ro/twenty-ui/navigation/breadcrumb",
@@ -4871,7 +4871,7 @@
"language": "ru",
"tabs": [
{
- "tab": "Руководство пользователя",
+ "tab": "User Guide",
"groups": [
{
"group": "Discover Twenty",
@@ -5027,7 +5027,7 @@
]
},
{
- "group": "Need More Help",
+ "group": "Нужна дополнительная помощь",
"pages": [
"l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting",
"l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq",
@@ -5039,7 +5039,7 @@
]
},
{
- "group": "AI",
+ "group": "ИИ",
"icon": "robot",
"pages": [
"l/ru/user-guide/ai/overview",
@@ -5060,7 +5060,7 @@
]
},
{
- "group": "Views & Pipelines",
+ "group": "Представления и воронки",
"icon": "table",
"pages": [
"l/ru/user-guide/views-pipelines/overview",
@@ -5090,7 +5090,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Панели управления",
"icon": "chart-bar",
"pages": [
"l/ru/user-guide/dashboards/overview",
@@ -5130,7 +5130,7 @@
]
},
{
- "group": "Billing",
+ "group": "Биллинг",
"icon": "credit-card",
"pages": [
"l/ru/user-guide/billing/overview",
@@ -5288,7 +5288,7 @@
]
},
{
- "group": "Бэкенд разработка",
+ "group": "Разработка серверной части",
"pages": [
"l/ru/developers/contribute/capabilities/backend-development/server-commands",
"l/ru/developers/contribute/capabilities/backend-development/feature-flags",
@@ -5467,7 +5467,7 @@
]
},
{
- "group": "Need More Help",
+ "group": "Daha Fazla Yardım mı İhtiyacınız Var",
"pages": [
"l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting",
"l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq",
@@ -5530,7 +5530,7 @@
]
},
{
- "group": "Dashboards",
+ "group": "Gösterge Panelleri",
"icon": "chart-bar",
"pages": [
"l/tr/user-guide/dashboards/overview",
@@ -5570,7 +5570,7 @@
]
},
{
- "group": "Billing",
+ "group": "Faturalandırma",
"icon": "credit-card",
"pages": [
"l/tr/user-guide/billing/overview",
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/best-practices-server.mdx
new file mode 100644
index 0000000000..b8e2710ba8
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/best-practices-server.mdx
@@ -0,0 +1,22 @@
+---
+title: أفضل الممارسات
+---
+
+This document outlines the best practices you should follow when working on the backend.
+
+## اتبع نهجًا معياريًا
+
+الواجهة الخلفية تتبع نهجًا معياريًا، وهو مبدأ أساسي عند العمل مع NestJS. تأكد من تقسيم الكود إلى وحدات قابلة لإعادة الاستخدام للحفاظ على كود مرتب ومنظم.
+يجب أن تحتوي كل وحدة على ميزة أو وظيفة معينة وأن يكون لها نطاق محدد بوضوح. يتيح هذا النهج المعياري فصل الاهتمامات بوضوح ويزيل التعقيدات غير الضرورية.
+
+## إتاحة الخدمات لاستخدامها في الوحدات
+
+قم دائمًا بإنشاء خدمات ذات مسؤولية واضحة ووحيدة، مما يعزز من قابلية قراءة وصيانة الكود. Name the services descriptively and consistently.
+
+يجب أيضًا إتاحة الخدمات التي تريد استخدامها في وحدات أخرى. إتاحة الخدمات للوحدات الأخرى ممكنة عبر نظام حقن التبعيات القوي في NestJS، كما يعزز ذلك الاقتران الضعيف بين المكونات.
+
+## تجنب استخدام نوع `أي`
+
+عند إعلان متغير كـ `أي`، فإن مدقق الأنواع في TypeScript لا يقوم بأي عملية تدقيق للنوع، مما يجعله ممكنًا لتعيين أي نوع من القيم للمتغير. يستخدم TypeScript الاستدلال النوعي لتحديد نوع المتغير بناءً على القيمة. من خلال استخدام `أي`، لم يعد بإمكان TypeScript استنتاج النوع. هذا يجعل من الصعب ضبط أخطاء النوع أثناء التطوير، مما يؤدي إلى حدوث أخطاء في وقت التشغيل ويجعل الكود أقل قابلية للصيانة وأقل موثوقية ويصعب فهمه على الآخرين.
+
+لهذا السبب يجب أن يكون لكل شيء نوع. لذا إن قمت بإنشاء كائن جديد يحتوي على الاسم الأول واسم العائلة، يجب عليك إنشاء واجهة أو نوع يحتوي على الاسم الأول واسم العائلة الذي يحدد شكل الكائن الذي تتعامل معه.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..349488bfb9
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+تُستخدم أعلام الميزات لإخفاء الميزات التجريبية. For Twenty, they are set on workspace level and not on a user level.
+
+## إضافة علم ميزة جديد
+
+في ملف `FeatureFlagKey.ts` أضف علم الميزة:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+أيضًا أضفه إلى التعداد في `feature-flag.entity.ts`:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+لتطبيق علم ميزة على ميزة **الخلفية** استخدم:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+لتطبيق علم ميزة على ميزة **الواجهة الأمامية** استخدم:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## تكوين أعلام الميزات للنشر
+
+تغيير السجل المعني في جدول `core.featureFlag`:
+
+| المُعرّف | المفتاح | معرف مساحة العمل | القيمة |
+| -------- | ------------------------ | ---------------- | ------ |
+| عشوائي | `IS_FEATURENAME_ENABLED` | معرف مساحة العمل | `صحيح` |
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..a5e197fdee
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: هيكلية المجلدات
+info: نظرة تفصيلية داخل هيكلية مجلدات الخادم
+---
+
+الهيكلية الدليلية للمكونات الخلفية كالتالي:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## قدرات
+
+تعريف الأذونات وتتضمن معالجات لكل كيان.
+
+## زخارف
+
+تعريف الزخارف المخصصة في NestJS لإضافة وظائف جديدة.
+
+شاهد [زخارف مخصصة](https://docs.nestjs.com/custom-decorators) لمزيد من التفاصيل.
+
+## الفلاتر
+
+تتضمن فلاتر استثناء لمعالجة الحالات الطارئة التي قد تحدث في نقاط GraphQL النهائية.
+
+## حمايات
+
+شاهد [الحمايات](https://docs.nestjs.com/guards) لمزيد من التفاصيل.
+
+## الصحة
+
+تتضمن واجهة برمجية متاحة للجميع (healthz) تعيد جيسون لتأكيد ما إذا كانت قاعدة البيانات تعمل كما هو متوقع.
+
+## البيانات الوصفية
+
+تعريف الأشياء المخصصة وتوفر واجهة برمجية GraphQL (graphql/metadata).
+
+## مساحة العمل
+
+توليد وتقديم مخطط GraphQL مخصص بناءً على البيانات الوصفية.
+
+### هيكلية دليل مساحة العمل
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+يحتوي الجذر في دليل مساحة العمل على `workspace.factory.ts`، ملف يحتوي على وظيفة `createGraphQLSchema`. تولّد هذه الوظيفة مخططًا خاصًا بمساحة العمل باستخدام البيانات الوصفية لتخصيص المخطط لمساحات العمل الفردية. من خلال فصل بناء المخطط والمستعرض، نستخدم وظيفة `makeExecutableSchema`، التي تجمع بين هذه العناصر المنفصلة.
+
+تعتمد هذه الاستراتيجية على التنظيم ولا تساعد فقط في التنظيم، لكنها أيضًا تحسن الأداء، مثل تخزين تعريفات النوع المولدة مؤقتًا لتعزيز الأداء والتوسع.
+
+### منشئ مخطط مساحة العمل
+
+يولد مخطط GraphQL، ويتضمن:
+
+#### مصانع:
+
+مصانع متخصصة لتوليد الإنشاءات المتعلقة بـ GraphQL.
+
+* المصنع النوعي يترجم بيانات الحقول الوصفية إلى أنواع GraphQL باستخدام `TypeMapperService`.
+* The type-definition.factory creates GraphQL input or output objects derived from `objectMetadata`.
+
+#### أنواع GraphQL
+
+يتضمن تعدادات، إدخالات، كائنات، وأشكال بسيطة، ويعمل كنقاط بناء للمخطط.
+
+#### واجهات وتعريفات الكائنات
+
+تحتوي على مخططات للكيانات GraphQL، وتشتمل على أنواع معرفة مسبقًا ومخصصة مثل `MONEY` أو `URL`.
+
+#### خدمات
+
+تحتوي على الخدمة المسؤولة عن ربط FieldMetadataType بنوع GraphQL المناسب أو أدوات التعديل الاستعلامية.
+
+#### التخزين
+
+يتضمن فئة `TypeDefinitionsStorage` التي تحتوي على تعريفات نوع قابلة لإعادة الاستخدام، مما يمنع تكرار أنواع GraphQL.
+
+### منشئ محلل مساحة العمل
+
+إنشاء وظائف المعالجات للاستعلام وتعديل مخطط GraphQL.
+
+كل مصنع في هذا الدليل مسؤول عن إنتاج نوع محلل مميز، مثل `FindManyResolverFactory`، المصمم للتطبيق المتكيف عبر جداول مختلفة.
+
+### مشغل استعلامات مساحة العمل
+
+يشغل الاستعلامات المولدة على قاعدة البيانات ويحلل النتيجة.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx
new file mode 100644
index 0000000000..05f06fef0d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx
@@ -0,0 +1,41 @@
+---
+title: Message Queue
+---
+
+تسهل القوائم العمليات غير المتزامنة. يمكن استخدامها لأداء مهام الخلفية مثل إرسال بريد ترحيبي عند التسجيل.
+سيكون لكل حالة استخدام فئة قائمة خاصة بها ممتدة من `MessageQueueServiceBase`.
+
+حاليًا، ندعم `bull-mq`[bull-mq](https://bullmq.io/) فقط كبرنامج تشغيل القائمة.
+
+## خطوات إنشاء واستخدام قائمة جديدة
+
+1. أضف اسم قائمة لقائمة جديدة تحت التعداد `MESSAGE_QUEUES`.
+2. Provide the factory implementation of the queue with the queue name as the dependency token.
+3. قم بإدراج القائمة التي أنشأتها في الوحدة/الخدمة المطلوبة مع اسم القائمة كرمز تبعية.
+4. Add worker class with token based injection just like producer.
+
+### نموذج للاستخدام
+
+```ts
+class Resolver {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {}
+
+ async onSomeAction() {
+ //منطق العمل
+ await this.queue.add(someData);
+ }
+}
+
+//عامل غير متزامن
+class CustomWorker {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {
+ this.initWorker();
+ }
+
+ async initWorker() {
+ await this.queue.work(async ({ id, data }) => {
+ //منطق العامل
+ });
+ }
+}
+```
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..8c4c7d84cb
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,101 @@
+---
+title: الأوامر الخلفية
+---
+
+## الأوامر المفيدة
+
+يجب تنفيذ هذه الأوامر من مجلد packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### إعداد المرة الأولى
+
+```
+npx nx database:reset twenty-server # إعداد قاعدة البيانات مع بذور التطوير
+```
+
+### بدء الخادم
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # pass --fix to fix lint errors
+```
+
+### تجربة
+
+```
+npx nx run twenty-server:test:unit # تشغيل اختبارات الوحدة
+npx nx run twenty-server:test:integration # تشغيل اختبارات التكامل
+```
+
+ملاحظة: يمكنك تشغيل `npx nx run twenty-server:test:integration:with-db-reset` في حالة احتياجك لإعادة تعيين قاعدة البيانات قبل تشغيل اختبارات التكامل.
+
+### إعادة تعيين قاعدة البيانات
+
+If you want to reset and seed the database, you can run the following command:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migrations
+
+#### للكائنات داخل مخططات Core/Metadata (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### لكائنات مساحة العمل
+
+لا توجد ملفات هجيرات، يتم إنشاء الهجيرات تلقائيًا لكل مساحة عمل،
+مخزنة في قاعدة البيانات، ويتم تطبيقها مع هذا الأمر
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ سيؤدي هذا إلى إسقاط قاعدة البيانات وإعادة تشغيل الهجرات والبذور.
+
+ تأكد من عمل نسخة احتياطية لأي بيانات تريد الاحتفاظ بها قبل تشغيل هذا الأمر.
+
+
+## "التقنية المستخدمة"
+
+Twenty primarily uses NestJS for the backend.
+
+Prisma كان أول ORM استخدمناه. ولكن للسماح للمستخدمين بإنشاء الحقول والعناصر المخصصة، كان من المنطقي استخدام مستوى أقل حيث نحتاج إلى تحكم دقيق. الآن يستخدم المشروع TypeORM.
+
+إليك شكل العناصر التقنية الآن.
+
+**Core**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**قاعدة البيانات**
+
+* [Postgres](https://www.postgresql.org/)
+
+**التكاملات مع جهات خارجية**
+
+* [Sentry](https://sentry.io/welcome/) لتتبع الأخطاء
+
+**الاختبار**
+
+* [Jest](https://jestjs.io/)
+
+**الأدوات**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**التطوير**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..6b6fdad1e9
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## الإبلاغ عن الأخطاء
+
+للإبلاغ عن خطأ، يرجى [إنشاء مشكلة على GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+يمكنك أيضًا طلب المساعدة عبر [Discord](https://discord.gg/cx5n4Jzs57).
+
+## Feature Requests
+
+إذا لم تكن متأكدًا مما إذا كانت مشكلة أو إذا كنت تشعر بأنها مجرد طلب ميزة، فيمكنك على الأرجح [فتح نقاش بدلاً من ذلك](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### قبل أن تبدأ
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..36b08657ef
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,325 @@
+---
+title: أفضل الممارسات
+---
+
+تحدد هذه الوثيقة أفضل الممارسات التي يجب اتباعها عند العمل في الواجهة الأمامية.
+
+## إدارة الحالة
+
+تقوم React و Recoil بإدارة الحالة في قاعدة الشيفرة.
+
+### استخدم `useRecoilState` لتخزين الحالة
+
+من الجيد إنشاء أكبر عدد ممكن من الذرات لتخزين الحالة الخاصة بك.
+
+
+ من الأفضل استخدام ذرات إضافية بدلاً من محاولة أن تكون مقتضبًا باستخدام تمرير الخصائص.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default value',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### لا تستخدم `useRef` لتخزين الحالة
+
+تجنب استخدام `useRef` لتخزين الحالة.
+
+إذا كنت ترغب في تخزين الحالة، يجب أن تستخدم `useState` أو `useRecoilState`.
+
+انظر [كيفية إدارة إعادة العرض](#managing-re-renders) إذا شعرت أنك بحاجة إلى `useRef` لمنع بعض إعادة العرض من الحدوث.
+
+## إدارة إعادة العرض
+
+يمكن أن تكون إعادة العرض صعبة الإدارة في React.
+
+إليك بعض القواعد التي يجب اتباعها لتجنب إعادة العرض غير الضرورية.
+
+تذكر أنه يمكنك **دائمًا** تجنب إعادة العرض من خلال فهم سببها.
+
+### العمل على المستوى الجذري
+
+تجنب إعادة العرض في الميزات الجديدة أصبح سهلاً الآن عن طريق إزالتها على المستوى الجذري.
+
+مكون الجانب `PageChangeEffect` يحتوي فقط على `useEffect` واحد يقوم بعقد جميع المنطق لتنفيذه عند تغيير الصفحة.
+
+بهذه الطريقة، تعرف أن هناك مكان واحد فقط يمكنه تحفيز إعادة العرض.
+
+### فكر جيدًا قبل إضافة `useEffect` في قاعدة التعليمات البرمجية الخاصة بك
+
+غالبًا ما تكون إعادة العرض ناجمة عن `useEffect` غير ضروري.
+
+يجب أن تفكر في ما إذا كنت بحاجة إلى `useEffect`، أو ما إذا كان بإمكانك نقل المنطق إلى وظيفة معالج الحدث.
+
+ستجد أنه من السهل عمومًا نقل المنطق إلى وظيفة `handleClick` أو `handleChange`.
+
+يمكنك أيضًا العثور عليها في المكتبات مثل Apollo: `onCompleted`، `onError`، إلخ.
+
+### استخدم مكونًا متماثلاً لاستخراج `useEffect` أو منطق استدعاء البيانات
+
+إذا شعرت أنك بحاجة إلى إضافة `useEffect` في مكون الجذر الخاص بك، يجب أن تفكر في استخراجه في مكون الجانب.
+
+يمكنك تطبيق نفس الشيء على منطق جلب البيانات، مع الخُطافات Apollo.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### استخدم حالات عائلة Recoil ومحددات عائلة Recoil
+
+حالات عائلة Recoil والمحددات تعتبر طريقة رائعة لتجنب إعادة العرض.
+
+إنها مفيدة عندما تحتاج إلى تخزين قائمة من العناصر.
+
+### يجب ألا تستخدم `React.memo(MyComponent)`
+
+تجنب استخدام `React.memo()` لأنه لا يحل سبب إعادة العرض، بل يكسر سلسلة إعادة العرض، مما قد يؤدي إلى سلوك غير متوقع ويجعل التعليمات البرمجية صعبة التعديل.
+
+### حدد استخدام `useCallback` أو `useMemo`
+
+غالبًا ما لا تكون ضرورية وستجعل التعليمات البرمجية أصعب في القراءة والصيانة لأداء غير ملحوظ.
+
+## Console.logs
+
+تصريحات `console.log` ذات قيمة أثناء التطوير، حيث تقدم رؤى في الوقت الفعلي عن قيمة المتغيرات وتدفق التعليمات البرمجية. ولكن، تركها في التعليمات البرمجية في الإنتاج قد يؤدي إلى عدة مشكلات:
+
+1. **الأداء**: تسجيل كثير قد يؤثر على أداء وقت التشغيل، خاصة في التطبيقات على الجانب العميل.
+
+2. **الأمان**: تسجيل البيانات الحساسة قد يكشف المعلومات الحرجة لأي شخص يقوم بتفتيش وحدة التحكم في المتصفح.
+
+3. **النظافة**: ملء وحدة التحكم بالسجلات قد يحجب التحذيرات أو الأخطاء الهامة التي يحتاج المطورون أو الأدوات إلى رؤيتها.
+
+4. **الاحترافية**: المستخدمون النهائيون أو العملاء الذين يفحصون وحدة التحكم ويجدون الكثير من تصريحات السجلات قد يشككون في جودة وتأنق التعليمات البرمجية.
+
+تأكد من إزالة جميع تصريحات `console.log` قبل دفع التعليمات البرمجية إلى الإنتاج.
+
+## التسمية
+
+### تسمية المتغيرات
+
+يجب أن تعبر أسماء المتغيرات بدقة عن الغرض أو وظيفة المتغير.
+
+#### المشكلة مع الأسماء العامة
+
+الأسماء العامة في البرمجة ليست مثالية لأنها تفتقر إلى التحديد، مما يؤدي إلى الغموض وتقليل قابلية قراءة التعليمات البرمجية. مثل هذه الأسماء تفشل في التعبير عن الغرض من المتغير أو الوظيفة، مما يجعل من الصعب على المطورين فهم نية التعليمات البرمجية دون تحقيق أعمق. يمكن أن يؤدي ذلك إلى زيادة وقت إزالة الأخطاء، وزيادة قابلية التعرض للأخطاء، وصعوبات في الصيانة والتعاون. في الوقت نفسه، تجعل التسمية الوصفية التعليمات البرمجية تفسيرية بذاتها وأسهل في التنقل، مما يعزز جودة التعليمات البرمجية وإنتاجية المطور.
+
+```tsx
+// ❌ Bad, uses a generic name that doesn't communicate its
+// purpose or content clearly
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Good, uses a descriptive name
+const [email, setEmail] = useState('');
+```
+
+#### بعض الكلمات يجب تجنبها في أسماء المتغيرات
+
+* dummy
+
+### معالجات الأحداث
+
+يجب أن تبدأ أسماء معالجات الأحداث بكلمة `handle`، بينما يعتبر `on` بادئة تستخدم لتسمية الأحداث في خصائص المكونات.
+
+```tsx
+// ❌ Bad
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Good
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## الخصائص الاختيارية
+
+تجنب تمرير القيمة الافتراضية لخاصية اختيارية.
+
+**مثال**
+
+خذ مكون`EmailField` المحدد أدناه:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**الاستخدام**
+
+```tsx
+// ❌ Bad, passing in the same value as the default value adds no value
+const Form = () => ;
+```
+
+```tsx
+// ✅ Good, assumes the default value
+const Form = () => ;
+```
+
+## المكون كخصائص
+
+حاول قدر الإمكان تمرير المكونات غير المنشأة كمكونات، بحيث يمكن للأطفال تحديد ما يحتاجون لتمريره.
+
+المثال الأكثر شيوعا لذلك هو مكونات الأيقونات:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+لفهم React أن المكون هو مكون، يجب عليك استخدام PascalCase، للتمكن من معاملته لاحقًا كـ ``
+
+## تمرير الخصائص: اجعلها محدودة
+
+يشير تمرير الخصائص في سياق React إلى ممارسة تمرير متغيرات الحالة وأدوات تحكمها عبر العديد من طبقات المكونات، حتى لو لم تستخدمها المكونات الوسيطة. رغم أنها تكون ضرورية في بعض الأحيان، إلا أن تمرير الخصائص الزائد يمكن أن يؤدي إلى:
+
+1. **انخفاض القابلية للقراءة**: يمكن أن يصبح تتبع مصدر الخاصية أو مكان استخدامها معقدا في هيكل مكون معقد.
+
+2. **تحديات الصيانة**: قد تتطلب التغييرات في هيكل خاصية أحد المكونات تعديلات في عدة مكونات، حتى لو لم تستخدم الخاصية مباشرة.
+
+3. **تقليل إعادة استخدام المكونات**: يصبح المكون الذي يتلقى الكثير من الخصائص لتمريرها فقط أقل شمولية وأصعب في إعادة استخدامه في سياقات مختلفة.
+
+إذا شعرت أنك تستخدم تمرير الخصائص بشكل مفرط، راجع [أفضل ممارسات إدارة الحالة](#state-management).
+
+## استيرادات
+
+عند الاستيراد، اختر الأسماء المستعارة المتعينة بدلا من تحديد المسارات كاملة أو نسبية.
+
+**الأسماء المستعارة**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**الاستخدام**
+
+```tsx
+// ❌ Bad, specifies the entire relative path
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Good, utilises the designated aliases
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## التحقق من المخططات
+
+[Zod](https://github.com/colinhacks/zod) هو مدقق المخططات للكائنات غير المTyped:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email must be a valid email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## التغييرات الجذرية
+
+قم دائمًا بإجراء اختبارات يدوية شاملة قبل المتابعة لضمان أن التعديلات لم تسبب تعطيلًا في أماكن أخرى، نظرًا لأن الاختبارات لم تدمج حتى الآن بشكل كبير.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx
new file mode 100644
index 0000000000..3a44fe9491
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx
@@ -0,0 +1,178 @@
+---
+title: مفاتيح الاختصار
+---
+
+## مقدمة
+
+عندما تحتاج إلى الاستماع إلى مفتاح اختصار، فإنه عادةً ما تستخدم مستمع الحدث `onKeyDown`.
+
+في `twenty-front`، قد تواجه تعارضات بين نفس مفاتيح الاختصار المستخدمة في مكونات مختلفة، مركبة في الوقت نفسه.
+
+على سبيل المثال، إذا كان لديك صفحة تستمع لمفتاح Enter ومودال يستمع لمفتاح Enter، ولكن به مكون Select يستمع لمفتاح Enter، فقد تواجه تعارضًا عند تركيب الجميع في الوقت نفسه.
+
+## الخطاف `useScopedHotkeys`
+
+لمعالجة هذه المشكلة، لدينا خطاف مخصص يمكن من الاستماع لمفاتيح الاختصار دون أي تعارض.
+
+You place it in a component, and it will listen to the hotkeys only when the component is mounted AND when the specified **hotkey scope** is active.
+
+## How to listen for hotkeys in practice?
+
+هناك خطوتان متضمنتان في إعداد الاستماع لمفاتيح الاختصار:
+
+1. تعيين [نطاق المفتاح](#what-is-a-hotkey-scope-) الذي سيستمع لمفاتيح الاختصار
+2. استخدام الخطاف `useScopedHotkeys` للاستماع لمفاتيح الاختصار
+
+إعداد نطاقات مفاتيح الاختصار ضروري حتى في الصفحات البسيطة، لأن عناصر أخرى في واجهة المستخدم مثل القائمة اليسرى أو قائمة الأوامر قد تستمع أيضًا لمفاتيح الاختصار.
+
+## حالات الاستخدام لمفاتيح الاختصار
+
+بشكل عام، سيكون لديك حالتا استخدام تتطلبان مفاتيح الاختصار:
+
+1. في صفحة أو مكون مركب في صفحة
+2. في مكون من نوع مودال يتخذ التركيز بسبب إجراء من المستخدم
+
+يمكن حدوث الحالة الثانية بشكل متكرر: على سبيل المثال، في قائمة منسدلة في مودال.
+
+### الاستماع لمفاتيح الاختصار في صفحة
+
+مثال:
+
+```tsx
+const PageListeningEnter = () => {
+ const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+ } = usePreviousHotkeyScope();
+
+ // 1. تعيين نطاق المفتاح في استخدام التأثير
+ useEffect(() => {
+ setHotkeyScopeAndMemorizePreviousScope(
+ ExampleHotkeyScopes.ExampleEnterPage,
+ );
+
+ // العودة إلى نطاق المفتاح السابق عند إلغاء تركيب المكون
+ return () => {
+ goBackToPreviousHotkeyScope();
+ };
+ }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]);
+
+ // 2. استخدام خطاف useScopedHotkeys
+ useScopedHotkeys(
+ Key.Enter,
+ () => {
+ // بعض المنطق المنفذ في هذه الصفحة عند ضغط المستخدم على Enter
+ // ...
+ },
+ ExampleHotkeyScopes.ExampleEnterPage,
+ );
+
+ return صفحتي التي تستمع لمفتاح Enter
;
+};
+```
+
+### الاستماع لمفاتيح الاختصار في مكون من نوع مودال
+
+For this example we'll use a modal component that listens for the Escape key to tell its parent to close it.
+
+Here the user interaction is changing the scope.
+
+```tsx
+const ExamplePageWithModal = () => {
+ const [showModal, setShowModal] = useState(false);
+
+ const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+ } = usePreviousHotkeyScope();
+
+ const handleOpenModalClick = () => {
+ // 1. تعيين نطاق المفتاح عند فتح المستخدم المودال
+ setShowModal(true);
+ setHotkeyScopeAndMemorizePreviousScope(
+ ExampleHotkeyScopes.ExampleModal,
+ );
+ };
+
+ const handleModalClose = () => {
+ // 1. العودة إلى نطاق المفتاح السابق عند إغلاق المودال
+ setShowModal(false);
+ goBackToPreviousHotkeyScope();
+ };
+
+ return
+
صفحتي التي تحتوي على مودال
+ فتح المودال
+ {showModal && }
+ ;
+};
+```
+
+ثم في مكون المودال:
+
+```tsx
+const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => {
+ // 2. استخدام خطاف useScopedHotkeys للاستماع لمفتاح Escape.
+ // لاحظ أن مفتاح Escape هو مفتاح اختصار شائع يمكن استخدامه من قبل مكونات أخرى كثيرة.
+ // لذلك من المهم استخدام نطاق مفتاح لتجنب التعارضات.
+ useScopedHotkeys(
+ Key.Escape,
+ () => {
+ onClose()
+ },
+ ExampleHotkeyScopes.ExampleModal,
+ );
+
+ return مكون المودال الخاص بي
;
+};
+```
+
+من المهم استخدام هذا النمط عندما لست متأكدًا من أن استخدام useEffect مع التركيب/إلغاء التركيب يكفي لتجنب التعارضات.
+
+تلك التعارضات يمكن أن تكون صعبة التصحيح، وربما تحدث بشكل متكرر مع useEffects.
+
+## ما هو نطاق المفتاح؟
+
+نطاق المفتاح هو سلسلة تمثل السياق الذي تكون فيه مفاتيح الاختصار نشطة. عادة ما تكون مشفرة كنوع مفصل.
+
+عندما تقوم بتغيير نطاق المفتاح، سيتم تمكين مفاتيح الاختصار المستمعة لهذا النطاق وتعطيل المفاتيح المستمعة لنطاقات أخرى.
+
+يمكنك تعيين نطاق واحد فقط في كل مرة.
+
+على سبيل المثال، يتم تعريف نطاقات مفاتيح الاختصار لكل صفحة في نوع "PageHotkeyScope" المفصل:
+
+```tsx
+export enum PageHotkeyScope {
+ Settings = 'settings',
+ CreateWorkspace = 'create-workspace',
+ SignInUp = 'sign-in-up',
+ CreateProfile = 'create-profile',
+ PlanRequired = 'plan-required',
+ ShowPage = 'show-page',
+ PersonShowPage = 'person-show-page',
+ CompanyShowPage = 'company-show-page',
+ CompaniesPage = 'companies-page',
+ PeoplePage = 'people-page',
+ OpportunitiesPage = 'opportunities-page',
+ ProfilePage = 'profile-page',
+ WorkspaceMemberPage = 'workspace-member-page',
+ TaskPage = 'task-page',
+}
+```
+
+داخليًا، يتم تخزين النطاق المحدد حاليًا في حالة Recoil مشتركة عبر التطبيق:
+
+```tsx
+export const currentHotkeyScopeState = createState({
+ key: 'currentHotkeyScopeState',
+ defaultValue: INITIAL_HOTKEYS_SCOPE,
+});
+```
+
+لكن لا يجب التعامل مع هذه الحالة Recoil يدويًا! سنرى كيف يمكن استخدامها في القسم التالي.
+
+## كيف يعمل داخليًا؟
+
+قمنا بإنشاء غلاف رقيق فوق [react-hotkeys-hook](https://react-hotkeys-hook.vercel.app/docs/intro) والذي يجعله أكثر كفاءة ويتجنب عمليات إعادة التقديم غير الضرورية.
+
+ونقوم أيضًا بإنشاء حالة Recoil للتعامل مع حالة نطاق المفتاح وجعلها متاحة في جميع أنحاء التطبيق.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/storybook.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/storybook.mdx
new file mode 100644
index 0000000000..5c7f5fa52a
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/storybook.mdx
@@ -0,0 +1,8 @@
+---
+title: Storybook
+description: Browse Twenty's UI component library
+---
+
+View our complete component library and documentation in Storybook.
+
+[Open Storybook →](https://storybook.twenty.com)
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..99b54139ad
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: دليل الأسلوب
+---
+
+تشمل هذه الوثيقة القواعد التي يجب اتباعها عند كتابة التعليمات البرمجية.
+
+The goal here is to have a consistent codebase, which is easy to read and easy to maintain.
+
+لهذا، من الأفضل أن تكون تفصيلًا أكثر قليلاً بدلاً من أن تكون موجزًا للغاية.
+
+دائمًا ضع في اعتبارك أن الناس يقرؤون التعليمات البرمجية أكثر مما يكتبونها، وخاصة في المشاريع مفتوحة المصدر، حيث يمكن لأي شخص المساهمة.
+
+هناك العديد من القواعد التي لم يتم تعريفها هنا، ولكن يتم التحقق منها تلقائيًا بواسطة أدوات الفحص.
+
+## React
+
+### استخدام المكونات الوظيفية
+
+استخدم دائمًا مكونات TSX الوظيفية.
+
+لا تستخدم `import` الافتراضي مع `const`، لأنه أصعب من حيث القراءة والدمج باستخدام إكمال التعليمات البرمجية.
+
+```tsx
+// ❌ سيئ، أصعب في القراءة، أصعب في الدمج باستخدام إكمال التعليمات البرمجية
+const MyComponent = () => {
+ return Hello World
;
+};
+
+export default MyComponent;
+
+// ✅ جيد، سهل القراءة، سهل الدمج باستخدام إكمال التعليمات البرمجية
+export function MyComponent() {
+ return Hello World
;
+};
+```
+
+### الإزاحة
+
+قم بإنشاء نوع الخصائص واطلق عليه `(ComponentName)Props` إذا لم يكن هناك حاجة لتصديره.
+
+استخدام تفكيك الخصائص.
+
+```tsx
+// ❌ سيئ، لا يوجد نوع
+export const MyComponent = (props) => Hello {props.name}
;
+
+// ✅ جيد، النوع
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Hello {name}
;
+```
+
+#### امتنع عن استخدام `React.FC` أو `React.FunctionComponent` لتحديد أنواع الخصائص
+
+```tsx
+/* ❌ - سيئ، يحدد أنماط المكون باستخدام `FC`
+ * - باستخدام `React.FC`، يقبل المكون ضمنيًا خاصية `children`
+ * حتى لو لم تكن محددة في نوع الخاصية. قد لا يكون هذا دائمًا
+ * مرغوبًا فيه، خاصةً إذا لم يكن المكون ينوي عرض
+ * الأطفال.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### No Single Variable Prop Spreading in JSX Elements
+
+تجنب استخدام انتشار متغير فردي للخصائص في عناصر JSX، مثل `{...props}`. غالبًا ما تؤدي هذه الممارسة إلى شكل تعليمي أقل قابلية للقراءة وأصعب في الصيانة لأنه من غير الواضح أي الخصائص يتلقاها المكون.
+
+```tsx
+/* ❌ - سيء، ينثر متغير فردي للخصائص في المكون الأساسي
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+المبرر:
+
+* نظرة سريعة تسهل معرفة الخصائص التي تمررها التعليمات البرمجية، مما يسهل من الفهم والصيانة.
+* يساعد على منع نشوء تعقيدات كبيرة بين المكونات من خلال خصائصها.
+* أدوات الفحص تجعل من السهل تحديد الخصائص التي بها أخطاء إملائية أو غير مستخدمة عندما تسرد الخصائص بشكل صريح.
+
+## JavaScript
+
+### Use nullish-coalescing operator `??`
+
+```tsx
+// ❌ سيء، قد يعيد 'default' حتى إذا كانت القيمة 0 أو ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ جيد، سيعيد 'default' فقط إذا كانت القيمة null أو غير معرّفة
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Use optional chaining `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### استخدام `type` بدلاً من `interface`
+
+استخدم دائمًا `type` بدلاً من `interface`، لأنهما تقريبًا دائمًا متداخلين، و `type` أكثر مرونة.
+
+```tsx
+// ❌ سيء
+interface MyInterface {
+ name: string;
+}
+
+// ✅ جيد
+type MyType = {
+ name: string;
+};
+```
+
+### Use string literals instead of enums
+
+[الحروف المشفوعة](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) هي الطريقة المفضلة للتعامل مع القيم الشبيهة بالأعداد المخصصة في TypeScript. من السهل توسيعها باستخدام Pick و Omit، وتقدم تجربة مطور أفضل، خاصة مع إكمال التعليمات البرمجية.
+
+يمكنك معرفة السبب في أن TypeScript توصي بتجنب الأعداد [هنا](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ سيء، يستخدم عدد مخصص
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ جيد، يستخدم حرفا مشفوعا
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL والمكتبات الداخلية
+
+يجب عليك استخدام الأعداد التي يقوم بإنشائها GraphQL codegen.
+
+من الأفضل أيضًا استخدام عدد مخصص عند استخدام مكتبة داخلية، بحيث لا تضطر المكتبة الداخلية إلى تعريض نوع حرف مشفوع غير متعلق بـ API الداخلي.
+
+مثال:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Styling
+
+### استخدام مكونات منسقة
+
+قم بتنسيق المكونات باستخدام [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ سيء
+Hello World
+```
+
+```tsx
+// ✅ جيد
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+قم بإضافة بادئة للمكونات المنسقة بـ "Styled" لتمييزها عن المكونات "الحقيقية".
+
+```tsx
+// ❌ سيء
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ جيد
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Theming
+
+استخدام السمة لتنسيق معظم المكونات هو النهج المفضل.
+
+#### وحدات القياس
+
+تجنب استخدام قيم `px` أو `rem` مباشرة داخل المكونات المنسقة. بشكل عام، عادة ما تكون القيم المحددة مسبقًا موجودة بالفعل في السمة، لذا يفضل استخدام السمة لتحقيق هذا الغرض.
+
+#### ألوان
+
+امتنع عن تقديم ألوان جديدة، بدلاً من ذلك، استخدم اللوحة الموجودة في السمة. إذا كانت هناك حالة لا تتطابق فيها اللوحة، يرجى ترك تعليق لكي تتمكن الفريق من تصحيحها.
+
+```tsx
+// ❌ سيء، يحدد القيم المشفوعة للأسلوب دون استخدام السمة
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ جيد، يستعمل السمة
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## تطبيق قاعدة "عدم استيراد الأنواع"
+
+تجنب استيراد الأنواع. للحد من هذه الممارسة، تتحقق قاعدة ESLint وتبلغ عن أي استيرادات من هذا النوع. يساعد هذا على الحفاظ على الاتساق وقابلية القراءة في كود TypeScript.
+
+```tsx
+// ❌ سيء
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ سيء
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ جيد
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### لماذا لا نوع استيرادات
+
+* **الاتساق**: من خلال تجنب استيراد الأنواع واستخدام أسلوب استيراد واحد لكل من الأنواع والقيم، يبقى الكود موحدًا في أسلوب استيراد الوحدة.
+
+* **القراءة**: استيرادات بلا نوع تحسن من قابلية القراءة للرمز من خلال توضيح عندما تقوم باستيراد القيم أو الأنواع. يقلل هذا من الغموض ويجعل من الأسهل فهم الهدف من الرموز المستوردة.
+
+* **الصيانة**: يعزز الصيانة داخل قاعدة الكود لأن المطوّرين يمكنهم تحديد مواقع استيرادات الأنواع فقط عند استعراض أو تعديل الكود.
+
+### قاعدة ESLint
+
+تفرض قاعدة ESLint، `@typescript-eslint/consistent-type-imports`, معيار عدم استيراد الأنواع. ستولد هذه القاعدة تحذيرات أو أخطاء عن أي انتهاكات لاستيراد الأنواع.
+
+يرجى ملاحظة أن هذه القاعدة تتناول بشكل خاص حالات الحافة النادرة حيث تحدث استيرادات الأنواع دون قصد. يمنع TypeScript نفسه هذه الممارسة، كما هو موضح في [ملاحظات إصدار TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). في معظم الحالات، لا ينبغي لك أن تستخدم استيرادات الأنواع وحدها.
+
+لضمان امتثال الكود الخاص بك لهذه القاعدة، تأكد من تشغيل ESLint كجزء من سير العمل الخاص بالتطوير لديك.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..9590c3a5f7
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,58 @@
+---
+title: العمل مع فيجما
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+فيجما هي أداة تصميم واجهات تعاونية تساعد في سد فجوة التواصل بين المصممين والمطورين.
+يشرح هذا الدليل كيف يمكنك التعاون مع فيجما.
+
+## الوصول
+
+1. **الوصول إلى الرابط المشترك:** يمكنك الوصول إلى ملف فيجما الخاص بالمشروع [هنا](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **تسجيل الدخول:** إذا لم تكن قد سجلت دخولك بالفعل، سيطلب منك فيجما القيام بذلك.
+ تتوفر المميزات الرئيسية فقط للمستخدمين الذين قاموا بتسجيل الدخول، مثل وضع المطور والقدرة على اختيار إطار مخصص.
+
+
+ لن تتمكن من التعاون بفعالية بدون حساب.
+
+
+## هيكل فيجما
+
+On the left sidebar, you can access the different pages of Twenty's Figma. هكذا هم مُنظمون:
+
+* **صفحة المكونات:** هذه هي الصفحة الأولى. يستخدمها المصمم لإنشاء وتنظيم العناصر التصميمية القابلة لإعادة الاستخدام في ملف التصميم. على سبيل المثال، الأزرار، الأيقونات، الرموز أو أي مكونات أخرى قابلة لإعادة الاستخدام. تعمل على الحفاظ على التناسق عبر التصميم.
+* **الصفحة الرئيسية:** الصفحة الثانية هي الصفحة الرئيسية التي تظهر واجهة المستخدم الكاملة للمشروع. يمكنك الضغط على ***تشغيل*** لاستخدام النموذج الأولي الكامل للتطبيق.
+* **صفحات الميزات:** الصفحات الأخرى تكون مخصصة عادة للميزات قيد التقدم. تحتوي على تصميم الميزات أو الوحدات المحددة للتطبيق أو الموقع الإلكتروني. عادة ما تكون لا تزال قيد التقدم.
+
+## نصائح مفيدة
+
+مع الوصول لعرض فقط، لا يمكنك تحرير التصميم، ولكن يمكنك الوصول إلى جميع الميزات التي ستكون مفيدة لتحويل التصميمات إلى كود.
+
+### استخدم وضع المطور
+
+يعزز وضع المطور في فيجما إنتاجية المطورين من خلال توفير التنقل السهل في التصميم، إدارة فعالة للموارد، أدوات اتصال فعالة، تكاملات طقم الأدوات، مقتطفات كود سريعة، ومعلومات رئيسية عن الطبقات، مما يسد الفجوة بين التصميم والتطوير. يمكنك معرفة المزيد عن وضع المطور [هنا](https://www.figma.com/dev-mode/).
+
+قم بالتبديل إلى وضع "المطور" في الجزء الأيمن من شريط الأدوات لتشاهد مواصفات التصميم، نسخ CSS، والوصول إلى الموارد.
+
+### استخدم النموذج الأولي
+
+انقر على أي عنصر على اللوحة واضغط على زر “تشغيل” في نهاية الحافة العلوية لواجهة المستخدم للوصول إلى عرض النموذج الأولي. يسمح لك وضع النموذج الأولي بالتفاعل مع التصميم كما لو كان المنتج النهائي. يوضح التدفق بين الشاشات وكيف تتصرف عناصر الواجهة مثل الأزرار، الروابط، أو القوائم عند التفاعل معها.
+
+1. **فهم الانتقالات والرسوم المتحركة:** في وضع النموذج الأولي، يمكنك مشاهدة أي انتقالات أو رسوم متحركة أضافها المصمم بين الشاشات أو عناصر واجهة المستخدم، مما يوفر تعليمات بصرية واضحة للمطورين حول السلوك والنمط المقصود.
+2. **توضيح التنفيذ:** يمكن أن يساعد النموذج الأولي أيضًا في تقليل الغموض. يمكن للمطورين التفاعل معه لاكتساب فهم أفضل لوظيفة أو مظهر عناصر معينة.
+
+للحصول على تفاصيل شاملة وإرشادات لتعلم منصة فيجما، يمكنك زيارة [وثائق فيجما الرسمية](https://help.figma.com/hc/en-us).
+
+### قياس المسافات
+
+حدد عنصرًا، اضغط مع الاستمرار على مفتاح `Option` (لماك) أو مفتاح `Alt` (لويندوز)، ثم مرر فوق عنصر آخر لرؤية المسافة بينهما.
+
+### إضافة فيجما لـ VSCode (موصى به)
+
+[فيجما لـ VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) يتيح لك التنقل ومعاينة ملفات التصميم، التعاون مع المصممين، تتبع التغييرات، وتسريع التنفيذ - دون مغادرة محرر النصوص الخاص بك.
+إنها جزء من الإضافات الموصى بها لدينا.
+
+## التعاون
+
+1. **استخدام التعليقات:** يمكنك استخدام ميزة التعليق بالنقر على أيقونة الفقاعة في الجزء الأيسر من شريط الأدوات.
+2. **دردشة المؤشر:** ميزة لطيفة في فيجما هي دردشة المؤشر. فقط اضغط على `;` على ماك و`/` على ويندوز لإرسال رسالة إذا رأيت شخصًا آخر يستخدم فيجما في نفس الوقت الذي تستخدمه فيه.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/ar/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..0fcc541cc4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: الإعداد المحلي
+description: The guide for contributors (or curious developers) who want to run Twenty locally.
+---
+
+## Prerequisites
+
+
+
+ قبل أن تتمكن من تثبيت واستخدام Twenty، تأكد من تثبيت الأمور التالية على جهاز الكمبيوتر الخاص بك:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ لن يعمل `npm` ، يجب عليك استخدام `yarn` بدلًا من ذلك. Yarn is now shipped with Node.js, so you don't need to install it separately.
+ عليك فقط تشغيل `corepack enable` لتفعيل Yarn إذا لم تقم بذلك بعد.
+
+
+
+
+ 1. ثبّت WSL
+ افتح PowerShell كمسؤول ثم نفّذ:
+
+ ```powershell
+ wsl --install
+ ```
+
+ يجب أن ترى الآن مطالبة لإعادة تشغيل جهاز الكمبيوتر الخاص بك. إذا لم يكن كذلك، فأعد تشغيله يدويًا.
+
+ Upon restart, a powershell window will open and install Ubuntu. قد يستغرق هذا وقتًا طويلاً.
+ سترى مطالبة لإنشاء اسم المستخدم وكلمة المرور لتثبيت Ubuntu الخاص بك.
+
+ 2. تثبيت وإعداد git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Your Name"
+
+ git config --global user.email "youremail@domain.com"
+ ```
+
+ 3. تثبيت nvm و node.js و yarn
+
+
+ استخدم `nvm` لتثبيت نسخة `node` الصحيحة. الملف `.nvmrc` يضمن استخدام جميع المشاركين لنفس النسخة.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ أغلق وأعد فتح برنامجك الطرفي لاستخدام nvm. ثم قم بتشغيل الأوامر التالية.
+
+ ```bash
+
+ nvm install # يثبت إصدار node الموصى به
+
+ nvm use # استخدم إصدار node الموصى به
+
+ corepack enable
+ ```
+
+
+
+---
+
+## الخطوة 1: استنساخ Git
+
+في الطرفية الخاصة بك، قم بتشغيل الأمر التالي.
+
+
+
+ إذا لم تكن قد أعددت مفاتيح SSH بالفعل، يمكنك معرفة كيفية القيام بذلك [هنا](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## الخطوة 2: انتقل إلى جذر المشروع
+
+```bash
+cd twenty
+```
+
+يجب تشغيل جميع الأوامر في الخطوات التالية من جذر المشروع.
+
+## الخطوة 3: إعداد قاعدة بيانات PostgreSQL
+
+
+
+ **الخيار 1 (المفضل):** لتوفير قاعدة بياناتك محليًا:
+ استخدم الرابط التالي لتثبيت Postgresql على جهاز Linux الخاص بك: [تثبيت Postgresql](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ ملاحظة: قد تحتاج إلى إضافة `sudo -u postgres` إلى الأمر قبل `psql` لتجنب أخطاء الإذن.
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **الخيار 1 (المفضل):** لتوفير قاعدة بياناتك محليًا مع `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ يمكنك التحقق مما إذا كان خادم PostgreSQL يعمل بتنفيذ:
+
+ ```bash
+ brew services list
+ ```
+
+ المثبت قد لا ينشئ المستخدم `postgres` افتراضيًا عند التثبيت
+ عبر Homebrew على MacOS. بدلاً من ذلك، فإنه ينشئ دور PostgreSQL يطابق
+ اسم المستخدم الخاص بك في MacOS (مثل "john").
+ للتحقق وإنشاء المستخدم `postgres` إذا لزم الأمر، اتبع هذه الخطوات:
+
+ ```bash
+ # قم بالاتصال بPostgreSQL
+ psql postgres
+ أو
+ psql -U $(whoami) -d postgres
+ ```
+
+ بمجرد أن تكون عند مطالبة psql (postgres=#)، قم بتشغيل:
+
+ ```bash
+ # قائمة الأدوار الموجودة في PostgreSQL
+ \du
+ ```
+
+ سترى مخرجات مشابهة ل:
+
+ ```bash
+ اسم الأدوار | الخصائص | عضو في
+ -----------+-------------+-----------
+ john | مشرف نظام | {}
+ ```
+
+ إذا لم ترَ دور `postgres` مدرجًا، انتقل إلى الخطوة التالية.
+ قم بإنشاء دور `postgres` يدويًا:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ يقوم هذا بإنشاء دور مشرف نظام باسم `postgres` مع إمكانية تسجيل الدخول.
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ يجب أن تُنفذ جميع الخطوات التالية في تيرمينال WSL (داخل جهازك الافتراضي)
+
+ **الخيار 1:** لتوفير قاعدة بيانات Postgresql الخاصة بك محليًا:
+ استخدم الرابط التالي لتثبيت Postgresql على جهاز Linux الافتراضي الخاص بك: [تثبيت Postgresql](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ ملاحظة: قد تحتاج إلى إضافة `sudo -u postgres` إلى الأمر قبل `psql` لتجنب أخطاء الإذن.
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+ تشغيل Docker على WSL يضيف طبقة إضافية من التعقيد.
+ استخدم هذا الخيار فقط إذا كنت مرتاحًا مع الخطوات الإضافية المتضمنة، بما في ذلك تشغيل [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+يمكنك الآن الوصول إلى قاعدة البيانات على [localhost:5432](localhost:5432)، مع المستخدم `postgres` وكلمة المرور `postgres`.
+
+## الخطوة 4: إعداد قاعدة بيانات Redis (للتخزين المؤقت)
+
+يتطلب Twenty مخزن بيانات Redis لتقديم أفضل أداء
+
+
+
+ **الخيار 1:** لتوفير Redis الخاص بك محليًا:
+ استخدم الرابط التالي لتثبيت Redis على جهاز Linux: [تثبيت Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **الخيار 1 (المفضل):** لتوفير Redis الخاص بك محليًا مع `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ ابدأ خادم redis الخاص بك:
+ `brew services start redis`
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **الخيار 1:** لتوفير Redis الخاص بك محليًا:
+ استخدم الرابط التالي لتثبيت Redis على جهاز Linux الافتراضي الخاص بك: [تثبيت Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **الخيار 2:** إذا كنت قد قمت بتثبيت docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+إذا كنت بحاجة إلى واجهة رسومية للعميل، نوصي بـ [redis insight](https://redis.io/insight/) (يتوفر إصدار مجاني)
+
+## الخطوة 5: إعداد متغيرات البيئة
+
+استخدم متغيرات البيئة أو ملفات `.env` لتكوين مشروعك. المزيد من المعلومات [هنا](/l/ar/developers/self-host/capabilities/setup)
+
+انسخ ملفات `.env.example` الموجودة في `/front` و`/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/ar/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## الخطوة 6: تثبيت التبعيات
+
+لبناء خادم Twenty وزرع بعض البيانات في قاعدة البيانات الخاصة بك، قم بتشغيل الأمر التالي:
+
+```bash
+yarn
+```
+
+لاحظ أن `npm` أو `pnpm` لن تعملا
+
+## الخطوة 7: تشغيل المشروع
+
+
+
+ اعتمادًا على توزيعة Linux الخاصة بك، قد يتم بدء خادم Redis تلقائيًا.
+ إذا لم يكن كذلك، تحقق من [دليل تثبيت Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) لتوزيعتك.
+
+
+
+ من المفترض أن يكون Redis قد تم تشغيله بالفعل. إذا لم يكن كذلك، قم بتشغيل:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ اعتمادًا على توزيعة Linux الخاصة بك، قد يتم بدء خادم Redis تلقائيًا.
+ إذا لم يكن كذلك، تحقق من [دليل تثبيت ريديس](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) لتوزيعتك.
+
+
+
+قم بضبط قاعدة بياناتك بالأمر التالي:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+ابدأ الخادم والخادم الثانوي وخدمات الواجهة الأمامية:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+بدلاً من ذلك، يمكنك بدء جميع الخدمات مرة واحدة:
+
+```bash
+npx nx start
+```
+
+## الخطوة الثامنة: استخدم Twenty
+
+**الواجهة الأمامية**
+
+ستكون واجهة Twenty الأمامية تعمل على [http://localhost:3001](http://localhost:3001).
+يمكنك تسجيل الدخول باستخدام حساب العرض التوضيحي الافتراضي: `tim@apple.dev` (كلمة المرور: `tim@apple.dev`)
+
+**الخلفية**
+
+* سيكون خادم Twenty متصلاً ويعمل على [http://localhost:3000](http://localhost:3000)
+* يمكن الوصول إلى واجهة برمجة التطبيقات GraphQL في [http://localhost:3000/graphql](http://localhost:3000/graphql)
+* يمكن الوصول إلى واجهة برمجة التطبيقات REST في [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## استكشاف الأخطاء وإصلاحها
+
+إذا واجهت أي مشكلة، فارجع إلى [استكشاف الأخطاء وإصلاحها](/l/ar/developers/self-host/capabilities/troubleshooting) للحصول على الحلول.
diff --git a/packages/twenty-docs/l/ar/developers/contribute/contribute.mdx b/packages/twenty-docs/l/ar/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..59f4eef600
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## نظرة عامة
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## البدء
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/ar/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/ar/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..5cad04e378
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: واجهات برمجة التطبيقات
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+تم تصميم Twenty ليكون صديقًا للمطورين، حيث يوفر واجهات برمجة قوية تتكيف مع نموذج البيانات المخصص. نحن نوفر أربعة أنواع متميزة من واجهات برمجة التطبيقات لتلبية احتياجات التكامل المختلفة.
+
+## النموذج الأول للمطورين
+
+Twenty generates APIs specifically for your data model:
+
+* **لا حاجة إلى معرفات طويلة**: استخدم أسماء الكائنات والحقول مباشرة في نقاط النهاية
+* **معالجة متساوية للأشياء القياسية والمخصصة**: تحصل أشياؤك المخصصة على نفس معاملة واجهة برمجة التطبيقات كما هو الحال مع الأشياء المضمنة
+* **نقاط نهاية مخصصة**: يحصل كل كائن وحقل على نقطة نهاية API الخاصة به
+* **وثائق مخصصة**: يتم إنشاؤها خصيصًا لنموذج بيانات مساحة عملك
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### واجهة برمجة التطبيقات الأساسية
+
+يتم الوصول إليها عبر `/rest/` أو `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* إدارة العلاقات بين السجلات
+
+### واجهة برمجة البيانات الوصفية
+
+يتم الوصول إليها عبر `/rest/metadata/` أو `/metadata/`
+
+Manage your **workspace and data model**:
+
+* إنشاء أو تعديل أو حذف الكائنات والحقول
+* تكوين إعدادات مساحة العمل
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| التنسيق | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## نقاط نهاية API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## المصادقة
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### قم بإنشاء مفتاح API
+
+1. Go to **Settings → APIs & Webhooks**
+2. Click **+ Create key**
+3. Configure:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. انقر على **حفظ**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. Click on the role to assign
+3. افتح علامة التبويب **التعيين**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/ar/user-guide/permissions-access/capabilities/permissions) for details.
+
+### إدارة مفاتيح API
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Go to **Settings → APIs & Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## عمليات المجموعة
+
+Both REST and GraphQL support batch operations:
+
+* **حجم المجموعة**: حتى 60 سجل لكل طلب
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | القيمة |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/ar/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/ar/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..1e84999506
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Prerequisites
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## البدء
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+من هنا يمكنك:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## المصادقة
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+الأمثلة:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## استكشاف الأخطاء وإصلاحها
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/ar/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/ar/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..b419511fcc
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: الويب هوكس
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## إنشاء ربط ويب
+
+1. Go to **Settings → APIs & Webhooks → Webhooks**
+2. انقر على **+ إنشاء ربط ويب**
+3. Enter your webhook URL (must be publicly accessible)
+4. انقر على **حفظ**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### إدارة Webhooks
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## الأحداث
+
+Twenty sends webhooks for these event types:
+
+| حدث | مثال |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| الحقل | الوصف |
+| --------------- | ------------------------------------------------ |
+| `حدث` | What happened (e.g., `person.created`) |
+| `بيانات` | The full record that was created/updated/deleted |
+| `الطابع الزمني` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Webhook Validation
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| رأس الصفحة | الوصف |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| طريقة | الاتجاه | Use Case |
+| ---------------------------- | ------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/ar/developers/extend/extend.mdx b/packages/twenty-docs/l/ar/developers/extend/extend.mdx
new file mode 100644
index 0000000000..ace52c4645
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## نظرة عامة
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## البدء
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/ar/developers/introduction.mdx b/packages/twenty-docs/l/ar/developers/introduction.mdx
new file mode 100644
index 0000000000..8c8102f59c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: البدء
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/ar/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/ar/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..cfb9368015
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: طرق أخرى
+---
+
+
+ هذا المستند يُحافظ عليه من قبل المجتمع. قد يحتوي على مشكلات.
+
+
+## Kubernetes عبر Terraform والمخططات
+
+Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+نشر Twenty على الخوادم باستخدام Coolify. (الصورة الرسمية على Coolify ستكون متاحة قريبًا)
+
+[توثيق Coolify](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+نشر Twenty على EasyPanel مع القالب الذي يُحافظ عليه المجتمع أدناه.
+
+[نشر على EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+نشر Twenty على الخوادم باستخدام Elest.io عبر الرابط التالي.
+
+[نشر على Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty على Railway
+
+نشر Twenty على Railway مع القالب الذي يُحافظ عليه المجتمع أدناه.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty على Sealos
+
+انشر Twenty على Sealos باستخدام القالب الذي تتم صيانته من قِبل المجتمع أدناه.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## أخرى
+
+Please feel free to Open a PR to add more Cloud Provider options.
diff --git a/packages/twenty-docs/l/ar/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/ar/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..e1a503d864
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,252 @@
+---
+title: 1-Click w/ Docker Compose
+---
+
+
+ الحاويات الخاصة بدوكر مخصصة للاستضافة الإنتاجية أو الاستضافة الذاتية، للتحقيق يرجى التحقق من [الإعداد المحلي](/l/ar/developers/contribute/capabilities/local-setup).
+
+
+## نظرة عامة
+
+يوفر هذا الدليل تعليمات خطوة بخطوة لتثبيت وتكوين تطبيق "Twenty" باستخدام Docker Compose. الهدف هو جعل العملية مباشرة ومنع المشاكل الشائعة التي يمكن أن تؤدي إلى تعطيل إعدادك.
+
+**مهم:** عدّل الإعدادات المذكورة صراحة في هذا الدليل فقط. قد يؤدي تعديل التكوينات الأخرى إلى مشاكل.
+
+راجع المستندات الخاصة بـ [إعداد متغيرات البيئة](/l/ar/developers/self-host/capabilities/setup) لإعداد متقدم. يجب إعلان جميع متغيرات البيئة في الملف docker-compose.yml على مستوى الخادم و/أو العامل بناءً على المتغير.
+
+## متطلبات النظام
+
+* رام: تأكد من أن بيئتك تحتوي على ما لا يقل عن 2GB من ذاكرة الرام. قد يؤدي عدم كفاية الذاكرة إلى تعطل العمليات.
+* دوكر ودوكر كومبوز: تأكد من تثبيت كلاهما وتحديثهما.
+
+## الخيار 1: نص سطر واحد
+
+قم بتثبيت أحدث إصدار مستقر من Twenty باستخدام أمر واحد:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+لتثبيت إصدار محدد أو فرع:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* استبدل x.y.z برقم الإصدار المطلوب.
+* استبدل branch-name بالاسم الفرعي المطلوب تثبيته.
+
+## الخيار 2: خطوات يدوية
+
+اتبع هذه الخطوات لإعداد يدوي.
+
+### الخطوة 1: إعداد ملف البيئة
+
+1. **إنشاء ملف .env**
+
+ Copy the example environment file to a new .env file in your working directory:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **إنشاء رموز سرية**
+
+ قم بتشغيل الأمر التالي لإنشاء سلسلة عشوائية فريدة:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **مهم:** احتفظ بهذه القيمة سرية ولا تشاركها.
+
+3. **تحديث الـ `.env`**
+
+ استبدل قيمة النائب في ملف .env بالقيمة الرمزية المولدة:
+
+ ```ini
+ APP_SECRET=first_random_string
+ ```
+
+4. **تعيين كلمة مرور PostgreSQL**
+
+ قم بتحديث قيمة `PG_DATABASE_PASSWORD` في ملف .env باستخدام كلمة مرور قوية بدون أحرف خاصة.
+
+ ```ini
+ PG_DATABASE_PASSWORD=my_strong_password
+ ```
+
+### الخطوة 2: الحصول على ملف Docker Compose
+
+قم بتنزيل ملف `docker-compose.yml` إلى دليل العمل الخاص بك:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### الخطوة 3: إطلاق التطبيق
+
+Start the Docker containers:
+
+```bash
+docker compose up -d
+```
+
+### الخطوة 4: الوصول إلى التطبيق
+
+If you host twentyCRM on your own computer, open your browser and navigate to [http://localhost:3000](http://localhost:3000).
+
+If you host it on a server, check that the server is running and that everything is ok with
+
+```bash
+curl http://localhost:3000
+```
+
+## التكوين
+
+### جعل Twenty متاحاً للوصول الخارجي
+
+افتراضياً، يعمل Twenty على `localhost` على المنفذ `3000`. للوصول إليه عبر نطاق خارجي أو عنوان IP، تحتاج إلى تكوين `SERVER_URL` في ملف `.env`.
+
+#### فهم `SERVER_URL`
+
+* **البروتوكول:** استخدم `http` أو `https` حسب الإعداد الخاص بك.
+ * استخدم `http` إذا لم تقم بإعداد SSL.
+ * استخدم `https` إذا كان لديك SSL تم تكوينه.
+* **النطاق/الآي بي:** هذا هو النطاق أو عنوان IP حيث يكون تطبيقك متاحاً.
+* **المنفذ:** اشمل رقم المنفذ إذا لم تكن تستخدم المنافذ الافتراضية (`80` لـ `http`, `443` لـ `https`).
+
+### متطلبات SSL
+
+SSL (HTTPS) مطلوب لعمل ميزات معينة في المتصفح بشكل صحيح. بينما قد تعمل هذه الميزات أثناء التطوير المحلي (بما أن المتصفحات تعامل localhost بشكل مختلف)، هناك حاجة إلى إعداد SSL صحيح عند استضافة Twenty على نطاق عادي.
+
+على سبيل المثال، قد يطلب API للحافظة السياق الآمن - بعض الميزات مثل أزرار النسخ في جميع أنحاء التطبيق قد لا تعمل بدون تمكين HTTPS.
+
+نوصي بشدة بإعداد Twenty خلف وكيل عكسي مع إنهاء SSL للأمان والوظيفية المثلى.
+
+#### تكوين `SERVER_URL`
+
+1. **حدد عنوان وصولك**
+ * **بدون وكيل عكسي (الوصول المباشر):**
+
+ إذا كنت تصل إلى التطبيق مباشرة بدون وكيل عكسي:
+
+ ```ini
+ SERVER_URL=http://your-domain-or-ip:3000
+ ```
+
+ * **مع وكيل عكسي (المنافذ القياسية):**
+
+ إذا كنت تستخدم وكيل عكسي مثل Nginx أو Traefik وكان لديك SSL تم تكوينه:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip
+ ```
+
+ * **مع وكيل عكسي (منافذ مخصصة):**
+
+ إذا كنت تستخدم منافذ غير قياسية:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip:custom-port
+ ```
+
+2. **تحديث ملف `.env`**
+
+ افتح ملف `.env` وقم بتحديث `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://your-domain-or-ip:your-port
+ ```
+
+ **أمثلة:**
+
+ * الوصول المباشر بدون SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * الوصول عبر النطاق باستخدام SSL:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **إعادة تشغيل التطبيق**
+
+ لتطبيق التغييرات، أعد تشغيل حاويات Docker:
+
+ ```bash
+ docker compose down\ndocker compose up -d
+ ```
+
+#### اعتبارات
+
+* **تكوين الوكيل العكسي:**
+
+ تأكد من أن الوكيل العكسي يوجه الطلبات إلى المنفذ الداخلي الصحيح (افتراضيًا `3000`). قم بتكوين انتهاء SSL وأي ترويسات مطلوبة.
+
+* **إعدادات الجدار الناري:**
+
+ Open necessary ports in your firewall to allow external access.
+
+* **التناسق:**
+
+ يجب أن يتطابق `SERVER_URL` مع طريقة وصول المستخدمين إلى تطبيقك في متصفحاتهم.
+
+#### Persistence
+
+* **أحجام البيانات:**
+
+ The Docker Compose configuration uses volumes to persist data for the database and server storage.
+
+* **البيئات غير المرتبطة بالحالة:**
+
+ إذا كنت تقوم بالنشر إلى بيئة غير مرتبطة بالحالة (مثل بعض خدمات السحابة)، فقم بتكوين التخزين الخارجي لحفظ البيانات.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## استكشاف الأخطاء وإصلاحها
+
+إذا واجهت أي مشكلة، فارجع إلى [استكشاف الأخطاء وإصلاحها](/l/ar/developers/self-host/capabilities/troubleshooting) للحصول على الحلول.
diff --git a/packages/twenty-docs/l/ar/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/ar/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..eb05b8f8e4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: إعداد
+---
+
+# إدارة الإعدادات
+
+
+ **هل هي المرة الأولى التي تقوم فيها بالتثبيت؟** اتبع [دليل تثبيت Docker Compose](/l/ar/developers/self-host/capabilities/docker-compose) لتشغيل Twenty، ثم عد هنا للإعداد.
+
+
+يوفر Twenty **وضعين للإعداد** ليلائم احتياجات النشر المختلفة:
+
+**الوصول إلى لوحة الإدارة:** يمكن للمستخدمين الذين لديهم صلاحيات المسؤول (`canAccessFullAdminPanel: true`) فقط الوصول إلى واجهة التكوين.
+
+## 1. إعداد لوحة الإدارة (افتراضي)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # افتراضي
+```
+
+**يحدث أغلب التكوين عبر واجهة المستخدم** بعد التثبيت:
+
+1. الوصول إلى نسخة Twenty الخاصة بك (عادة `http://localhost:3000`)
+2. اذهب إلى **الإعدادات / لوحة الإدارة / متغيرات التكوين**
+3. اضبط التكاملات، والبريد الإلكتروني، والتخزين، والمزيد
+4. تسري التغييرات على الفور (خلال 15 ثانية لعمليات النشر متعددة الحاويات)
+
+
+ **نشرات متعددة الحاويات:** عند استخدام إعدادات قاعدة البيانات (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`)، يقوم كل من حاويات الخادم والعامل بالقراءة من نفس قاعدة البيانات. التغييرات في لوحة الإدارة تؤثر عليهما تلقائيًا، مما يلغي الحاجة إلى تكرار متغيرات البيئة بين الحاويات (باستثناء متغيرات البنية التحتية).
+
+
+**ما يمكنك تكوينه عبر لوحة الإدارة:**
+
+* **المصادقة** - Google/Microsoft OAuth، إعدادات كلمة المرور
+* **البريد الإلكتروني** - إعدادات SMTP، القوالب، التحقق
+* **التخزين** - تكوين S3، مسارات التخزين المحلية
+* **التكاملات** - Gmail، تقويم Google، خدمات Microsoft
+* **حدود التشغيل ومعدل التكنولوجيا** - حدود التنفيذ، API الحد من السرعة
+* **والمزيد من الأمور...**
+
+
+
+
+ كل متغير موثق بوصف في لوحة الإدارة الخاصة بك في **الإعدادات → لوحة الإدارة → متغيرات التكوين**.
+ بعض إعدادات البنية التحتية مثل اتصالات قاعدة البيانات (`PG_DATABASE_URL`)، عناوين الخوادم (`SERVER_URL`)، وأسرار التطبيقات (`APP_SECRET`) يمكن ضبطها فقط عبر ملف `.env`.
+
+ [مرجع تقني كامل →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. إعداد بيئي فقط
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**جميع الإعدادات تتم إدارتها عبر ملفات `.env`:**
+
+1. قم بتعيين `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` في ملف `.env` الخاص بك
+2. أضف جميع متغيرات الإعداد إلى ملف `.env` الخاص بك
+3. أعد تشغيل الحاويات لتصبح التغييرات نافذة
+4. ستظهر لوحة الإدارة القيم الحالية لكنها لن تتمكن من تعديلها
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## تكامل Gmail و Google Calendar
+
+### إنشاء مشروع Google Cloud
+
+1. اذهب إلى [وحدة تحكم السحابة من Google](https://console.cloud.google.com/)
+2. أنشئ مشروعًا جديدًا أو اختر أحد المشاريع الموجودة
+3. قم بتفعيل هذه الـ APIs:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### تكوين OAuth
+
+1. اذهب إلى [بيانات اعتماد](https://console.cloud.google.com/apis/credentials)
+2. قم بإنشاء معرف عميل OAuth 2.0
+3. أضف هذه الـ URIs لإعادة التوجيه:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### الإعداد في Twenty
+
+1. اذهب إلى **الإعدادات → لوحة الإدارة → متغيرات التكوين**
+2. ابحث بسهولة **عن قسم Google Auth**
+3. حدد هذه المتغيرات:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **وضع بيئي فقط:** إذا كنت قد ضبطت `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`، فأضف هذه المتغيرات إلى ملف `.env` الخاص بك بدلاً من ذلك.
+
+
+**النطاقات المطلوبة** (يتم تكوينها تلقائيًا):
+[انظر الشيفرة المصدرية ذات الصلة](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### إذا كان تطبيقك في وضع الاختبار
+
+إذا كان تطبيقك في وضع الاختبار، ستحتاج إلى إضافة مستخدمين اختباريين إلى مشروعك.
+
+تحت [شاشة موافقة OAuth](https://console.cloud.google.com/apis/credentials/consent)، أضف مستخدمي الاختبار إلى قسم "مستخدمو الاختبار".
+
+## تكامل Microsoft 365
+
+
+ يجب على المستخدمين الحصول على [ترخيص Microsoft 365](https://admin.microsoft.com/Adminportal/Home) ليتمكنوا من استخدام تقويم API ورسائل. لن يتمكنوا من مزامنة حسابهم في Twenty دون واحد منها.
+
+
+### إنشاء مشروع في Microsoft Azure
+
+ستحتاج إلى إنشاء مشروع في [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) والحصول على بيانات الاعتماد.
+
+### تمكين APIs
+
+على وحدة تحكم Microsoft Azure، قم بتمكين الواجهات التالية في "أذونات":
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profile
+* Microsoft Graph: offline_access
+
+ملحوظة: "Mail.ReadWrite" و "Mail.Send" إلزاميان فقط إذا كنت ترغب في إرسال رسائل بريد إلكتروني باستخدام إجراءات سير العمل الخاصة بنا. يمكنك استخدام "Mail.Read" بدلاً من ذلك إذا كنت ترغب فقط في تلقي الرسائل الإلكترونية.
+
+### URIs لإعادة التوجيه المصرح بها
+
+ستحتاج إلى إضافة URIs التالية لإعادة التوجيه إلى مشروعك:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### الإعداد في Twenty
+
+1. اذهب إلى **الإعدادات → لوحة الإدارة → متغيرات التكوين**
+2. Find the **Microsoft Auth** section
+3. حدد هذه المتغيرات:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **وضع بيئي فقط:** إذا كنت قد ضبطت `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`، فأضف هذه المتغيرات إلى ملف `.env` الخاص بك بدلاً من ذلك.
+
+
+### Configure scopes
+
+[انظر الشيفرة المصدرية ذات الصلة](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'البريد الإلكتروني'
+* 'profile'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### إذا كان تطبيقك في وضع الاختبار
+
+إذا كان تطبيقك في وضع الاختبار، ستحتاج إلى إضافة مستخدمين اختباريين إلى مشروعك.
+
+أضف مستخدمي الاختبار إلى قسم "المستخدمون والمجموعات".
+
+## Background Jobs for Calendar & Messaging
+
+بعد إعداد تكامل Gmail، أو Google Calendar، أو Microsoft 365، تحتاج إلى بدء وظائف الخلفية التي تقوم بمزامنة البيانات.
+
+سجل الوظائف المتكررة التالية في حاوية العمل الخاصة بك:
+
+```bash
+# from your worker container
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## تكوين البريد الإلكتروني
+
+1. اذهب إلى **الإعدادات → لوحة الإدارة → متغيرات التكوين**
+2. Find the **Email** section
+3. قم بضبط إعدادات SMTP الخاصة بك:
+
+
+
+ ستحتاج إلى توفير [كلمة مرور التطبيق](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ تذكر أنه إذا كنت تشغل التحقق بعاملين، ستحتاج إلى توفير [كلمة مرور التطبيق](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** هو خادم بريد إلكتروني مزيف للتطوير والاختبار.
+
+ * قم بتشغيل صورة smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * الوصول إلى واجهة المستخدم smtp4dev هنا: [http://localhost:8090](http://localhost:8090)
+ * حدد المتغيرات التالية:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **وضع بيئي فقط:** إذا كنت قد ضبطت `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`، فأضف هذه المتغيرات إلى ملف `.env` الخاص بك بدلاً من ذلك.
+
diff --git a/packages/twenty-docs/l/ar/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/ar/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..3315e26038
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,225 @@
+---
+title: استكشاف الأخطاء وإصلاحها
+---
+
+## استكشاف الأخطاء وإصلاحها
+
+إذا واجهت أي مشكلة أثناء إعداد البيئة للتطوير، أو ترقية النسخة الخاصة بك، أو استضافتها ذاتيًا، إليك بعض الحلول للمشاكل الشائعة.
+
+### استضافة ذاتية
+
+#### التثبيت الأولي ينتج عنه فشل المصادقة على كلمة المرور للمستخدم "بوستجريس"
+
+🚨 **هام: هذا الحل فقط للتثبيتات الجديدة** 🚨
+إذا كان لديك تطبيق Twenty موجود يحتوي على بيانات إنتاج، **لا تتبع هذه الخطوات لأنها ستحذف قاعدة البيانات الخاصة بك بشكل دائم!**
+
+أثناء تثبيت Twenty لأول مرة، قد ترغب في تغيير كلمة المرور الافتراضية لقاعدة البيانات.
+كلمة المرور التي تعيّنها أثناء التثبيت الأول يتم تخزينها بشكل دائم في حجم قاعدة البيانات. إذا حاولت لاحقًا تغيير هذه الكلمة في التكوين بدون إزالة الحجم القديم، ستحصل على أخطاء المصادقة لأن قاعدة البيانات لا تزال تستخدم كلمة المرور الأصلية.
+
+⚠️ تحذير: اتباع الخطوات التالية سيقوم بحذف جميع بيانات قاعدة البيانات بشكل دائم! ⚠️
+قم بالإجراء فقط إذا كان هذا تثبيتًا جديدًا بدون بيانات مهمة.
+
+لتحديث `PG_DATABASE_PASSWORD` عليك القيام بما يلي:
+
+```sh
+# تحديث PG_DATABASE_PASSWORD في .env
+إيقاف تشغيل docker باستخدام –volumes
+تشغيل docker مرة أخرى باستخدام -d
+```
+
+#### تم العثور على فواصل الخط CR [نظام Windows]
+
+هذا بسبب حروف فواصل الخط لنظام Windows وتكوين git. حاول تشغيل:
+
+```
+git config --global core.autocrlf false
+```
+
+ثم قم بحذف المستودع واستنساخه مرة أخرى.
+
+#### Missing metadata schema
+
+أثناء تثبيت Twenty، تحتاج إلى توفير قاعدة بيانات بوستجريس الخاصة بك بالمخططات والإضافات والمستخدمين الصحيحة.
+إذا نجح تشغيل هذا التخصيص، يجب أن تحتوي قاعدة البيانات لديك على المخططات `default` و`metadata`.
+إذا لم تكن كذلك، فتأكد من عدم وجود أكثر من مثيل بوستجريس واحد يعمل على الكمبيوتر الخاص بك.
+
+#### لا يمكن العثور على الوحدة النمطية 'twenty-emails' أو إعلانات نوعها المقابلة.
+
+عليك بناء حزمة `twenty-emails` قبل تشغيل تهيئة قاعدة البيانات باستخدام `npx nx run twenty-emails:build`.
+
+#### Missing twenty-x package
+
+تأكد من تشغيل yarn في الدليل الجذر ثم تشغيل `npx nx server:dev twenty-server`. إذا لم يعمل ذلك، حاول بناء الحزمة المفقودة يدوياً.
+
+#### التحقق من العمليات عند الحفظ لا يعمل
+
+هذا يجب أن يعمل تلقائيًا مع تثبيت إضافة eslint. إذا لم يعمل ذلك، حاول إضافة هذا إلى إعدادات vscode (ضمن نطاق حاوية التطوير):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### أثناء تشغيل `npx nx start` أو `npx nx start twenty-front`، ظهرت خطأ نفاد الذاكرة
+
+في `packages/twenty-front/.env` قم بإزالة تعليق على `VITE_DISABLE_TYPESCRIPT_CHECKER=true` و`VITE_DISABLE_ESLINT_CHECKER=true` لتعطيل فحوصات الخلفية مما يقلل من كمية الذاكرة المطلوبة.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. على سبيل المثال، إذا كنت تعمل على الخادم، قم بتشغيل `npx nx worker twenty-server` فقط
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
+
+الحل البديل هو تنفيذ الأمر التالي في الطرفية أو إضافته في ملف تعريف .bashrc ليتم الإعداد تلقائيًا:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+علامة --max-old-space-size=8192 تحدد حداً أقصى للذاكرة الخاصة بـ Node.js بحد أقصى 8GB؛ الاستخدام يتزايد بطلبات التطبيق.
+المرجع: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. في Twenty، لاحظنا أن بعض إضافات VScode كانت تستهلك الكثير من الذاكرة لذا قمنا بتعطيلها مؤقتًا.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### أثناء تشغيل `npx nx start` تظهر سجلات غريبة [0] و [1]
+
+هذا متوقع حيث أن الأمر `npx nx start` يقوم بتشغيل المزيد من الأوامر خلف الكواليس
+
+#### لا يتم إرسال الرسائل الإلكترونية
+
+غالبًا، يكون السبب هو أن "العامل" لا يعمل في الخلفية. حاول التشغيل
+
+```
+npx nx worker twenty-server
+```
+
+#### لا يمكن ربط حساب Microsoft 365 الخاص بي
+
+غالبًا، يكون السبب في ذلك هو أن المسؤول الخاص بك لم يقم بتمكين رخصة Microsoft 365 لحسابك. تحقق من [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+إذا تلقيت رمز الخطأ `AADSTS50020`، فهذا يعني أنه ربما تستخدم حساب Microsoft شخصي. هذا غير مدعوم حتى الآن. المزيد من المعلومات [هنا](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### أثناء تشغيل `yarn` تظهر تحذيرات في الكونسول
+
+التحذيرات تخبر عن سحب تبعيات إضافية ليست مذكورة صراحة في `package.json`، طالما لم تظهر أي أخطاء تكسر العمل، ينبغي أن يعمل كل شيء كما هو متوقع.
+
+#### عند الوصول إلى صفحة تسجيل الدخول تظهر رسالة خطأ حول مستخدم غير مصرح له بمحاولة الوصول إلى مساحة العمل في السجلات
+
+هذا متوقع لأن المستخدم غير مصرح له عندما يسجل الخروج لأن هويته لم يتم التحقق منها.
+
+#### كيف يمكنك التأكد من عمل العامل الخاص بك؟
+
+* اذهب إلى [webhook-test.com](https://webhook-test.com/) ونسخ **عنوان URL الخاص بك**.
+
+
+
+
+
+* افتح تطبيق Twenty الخاص بك، انتقل إلى `/settings`، وفعل التبديل المتقدم في الجزء السفلي الأيسر من الشاشة.
+* إنشاء ويب هوك جديد.
+* Paste **Your Unique Webhook URL** in the **Endpoint Url** field in Twenty. Set the **Filters** to `Companies` and `Created`.
+
+
+
+
+
+* انتقل إلى `/objects/companies` وأنشئ سجلاً جديدًا للشركة.
+* ارجع إلى [webhook-test.com](https://webhook-test.com/) وتحقق مما إذا كانت هناك **طلب POST جديد** تم استلامه.
+
+
+
+
+
+* إذا تم استلام **طلب POST**، فهذا يعني أن العامل يعمل بنجاح. وإلا، ستحتاج إلى استكشاف الأخطاء وإصلاحها لعامل التشغيل الخاص بك.
+
+#### لا يمكن تشغيل الواجهة الأمامية وتظهر رسالة الخطأ TS5042: لا يمكن مزج خيار 'المشروع' مع ملفات المصدر في سطر الأوامר
+
+قم بتعليق مكون التحليل في `packages/twenty-ui/vite-config.ts` كما في المثال أدناه
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### لوحة الإدارة غير قابلة للوصول
+
+قم بتشغيل `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` في حاوية قاعدة البيانات للحصول على الوصول إلى لوحة الإدارة.
+
+### Docker compose بنقرة واحدة
+
+#### غير قادر على تسجيل الدخول
+
+إذا كنت لا تستطيع تسجيل الدخول بعد الإعداد:
+
+1. قم بتشغيل الأوامر التالية:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. إعادة تشغيل حاويات Docker:
+ ```bash
+ docker compose down\ndocker compose up -d
+ ```
+
+لاحظ أن الأمر database:reset سيقوم بمسح قاعدة البيانات الخاصة بك بالكامل وإعادة إنشائها من جديد.
+
+#### مشاكل الاتصال خلف بروكسي عكسي
+
+إذا كنت تستخدم Twenty خلف بروكسي عكسي وواجهت مشاكل في الاتصال:
+
+1. **تأكد من SERVER_URL:**
+
+ تأكد من أن `SERVER_URL` في ملف `.env` يتطابق مع عنوان الوصول الخارجي الخاص بك، بما في ذلك `https` إذا كان SSL مفعلاً.
+
+2. **التحقق من إعدادات البروكسي العكسي:**
+
+ * تأكد من أن البروكسي العكسي يقوم بتمرير الطلبات بشكل صحيح إلى خادم Twenty.
+ * تأكد من أن رؤوس مثل `X-Forwarded-For` و`X-Forwarded-Proto` تم ضبطها بشكل صحيح.
+
+3. **إعادة تشغيل الخدمات:**
+
+ بعد إجراء التغييرات، أعد تشغيل كل من البروكسي العكسي وحاويات Twenty.
+
+#### خطأ عند تحميل صورة - تم رفض الإذن
+
+تغيير ملكية مجلد البيانات على المضيف من الجذر إلى مستخدم ومجموعة آخرين يحل هذه المشكلة.
+
+## الحصول على المساعدة
+
+إذا واجهت مشكلات لم يتم تغطيتها في هذا الدليل:
+
+* تفقد السجلات:
+
+ اعرض سجلات الحاوية للرسائل الخطأ:
+
+ ```bash
+ docker compose logs
+ ```
+
+* الدعم المجتمعي:
+
+ تواصل مع [مجتمع Twenty](https://github.com/twentyhq/twenty/issues) أو [قنوات الدعم](https://discord.gg/cx5n4Jzs57) للحصول على المساعدة.
diff --git a/packages/twenty-docs/l/ar/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/ar/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..9effc692c4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: دليل الترقية
+---
+
+## إرشادات عامة
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+إذا كنت تستخدم Docker Compose، اتبع الخطوات التالية:
+
+1. في الطرفية، على الجهاز الذي يعمل فيه Twenty، قم بإيقاف Twenty: `docker compose down`
+
+2. قم بترقية الإصدار عن طريق تغيير قيمة `TAG` في ملف .env بجانب docker-compose. ( نوصي باستخدام إصدار `major.minor` مثل `v0.53` )
+
+3. قم بإعادة تشغيل Twenty باستخدام `docker compose up -d`
+
+إذا كنت ترغب في ترقية مثيلك بزيادة بعض الإصدارات، مثل الانتقال من v0.33.0 إلى v0.35.0، يجب أن تقوم بترقية مثيلك بشكل تسلسلي، في هذا المثال من v0.33.0 إلى v0.34.0، ثم من v0.34.0 إلى v0.35.0.
+
+**تأكد من أن لديك نسخة احتياطية غير تالفة بعد كل إصدار تمت ترقيته.**
+
+## خطوات الترقية الخاصة بالإصدار
+
+## v1.0
+
+مرحباً Twenty v1.0! 🎉
+
+## v0.60
+
+### تحسين الأداء
+
+تم تحسين جميع التفاعلات مع واجهة برمجة التطبيقات للبيانات الوصفية للحصول على أداء أفضل، خاصة فيما يتعلق بمعالجة بيانات الكائن وإنشاء المساحات.
+
+أعدنا تصميم استراتيجيتنا للتخزين المؤقت لإعطاء الأولوية للوصول عبر التخزين المؤقت على استعلامات قاعدة البيانات قدر الإمكان، مما أدى إلى تحسين كبير في أداء عمليات واجهة برمجة التطبيقات للبيانات الوصفية.
+
+إذا واجهت أي مشاكل في وقت التشغيل بعد الترقية، قد تحتاج إلى مسح التخزين المؤقت لضمان تزامنه مع أحدث التغييرات. قم بتشغيل هذا الأمر في حاوية خادم twenty الخاص بك:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.55
+
+لم تعد بحاجة إلى تشغيل أي أمر، الصورة الجديدة ستعتني بتشغيل جميع الترحيلات المطلوبة تلقائيًا.
+
+### `User does not have permission` error
+
+إذا واجهت أخطاء في الأذونات في معظم الطلبات بعد الترقية، فقد تحتاج إلى مسح التخزين المؤقت لإعادة حساب أحدث الأذونات.
+
+في حاوية خادم `twenty` الخاص بك، قم بتشغيل:
+
+```bash
+yarn command:prod cache:flush
+```
+
+هذه المشكلة خاصة بهذا الإصدار من Twenty ولا يجب أن تكون ضرورية في الترقيات المستقبلية.
+
+### v0.54
+
+منذ الإصدار `0.53`، لا حاجة لأي إجراءات يدوية.
+
+#### إيقاف تشغيل مخطط البيانات الوصفية
+
+قمنا بدمج مخطط `metadata` مع مخطط `core` لتبسيط استرجاع البيانات من `TypeORM`.
+قمنا بدمج خطوة تنفيذ الأمر `migrate` مع الأمر `upgrade`. لا ننصح بتشغيل `migrate` يدويًا داخل أي من حاويات الخادم/العمل الخاصة بك.
+
+### منذ v0.53
+
+بدءًا من الإصدار `0.53`، تتم الترقية بشكل برمجي داخل `DockerFile`، مما يعني أنه من الآن فصاعدًا، لن تحتاج إلى تشغيل أي أوامر يدويًا بعد الآن.
+
+تأكد من متابعة الترقية الخاصة بك تسلسليًا، دون تخطي أي إصدار رئيسي (على سبيل المثال `0.43.3` إلى `0.44.0` مسموح، ولكن `0.43.1` إلى `0.45.0` غير مسموح)، قد يؤدي بخلاف ذلك إلى عدم تزامن إصدار مساحة العمل مما قد يؤدي إلى خطأ في وقت التشغيل وفقدان الوظائف.
+
+للتحقق مما إذا كانت مساحة العمل قد تمت ترقيتها بشكل صحيح ، يمكنك مراجعة نسختها في قاعدة البيانات في جدول `core.workspace`.
+
+يجب أن تكون دائمًا في نطاق إصدار `major.minor` لحساب Twenty الحالي الخاص بك ، ويمكنك مشاهدة نسخة حسابك في لوحة المدير (في `/settings/admin-panel`، يمكن الوصول إليها إذا كانت خاصية `canAccessFullAdminPanel` الخاصة بالمستخدم مصفوفة إلى true في قاعدة البيانات) أو عن طريق تشغيل `echo $APP_VERSION` في حاوية `twenty-server` الخاصة بك.
+
+لإصلاح إصدار مساحة العمل غير المتزامن ، سيتعين عليك الترقية من الإصدار المعني لـ Twenty باتباع دليل الترقية الخاص ذو الصلة تسلسليًا وهكذا حتى يصل إلى الإصدار المطلوب.
+
+#### إزالة `auditLog`
+
+لقد قمنا بإزالة كائن المعيار auditLog، مما يعني أن حجم النسخة الاحتياطية الخاصة بك قد يقل بشكل كبير بعد هذه الترقية.
+
+### من v0.51 إلى v0.52
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.52
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### لدي مساحة عمل محظورة في الإصدار بين `0.52.0` و`0.52.6`
+
+لسوء الحظ، تم إزالة `0.52.0` و`0.52.6` بالكامل من dockerHub.
+سيتعين عليك تحديث نسخة مساحة العمل يدويًا إلى `0.51.0` في قاعدة البيانات والترقية باستخدام إصدار twenty عند `0.52.11` باتباع دليل الترقية الخاص به أعلاه.
+
+### من v0.50 إلى v0.51
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.51
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### من v0.44.0 إلى v0.50.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.50.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### تغيير ملف docker-compose.yml
+
+يتضمن هذا الإصدار تغييرًا في `docker-compose.yml` لمنح خدمة `worker` إمكانية الوصول إلى وحدة التخزين `server-local-data`.
+يرجى تحديث `docker-compose.yml` المحلي الخاص بك بـ [docker-compose.yml v0.50.0](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### من v0.43.0 إلى v0.44.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.44.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### من v0.42.0 إلى v0.43.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.43.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+في هذا الإصدار، قمنا أيضًا بالتحول إلى صورة postgres:16 في docker-compose.yml.
+
+#### (الخيار 1) ترحيل قاعدة البيانات
+
+احتفاظ بصورة postgres-spilo الحالية مقبول، ولكن سيتعين عليك تجميد الإصدار في docker-compose.yml ليكون 0.43.0.
+
+#### (الخيار 2) ترحيل قاعدة البيانات
+
+إذا كنت تريد ترحيل قاعدة بياناتك إلى الصورة الجديدة postgres:16، يرجى اتباع هذه الخطوات:
+
+1. نسخ قاعدة البيانات الخاصة بك من حاوية postgres-spilo القديمة
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+تأكد من أن ملف النسخ الاحتياطي ليس فارغًا.
+
+2. قم بترقية docker-compose.yml الخاص بك لاستخدام صورة postgres:16 كما هو في الملف [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml).
+
+3. استعادة قاعدة البيانات إلى الحاوية الجديدة postgres:16
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### من v0.41.0 إلى v0.42.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.42.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**متغيرات البيئة**
+
+* تمت الإزالة: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* تمت الإضافة: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### من v0.40.0 إلى v0.41.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.41.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**متغيرات البيئة**
+
+* تمت الإزالة: `AUTH_MICROSOFT_TENANT_ID`
+
+### من v0.35.0 إلى v0.40.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.40.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**متغيرات البيئة**
+
+* تمت الإضافة: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### من v0.34.0 إلى v0.35.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.35.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.35` يتولى ترقية البيانات إلى جميع المساحات.
+
+**متغيرات البيئة**
+
+* قمنا باستبدال `ENABLE_DB_MIGRATIONS` بـ `DISABLE_DB_MIGRATIONS` (القيمة الافتراضية الآن `false`, على الأرجح لن تحتاج إلى تعيين أي شيء)
+
+### من v0.33.0 إلى v0.34.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.34.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.34` يتولى ترقية البيانات إلى جميع المساحات.
+
+**متغيرات البيئة**
+
+* تمت الإزالة: `FRONT_BASE_URL`
+* تمت الإضافة: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+لقد قمنا بتحديث الطريقة التي نتعامل بها مع عنوان URL الخاص بالواجهة الأمامية.
+يمكنك الآن تعيين عنوان URL الخاص بالواجهة الأمامية باستخدام متغيرات `FRONT_DOMAIN`, `FRONT_PROTOCOL` و`FRONT_PORT`.
+إذا لم يتم تعيين FRONT_DOMAIN، فسوف يتراجع عنوان URL للواجهة الأمامية إلى `SERVER_URL`.
+
+### من v0.32.0 إلى v0.33.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.33.0
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+أمر `yarn command:prod cache:flush` سيقوم بمسح ذاكرة تخزين Redis المؤقتة.
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.33` يتولى ترقية البيانات إلى جميع المساحات.
+
+بدءًا من هذا الإصدار، أصبحت صورة twenty-postgres للقاعدة غير نشطة وتم استخدام twenty-postgres-spilo بدلاً منها.
+إذا كنت ترغب في الاستمرار باستخدام صورة twenty-postgres، فما عليك سوى استبدال `twentycrm/twenty-postgres:${TAG}` بـ `twentycrm/twenty-postgres` في docker-compose.yml.
+
+### من v0.31.0 إلى v0.32.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.32.0
+
+**ترقية المخطط والبيانات**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.32` يتولى ترقية البيانات إلى جميع المساحات.
+
+**متغيرات البيئة**
+
+لقد قمنا بتحديث الطريقة التي نتعامل بها مع اتصال Redis.
+
+* تمت الإزالة: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* تمت الإضافة: `REDIS_URL`
+
+قم بتحديث ملفك `.env` لاستخدام المتغير الجديد `REDIS_URL` بدلاً من معلمات اتصال Redis الفردية.
+
+قمنا أيضًا بتبسيط الطريقة التي نتعامل بها مع رموز JWT.
+
+* تمت الإزالة: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* تمت الإضافة: `APP_SECRET`
+
+قم بتحديث ملفك `.env` لاستخدام المتغير الجديد `APP_SECRET` بدلاً من الأسرار الفردية للرموز (يمكنك استخدام نفس السر كما كان من قبل أو توليد سلسلة عشوائية جديدة)
+
+**الحساب المتصل**
+
+إذا كنت تستخدم حسابًا متصلًا لمزامنة رسائل بريدك الإلكتروني في جوجل والتقويمات، فستحتاج إلى تفعيل [People API](https://developers.google.com/people) في وحدة تحكم مشرف جوجل لديك.
+
+### من v0.30.0 إلى v0.31.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.31.0
+
+**ترقية المخطط والبيانات**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.31` يتولى ترقية البيانات إلى جميع المساحات.
+
+### من v0.24.0 إلى v0.30.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.30.0
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. قمنا بتحديث [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) لتعكس ذلك.
+تأكد من تحديث إعدادات التكوين الخاصة بك وتحديث المتغيرات البيئية الخاصة بك وفقًا لذلك:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**ترقية المخطط والبيانات**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.30` يتولى ترقية البيانات إلى جميع المساحات.
+
+### من v0.23.0 إلى v0.24.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.24.0
+
+قم بتشغيل الأوامر التالية:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على هيكل قاعدة البيانات (مخططات core وmetadata)
+أمر `yarn command:prod upgrade-0.24` يتولى ترقية البيانات إلى جميع المساحات.
+
+### من v0.22.0 إلى v0.23.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.23.0
+
+قم بتشغيل الأوامر التالية:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على قاعدة البيانات.
+أمر `yarn command:prod upgrade-0.23` يتولى ترقية البيانات، بما في ذلك نقل الأنشطة إلى المهام/الملاحظات.
+
+### من v0.21.0 إلى v0.22.0
+
+قم بترقية مثيل Twenty الخاص بك لاستخدام صورة v0.22.0
+
+قم بتشغيل الأوامر التالية:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+أمر `yarn database:migrate:prod` سيقوم بتطبيق الترقيات على قاعدة البيانات.
+الأمر `yarn command:prod workspace:sync-metadata -f` سيزامن تعريف الكائنات القياسية مع جداول البيانات الوصفية ويطبق الترقيات المطلوبة على مساحات العمل الموجودة.
+الأمر `yarn command:prod upgrade-0.22` سيقوم بتطبيق تحويلات بيانات محددة للتكيف مع الخيارات الافتراضية الجديدة لتوثيق الطلبات في الكائنات.
diff --git a/packages/twenty-docs/l/ar/developers/self-host/self-host.mdx b/packages/twenty-docs/l/ar/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..8a8b042d6b
--- /dev/null
+++ b/packages/twenty-docs/l/ar/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## نظرة عامة
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## البدء
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/ar/navigation.json b/packages/twenty-docs/l/ar/navigation.json
index 56edda9b60..407efd71e2 100644
--- a/packages/twenty-docs/l/ar/navigation.json
+++ b/packages/twenty-docs/l/ar/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "دليل المستخدم",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "البدء"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "نموذج البيانات"
+ "label": "نموذج البيانات",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "أساسيات CRM"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "العروض"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "سير العمل"
+ "label": "سير العمل",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Need More Help"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "التعاون"
+ "ai": {
+ "label": "الذكاء الاصطناعي",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "التكاملات & API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "التقارير"
+ "dashboards": {
+ "label": "لوحات القيادة",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "الفوترة",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "الإعدادات"
- },
- "pricing": {
- "label": "التسعير"
- },
- "resources": {
- "label": "الموارد"
+ "label": "\\ا\\ل\\إ\\ع\\د\\ا\\د\\ا\\ت",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -42,50 +144,60 @@
"label": "المطورون",
"groups": {
"developersGroup": {
- "label": "المطورين"
+ "label": "المطورون"
},
- "devGettingStarted": {
- "label": "بدء العمل",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "الاستضافة الذاتية"
- },
- "apiAndWebhooks": {
- "label": "API و Webhooks"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "المساهمة",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "تطوير الواجهة",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "تطوير الواجهة الأمامية",
"groups": {
- "display": {
- "label": "عرض"
- },
- "feedback": {
- "label": "الملاحظات"
- },
- "input": {
- "label": "Input"
- },
- "navigation": {
- "label": "Navigation"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "عرض"
+ },
+ "feedback": {
+ "label": "التغذية الراجعة"
+ },
+ "input": {
+ "label": "إدخال"
+ },
+ "navigation": {
+ "label": "Navigation"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "تطوير الواجهة الخلفية"
}
}
- },
- "backendDevelopment": {
- "label": "تطوير الخلفية"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..0c9f612def
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: تلميح التطبيق
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+رسالة مختصرة تعرض معلومات إضافية عند تفاعل المستخدم مع عنصر.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Customer Insights
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ------------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | اسم الفئة | نص | فئة CSS اختيارية للتنسيق الإضافي |
+ | اختيار الربط | محدد CSS | Selector for the tooltip anchor (the element that triggers the tooltip) |
+ | المحتوى | نص | The content you want to display within the tooltip |
+ | تأخير الإخفاء | رقم | The delay in seconds before hiding the tooltip after the cursor leaves the anchor |
+ | الإزاحة | رقم | The offset in pixels for positioning the tooltip |
+ | بدون سهم | قيمة منطقية | إذا كانت القيمة `صحيح`, سيتم إخفاء السهم في المربط التنبيهي |
+ | مفتوح | قيمة منطقية | إذا كانت القيمة `صحيح`, يكون المربط التنبيهي مفتوحًا افتراضيًا |
+ | المكان | `PlacesType` string from `react-tooltip` | يحدد موضع المربط التنبيهي. Values include `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, and `left-end` |
+ | استراتيجية الوضعية | نص `PositionStrategy` من `react-tooltip` | استراتيجية وضعية للمربط التنبيهي. Has two values: `absolute` and `fixed` |
+
+
+
+## Overflowing Text with Tooltip
+
+يعالج النص الزائد ويعرض مربط تنبيهي عند فيضان النص.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------- | ------ | ------------------------------------------------------------ |
+ | نص | string | The content you want to display in the overflowing text area |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..e05ee8ce68
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: علامة صحيح
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+يمثل إجراءً ناجحًا أو مكتملًا.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ يمتد `React.ComponentPropsWithoutRef<'div'>` و يقبل جميع خصائص عنصر `div` العادي.
+
+
+
+## علامة صحيح متحركة
+
+يمثل رمز علامة صحيح مع ميزة الإضافة للحركة.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ----------- | ----------- | ------------------------------------- | ----------------- |
+ | isAnimating | قيمة منطقية | يتحكم فيما إذا كانت علامة صحيح متحركة | خاطئ |
+ | اللون | string | Color of the checkmark | |
+ | المدة | رقم | مدة الحركة بالثواني | 0.5 ثانية |
+ | الحجم | رقم | The size of the checkmark | 28 بكسل |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..909f8f6bae
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: رقاقة
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+عنصر مرئي يمكن استخدامه كحاوية قابلة للنقر أو غير قابلة للنقر، مع علامة وعناصر اختيارية يسار ويمين، وخيارات تصميم متنوعة لعرض العلامات والبطاقات.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ------------------ | ----------------------- | ---------------------------------------------------------------------- |
+ | linkToEntity | نص | الرابط إلى الكيان |
+ | معرف الكيان | نص | المعرف الفريد للكيان |
+ | الاسم | نص | اسم الكيان |
+ | رابط الصورة | نص | s picture", |
+ | نوع الصورة الرمزية | نوع الصورة الرمزية | نوع الصورة الرمزية التي تريد عرضها. لديه خياران: `مستدير` و `مربع` |
+ | التنوع | تعداد EntityChipVariant | تنوع الرقاقة الكيانية التي ترغب في عرضها. لديه خياران: `عادي` و `شفاف` |
+ | الأيقونة اليسرى | مكون رمز | مكون React يمثل رمزًا. يظهر على الجانب الأيسر من الرقاقة |
+
+
+
+## الأمثلة
+
+### رقاقة شفافة معطلة
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### رقاقة معطلة مع تلميح
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## رقاقة كيان
+
+عنصر يشبه الرقاقة لعرض معلومات عن كيان.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------------------ | ----------------------- | ---------------------------------------------------------------------- |
+ | linkToEntity | نص | الرابط إلى الكيان |
+ | معرف الكيان | نص | المعرف الفريد للكيان |
+ | الاسم | نص | اسم الكيان |
+ | رابط الصورة | نص | s picture", |
+ | نوع الصورة الرمزية | نوع الصورة الرمزية | نوع الصورة الرمزية التي تريد عرضها. لديه خياران: `مستدير` و `مربع` |
+ | التنوع | تعداد EntityChipVariant | تنوع الرقاقة الكيانية التي ترغب في عرضها. لديه خياران: `عادي` و `شفاف` |
+ | الأيقونة اليسرى | مكون رمز | مكون React يمثل رمزًا. يظهر على الجانب الأيسر من الرقاقة |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..6b60d950c4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: الأيقونات
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+قائمة بالأيقونات المستخدمة في جميع أنحاء تطبيقنا.
+
+## Tabler Icons
+
+نستخدم أيقونات Tabler لـ React في جميع أنحاء التطبيق.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ يمكنك استيراد كل أيقونة كمكون. إليك مثال:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | الإزاحة | النوع | الوصف | الإعداد الافتراضي |
+ | ----------- | ------ | -------------------------------- | ----------------- |
+ | الحجم | رقم | ارتفاع وعرض الأيقونة بالبكسل | 24 |
+ | اللون | string | لون الأيقونات | اللون الحالي |
+ | الخط العريض | رقم | عرض الخط العريض للأيقونة بالبكسل | 2 |
+
+
+
+## أيقونات مخصصة
+
+بالإضافة إلى أيقونات Tabler، يستخدم التطبيق أيضًا بعض الأيقونات المخصصة.
+
+### أيقونة دفتر العناوين
+
+يعرض أيقونة دفتر العناوين.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | خصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ----------- | ----- | -------------------------------- | ----------------- |
+ | الحجم | رقم | ارتفاع وعرض الأيقونة بالبكسل | 24 |
+ | الخط العريض | رقم | عرض الخط العريض للأيقونة بالبكسل | 2 |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..0d21dcde5a
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+شارة صغيرة أو "كبسولة" للإشارة إلى أن شيئًا ما قادم قريبًا.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/ar/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/ar/twenty-ui/display/tag.mdx
new file mode 100644
index 0000000000..718f0ae29c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/display/tag.mdx
@@ -0,0 +1,38 @@
+---
+title: علامة
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+Component to visually categorize or label content.
+
+
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | --------- | ----- | --------------------------------------------------------------------------------------------------------------------- |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+ | اللون | نص | لون العلامة. الخيارات تشمل: `أخضر`, `تركواز`, `سماوي`, `أزرق`, `أرجواني`, `وردي`, `أحمر`, `برتقالي`, `أصفر`, `رمادي`. |
+ | نص | نص | محتوى العلامة |
+ | عند_النقر | دالة | دالة اختيارية تُستدعى عند نقر المستخدم على العلامة |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx
index 78bdb0bd9d..8c133b329e 100644
--- a/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
يستخدم محرر نصوص غني يعتمد على الكتل من [BlockNote](https://www.blocknotejs.org/) للسماح للمستخدمين بتحرير وعرض كتل المحتوى.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| المحددات | النوع | الوصف |
-| -------- | ----------------- | ------------------------ |
-| محرر | `BlockNoteEditor` | مثيل أو تكوين محرر الكتل |
-
-
+
+ | المحددات | النوع | الوصف |
+ | -------- | ----------------- | ------------------------ |
+ | محرر | `BlockNoteEditor` | مثيل أو تكوين محرر الكتل |
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..d8987e0083
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: الأزرار
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+قائمة الأزرار ومجموعات الأزرار المستخدمة في التطبيق.
+
+## زر
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | خصائص | النوع | الوصف |
+ | --------- | --------------------- | -------------------------------------------------------------------------------------- |
+ | className | string | اسم فئة اختياري لتنسيقات إضافية |
+ | أيقونة | `React.ComponentType` | مكون رمز اختياري يُعرض داخل الزر |
+ | العنوان | string | محتوى نص الزر |
+ | عرض كامل | قيمة منطقية | يُحدد إذا كان الزر يجب أن يمتد ليغطي العرض الكامل للحاوية الخاصة به |
+ | التنوع | string | النمط المرئي للزر. Options include `primary`, `secondary`, and `tertiary` |
+ | الحجم | string | حجم الزر. يوجد خياران: `صغير` و `متوسط` |
+ | الموقع | string | موقع الزر بالنسبة لأخوته. Options include: `standalone`, `left`, `right`, and `middle` |
+ | accent | string | موقع الزر بالنسبة لأخوته. تشمل الخيارات: `default`، `blue`، `danger` |
+ | قريباً | قيمة منطقية | يشير إلى ما إذا كان الزر معلمًا "قريبًا" (مثل الميزات القادمة) |
+ | معطل | قيمة منطقية | يحدد إذا كان الزر معطل أم لا |
+ | تركيز | قيمة منطقية | يحدد إذا كان الزر في وضع التركيز |
+ | عند النقر | وظيفة | وظيفة رد فعل تنطلق عند نقر المستخدم على الزر |
+
+
+
+## مجموعة الأزرار
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------- | --------- | ------------------------------------------------------------------------------------------ |
+ | التنوع | string | النمط المرئي للأزرار داخل المجموعة. Options include `primary`, `secondary`, and `tertiary` |
+ | الحجم | string | حجم الأزرار داخل المجموعة. Has two options: `medium` and `small` |
+ | accent | نص | لون تمييز الأزرار داخل المجموعة. Options include `default`, `blue` and `danger` |
+ | className | string | اسم فئة اختياري لتنسيقات إضافية |
+ | الأبناء | ReactNode | مجموعة من عناصر React تمثل الأزرار الفردية داخل المجموعة |
+
+
+
+## زر عائم
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------------ | --------------------- | ---------------------------------------------------------------------------------- |
+ | className | string | اسم اختياري لتنسيقات إضافية |
+ | أيقونة | `React.ComponentType` | مكون أيقونة اختياري يظهر داخل الزر |
+ | العنوان | string | محتوى نص الزر |
+ | الحجم | string | حجم الزر. يوجد خياران: `صغير` و `متوسط` |
+ | الموقع | string | موقع الزر بالنسبة لأخوته. Options include: `standalone`, `left`, `middle`, `right` |
+ | تطبيق الظل | قيمة منطقية | يحدد إذا ما سيتم تطبيق الظلال على الزر |
+ | تطبيق الضباب | قيمة منطقية | يحدد ما إذا كان ينبغي تطبيق تأثير الضباب على الزر |
+ | معطل | قيمة منطقية | يحدد ما إذا كان الزر معطل |
+ | تركيز | قيمة منطقية | يحدد إذا كان الزر في وضع التركيز |
+
+
+
+## مجموعة الأزرار العائمة
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | خصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ------- | --------- | -------------------------------------------------------- | ----------------- |
+ | الحجم | string | حجم الزر. يوجد خياران: `صغير` و `متوسط` | صغير |
+ | الأبناء | ReactNode | مجموعة من عناصر React تمثل الأزرار الفردية داخل المجموعة | |
+
+
+
+## زر رمز عائم
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------------ | --------------------- | -------------------------------------------------------------------------------------- |
+ | className | نص | اسم اختياري لتنسيقات إضافية |
+ | أيقونة | `React.ComponentType` | مكون أيقونة اختياري يظهر داخل الزر |
+ | الحجم | نص | حجم الزر. يوجد خياران: `صغير` و `متوسط` |
+ | الموقع | نص | موقع الزر بالنسبة لأخوته. Options include: `standalone`, `left`, `right`, and `middle` |
+ | تطبيق الظل | قيمة منطقية | يحدد إذا ما سيتم تطبيق الظلال على الزر |
+ | تطبيق الضباب | قيمة منطقية | يحدد ما إذا كان ينبغي تطبيق تأثير الضباب على الزر |
+ | معطل | قيمة منطقية | يحدد ما إذا كان الزر معطل |
+ | تركيز | قيمة منطقية | يحدد إذا كان الزر في وضع التركيز |
+ | عند النقر | وظيفة | وظيفة رد فعل تنطلق عند نقر المستخدم على الزر |
+ | فعّال | قيمة منطقية | يحدد إذا كان الزر في وضع فعّال |
+
+
+
+## مجموعة أزرار الرموز العائمة
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | string | اسم اختياري لتنسيقات إضافية |
+ | الحجم | string | حجم الزر. يوجد خياران: `صغير` و `متوسط` |
+ | أزرار الرموز | array | مجموعة من الكائنات، يمثل كل منها زر رمز في المجموعة. يجب أن يشمل كل كائن مكون الرمز الذي تريد عرضه في الزر، الوظيفة التي ترغب في استدعائها عند نقر المستخدم على الزر، وما إذا كان الزر ينبغي أن يكون نشطًا أم لا. |
+
+
+
+## Light Button
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | الإزاحة | النوع | الوصف |
+ | --------- | ----------------- | -------------------------------------------------------------------------- |
+ | className | string | اسم اختياري لتنسيقات إضافية |
+ | أيقونة | `React.ReactNode` | الرمز الذي تريد عرضه في الزر |
+ | العنوان | string | محتوى نص الزر |
+ | accent | string | موقع الزر بالنسبة لأخوته. لون الزر المميز تشمل الخيارات: `ثانوي` و `ثالثي` |
+ | نشط | قيمة منطقية | يحدد إذا كان الزر في وضع فعّال |
+ | معطل | قيمة منطقية | يحدد ما إذا كان الزر معطل |
+ | تركيز | قيمة منطقية | يحدد إذا كان الزر في وضع التركيز |
+ | عند النقر | وظيفة | وظيفة رد فعل تنطلق عند نقر المستخدم على الزر |
+
+
+
+## زر أيقونة خفيف
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | العناصر | النوع | الوصف |
+ | --------- | --------------------- | ------------------------------------------------ |
+ | className | string | اسم اختياري لتنسيقات إضافية |
+ | testId | string | معرف اختبار للزر |
+ | أيقونة | `React.ComponentType` | مكون أيقونة اختياري يظهر داخل الزر |
+ | العنوان | string | محتوى نصي للزر |
+ | الحجم | string | حجم الزر. يوجد خياران: `صغير` و `متوسط` |
+ | accent | string | لون الزر المميز تشمل الخيارات: `ثانوي` و `ثالثي` |
+ | نشط | قيمة منطقية | يحدد ما إذا كان الزر في حالة نشطة |
+ | معطل | قيمة منطقية | يحدد ما إذا كان الزر معطلاً |
+ | التركيز | قيمة منطقية | يشير إلى ما إذا كان الزر لديه تركيز |
+ | عند النقر | function | وظيفة رد اتصال تتفعّل عند نقر المستخدم على الزر |
+
+
+
+## الزر الرئيسي
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | العناصر | النوع | الوصف |
+ | -------------- | -------------------------------- | -------------------------------------------------------------- |
+ | العنوان | string | محتوى نصي للزر |
+ | عرض كامل | قيمة منطقية | يحدد ما إذا كان الزر يجب أن يمتد على كامل عرض الحاوية |
+ | التنوع | string | النمط البصري للزر. تشمل الخيارات `أساسي` و `ثانوي` |
+ | قريباً | قيمة منطقية | يشير إلى ما إذا كان الزر معلمًا "قريبًا" (مثل الميزات القادمة) |
+ | أيقونة | `React.ComponentType` | مكون أيقونة اختياري يظهر داخل الزر |
+ | خصائص زر React | `React.ComponentProps<'button'>` | كل خصائص زر HTML القياسية مدعومة |
+
+
+
+## زر أيقونة دائري
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | العناصر | النوع | الوصف |
+ | -------------- | ----------------------------------------------- | ----- |
+ | أيقونة | `React.ComponentType` | |
+ | خصائص زر React | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..51e5f76f11
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: مربع اختيار
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+يُستخدم عندما يحتاج المستخدم إلى اختيار قيم متعددة من بين عدة خيارات.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange function fired")}
+ onCheckedChange={() => console.log("onCheckedChange function fired")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ------------------------ | ----------- | ------------------------------------------------------------------------------------------- |
+ | مختار | قيمة منطقية | يشير إلى ما إذا كان مربع الاختيار محددًا |
+ | indeterminate | قيمة منطقية | Indicates whether the checkbox is in an indeterminate state (neither checked nor unchecked) |
+ | عند التغيير | دالة | الدالة التي ترغب في تفعيلها عند تغيير حالة مربع الاختيار |
+ | عند تغيير الحالة المحددة | دالة | The callback function you want to trigger when the `checked` state changes |
+ | نموذج | نص | النمط البصري للصندوق. تتضمن الخيارات: 'أساسي'، 'ثانوي'، و 'ثالثي' |
+ | الحجم | نص | حجم مربع الاختيار. Has two options: `small` and `large` |
+ | الشكل | نص | شكل مربع الاختيار. لديه خياران: 'مربع' و 'مدور' |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..458c813bd3
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: طريقة عرض الألوان
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## بطاقة مخطط الألوان
+
+يمثل مخططات ألوان مختلفة ومخصص بشكل خاص للمواضيع الفاتحة والداكنة.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | خصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ------------ | --------------------------------------- | ---------------------------------------------------------------------- | ----------------- |
+ | التنوع | string | نوع مخطط الألوان. تشمل الخيارات `داكنة`, `فاتحة`, و `النظام` | فاتح |
+ | المحدد | قيمة منطقية | إذا كان `صحيح`, يتم عرض علامة الاختيار للدلالة على مخطط الألوان المحدد | |
+ | خصائص إضافية | `React.ComponentPropsWithoutRef<'div'>` | خصائص عنصر `div` العادي في HTML | |
+
+
+
+## منتقي مخطط الألوان
+
+يتيح للمستخدمين اختيار بين مخططات الألوان المختلفة.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | خصائص | النوع | الوصف |
+ | ----------- | ------------------- | ---------------------------------------------------------------------------- |
+ | القيمة | `طريقة عرض الألوان` | مخطط الألوان المحدد حاليًا |
+ | عند التغيير | function | The callback function you want to trigger when a user selects a color scheme |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..42301db180
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: منتقى الأيقونات
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+منتقى الأيقونات المعتمد على القائمة المنسدلة الذي يتيح للمستخدمين اختيار أيقونة من قائمة.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Selected Icon:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ----------------------- | ----------- | ------------------------------------------------------------------------------------------------------------ |
+ | معطل | قيمة منطقية | يقوم بتعطيل منتقى الأيقونات إذا تم تعيينه إلى `true` |
+ | عند التغيير | دالة | الدالة الارتجاعية التي تُفعل عندما يختار المستخدم أيقونة. يستقبل كائنًا يحتوي على الخصائص `iconKey` و `Icon` |
+ | مفتاح الأيقونة المختارة | نص | مفتاح الأيقونة المختارة في البداية |
+ | النقر بالخارج | دالة | الدالة الارتجاعية التي تُفعل عندما ينقر المستخدم خارج القائمة المنسدلة |
+ | عند الإغلاق | دالة | الدالة الارتجاعية التي تُفعل عند إغلاق القائمة المنسدلة |
+ | عند الفتح | دالة | الدالة الارتجاعية التي تُفعل عند فتح القائمة المنسدلة |
+ | التنوع | نص | The visual style variant of the clickable icon. تشمل الخيارات: `رئيسي`, `ثانوي`, و `ثالثي` |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..67e24b7e08
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: "\x062A\x062F\x062E\x064A\x0644 \x0627\x0644\x0635\x0648\x0631\x0629"
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+4A4F33452D 44445245332A2E2F454A46 28452F 482532274429 35483129.
+
+
+
+ ```jsx
+ 27332A4A31272F { 2A2F2E4A44 274435483129 } 4546 "@/ui/input/components/ImageInput";
+
+ 27352F31 45434852464A 27442E2735 = () => {
+ 39482F 2A2F2E44 274435483129/>
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ------------ | ----------- | ------------------------------------------------------------------------------------------------- |
+ | صورة | نص | 3946482746 45352F31 274435483129 27442544432A3148464A |
+ | onUpload | دالة | The function called when a user uploads a new image. It receives the `File` object as a parameter |
+ | onRemove | دالة | The function called when the user clicks on the remove button |
+ | onAbort | دالة | The function called when a user clicks on the abort button during image upload |
+ | isUploading | قيمة منطقية | Indicates whether an image is currently being uploaded |
+ | errorMessage | نص | An optional error message to display below the image input |
+ | معطل | قيمة منطقية | If `true`, the entire input is disabled, and the buttons are not clickable |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..d3c2ff729e
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: راديو
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+تستخدم عندما يمكن للمستخدمين اختيار خيار واحد فقط من سلسلة من الخيارات.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ------------------------ | ----------------- | ------------------------------------------------------------------------ |
+ | النمط | خصائص `React.CSS` | أنماط إضافية مضمنة للمكون |
+ | اسم الفئة | نص | فئة CSS اختيارية لتصميم إضافي |
+ | مختار | قيمة منطقية | يشير إلى ما إذا كان زر الراديو محددًا |
+ | القيمة | نص | التسمية أو النص المرتبط بزر الراديو |
+ | عند التغيير | دالة | The function called when the selected radio button is changed |
+ | عند تغيير الحالة المحددة | دالة | The function called when the `checked` state of the radio button changes |
+ | الحجم | نص | حجم زر الراديو. Options include: `large` and `small` |
+ | معطل | قيمة منطقية | If `true`, the radio button is disabled and not clickable |
+ | موضع التسمية | نص | موضع نص التسمية بالنسبة لزر الراديو. Has two options: `left` and `right` |
+
+
+
+## مجموعة الراديو
+
+يجمع أزرار الراديو ذات الصلة معًا.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | ------------- | ----------------- | ---------------------------------------------------------------------------------- |
+ | القيمة | string | قيمة زر الراديو المحدد حاليًا |
+ | عند التغيير | دالة | The callback function triggered when the radio button is changed |
+ | onValueChange | دالة | The callback function triggered when the selected value in the group changes. |
+ | الأبناء | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx
new file mode 100644
index 0000000000..b40952962c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/select.mdx
@@ -0,0 +1,51 @@
+---
+title: اختيار
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+يتيح للمستخدمين اختيار قيمة من قائمة من الخيارات المحددة مسبقًا.
+
+
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
+
+ import { Select } from '@/ui/input/components/Select';
+
+ export const MyComponent = () => {
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ----------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | اسم الفئة | نص | فئة CSS اختيارية للتنسيق الإضافي |
+ | معطل | قيمة منطقية | عند ضبطها على `true`، يتم تعطيل تفاعل المستخدم مع المكون |
+ | التسمية | نص | The label to describe the purpose of the `Select` component |
+ | عند التغيير | دالة | The function called when the selected values change |
+ | خيارات | مصفوفة | تمثل الخيارات المتاحة في مكون `الاختيار`. إنها مصفوفة من الكائنات حيث يحتوي كل كائن على `قيمة` (معرف فريد)، `تسمية` (معرف فريد)، و`أيقونة` اختيارية |
+ | القيمة | نص | تمثل القيمة المحددة حاليًا. يجب أن تطابق إحدى خصائص `القيمة` في مصفوفة `الخيارات` |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/text.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/text.mdx
index 81d892ae61..884189938b 100644
--- a/packages/twenty-docs/l/ar/twenty-ui/input/text.mdx
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/text.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/notes/notes_header.png
---
-
+
## إدخال نص
@@ -12,59 +12,53 @@ image: /images/user-guide/notes/notes_header.png
يسمح للمستخدمين بإدخال وتحرير النص.
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
-
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
-```jsx
-import { RecoilRoot } from "recoil";
-import { TextInput } from "@/ui/input/components/TextInput";
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
-export const MyComponent = () => {
- const handleChange = (text) => {
- console.log("Input changed:", text);
- };
+ return (
+
+
+
+ );
+ };
- const handleKeyDown = (event) => {
- console.log("Key pressed:", event.key);
- };
+ ```
+
- return (
-
-
-
- );
-};
-
-```
-
-
-
-
-
-| المحددات | النوع | الوصف |
-| ---------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------ |
-| className | string | اسم اختياري لتنسيقات إضافية |
-| التسمية | string | يمثل التسمية للإدخال. |
-| عند التغيير | function | الدالة التي تُستدعى عند تغيير قيمة الإدخال. |
-| عرض كامل | قيمة منطقية | يشير إلى ما إذا كان الإدخال يجب أن يشغل 100% من العرض. |
-| تعطيل الإختصارات | قيمة منطقية | يشير إلى ما إذا كانت الاختصارات ممكنة للإدخال. |
-| خطأ | string | يمثل رسالة الخطأ التي سيتم عرضها. عند توفرها، تضيف رمز خطأ على الجانب الأيمن من الإدخال. |
-| onKeyDown | function | يتم الاستدعاء عندما يتم الضغط على مفتاح عند التركيز على حقل الإدخال. يتلقى `React.KeyboardEvent` كمعلمة |
-| أيقونة يمين | مكون رمز | مكون أيقونة اختياري معروض على الجانب الأيمن من الإدخال. |
-
-يقبل المكون أيضًا دعم خصائص HTML أخرى لعناصر الإدخال.
-
-
+
+ | خصائص | النوع | الوصف |
+ | ---------------- | ------------- | ------------------------------------------------------------------------------------------------------- |
+ | className | string | اسم اختياري للتنسيق الإضافي. |
+ | التسمية | نص | يمثل التسمية للإدخال. |
+ | onChange | وظيفة | الدالة التي تُستدعى عند تغيير قيمة الإدخال. |
+ | عرض كامل | قيمة منطقية | يشير إلى ما إذا كان الإدخال يجب أن يشغل 100% من العرض. |
+ | تعطيل الإختصارات | قيمة منطقية | يشير إلى ما إذا كانت الاختصارات ممكنة للإدخال. |
+ | خطأ | string | يمثل رسالة الخطأ التي سيتم عرضها. عند توفرها، تضيف رمز خطأ على الجانب الأيمن من الإدخال. |
+ | onKeyDown | دالة | يتم الاستدعاء عندما يتم الضغط على مفتاح عند التركيز على حقل الإدخال. يتلقى `React.KeyboardEvent` كمعلمة |
+ | أيقونة يمين | مكون الأيقونة | مكون أيقونة اختياري معروض على الجانب الأيمن من الإدخال. |
+ يقبل المكون أيضًا دعم خصائص HTML أخرى لعناصر الإدخال.
+
## إدخال نص بالحجم التلقائي
@@ -72,46 +66,40 @@ export const MyComponent = () => {
مكون إدخال نصي يعدل ارتفاعه تلقائيًا بناءً على المحتوى.
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
-
-
-```jsx
-import { RecoilRoot } from "recoil";
-import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
-
-export const MyComponent = () => {
- return (
-
- console.log("onValidate function fired")}
- minRows={1}
- placeholder="Write a comment"
- onFocus={() => console.log("onFocus function fired")}
- variant="icon"
- buttonTitle
- value="Task: "
- />
-
- );
-};
-```
-
-
-
-
-
-| المحددات | النوع | الوصف |
-| ------------------ | -------- | ---------------------------------------------------------------------------------------------------------- |
-| onValidate | function | الدالة التي ترغب في تفعيلها عند تصديق المستخدم الإدخال. |
-| الحد الأدنى للأسطر | رقم | عدد الأسطر الأدنى للمساحة النصية. |
-| نص توضيحي | string | النص التوضيحي الذي ترغب في عرضه عند كون المساحة النصية فارغة. |
-| onFocus | function | الدالة التي ترغب في تفعيلها عند تركيز المساحة النصية. |
-| التنوع | string | البديل للإدخال. تشمل الخيارات: `افتراضي`، `أيقونة`، و`زر`. |
-| عنوان الزر | string | العنوان للزر (فقط للبديل الزر). |
-| القيمة | string | القيمة الأولية للمساحة النصية. |
-
-
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+ | خصائص | النوع | الوصف |
+ | ------------------ | ----- | ------------------------------------------------------------- |
+ | onValidate | دالة | الدالة التي ترغب في تفعيلها عند تصديق المستخدم الإدخال. |
+ | الحد الأدنى للأسطر | رقم | عدد الأسطر الأدنى للمساحة النصية. |
+ | النص التوضيحي | نص | النص التوضيحي الذي ترغب في عرضه عند كون المساحة النصية فارغة. |
+ | onFocus | دالة | الدالة التي ترغب في تفعيلها عند تركيز المساحة النصية. |
+ | البديل | نص | البديل للإدخال. تشمل الخيارات: `افتراضي`، `أيقونة`، و`زر`. |
+ | عنوان الزر | نص | العنوان للزر (فقط للبديل الزر). |
+ | القيمة | نص | القيمة الأولية للمساحة النصية. |
+
## مساحة نصية
@@ -119,35 +107,31 @@ export const MyComponent = () => {
تتيح لك إنشاء إدخالات نصية متعددة الأسطر.
-
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
-```jsx
-import { TextArea } from "@/ui/input/components/TextArea";
+ export const MyComponent = () => {
+ return (
+
-export const MyComponent = () => {
- return (
-
-
-
-
-| المحددات | النوع | الوصف |
-| ------------------ | ----------- | ----------------------------------------------------------- |
-| معطل | قيمة منطقية | يشير إلى ما إذا كانت المساحة النصية معطلة. |
-| الحد الأدنى للأسطر | رقم | العدد الأدنى للأسطر الظاهرة للمساحة النصية. |
-| عند التغيير | function | دالة الاستدعاء تُشغّل عند تغيّر محتوى منطقة النص |
-| نص توضيحي | string | النص المُوضّح عندما تكون منطقة النص فارغة |
-| القيمة | string | القيمة الحالية لمنطقة النص |
-
-
+
+ | خصائص | النوع | الوصف |
+ | ------------------ | ----------- | ------------------------------------------------ |
+ | تعطيل | قيمة منطقية | يشير إلى ما إذا كانت المساحة النصية معطلة. |
+ | الحد الأدنى للأسطر | رقم | العدد الأدنى للأسطر الظاهرة للمساحة النصية. |
+ | onChange | وظيفة | دالة الاستدعاء تُشغّل عند تغيّر محتوى منطقة النص |
+ | نص توضيحي | نص | النص المُوضّح عندما تكون منطقة النص فارغة |
+ | القيمة | نص | القيمة الحالية لمنطقة النص |
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/ar/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..91e8981af6
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: تبديل
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ----------- | ----------- | --------------------------------------------------------------------------- | ----------------- |
+ | القيمة | قيمة منطقية | The current state of the toggle | `خاطئ` |
+ | عند التغيير | دالة | Callback function triggered when the toggle state changes | |
+ | اللون | string | لون التبديل عند كونه | لون أزرق |
+ | حجم التبديل | نص | حجم التبديل الذي يؤثر على كل من الطول والوزن. لديها خياران: `صغير` و`متوسط` | متوسط |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/introduction.mdx b/packages/twenty-docs/l/ar/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..2f4f3610e0
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: نظرة عامة
+description: مكتبة المكونات لتطبيق Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## مكونات
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation.mdx
new file mode 100644
index 0000000000..b2ff7e566c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/navigation.mdx
@@ -0,0 +1,8 @@
+---
+title: Navigation
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..33f7c87e2f
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Breadcrumb
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Renders a breadcrumb navigation bar.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "الصفحة الرئيسية", href: "/" },
+ { children: "الفئة", href: "/category" },
+ { children: "الفئة الفرعية", href: "/category/subcategory" },
+ { children: "الصفحة الحالية" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | --------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | اسم الفئة | نص | اسم فئة اختياري لتنسيقات إضافية |
+ | روابط | مصفوفة | An array of objects, each representing a breadcrumb link. كل كائن يحتوي على خاصية `children` (محتوى النص للرابط) وخاصية `href` اختيارية (رابط URL للتنقل إليه عند النقر على الرابط) |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/links.mdx
index dba2e922f5..af0d81c708 100644
--- a/packages/twenty-docs/l/ar/twenty-ui/navigation/links.mdx
+++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/links.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/what-is-twenty/20.png
---
-
+
## رابط الاتصال
@@ -12,44 +12,40 @@ image: /images/user-guide/what-is-twenty/20.png
مكون رابط منمق لعرض معلومات الاتصال.
-
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
-```jsx
-import { BrowserRouter as Router } from 'react-router-dom';
+ import { ContactLink } from 'twenty-ui/navigation';
-import { ContactLink } from 'twenty-ui/navigation';
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log('Contact link clicked!', event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log('Contact link clicked!', event);
- };
-
- return (
-
-
- example@example.com
-
-
- );
-};
-```
-
-
-
-
-| المحددات | النوع | الوصف |
-| ------------------------------ | ----------------- | ------------------------------------------------ |
-| className | string | اسم اختياري لتنسيقات إضافية |
-| رابط | string | عنوان URL المستهدف أو المسار للرابط |
-| عند_النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
-| الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
-
-
+ return (
+
+
+ example@example.com
+
+
+ );
+ };
+ ```
+
+
+ | خصائص | النوع | الوصف |
+ | --------- | ----------------- | ------------------------------------------------ |
+ | className | string | اسم اختياري للتنسيق الإضافي. |
+ | رابط | نص | عنوان URL المستهدف أو المسار للرابط |
+ | عند النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
+ | الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
+
## رابط خام
@@ -57,39 +53,36 @@ export const MyComponent = () => {
مكون رابط منمق لعرض الروابط.
-
+
+ ```jsx
+ import { RawLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { RawLink } from "/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log("Contact link clicked!", event);
- };
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
- return (
-
-
- Contact Us
-
-
- );
-};
+ ```
+
-```
-
-
-
-
-| المحددات | النوع | الوصف |
-| --------- | ----------------- | ------------------------------------------------ |
-| className | string | اسم اختياري لتنسيقات إضافية |
-| رابط | string | عنوان URL المستهدف أو المسار للرابط |
-| عند النقر | function | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
-| الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
-
-
+
+ | خصائص | النوع | الوصف |
+ | --------- | ----------------- | ------------------------------------------------ |
+ | اسم الصنف | string | اسم اختياري لتنسيقات إضافية |
+ | رابط | string | عنوان URL المستهدف أو المسار للرابط |
+ | عند النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
+ | الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
+
## رابط مستدير
@@ -97,38 +90,34 @@ export const MyComponent = () => {
رابط مستدير مثبت مع مكون Chip للروابط.
-
+
+ ```jsx
+ import { RoundedLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { RoundedLink } from "/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log("Contact link clicked!", event);
- };
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
+ ```
+
- return (
-
-
- Contact Us
-
-
- );
-};
-```
-
-
-
-
-
-| المحددات | النوع | الوصف |
-| --------- | ----------------- | ------------------------------------------------ |
-| رابط | string | عنوان URL المستهدف أو المسار للرابط |
-| الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
-| عند النقر | function | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
-
-
+
+ | خصائص | النوع | الوصف |
+ | --------- | ----------------- | ------------------------------------------------ |
+ | رابط | string | عنوان URL المستهدف أو المسار للرابط |
+ | الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
+ | عند النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
+
## رابط التواصل الاجتماعي
@@ -136,33 +125,30 @@ export const MyComponent = () => {
روابط اجتماعية منمقة، مع دعم لأنواع متعددة من الروابط الاجتماعية، مثل العناوين الإلكترونية، LinkedIn، وX (أو Twitter).
-
+
+ ```jsx
+ import { SocialLink } from "twenty-ui/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { SocialLink } from "twenty-ui/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
-export const MyComponent = () => {
- return (
-
-
-
- );
-};
-```
-
-
-
-
-| المحددات | النوع | الوصف |
-| ------------------------------ | ----------------- | ---------------------------------------------------------------------------------------------------- |
-| رابط | string | عنوان URL المستهدف أو المسار للرابط |
-| الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
-| النوع | string | نوع الروابط الاجتماعية. تشمل الخيارات: `url`, `LinkedIn`, و`Twitter` |
-| عند_النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
-
-
+
+ | خصائص | النوع | الوصف |
+ | --------- | ----------------- | -------------------------------------------------------------------- |
+ | رابط | string | عنوان URL المستهدف أو المسار للرابط |
+ | الأبناء | `React.ReactNode` | المحتوى ليتم عرضه داخل الرابط |
+ | النوع | string | نوع الروابط الاجتماعية. تشمل الخيارات: `url`, `LinkedIn`, و`Twitter` |
+ | عند النقر | وظيفة | دالة رد النداء ليتم تفعيلها عند النقر على الرابط |
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..8c3c4a1b67
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: عنصر قائمة
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+عنصر قائمة متعدد الاستخدامات مصمم للاستخدام في قائمة أو قائمة تنقل.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Icon button clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | -------------- | ------------- | ----------------------------------------------------------------------------------------- |
+ | أيقونة اليسار | مكون الأيقونة | أيقونة اختيارية تظهر قبل النص في عنصر القائمة |
+ | accent | نص | Specifies the accent color of the menu item. تشمل الخيارات: `افتراضي`, `خطر`, `موضع مؤقت` |
+ | نص | نص | المحتوى النصي لعنصر القائمة |
+ | أزرار الأيقونة | array | مجموعة من الكائنات التي تمثل أيقونات إضافية مرتبطة بعنصر القائمة |
+ | isTooltipOpen | قيمة منطقية | Controls the visibility of the tooltip associated with the menu item |
+ | معرف الفحص | نص | السمة data-testid لأغراض الاختبار |
+ | عند النقر | function | دالة الاستدعاء يتم تنشيطها عند النقر فوق عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري لتصميم إضافي |
+
+
+
+## الأشكال
+
+تتضمن الأشكال المختلفة لمكون عنصر القائمة ما يلي:
+
+### أمر
+
+عنصر قائمة على نمط الأوامر داخل القائمة للإشارة إلى اختصارات لوحة المفاتيح.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("تم النقر على الأمر!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ------------- | -------------------------------------------------------- |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية إذا ظهرت قبل النص في عنصر القائمة |
+ | نص | نص | محتوى النص لعنصر القائمة |
+ | firstHotKey | string | أول اختصار لوحة مفاتيح مرتبط بالأمر |
+ | secondHotKey | string | The second keyboard shortcut associated with the command |
+ | isSelected | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددا أو مميزا |
+ | عند النقر | دالة | دالة الاستدعاء يتم تنشيطها عند النقر فوق عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري لإضافة التنسيق |
+
+
+
+### قابلة للسحب
+
+مكون عنصر قائمة قابل للسحب مصمم ليتم استخدامه في قائمة أو قائمة حيث يمكن سحب العناصر، ويتم تنفيذ إجراءات إضافية عبر أزرار الأيقونات.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("تم النقر على عنصر القائمة!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ------------- | -------------------------------------------------------------------------------- |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية تظهر قبل النص في عنصر القائمة |
+ | accent | نص | لون العنصر لهجة القائمة. It can either be `default`, `placeholder`, and `danger` |
+ | أزرار الأيقونات | array | مصفوفة الكائنات التي تمثل أزرار الأيقونات الإضافية المرتبطة بعنصر القائمة |
+ | isTooltipOpen | قيمة منطقية | Controls the visibility of the tooltip associated with the menu item |
+ | عند_النقر | دالة | وظيفة استدعاء ليتم تشغيلها عند النقر فوق الرابط |
+ | نص | نص | محتوى النص لعنصر القائمة |
+ | isDragDisabled | قيمة منطقية | يشير إلى ما إذا كان تم تعطيل السحب |
+ | اسم الفئة | نص | اسم اختياري لإضافة التنسيق |
+
+
+
+### التحديد المتعدد
+
+يوفر طريقة لتنفيذ وظيفة التحديد المتعدد مع مربع اختيار مصاحب.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ------------- | ------------------------------------------------------ |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية تظهر قبل النص في عنصر القائمة |
+ | نص | string | محتوى النص لعنصر القائمة |
+ | المحدد | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددًا (مفحوص) |
+ | onSelectChange | دالة | وظيفة استدعاء يتم تشغيلها عند تغيير حالة مربع الاختيار |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+
+
+
+### Multi Select Avatar
+
+عنصر قائمة متعدد الخيارات مع صورة رمزية، ومربع اختيار للتحديد، ومحتوى نصي.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="الخيار الأول"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ----------- | -------------------------------------------------------------------- |
+ | الصورة الرمزبية | `ReactNode` | الصورة الرمزبية أو الأيقونة لعرضها على الجانب الأيسر من عنصر القائمة |
+ | نص | نص | محتوى النص لعنصر القائمة |
+ | المحدد | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددًا (مفحوص) |
+ | onSelectChange | دالة | وظيفة استدعاء يتم تشغيلها عند تغيير حالة مربع الاختيار |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+
+
+
+### التنقل
+
+A menu item featuring an optional left icon, textual content, and a right-chevron icon.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("التنقل إلى صفحة أخرى");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | العناصر | النوع | الوصف |
+ | --------------- | ------------- | ------------------------------------------------------ |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية تظهر قبل النص في عنصر القائمة |
+ | نص | نص | محتوى النص لعنصر القائمة |
+ | عند_النقر | دالة | وظيفة الاستدعاء يتم تنشيطها عند النقر على عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+
+
+
+### اختيار
+
+عنصر قائمة يمكن تحديده، مع شكل محتوى متاح (أيقونة ونص) ومُؤشر (أيقونة تحقق) لحالة الاختيار.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("تم اختيار عنصر القائمة");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ------------- | ---------------------------------------------------------- |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية تظهر قبل النص في عنصر القائمة |
+ | نص | نص | محتوى النص لعنصر القائمة |
+ | المحدد | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددًا (مفحوص) |
+ | تعطيل | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة معطلا |
+ | معطل | قيمة منطقية | يشير إلى ما إذا كان يتم التحويم حاليًا على عنصر القائمة |
+ | عند_النقر | دالة | دالة الاستدعاء التي يتم تحفيزها عند النقر على عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+
+
+
+### Select Avatar
+
+A selectable menu item with an avatar, featuring optional left content (avatar and text) and an indicator (check icon) for the selected state.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Menu item selected");
+ };
+
+ return (
+ }
+ text="First Option"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | -------------- | ------------ | ---------------------------------------------------------------------------- |
+ | الصورة الرمزية | `مكون React` | الصورة الرمزية أو الأيقونة التي سيتم عرضها على الجانب الأيسر من عنصر القائمة |
+ | نص | نص | محتوى النص في عنصر القائمة |
+ | المحدد | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددًا (مفحوص) |
+ | تعطيل | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة معطلاً |
+ | معلق عليه | قيمة منطقية | يشير إلى ما إذا كان يتم التحويم حاليًا على عنصر القائمة |
+ | testId | نص | سمة data-testid لأغراض الاختبار |
+ | عند_النقر | دالة | دالة الاستدعاء التي يتم تحفيزها عند النقر على عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري للتنسيق الإضافي. |
+
+
+
+### اختيار اللون
+
+A selectable menu item with a color sample for scenarios where you want users to choose a color from a menu.
+
+
+
+ ```jsx
+ استيراد {MenuItemSelectColor} من "twenty-ui/display";
+
+ تصدير المكون الخاص بي = () => {
+ const handleSelection = () => {
+ console.log("تم اختيار عنصر القائمة");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | اللون | نص | لون الثيم المعروض كعينة في عنصر القائمة. الخيارات تشمل: `أخضر`, `تركواز`, `سماوي`, `أزرق`, `أرجواني`, `وردي`, `أحمر`, `برتقالي`, `أصفر`, `رمادي`. |
+ | المحدد | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة محددًا (مفحوص) |
+ | تعطيل | قيمة منطقية | يشير إلى ما إذا كان عنصر القائمة معطلاً |
+ | معلق عليه | قيمة منطقية | يشير إلى ما إذا كان يتم التحويم حاليًا على عنصر القائمة |
+ | البديل | نص | The variant of the color sample. يمكن أن يكون إما `افتراضي` أو `خط أنابيب` |
+ | عند_النقر | دالة | دالة الاستدعاء التي يتم تحفيزها عند النقر على عنصر القائمة |
+ | اسم الفئة | نص | اسم اختياري للتنسيق الإضافي. |
+
+
+
+### تبديل
+
+عنصر قائمة مع مفتاح تبديل مرتبط للسماح للمستخدمين بتمكين أو تعطيل ميزة معينة
+
+
+
+ ```jsx
+ استيراد {IconBell} من '@tabler/icons-react';
+
+ استيراد {MenuItemToggle} من 'twenty-ui/display';
+
+ تصدير المكون الخاص بي = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف |
+ | --------------- | ------------- | ------------------------------------------------------------ |
+ | الأيقونة اليسرى | مكون الأيقونة | أيقونة اختيارية تُعرض قبل النص في عنصر القائمة |
+ | نص | نص | محتوى النص في عنصر القائمة |
+ | مبدل | قيمة منطقية | يشير إلى ما إذا كان مفتاح التبديل في حالة "تشغيل" أو "إيقاف" |
+ | onToggleChange | دالة | دالة الاستدعاء التي يتم تحفيزها عند تغيير حالة مفتاح التبديل |
+ | حجم التبديل | نص | حجم مفتاح التبديل. يمكن أن يكون إما \ |
+ | اسم الفئة | نص | اسم اختياري لتنسيقات إضافية |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx
new file mode 100644
index 0000000000..b639a94136
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx
@@ -0,0 +1,34 @@
+---
+title: شريط الخطوات
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+يعرض التقدم من خلال سلسلة من الخطوات المرقمة عن طريق تمييز الخطوة النشطة. يولد حاوية تحتوي على خطوات، يتم تمثيل كل منها بواسطة مكون 'Step'.
+
+
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+
+ export const MyComponent = () => {
+ return (
+
+ الخطوة 1
+ الخطوة 2
+ الخطوة 3
+
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف |
+ | ---------- | ----- | ----------------------------------------------------------------- |
+ | activeStep | رقم | مؤشر للخطوة النشطة حاليًا. هذا يحدد أي خطوة يجب إبرازها بشكل مرئي |
+
+
diff --git a/packages/twenty-docs/l/ar/twenty-ui/progress-bar.mdx b/packages/twenty-docs/l/ar/twenty-ui/progress-bar.mdx
new file mode 100644
index 0000000000..c2b0a64ae4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/twenty-ui/progress-bar.mdx
@@ -0,0 +1,66 @@
+---
+title: التغذية الراجعة
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+يشير إلى تقدم أو عد تنازلي ويتحرك من اليمين إلى اليسار.
+
+
+
+ ```jsx
+ import { ProgressBar } from "twenty-ui/feedback";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | المحددات | النوع | الوصف | الإعداد الافتراضي |
+ | ---------------- | ----------- | ------------------------------------------------------------------------------- | ----------------- |
+ | المدة | رقم | إجمالي مدة الرسوم المتحركة لشريط التقدم بالميلي ثانية | 3 |
+ | التأخير | رقم | The delay in starting the progress bar animation in milliseconds | 0 |
+ | التخفيف | نص | وظيفة التخفيف للرسوم المتحركة لشريط التقدم | easeInOut |
+ | ارتفاع الشريط | رقم | ارتفاع الشريط بالبكسل | 24 |
+ | لون الشريط | نص | لون الشريط | gray80 |
+ | التشغيل التلقائي | قيمة منطقية | إذا كان `true`، فإن الرسوم المتحركة لشريط التقدم تبدأ تلقائيًا عند تحميل المكون | `صحيح` |
+
+
+
+## شريط التقدم الدائري
+
+يشير إلى تقدم المهمة، ويستخدم غالباً في شاشات التحميل أو الأماكن التي ترغب فيها في إبلاغ العمليات الجارية إلى المستخدم.
+
+
+
+ ```jsx
+ import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | الخصائص | النوع | الوصف | الإعداد الافتراضي |
+ | ---------- | ----- | ----------------------- | ----------------- |
+ | الحجم | رقم | حجم شريط التقدم الدائري | 50 |
+ | عرض الشريط | رقم | عرض خط شريط التقدم | 5 |
+ | لون الشريط | نص | لون شريط التقدم | currentColor |
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..7d6ee46352
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## نظرة عامة
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | الوصف |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/ar/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/ar/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..f54f8f3278
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## نظرة عامة
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | الوصف |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/ar/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..3e2ac87579
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: الأذونات والتحكم في الوصول
+description: تحكّم بما يمكن لوكلاء الذكاء الاصطناعي الوصول إليه وتعديله في مساحة عملك.
+---
+
+## نظرة عامة
+
+يحترم وكلاء الذكاء الاصطناعي هيكل الأذونات الحالي لديك. وهذا مهم بشكل خاص للفرق التي تريد التحكّم بدقة في ما يمكن لعمليات الذكاء الاصطناعي المؤتمتة الوصول إليه أو تعديله في مساحة عملها.
+
+## تعيين دور لوكيل ذكاء اصطناعي
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. انقر على الدور الذي ترغب في تعيينه
+3. افتح علامة التبويب **التعيين**
+4. ضمن **وكلاء الذكاء الاصطناعي**، انقر **+ تعيين لوكيل ذكاء اصطناعي**
+5. اختر وكيل الذكاء الاصطناعي من القائمة
+6. أكد التعيين
+
+## لماذا نعيّن أدوارًا لوكلاء الذكاء الاصطناعي؟
+
+| الفائدة | الوصف |
+| ------------------- | --------------------------------------------------------------------- |
+| **الأمان** | قيِّد ما يمكن لوكلاء الذكاء الاصطناعي الوصول إليه أو تعديله من بيانات |
+| **الامتثال** | ضمان أن يعالج الذكاء الاصطناعي فقط البيانات التي يحتاجها |
+| **التحكم** | منع الإجراءات غير المقصودة الناتجة عن أتمتة الذكاء الاصطناعي |
+| **إمكانية التدقيق** | تتبُّع الإجراءات التي نفّذها كل وكيل |
+
+
+ بالنسبة لوكلاء الذكاء الاصطناعي الذين يعملون ضمن سير العمل، يضمن تعيين الدور ألا يتمكّن الوكيل من الوصول إلى البيانات أو تعديلها خارج نطاقه المقصود — حتى إذا كانت لسير العمل أذونات أوسع.
+
+
+## ذات صلة
+
+* [الأذونات](/l/ar/user-guide/permissions-access/capabilities/permissions) — معلومات مفصلة حول إنشاء الأدوار وإدارتها
+* [وكلاء الذكاء الاصطناعي](/l/ar/user-guide/ai/capabilities/ai-agents) — قدرات الذكاء الاصطناعي ضمن سير العمل
diff --git a/packages/twenty-docs/l/ar/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/ar/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/ai/overview.mdx b/packages/twenty-docs/l/ar/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..5923f5a09a
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: الذكاء الاصطناعي
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## ما القادم
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### ٢. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**حالات الاستخدام:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## ابق على إطلاع
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/ar/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/ar/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..0e5128ab4b
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: خطط التسعير
+description: تعرّف على خطط تسعير Twenty وكيفية التبديل بينها.
+---
+
+## نظرة عامة
+
+توفر Twenty تسعيرًا مرنًا ليناسب الفرق بمختلف أحجامها، سواء كنت تفضّل الاستضافة السحابية أو الاستضافة الذاتية.
+
+## الخطط السحابية
+
+### Pro (سحابي)
+
+للفرق الجاهزة للتوسّع:
+
+* جميع ميزات إدارة علاقات العملاء (CRM) الأساسية
+* مزامنة البريد الإلكتروني والتقويم
+* عمليات سير العمل والأتمتة
+* دعم قياسي
+
+
+ الميزات المتميزة (SSO وأذونات على مستوى الصف) غير مشمولة في خطة Pro.
+
+
+### المؤسسة (سحابي)
+
+للفرق الأكبر ذات الاحتياجات المتقدّمة:
+
+* كل ما في Pro
+* **ميزات متميزة**: تكامل SSO وأذونات على مستوى الصف
+* دعم متميز
+
+## خطط الاستضافة الذاتية
+
+### مجاني (استضافة ذاتية)
+
+استضف Twenty على بُنيتك التحتية الخاصة دون أي تكلفة:
+
+* تشمل جميع ميزات Pro
+* دعم المجتمع عبر Discord
+* تحكّم كامل في بياناتك
+
+### المؤسسة (استضافة ذاتية)
+
+للفرق التي تحتاج إلى ميزات متميزة أثناء الاستضافة الذاتية:
+
+* جميع ميزات Pro
+* **ميزات متميزة**: تكامل SSO وأذونات على مستوى الصف
+* دعم فريق Twenty
+* لا يُشترط نشر الشيفرة المخصّصة كمفتوح المصدر قبل التوزيع
+
+## الميزات المتميزة
+
+الميزات المتميزة متاحة فقط في خطط المؤسسة (السحابي أو الاستضافة الذاتية):
+
+* **تكامل SSO**: تسجيل دخول أحادي مع موفّر الهوية لديك
+* **أذونات على مستوى الصف**: تحكّم دقيق في الوصول على مستوى السجل
+
+## التبديل بين الخطط
+
+### الترقية إلى المؤسسة
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. انقر **التبديل إلى المؤسسة**
+3. أكِّد الترقية
+
+### الرجوع إلى Pro
+
+تواصل مع الدعم لتخفيض خطتك.
+
+### التبديل إلى الفوترة السنوية
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. انقر **التبديل إلى السنوي**
+3. وفّر مع الفوترة السنوية
+
+### التبديل إلى الفوترة الشهرية
+
+تواصل مع الدعم للعودة إلى الفوترة الشهرية.
diff --git a/packages/twenty-docs/l/ar/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ar/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..d0dc019185
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: رصيد سير العمل
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## نظرة عامة
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| شهري | 5 million/month |
+| سنوي | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | استخدام الاعتمادات |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **طلبات الذكاء الاصطناعي** (قريبًا) | Variable based on usage |
+
+يتم خصم الأرصدة فورًا عند تنفيذ سير العمل.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## شراء رصيد إضافي
+
+Need more credits?
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/ar/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/ar/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..1cf496239d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## التسعير
+
+
+
+ نعم، يمكنك استخدام Twenty مجانًا أثناء الاستضافة الذاتية. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. الدعم متاح عبر مجتمعنا في Discord.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ نحن لا نقدم مقاعد مجانية. التسعير يكون لكل مستخدم وكل مستخدم يحتاج إلى ترخيص للوصول إلى Twenty.
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`. ثم انقر على `التبديل إلى المؤسسة`.
+
+
+
+ يرجى التواصل مع فريقنا مباشرة عبر الدعم، لا يوجد حاليًا طريقة سهلة للقيام بذلك عبر واجهة المستخدم.
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`. ثم انقر على `التبديل إلى السنوي`.
+
+
+
+ يرجى التواصل مع فريقنا مباشرة عبر الدعم، لا يوجد حاليًا طريقة سهلة للقيام بذلك عبر واجهة المستخدم.
+
+
+
+ ستجد ذلك ضمن `الإعدادات → الفوترة`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ يستهلك كل إجراء سير عمل الرصيد بناءً على تعقيده.
+
+ * **العمليات الداخلية الأساسية** (مثل البحث والتحديث وإنشاء السجلات) تستهلك عدد قليل من الأرصدة
+ * **More complex operations** like code nodes and requests to external services consume more credits
+ * **طلبات الذكاء الاصطناعي** (قريبًا!) ستستهلك أيضًا المزيد من الأرصدة بناءً على الاستخدام
+
+ يتم خصم الأرصدة فورًا عند تنفيذ سير العمل. يمكنك متابعة استخدامك في **الإعدادات → الفوترة** لمتابعة الاستهلاك والأرصدة المتبقية.
+
+
+
+ تستطيع شراء أرصدة إضافية ضمن `الإعدادات → الفوترة`.
+
+
+
+## الفوترة
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`.
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`. ثم انقر على `عرض تفاصيل الفوترة`. ستتمكن من إضافة طريقة دفع جديدة هناك.
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`. ثم انقر على `عرض تفاصيل الفوترة`. ستتمكن من تعديل معلومات الفوترة هناك.
+
+
+
+ يمكنك القيام بذلك ضمن `الإعدادات → الفوترة`. ثم انقر على `عرض تفاصيل الفوترة`. سترى جميع فواتيرك في أسفل الشاشة.
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx b/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..9d3da7812d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: الفوترة
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| الخطة | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/ar/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..620926b3aa
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: تقويم
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/ar/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## علامة تبويب التقويم
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **الأشخاص**: عرض جميع الاجتماعات المجدولة مع جهة اتصال محددة
+* **الشركات**: راجع جميع الاجتماعات المتعلقة بشركة وموظفيها
+* **الفرص**: الوصول إلى تاريخ الاجتماع المتعلق بالشركة المرتبطة بهذه الفرصة
+
+### عرض تاريخ الاجتماعات
+
+1. **انتقل إلى سجل**: انتقل إلى أي سجل لشخص، شركة، أو فرصة
+2. **اختر علامة تبويب التقويم**: انقر على علامة التبويب `التقويم` بجانب علامة البريد الإلكتروني
+3. **تصفح تاريخ الاجتماعات**: عرض جميع الاجتماعات المجدولة وتفاصيلها
+4. **الوصول إلى سياق الاجتماع**: شاهد المشاركين في الاجتماع، الأوقات، والمعلومات ذات الصلة
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## What Gets Synced
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## ما لا يتم مزامنته
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..1794520c7c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**ملاحظة**: لربط حسابات البريد الإلكتروني الخاصة بك وتكوين إعدادات المزامنة، قم بزيارة [إعدادات البريد الإلكتروني والتقويم](/l/ar/user-guide/calendar-emails/overview).
+
+## كيف تعمل تكاملات البريد الإلكتروني
+
+يربط Twenty تلقائيًا رسائل البريد الإلكتروني الواردة من صناديق البريد المتصلة بالسجلات ذات الصلة في إدارة علاقات العملاء (CRM)، مما يحافظ على تاريخ جميع الاتصالات في مكان واحد.
+
+### Objects Where Emails Can Be Found
+
+تظهر المحادثات البريدية في ثلاثة أشياء رئيسية:
+
+* **الأشخاص**: عرض جميع رسائل البريد الإلكتروني التي تم تبادلها مع جهة اتصال محددة
+* **الشركات**: راجع جميع رسائل البريد الإلكتروني المتعلقة بالشركة وموظفيها
+* **الفرص**: الوصول إلى سلاسل البريد الإلكتروني المتعلقة بالشركة المرتبطة بهذه الفرصة. لم يتم عرض سلاسل البريد الإلكتروني من الأفراد في الفرصة حتى الآن.
+
+### عرض سلاسل البريد الإلكتروني
+
+1. **انتقل إلى سجل**: انتقل إلى أي سجل لشخص، شركة، أو فرصة
+2. **اختر علامة تبويب البريد الإلكتروني**: انقر على علامة التبويب `البريد الإلكتروني` لعرض الرسائل المتزامنة
+3. **Open an Email Thread**: Click on any email to open and read the full conversation
+4. **تصفح التاريخ**: انتقل عبر السجل الكامل للبريد الإلكتروني مع تلك الجهة
+
+
+
+## ما ستراه
+
+### عرض سلسلة البريد الإلكتروني
+
+عند فتح سلسلة بريد إلكتروني، يمكنك:
+
+* **قراءة المحادثات بالكامل**: شاهد تبادلات البريد الإلكتروني الكاملة
+* **عرض المشاركين**: شاهد جميع الأشخاص المشاركين في سلسلة البريد الإلكتروني
+* **تحقق من الأوقات المرسلة**: تعرف على الأوقات التي تم فيها إرسال كل بريد إلكتروني بالضبط
+* **الوصول إلى السياق**: افهم التاريخ الكامل للاتصالات
+
+### رؤية البريد الإلكتروني
+
+بناءً على إعدادات صندوق البريد الخاص بك، قد ترى:
+
+* **المحتوى الكامل**: نص البريد الإلكتروني الكامل والتفاصيل
+* **الموضوع + البيانات الوصفية**: سطر الموضوع، المرسل، المتلقي، والتوقيت
+* **البيانات الوصفية فقط**: معلومات أساسية بدون محتوى البريد الإلكتروني
+
+## سلوك مزامنة البريد الإلكتروني
+
+### What Gets Synced
+
+* **البريد الخارجي**: كافة رسائل البريد الإلكتروني مع جهات الاتصال خارج مؤسستك
+* **ربط تلقائي**: رسائل البريد الإلكتروني تتصل بسجلات الأشخاص والشركات الحالية
+* **عناوين متعددة**: رسائل البريد الواردة من أي عنوان ترتبط بسجل جهة الاتصال نفسه
+* **التحديثات**: تظهر رسائل البريد الإلكتروني الجديدة خلال 5 دقائق
+
+### ما لا يتم مزامنته
+
+* **البريد الداخلي**: تبقى رسائل البريد الإلكتروني بين الزملاء (نفس النطاق) خاصة
+* **البريد الجماعي**: يتم استبعاد قوائم التوزيع والرسائل البريدية الجماعية
+* **المجلدات المستبعدة**: يتم استبعاد المجلدات التي اخترت عدم مزامنتها (تم تكوينها تحت الإعدادات → الحسابات → البريد الإلكتروني)
+
+### مزامنة المجلدات الانتقائية (ميزة مختبر)
+
+تحكم بما تم مزامنته من مجلدات البريد الإلكتروني مع Twenty:
+
+1. تفعيل "مجلد الرسائل" في الإعدادات → الإصدارات → مختبر
+2. تكوين المجلدات تحت الإعدادات → الحسابات → البريد الإلكتروني
+3. اختر مجلدات معينة لتضمينها أو استبعادها (البريد الوارد، المرسل، الأرشيف، المجلدات المخصصة)
+
+## استكشاف مشكلات مزامنة البريد الإلكتروني
+
+### مشكلات المزامنة الشائعة
+
+* **تأخير المزامنة**: تظهر رسائل البريد الإلكتروني خلال 5 دقائق، ولكن قد تستغرق عمليات الاستيراد الأولية وقتًا أطول
+* **غياب رسائل البريد الإلكتروني**: تحقق مما إذا:
+ * المجلدات مستبعدة في إعدادات مجلد الرسائل
+ * تم تعطيل إنشاء جهة الاتصال تلقائيًا (البريد الإلكتروني يحتاج إلى سجلات Twenty موجودة)
+ * البريد الإلكتروني من زملاء العمل (نفس النطاق) أو قوائم المجموعات
+ * صندوق البريد لا يزال يكمل المزامنة الأولية
+
+### قيود البريد الإلكتروني
+
+* **المجلدات النظامية**: قد لا تكون بعض مجلدات البريد الإلكتروني متاحة للمزامنة
+* **الأسماء المستعارة**: يمكن توصيل حسابات البريد الفعلية فقط (وليس الأسماء المستعارة البريدية)
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..83eb4bd4dc
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/ar/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..b1356a7d7a
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| كائن | What You See |
+| ----------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **الشركات** | All emails with anyone from that company (based on email domain) |
+| **الفرص** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## كائنات مخصصة
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..5d5c6e62bc
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## نظرة عامة
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. اذهب إلى **الإعدادات → الحسابات**
+2. انقر على **إضافة حساب**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..2ac22ce445
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### ٢. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..6cb2b01c2e
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: تقييد رسائل البريد الإلكتروني المُستوردة
+description: تحكّم في أي رسائل بريد إلكتروني تُستورد إلى Twenty.
+---
+
+## نظرة عامة
+
+افتراضيًا، يقوم Twenty بمزامنة جميع رسائل البريد الإلكتروني الخارجية من صندوق البريد المتصل لديك. يمكنك تقييد ما يتم استيراده باستخدام **اختيار المجلدات** و**إعدادات الرؤية**.
+
+## الطريقة 1: اختيار المجلدات (مُوصى بها)
+
+تحكم بما تم مزامنته من مجلدات البريد الإلكتروني مع Twenty:
+
+1. اذهب إلى **الإعدادات → الإصدارات → المختبر**
+2. فعِّل **مجلد الرسائل**
+3. العودة إلى **الإعدادات → الحسابات**
+4. اختر حساب البريد الإلكتروني المتصل لديك
+5. اختر المجلدات التي تريد مزامنتها:
+
+| مجلد | الوصف |
+| --------------------- | --------------------------------- |
+| **صندوق الوارد** | الرسائل الواردة الأساسية |
+| **المرسلة** | رسائل البريد الصادرة التي أرسلتها |
+| **الأرشيف** | الرسائل المؤرشفة |
+| **المجلدات المخصّصة** | أي مجلدات محددة تريدها |
+
+6. استبعِد المجلدات التي لا تريد مزامنتها (الرسائل غير المرغوب فيها، المهملات، المجلدات الشخصية)
+
+هذا يمنحك تحكّمًا دقيقًا في الرسائل التي تظهر في CRM الخاص بك دون مزامنة كل شيء.
+
+## الطريقة 2: إعدادات الإنشاء التلقائي لجهات الاتصال
+
+تحكّم في وقت إنشاء جهات الاتصال من رسائل البريد الإلكتروني:
+
+1. اذهب إلى **الإعدادات → الحسابات**
+2. اختر صندوق البريد المتصل لديك
+3. اختر خيارًا:
+ * **معطَّلة**: لن يتم إنشاء جهات اتصال، لكن ستُزامَن الرسائل مع جهات الاتصال الموجودة
+ * **المرسلة والمستلمة**: يتم إنشاء جهات اتصال من جميع رسائل البريد الإلكتروني الخارجية
+ * **المرسلة فقط**: يتم إنشاء جهات اتصال من الرسائل التي ترسلها فقط
+
+## ما يتم استبعاده دائمًا
+
+لا تتم مزامنة هذه الرسائل أبدًا، بغضّ النظر عن الإعدادات:
+
+* **الرسائل الداخلية**: رسائل البريد الإلكتروني بين الزملاء (نفس النطاق)
+* **الرسائل الجماعية**: قوائم التوزيع والرسائل الجماعية
+* **الرسائل غير المرغوب فيها/المهملات**: عادةً ما تُستبعَد مجلدات النظام
+
+## ملاحظة مهمة
+
+نحن لا نوفر عنوان بريد إلكتروني للنسخ الكربوني CC لأجل المزامنة الانتقائية. استخدم ميزة اختيار المجلدات أعلاه لتحقيق نفس مستوى التحكّم.
diff --git a/packages/twenty-docs/l/ar/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/ar/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..e1dadb0bcd
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Connection Options
+
+### حساب Google (Gmail وتقويم Google)
+
+1. اذهب إلى **الإعدادات → الحسابات**
+2. انقر على **إضافة حساب**
+3. Select **Continue with Google**
+4. السماح لـ Twenty بالوصول إلى Gmail وتقويم Google الخاص بك
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. ستبدأ رسائل البريد الإلكتروني وفعاليات التقويم بالمزامنة تلقائيًا
+
+### حساب Microsoft (Outlook وتقويم Microsoft)
+
+1. اذهب إلى **الإعدادات → الحسابات**
+2. انقر على **إضافة حساب**
+3. Select **Continue with Microsoft**
+4. السماح لـ Twenty بالوصول إلى Outlook وتقويم Microsoft الخاص بك
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. ستبدأ رسائل البريد الإلكتروني وفعاليات التقويم بالمزامنة تلقائيًا
+
+### إعداد SMTP/CalDAV (مزودون آخرون)
+
+بالنسبة لمزودي البريد الإلكتروني والتقويم الآخرين:
+
+1. انتقل إلى **الإعدادات → الإصدارات → المعمل** لتفعيل الميزة
+2. العودة إلى **الإعدادات → الحسابات**
+3. قم بتكوين إعدادات SMTP للبريد الإلكتروني
+4. قم بتكوين إعدادات CalDAV للتقويم
+5. اختبر الاتصال
+
+### صناديق بريد متعددة
+
+* **حسابات غير محدودة**: ربط حسابات بريد إلكتروني متعددة لكل مستخدم
+* **إدارة الحسابات**: التبديل بين صناديق بريد مختلفة
+* **إعدادات المزامنة**: تكوين إعدادات مختلفة لكل صندوق بريد
+
+
+ لا يمكن ربط إلا صناديق البريد الحقيقية (مثل support@domain.com بصندوق الوارد الخاص بها). لا يمكن ربط الأسماء المستعارة للبريد الإلكتروني التي توجه إلى صندوق بريد آخر بـ Twenty.
+
+
+## تكوين البريد الإلكتروني
+
+### ظهور الرسائل
+
+اختر مستويات مختلفة من الظهور لرسائل بريدك الإلكتروني:
+
+* **البيانات الوصفية فقط**: مشاركة المعلومات الأساسية فقط (المرسل، المستلم، التاريخ، الوقت)
+* **العنوان والبيانات الوصفية**: مشاركة سطر العنوان مع البيانات الوصفية
+* **محتوى البريد الإلكتروني الكامل**: مشاركة محتوى البريد الإلكتروني بالكامل بما في ذلك المرفقات
+
+### الإنشاء التلقائي للاتصالات
+
+* **معطل**: لا يتم إنشاء جهات اتصال تلقائيًا
+* **للرسائل المرسلة والمستلمة**: إنشاء جهات اتصال لجميع التفاعلات البريدية الخارجية
+* **للرسائل المرسلة فقط**: إنشاء جهات اتصال فقط لرسائل البريد التي ترسلها
+* **ملاحظة**: لا تتم مزامنة رسائل البريد الداخلية (نفس النطاق) للحفاظ على الخصوصية
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### التحكم بالرسائل التي تتم مزامنتها من خلال اختيار مجلد الرسائل (ميزة معمل)
+
+تحكم بما تم مزامنته من مجلدات البريد الإلكتروني مع Twenty:
+
+1. انتقل إلى **الإعدادات → الإصدارات → المعمل** وفعل **مجلد الرسائل**
+2. العودة إلى **الإعدادات → الحسابات** وحدد حساب البريد الإلكتروني المتصل.
+3. اختر المجلدات التي تريد مزامنتها:
+ * **البريد الوارد**: رسائل البريد الأولية الواردة
+ * **بريد مرسل**: رسائل البريد الصادرة التي قمت بإرسالها
+ * **مجلدات مخصصة**: أي مجلدات محددة تريد تضمينها
+ * **استبعاد المجلدات**: تخطي المجلدات مثل الرسائل غير المرغوب فيها، المهملات، أو المجلدات الشخصية
+
+هذا يمنحك التحكم الدقيق في الرسائل التي تظهر في CRM الخاص بك دون مزامنة كل شيء.
+
+**ما الذي يتم مزامنته:**
+
+* **رسائل البريد الخارجية**: جميع رسائل البريد الإلكتروني مع جهات اتصال خارجية من المجلدات المحددة
+* **الرسائل الداخلية**: لا يتم مزامنتها (تبقى رسائل البريد من نفس النطاق خاصة)
+* **المرفقات**: ستأتي في النصف الأول من 2026
+
+**ملاحظة**: لا نقدم عنوان بريد إلكتروني لنسخة كربونية للمزامنة الانتقائية. بدلاً من ذلك، استخدم ميزة مجلد الرسائل المذكورة أعلاه لتحقيق نفس مستوى التحكم حول أي الرسائل يتم مزامنتها مع Twenty.
+
+## تكوين التقويم
+
+### ظهور الفعاليات
+
+اختر ما سيكون مرئيًا للمستخدمين الآخرين في مساحة العمل الخاصة بك:
+
+* **كل شيء**: ستتم مشاركة تفاصيل الحدث كاملة مع فريقك
+* **البيانات الوصفية**: ستتم مشاركة فقط التاريخ والمشاركين مع فريقك
+
+### الإنشاء التلقائي للاتصالات للاجتماعات
+
+* **نعم**: إنشاء جهات اتصال تلقائيًا للمشاركين في الاجتماعات الذين ليسوا في CRM الخاص بك
+* **لا**: ربط الاجتماعات فقط بجهات الاتصال الموجودة
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### التحكم في الأحداث التي تتم مزامنتها
+
+* **استيراد الاجتماعات**: استيراد فعاليات التقويم تلقائيًا
+* **ربط الاتصال**: ربط الاجتماعات بسجلات الأشخاص والشركات
+
+**ما الذي يتم مزامنته:**
+
+* **الاجتماعات**: فعاليات التقويم مع المشاركين الخارجيين
+* **ربط الاتصال**: يتم ربط الأحداث تلقائيًا بسجلات إدارة علاقات العملاء
+* **فعاليات الفريق**: ظهور تقويم مشترك
+
+## تردد المزامنة
+
+**التحديثات كل 5 دقائق**: تتم مزامنة البيانات البريدية والتقويمية تلقائيًا كل 5 دقائق بعد الاستيراد الأولي.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## الخطوات التالية
+
+* [Mailbox capabilities](/l/ar/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/ar/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..8648593673
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: لوحات القيادة
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## نظرة عامة
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### أفضل الممارسات
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### المفضلات
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..c2b3900b74
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: الأدوات
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Styling
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..ed65d38510
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ ليس بعد. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/ar/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..bba4022861
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: لوحات القيادة
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### لوحات القيادة
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### علامات التبويب
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### الأدوات
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## البدء
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. حفظ
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## أفضل الممارسات
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## الخطوات التالية
+
+* [Widgets and visualizations](/l/ar/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/ar/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..28c690a843
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## كيف يعمل
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/ar/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/ar/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..903851b1a2
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### حقول العلاقات
+
+Please see our dedicated article: [Import Relations Between Objects](/l/ar/user-guide/data-migration/capabilities/import-relations)
+
+### حقول الاختيار
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..9a4773e612
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: تنسيقات الملفات المدعومة
+description: تنسيقات الملفات المدعومة لاستيراد البيانات في Twenty.
+---
+
+## التنسيقات المدعومة
+
+يدعم Twenty ثلاث تنسيقات ملفات للاستيراد:
+
+| التنسيق | الامتداد | الملاحظات |
+| ---------------- | -------- | ----------------------- |
+| **CSV** | .csv | موصى به، الأكثر توافقاً |
+| **Excel** | .xlsx | تنسيق Excel الحديث |
+| **Excel (قديم)** | .xls | تنسيق Excel الأقدم |
+
+## متطلبات الملف
+
+| متطلب | القيمة |
+| ----------------------- | ------------------------------------------ |
+| **الترميز** | يُوصى باستخدام UTF-8 |
+| **الحد الأقصى للسجلات** | 10,000 سجل لكل ملف |
+| **الهيكل** | يجب أن يحتوي الصف الأول على عناوين الأعمدة |
+| **المحتوى** | نوع كائن واحد لكل ملف |
+
+## أفضل الممارسات لملفات CSV
+
+* **المحدد**: استخدم الفاصلة (`,`) أو الفاصلة المنقوطة (`;`)
+* **محدد النص**: استخدم علامات الاقتباس المزدوجة (`\"`) للنص الذي يحتوي على فواصل
+* **نهايات الأسطر**: Windows (CRLF) أو Unix (LF) كلاهما مدعومان
+* **القيم الفارغة**: اترك الخلايا فارغة، لا تستخدم "NULL" أو "N/A"
+
+## أفضل الممارسات لبرنامج Excel
+
+عند التصدير من Excel:
+
+* أزل الصيغ (صدّر القيم فقط)
+* احذف الصفوف الفارغة في النهاية
+* تأكد من عدم وجود خلايا مدمجة
+* استخدم الورقة الأولى فقط
+
+## مجموعات البيانات الكبيرة
+
+بالنسبة لمجموعات البيانات التي تزيد عن 10,000 سجل:
+
+* قسّمها إلى عدة ملفات
+* أو استخدم [الاستيراد عبر API](/l/ar/user-guide/data-migration/how-tos/import-data-via-api) لسجلات غير محدودة
+
+بالنسبة لعمليات الترحيل الكبيرة جداً (100,000+ سجل)، تكون واجهة API أسرع بكثير وأكثر موثوقية من عمليات استيراد CSV.
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..d2d7caf18d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## نظرة عامة
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| كائن | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **الشركات** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **أعضاء مساحة العمل** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..3494630a9f
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## نظرة عامة
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| كائن | Unique Fields |
+| ---------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **الشركات** | `id`, `domain` |
+| **كائنات مخصصة** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## أفضل الممارسات
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..c0c0087ec3
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## نظرة عامة
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**حالات الاستخدام:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/ar/developers/extend/capabilities/apis).
+
+### الصلاحيات
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### حقول العلاقات
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/ar/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## الخطوات التالية
+
+* [How to Update Existing Records](/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/ar/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/ar/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..fae13dff43
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## نظرة عامة
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Error Message | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### ما ستراه
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### ما ستراه
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### البريد الإلكتروني
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### النطاق
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### تاريخ
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### هاتف
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | مثال |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### قيمة منطقية
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### العملة
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | مثال |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### رقم
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/ar/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### ما ستراه
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### ما ستراه
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/ar/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### ما ستراه
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/ar/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### العلاقات
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### نموذج البيانات
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/ar/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/ar/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/ar/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..1ef5481624
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## نظرة عامة
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## قبل أن تبدأ
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/ar/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| الحقل | Required? | التنسيق | الملاحظات |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | نص | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | رقم | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| خطأ | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ نعم! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/ar/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..e561c0a4eb
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## نظرة عامة
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## قبل أن تبدأ
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| الحقل | Required? | التنسيق | الملاحظات |
+| --------------------- | ----------- | ----------------- | ------------------------- |
+| **البريد الإلكتروني** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | نص | |
+| **Last Name** | Recommended | نص | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | نص | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | مثال |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | التنسيق | مثال |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | الملاحظات |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| البريد الإلكتروني | **البريد الإلكتروني** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| هاتف | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| خطأ | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ نعم! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/ar/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..a3f940eea9
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## نظرة عامة
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | القيمة |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## البدء
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| واجهة برمجة التطبيقات | Best For | التوثيق |
+| --------------------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/ar/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/ar/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## أفضل الممارسات
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/ar/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Professional Services
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ar/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ نعم! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/ar/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..971474bb87
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## نظرة عامة
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| علاقة | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | الشركة | الأشخاص |
+| Companies → Opportunities | الشركة | الفرص |
+| People → Tasks | شخص | المهام |
+| People → Notes | شخص | الملاحظات |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| --------------------- | --------------------------------------------------------------- |
+| **الشركات** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **أعضاء مساحة العمل** | `id` (UUID), `email` (not name) |
+| **كائنات مخصصة** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| معرّف | التنسيق | مثال |
+| ----------------- | -------------- | -------------------------------------- |
+| النطاق | URL format | `https://acme.com` |
+| البريد الإلكتروني | Standard email | `john@acme.com` |
+| المعرف | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ نعم! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. يمكنك إما:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## استكشاف الأخطاء وإصلاحها
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/ar/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..a6eed7611c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: التحويل من أنظمة إدارة علاقات العملاء الأخرى},{
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## نظرة عامة
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. انتقل إلى **الإعدادات → الأعضاء**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. كائنات مخصصة
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| --------------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **البريد الإلكتروني** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/ar/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### إعادة إنشاء سير العمل
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/ar/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## المشاكل الشائعة والحلول
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## قائمة التحقق بعد التحويل
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### التكوين
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## هل تحتاج إلى مساعدة؟
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ar/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..4a2ee2aadc
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: التحويل من نظام ذاتي الاستضافة إلى السحابة
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## نظرة عامة
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. الشركات
+2. الأشخاص
+3. الفرص
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+قبل:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+بعد:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### العروض
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### سير العمل
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### التكاملات
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## قائمة التحقق بعد التحويل
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## هل تحتاج إلى مساعدة؟
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ar/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..7db7a8b36e
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: حضِّر ملفات CSV الخاصة بك},{
+description: دليل كامل خطوة بخطوة لتنسيق بياناتك لاستيرادها إلى Twenty.
+---
+
+## نظرة عامة
+
+يرشدك هذا الدليل إلى كيفية إعداد ملف CSV لاستيراد ناجح. اتّبع هذه الخطوات لتجنّب الأخطاء.
+
+## الخطوة 1: التحقّق من متطلبات الملف
+
+قبل البدء، تأكّد من أنّ ملفك يستوفي هذه المتطلبات:
+
+| المتطلب | تفاصيل |
+| --------------------- | --------------------- |
+| **التنسيق** | CSV، XLSX، أو XLS |
+| **الحد الأقصى للحجم** | 10,000 سجل لكل ملف |
+| **الترميز** | يوصى باستخدام UTF-8 |
+| **البنية** | نوع كائن واحد لكل ملف |
+
+بالنسبة لمجموعات البيانات التي تزيد على 10,000 سجل، قم بتقسيمها إلى عدة ملفات أو استخدم [الاستيراد عبر API](/l/ar/user-guide/data-migration/how-tos/import-data-via-api).
+
+## الخطوة 2: تنزيل الملف النموذجي
+
+**هذه هي أهم خطوة.** يوضّح لك الملف النموذجي أسماء الأعمدة الدقيقة والتنسيق الذي تتوقعه Twenty.
+
+1. انتقل إلى عرض الكائن (الأشخاص، الشركات، إلخ)
+2. انقر **⋮** → **استيراد السجلات**
+3. انقر **تنزيل الملف النموذجي**
+4. استخدم هذا الملف كقالب
+
+**نصيحة احترافية:** بدلًا من ذلك، صدِّر عددًا قليلًا من السجلات الموجودة. سيوفّر لك هذا أمثلة حقيقية على كيفية تنسيق البيانات، كما ستُطابَق أسماء الأعمدة تلقائيًا أثناء الاستيراد.
+
+## الخطوة 3: إزالة القيم المكررة
+
+تفرض Twenty التفرّد على حقول معيّنة. ستتسبب القيَم المكررة في أخطاء أثناء الاستيراد.
+
+| كائن | الحقول الفريدة |
+| ---------------- | ------------------------------------- |
+| **الأشخاص** | `id`, `email` |
+| **الشركات** | `id`, `domain` |
+| **كائنات مخصصة** | `id`، بالإضافة إلى أي حقل وضعته كفريد |
+
+**قبل الاستيراد:**
+
+1. قم بفرز جدول البيانات حسب الحقل الفريد (البريد الإلكتروني أو النطاق)
+2. أزِل الصفوف المكررة أو ادمجها
+3. تحقّق من التكرارات الموجودة مسبقًا في Twenty
+
+**السجلات المحذوفة مؤقتًا تُحتسب ضمن التفرّد.** السجلات الموجودة في قائمة الأوامر → عرض السجلات المحذوفة ستتسبب في أخطاء تكرار. احذفها نهائيًا أو استعدها وقم بتحديثها.
+
+## الخطوة 4: تنسيق كل نوع من الحقول بشكل صحيح
+
+تتطلب أنواع الحقول المختلفة تنسيقات محددة. إليك المرجع الكامل:
+
+### حقول النص
+
+* لا يلزم تنسيق خاص
+* تُزال الفراغات في البداية والنهاية تلقائيًا
+
+### حقول البريد الإلكتروني
+
+* يجب أن يكون بتنسيق بريد إلكتروني صالح: `name@domain.com`
+* يجب أن تكون فريدة (بدون تكرارات في الملف أو في Twenty)
+* للعناوين الإضافية للبريد الإلكتروني، استخدم هذا التنسيق في عمود **Emails / Additional Emails**:
+
+```
+[\"jane@twenty.com\",\"jane.doe@twenty.com\"]
+```
+
+### حقول النطاق
+
+* **التنسيق الموصى به**: `https://domain.com`
+* يتطابق هذا مع التنسيق المستخدم في مزامنة صندوق البريد/التقويم (يمنع التكرارات)
+* املأ كلا العمودين:
+ * **Domain / Domain Label**: `domain.com`
+ * **Domain / Domain URL**: `https://domain.com`
+* يجب أن تكون فريدة داخل ملفك وفي Twenty
+
+### حقول الهاتف
+
+الهاتف حقل **متداخل** يتطلب عدة أعمدة:
+
+| العمود | مثال |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | مثال |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### اختر الحقول
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## الخطوات التالية
+
+Your file is ready! Now:
+
+* [Import Companies](/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..f28200006e
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## نظرة عامة
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**حالات الاستخدام:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## كيف يعمل
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| كائن | Recommended | Alternative | الملاحظات |
+| ---------------- | ------------------- | ----------- | ---------------------------- |
+| **People** | `البريد الإلكتروني` | `id` | Email is human-readable |
+| **الشركات** | `النطاق` | `id` | Domain is human-readable |
+| **كائنات مخصصة** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | النتيجة |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | النتيجة | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ نعم! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## أفضل الممارسات
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## استكشاف الأخطاء وإصلاحها
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ar/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/ar/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..4266ff2216
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: ترحيل البيانات},{
+description: استيراد وتصدير بيانات CRM عبر ملفات CSV أو عبر API.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## طرق الاستيراد
+
+تدعم Twenty طريقتين رئيستين لاستيراد البيانات:
+
+| طريقة | الأفضل لـ | حد الحجم |
+| --------------------- | ----------------------------------- | ------------------ |
+| **استيراد CSV** | عمليات ترحيل قياسية، تحديثات منتظمة | 10,000 سجل لكل ملف |
+| **الاستيراد عبر API** | عمليات ترحيل واسعة النطاق، أتمتة | غير محدود |
+
+بالنسبة لمجموعات البيانات الكبيرة جداً (مئات الآلاف من السجلات)، استخدم API. يمكن لشركائنا في [التنفيذ](/l/ar/user-guide/getting-started/capabilities/implementation-services) المساعدة في تشغيل هذه النصوص البرمجية عند الحاجة.
+
+## أساسيات استيراد CSV
+
+يمكنك استيراد البيانات لأي جسم باستخدام ملفات CSV أو XLSX أو XLS. يجب أن يحتوي كل ملف على **نوع واحد فقط من الأجسام** (مثلًا، سجلات الأشخاص فقط).
+
+**يجب أن تكون الحقول موجودة قبل الاستيراد.** يؤدي رفع ملف CSV إلى إنشاء سجلات لكنه لا ينشئ حقولاً. إذا كنت تحتاج إلى حقول مخصّصة، فأنشئها أولاً ضمن **الإعدادات → نموذج البيانات**.
+
+### الخطوات
+
+1. انتقل إلى الجسم الذي تريد استيراد البيانات إليه
+2. انقر أيقونة **⋮** في أعلى اليمين (هذه هي قائمة الأوامر) ثم انقر **استيراد السجلات**
+3. قم بتنزيل ملف القالب للتأكد من أن بياناتك بالتنسيق المتوقع
+4. ارفع ملف CSV المُنسَّق الخاص بك
+5. طابِق أعمدتك مع حقول Twenty
+6. راجِع الأخطاء (المظلَّلة باللون الأصفر) وأصلحها من خلال التحرير مباشرةً في واجهة المستخدم
+7. أكد الاستيراد
+
+### استيراد العلاقات بين الأجسام
+
+يمكنك استيراد العلاقات بين الأجسام باستخدام ميزة استيراد CSV. تحتاج إلى الإشارة إلى الجسم المرتبط باستخدام حقل فريد من هذا الجسم: `id`، و`email` للأشخاص وأعضاء مساحة العمل، و`domain` للشركات، وأي حقل آخر مُعيَّن كفريد في نموذج البيانات لأي جسم آخر.
+
+**تُحتسب السجلات المحذوفة ضمن التفرّد.** السجلات المحذوفة حذفاً ناعماً (المرئية ضمن قائمة الأوامر → عرض السجلات المحذوفة) تُدرج ضمن عمليات التحقق من التفرّد. إذا قمتَ باستيراد سجل بالقيمة الفريدة نفسها لسجل محذوف، فسيتم استعادة السجل المحذوف.
+
+
+ **ترتيب الاستيراد مهم!**
+
+ عند استيراد أجسام مترابطة، ارفع الملفات بهذا الترتيب:
+
+ 1. **الشركات** أولاً (جانب "الواحد" من العلاقات)
+ 2. **الأفراد** ثانياً (مرتبطون بالشركات عبر companyId)
+ 3. **الفرص** ثالثاً (مرتبطة بالشركات/الأفراد)
+ 4. **الأجسام المخصّصة** ذات العلاقات أخيراً
+
+ لماذا؟ يجب أن يكون جانب "الواحد" من علاقة واحد إلى متعدد موجودًا قبل أن تتمكن من الإشارة إليه. على سبيل المثال، يجب أن يكون سجل الشركة موجودًا قبل أن تستورد شخصًا يحمل معرّف تلك الشركة.
+
+
+يرجى الرجوع إلى [هذه المقالة](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) للاطلاع على دليل خطوة بخطوة حول كيفية المتابعة.
+
+## تصدير البيانات
+
+صدّر بيانات مساحة العمل للنسخ الاحتياطي أو إعداد التقارير أو الترحيل.
+
+### الخطوات
+
+1. انتقل إلى الجسم الذي تريد تصديره
+2. قم بتهيئة العرض بالأعمدة التي تحتاجها
+3. انقر **⋮** → **تصدير العرض**
+4. احفظ ملف CSV
+
+**يتم تصدير الأعمدة المرئية فقط.** سيحتوي ملف CSV فقط على الأعمدة المعروضة في عرضك الحالي. أضِف الأعمدة أو أخفها قبل التصدير للتحكم في البيانات المُدرجة.
+
+**حدود التصدير**: حتى 20,000 سجل لكل عملية تصدير.
+
+## الصلاحيات
+
+يتطلّب استيراد وتصدير البيانات أذونات محددة:
+
+* **الاستيراد**: يتطلب إذن "Import CSV"
+* **التصدير**: يتطلب إذن "Export CSV"
+
+تواصل مع مسؤول مساحة العمل لديك إذا لم تكن تملك هذه الأذونات.
+
+## الخطوات التالية
+
+* [حضّر ملفات CSV الخاصة بك](/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [استيراد العلاقات بين الأجسام](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [الاستيراد عبر API لمجموعات البيانات الكبيرة](/l/ar/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..a70ec1786d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: الحقول
+description: فهم دور الحقول وكيفية إدارتها.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## حول الحقول
+
+الحقول مثل الأعمدة في جدول البيانات. تُخزّن أنواعًا مختلفة من البيانات مثل النصوص أو الأرقام أو التواريخ. يمكن أن تكون الحقول قياسية (مدمجة) أو مخصصة (التي تقوم بإنشائها).
+
+### الحقول القياسية
+
+الحقول القياسية تأتي مدمجة في Twenty للتعامل مع احتياجات الأعمال العامة.
+
+على سبيل المثال، `الاسم الأول` و`الاسم الأخير` هما حقول قياسية في كائن `الأشخاص`. تخزن البيانات النصية للأسماء الفردية.
+
+لا يمكنك حذف الحقول القياسية، ولكن يمكنك إلغاء تنشيطها إذا لم تكن بحاجة إليها.
+
+يمكنك أيضًا تخصيص خيارات الحقول القياسية من نوع `SELECT`، على سبيل المثال خيارات `Stage` في الفرص.
+
+
+
+### الحقول المخصصة
+
+يمكن إضافة الحقول المخصصة إلى أي كائن. يمكنك تخزين النصوص أو الأرقام أو التواريخ أو الخيارات المنسدلة والمزيد. استخدم الحقول المخصصة لتتبع المعلومات الخاصة بأعمالك.
+
+على سبيل المثال، الحقل المخصص لـ SpaceX يمكن أن يكون `حالة الصاروخ النشطة`، مما يشير إلى ما إذا كان الصاروخ يعمل.
+
+
+
+## أنواع الحقول
+
+يدعم Twenty أنواعًا متعددة من الحقول:
+
+| النوع | الوصف | مثال |
+| ----------------- | ----------------------------------------------------------------- | --------------------------- |
+| العنوان | عنوان مُهيكل يتضمن الشارع، المدينة، الولاية، البلد، الرمز البريدي | عنوان المكتب |
+| مصفوفة | قائمة بقيم نصية | الوسوم |
+| قيمة منطقية | خانة اختيار صح/خطأ | نشط |
+| العملة | قيمة نقدية مع رمز العملة | مبلغ الصفقة (USD) |
+| تاريخ | قيم التاريخ | تاريخ الإغلاق |
+| التاريخ والوقت | تاريخ مع الوقت | وقت الاجتماع |
+| النطاق | نطاق موقع الويب (يُستخدم للشركات) | acme.com |
+| البريد الإلكتروني | عناوين البريد الإلكتروني (مع الأساسي + الإضافي) | بريد جهة الاتصال الإلكتروني |
+| JSON | بيانات JSON مُهيكلة | بيانات وصفية مخصصة |
+| روابط | عناوين URL مع تسميات (أساسي + ثانوي) | موقع الويب، لينكدإن |
+| نص طويل | نص متعدد الأسطر | الوصف، الملاحظات |
+| التحديد المتعدد | خيارات متعددة من قائمة محددة مسبقًا | وسوم، فئات |
+| رقم | قيم رقمية (صحيحة أو عشرية) | الكمية، الدرجة |
+| هاتف | أرقام هواتف مع رمز البلد | هاتف العمل |
+| تقييم | تقييم بالنجوم (1-5) | الأولوية، الدرجة |
+| علاقة | روابط إلى السجلات في كائنات أخرى | الشركة → الأشخاص |
+| اختيار | خيار واحد من قائمة محددة مسبقًا | المرحلة، الحالة |
+| نص | سطر واحد من النص | الاسم، العنوان |
+
+## إنشاء حقل مخصص
+
+لإضافة حقل مخصص لأي كائن، اتبع هذه الخطوات:
+
+1. اذهب إلى `الإعدادات` في الشريط الجانبي الأيسر.
+2. اذهب إلى `نموذج البيانات`، ثم حدد الكائن الذي ترغب في تخصيصه.
+3. تقدم من خلال النقر على `إضافة حقل`.
+4. اختر اسم الحقل والنوع الذي يناسب احتياجاتك. فكر في إضافة وصف للحقل لفهم أفضل.
+
+أصبح الحقل الجديد الذي أنشأته الآن متاحًا ضمن حقول التطبيق. لعرضه في عرض محدد، انقر على قائمة الخيارات، ثم اختر `الحقول`.
+
+
+
+**طريقة سريعة:** اضغط على زر **+** في أعلى يمين أي جدول كائن، ثم اختر `تخصيص الحقول`. سيأخذك هذا مباشرة إلى إعدادات نموذج البيانات.
+
+
+
+## إلغاء تنشيط حقل
+
+يمكنك إلغاء تنشيط حقل لإخفائه من التطبيق دون فقدان بياناتك. اعتبره كإخفاء للحقل بدلاً من حذفه.
+
+إليك كيفية القيام بذلك:
+
+1. ابحث عن الحقل الذي تريد إلغاء تنشيطه في إعدادات الكائن الخاصة بك.
+
+2. انقر على الثلاث نقاط `⋮` بجانب الحقل لفتح القائمة.
+
+3. اختر `إلغاء التنشيط` من القائمة المنسدلة.
+
+
+
+ماذا يحدث عند إلغاء تنشيط حقل؟
+
+1. **في التطبيق:** يختفي الحقل ولا يمكنك إضافة قيم جديدة إليه.
+
+2. **العلاقات الموجودة:** إذا كان حقل علاقة، ستبقى الروابط القائمة ولكن لا يمكنك إنشاء روابط جديدة.
+
+3. **الوصول عبر API:** لا يزال بإمكانك الوصول إلى الحقل وبياناته عبر API.
+
+يمكنك إعادة تنشيط الحقول القياسية والمخصصة أو لديك خيار حذفها نهائيًا.
+
+## جعل الحقول فريدة
+
+اجعل الحقل فريدًا لضمان عدم إمكانية أن تحتوي السجلات المميزة على نفس القيمة. على سبيل المثال، عناوين البريد الإلكتروني فريدة لكل شخص.
+
+إذا ظهرت لك رسالة خطأ عند تعيين خاصية التفرد، فتحقق من وجود قيم مكررة في بياناتك (بما في ذلك السجلات المحذوفة).
+
+## أفضل ممارسات تكوين الحقول
+
+### اتفاقيات التسمية والقيود
+
+* **يجب أن تكون الأسماء الفردية والجمع مختلفة**: يحتاج API الخاص بنا إلى أسماء مميزة للتغييرات
+* **أسماء الحقول المحمية**: بعض الأسماء محجوزة للاستخدام الخاص بالنظام (مثل `Type`، `Application`)
+
+### حقول العملة والهاتف
+
+* **العملة الافتراضية**: يمكن تهيئتها عبر نموذج البيانات
+* **أكواد الدول الافتراضية**: يمكن تهيئتها لحقول الهاتف عبر نموذج البيانات
+
+### حقول الاختيار
+
+* **يمكن اختيار خيار افتراضي** لكل حقل اختيار
+
+### حقول نص السجلات
+
+* **كل كائن لديه حقل عرض رئيسي واحد**: يظهر هذا الحقل في العمود الأول ويمثل السجل عند الربط بأشياء أخرى. يجب أن يكون حقل نصي. على سبيل المثال، يستخدم الأشخاص `الاسم` كحقل رئيسي، لذلك عندما تربط شخصًا بشركة، سترى اسمهم في عرض الشركة.
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..a2f72076eb
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: كائنات
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standard Objects
+
+الكائنات القياسية هي كيانات مُعرّفة مسبقًا في مساحة العمل الخاصة بك لمساعدتك في البدء. هي جزء من نموذج بيانات مشترك يمكن الوصول إليه بواسطة جميع مستخدمي Twenty. يمكنك استخدامها كما هي أو تخصيصها أو تعطيلها.
+
+
+
+### الأشخاص
+
+كائن "الأشخاص" يخزن جهات الاتصال الخاصة بك. يتضمن تفاصيل الاتصال وتاريخ التفاعل، مما يتيح لك رؤية جميع تفاعلات العملاء في مكان واحد.
+
+### الشركة
+
+كائن "الشركات" يخزن المعلومات المتعلقة بحسابات العمل الخاصة بك. يتضمن تفاصيل مثل الصناعة والحجم والموقع. الشركات تتصل بكائنات "الأشخاص" و "الفرص".
+
+### الفرص
+
+كائن "الفرص" يخزن البيانات المتعلقة بالصفقات. يتتبع تقدم المبيعات المحتملة من البداية إلى الإغلاق، مع تسجيل المراحل، أحجام الصفقات، الحساب المرتبط، وتاريخ الإغلاق المتوقع. يمكنك عرض مسار المبيعات الخاص بك في تخطيط كانبان.
+
+### الملاحظات
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### المهام
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## كائنات مخصصة
+
+تتيح لك الكائنات المخصصة تخزين المعلومات الفريدة لمنظمتك والتي لا يمكن للكائنات القياسية التعامل معها. على سبيل المثال، إذا كنت SpaceX، قد ترغب في إنشاء كائن مخصص للصواريخ والإطلاقات.
+
+
+
+### Creating a New Custom Object
+
+لإنشاء كائن مخصص جديد:
+
+1. اذهب إلى الإعدادات في الشريط الجانبي الأيسر.
+2. تحت قسم مساحة العمل، انتقل إلى نموذج البيانات. هنا ستتمكن من رؤية نظرة عامة على جميع الكائنات القياسية والمخصصة الحالية (النشطة والمعطلة).
+
+
+
+3. انقر على "+ كائن جديد" في الأعلى. أدخل الاسم (مفرد وجمع)، اختر أيقونة، أضف وصفًا للكائن المخصص واضغط حفظ (في الزاوية العليا اليمنى). باستخدام القائمة كمثال للكائن المخصص، سيكون المفرد هو "قائمة" والجمع "قوائم" مع الوصف كمثل "قوائم قام المضيفون بإنشائها لعرض ممتلكاتهم."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## أفضل الممارسات
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..ccfc4d3ba7
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: حقول العلاقات
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. انقر على **حفظ**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ----------- | --------- | ------------- |
+| الأشخاص | الشركات | Many-to-One |
+| الفرص | الشركات | Many-to-One |
+| الفرص | الأشخاص | Many-to-One |
+
+## أفضل الممارسات
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..00bb3249be
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/ar/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. انقر على **حفظ**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/ar/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/ar/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/ar/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..c1088a3902
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/ar/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. انقر على **حفظ**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/ar/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/ar/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/ar/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/ar/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..a055bb05b1
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## قبل أن تبدأ
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/ar/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. انقر على **حفظ**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/ar/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..735c586544
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: تخصيص نموذج البيانات الخاص بك},{
+description: نظرة عامة على خيارات تخصيص نموذج البيانات.
+---
+
+نموذج بيانات Twenty قابل للتخصيص بالكامل. أنشئ كائنات وحقولًا وعلاقات لتناسب نشاطك التجاري.
+
+## روابط سريعة
+
+| أريد أن... | دليل |
+| ------------------- | ---------------------------------------------------------------------------------- |
+| إنشاء كائن جديد | [كيفية إنشاء كائنات مخصصة](/l/ar/user-guide/data-model/how-tos/create-custom-objects) |
+| إضافة حقول إلى كائن | [كيفية إنشاء حقول مخصصة](/l/ar/user-guide/data-model/how-tos/create-custom-fields) |
+| ربط الكائنات معًا | [كيفية إنشاء حقول العلاقات](/l/ar/user-guide/data-model/how-tos/create-relation-fields) |
+
+## معرفة المزيد
+
+* [فهم نموذج بياناتك](/l/ar/user-guide/data-model/overview) — مفاهيم أساسية ونصائح للتخطيط
+* [الكائنات](/l/ar/user-guide/data-model/capabilities/objects) — الكائنات القياسية مقابل الكائنات المخصصة
+* [الحقول](/l/ar/user-guide/data-model/capabilities/fields) — جميع أنواع الحقول
+* [حقول العلاقات](/l/ar/user-guide/data-model/capabilities/relation-fields) — ربط الكائنات
+* [الأسئلة الشائعة حول نموذج البيانات](/l/ar/user-guide/data-model/how-tos/data-model-faq) — أسئلة شائعة
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..981fa03e74
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: الأسئلة المتكررة حول نموذج البيانات
+description: Frequently asked questions about Twenty's data model.
+---
+
+## إدارة الكائنات
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ ليس بعد. ترتيب الكائنات في التنقل ثابت حاليًا، ولكن هذه الميزة مخطط لها لإصدارات قادمة.
+
+
+
+ تظهر كل الكائنات النشطة في التنقل. يمكنك إلغاء تفعيل الكائنات التي لا تحتاجها تحت **الإعدادات → نموذج البيانات**.
+
+
+
+## قدرات الحقول
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ تستخدم واجهة GraphQL كلا النموذجين لعمليات مختلفة:
+
+ * `createPerson` (مفرد) لأعمال سجلات فردية
+ * `createPeople` (جمع) للعمليات الجماعية
+
+ هذا يخلق قيودًا عندما تكون الأشكال المفردة والجمع متشابهة، ولكنه يحسن تجربة المطور.
+
+
+
+ بعض أسماء الحقول مثل `Type` أو `Application` محجوزة لاستخدام النظام. اختر أسماء بديلة مثل `Category` أو `Classification` بدلاً من ذلك.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ حقول الصيغ قادمة في **الربع الأول من عام 2026**. في الوقت الحالي، يمكنك استخدام سير العمل لحساب وتحديث قيم الحقول تلقائيًا.
+
+
+
+ الحقول المتداخلة قادمة في **الربع الأول من عام 2026**. حاليًا، يمكنك استخدام سير العمل لإحضار قيم الحقول من الكائنات ذات الصلة. مثلاً، لعرض صناعة شركة على سجل شخص، قم بإنشاء حقل مخصص للأشخاص واستخدم سير العمل لمزامنة القيمة.
+
+
+
+ سيكون إعادة ترتيب الحقول متاحًا مع التخطيطات المخصصة في **الربع الرابع من عام 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## العلاقات
+
+
+
+ نعم! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/ar/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## الوصول والصلاحيات
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ اتصل بمسؤول المساحة لديك. يكون الوصول إلى نموذج البيانات عادة محظورًا على المسؤولين فقط.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## هل تحتاج إلى المزيد من المساعدة؟
+
+Check our [Implementation Services](/l/ar/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/ar/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/ar/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..cb2cd9545e
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: نموذج البيانات
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+A data model is the structure that defines how information is organized in your CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### كائنات
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### الحقول
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* الاسم
+* البريد الإلكتروني
+* هاتف
+* المسمى الوظيفي
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### السجلات
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+على سبيل المثال:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **حقول** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+كل شركة تعمل بطريقة مختلفة. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### ٢. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### ٣. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+تتجاوز هذه الأشياء مجرد ما يمكن تضمينه في حقل واحد لأنها تحمل بياناتها وعلاقاتها الخاصة.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+اسأل نفسك:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## الخطوات التالية
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/ar/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/ar/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/ar/user-guide/data-model/how-tos/create-relation-fields)
+
+## هل تحتاج إلى مساعدة؟
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/ar/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..c503961c8c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glossary
+description: تعرّف على المصطلحات الأساسية المستخدمة في Twenty.
+---
+
+## واجهة برمجة التطبيقات
+
+واجهة برمجة التطبيقات (API) تتيح لك ربط Twenty بأنظمة برمجية أخرى وبناء تكاملات مخصصة.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## قائمة الأوامر
+
+قائمة الأوامر هي واجهة وصول سريع (تُفتح باستخدام `Cmd + K` على Mac و `Ctrl + K` على Windows) تتيح لك تنفيذ الإجراءات وإنشاء السجلات والتنقل بكفاءة في مساحة العمل الخاصة بك.
+
+## Company & People
+
+The CRM has two fundamental types of records:
+
+* تمثل `الشركة` عملاً تجارياً أو منظمة.
+* `People` represent your company's current and prospective customers or clients.
+
+## الحقول المخصصة
+
+الحقول المخصصة هي حقول بيانات تُنشئها لالتقاط معلومات خاصة باحتياجات وعمليات عملك.
+
+## نموذج البيانات
+
+نموذج البيانات هو الهيكل الذي يحدد كيفية تنظيم المعلومات في نظام إدارة علاقات العملاء الخاص بك، بما في ذلك الكائنات الموجودة وخصائصها وعلاقاتها معًا.
+
+## المفضلات
+
+المفضلات هي السجلات التي قمت بتحديدها للوصول السريع، وتظهر في الشريط الجانبي للتنقل الفوري للبيانات الهامة.
+
+## الحقل
+
+الحقل يشير إلى منطقة معينة يتم فيها تخزين بيانات محددة لكيان معين.
+
+## التكامل
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## مكرر
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## كانبان
+
+الـ`كانبان` هو طريقة بصرية لمتابعة عمليات الأعمال باستخدام البطاقات والأعمدة. يمثّل كل عمود مرحلة في عمليتك (مثل: جديد، جارٍ، ربح، خسارة)، وتحرّك السجلات عبر هذه المراحل مع تقدّمها.
+
+## كائن
+
+الكائن هو هيكل بيانات يمثل نوعاً معيناً من الكيانات في نظام إدارة علاقات العملاء الخاص بك (مثل الأشخاص أو الشركات أو الفرص). يمكن أن تكون الكائنات قياسية (مدمجة) أو مخصصة (تم إنشاؤها بواسطتك).
+
+## الفرص
+
+Opportunities in Twenty CRM are potential deals or sales with accounts or contacts.
+
+## السجل
+
+السجل يشير إلى مثيل لكائن، مثل حساب معين أو جهة اتصال.
+
+## حقول العلاقات
+
+تُنشئ حقول العلاقات الروابط بين الكائنات المختلفة، مما يتيح لك ربط السجلات معًا (مثل ربط شخص بشركة).
+
+## الحقول القياسية
+
+الحقول القياسية هي حقول بيانات مدمجة تأتي مع الكائنات بشكل افتراضي وتوفر وظائف شائعة في جميع مساحات العمل.
+
+## المهام
+
+المهام في Twenty CRM هي أنشطة مُسندة تتعلق بجهات اتصال أو حسابات أو فرص.
+
+## المشغلات
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## العروض
+
+You can customize the display of your records using views, setting different filters, layouts and sorting options for each view.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## الويب هوكس
+
+الويب هوكس هي رسائل آلية ترسل من Twenty إلى تطبيقات أخرى عند حدوث أحداث معينة، مما يتيح مزامنة البيانات في الوقت الفعلي.
+
+## سير العمل
+
+Workflows are automated processes that trigger actions based on specific conditions, helping you automate repetitive tasks and business processes.
+
+## مساحة العمل
+
+`مساحة العمل` تمثل عادةً شركة تستخدم Twenty. تحتوي على جميع السجلات والبيانات التي تدخلها أنت وأعضاء فريقك إلى Twenty.
+لها اسم نطاق واحد، وهو عادةً الاسم الذي تستخدمه شركتك لعناوين البريد الإلكتروني للموظفين.
+
+## أعضاء مساحة العمل
+
+أعضاء مساحة العمل هم مستخدمو Twenty من فريقك الذين لديهم حق الوصول إلى مساحة العمل الخاصة بك. يمكن تعيينهم كمالكين أو معينين للسجلات.
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..cb7715ac65
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: خدمات التنفيذ
+description: سواء كنت بحاجة إلى مساعدة في البدء أو إنشاء تخصيصات متقدمة، لدينا الحل.
+---
+
+## حزم الانضمام
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **تصميم نموذج البيانات**: صمم وأنشئ نموذج البيانات المخصص الخاص بك مع الكائنات، الحقول والعلاقات
+* **هجرة البيانات**: قم بترحيل البيانات الحالية من نظام إدارة علاقات العملاء لديك إلى توينتي
+* **إنشاء سير العمل**: أنشئ سير عمل مخصص لدعم عمليات عملك
+
+## شركاء التنفيذ
+
+العمل مع شركاء معتمدين لتوينتي للحصول على تخصيصات وعمليات دمج أكثر تقدمًا. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..72beafb1bf
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: ما هو Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## الرؤية
+
+إن إنشاء نظام إدارة عملاء جيد أمر صعب لأنه عمل توازن دقيق.
+بالنسبة لكل عمل، تبدو المتطلبات واضحة، ولكن احتياجات الجميع مختلفة.
+النتيجة هي نظام إدارة عملاء إما بسيط جداً أو يحاول أن يكون شاملاً ولكنه لا يبرع في شيء.
+
+في البداية، يبدو Twenty مثل أنظمة إدارة العملاء الأخرى التي تعرفها: يمكنك تتبع الصفقات، تنظيم جهات الاتصال، وإدارة المهام والملاحظات.
+**لكن ما يميزنا هو توجهنا نحو التوسع. نبني منصة مفتوحة توفر لك اللبنات الأساسية لحل مشاكل عملك الفريدة.**
+
+نحن نعطي الأولوية للمبادئ العالمية والأنماط الشائعة على قوائم الميزات.
+لا نحاول تقديم كل الإجابات، بل نُمَكن المستخدمين من إيجاد الحلول الأنسب لهم.
+المصدر المفتوح هو أساس نهجنا، مما يضمن تطور Twenty مع مجتمعه، لصالح مجتمعه.
+
+## الفوائد
+
+**قابل للتخصيص:** صمم ليتناسب مع احتياجات عملك.
+
+**يقوده المجتمع:** بني وصيانته بواسطة مجتمع مفتوح المصدر ضخم.
+
+**فعال من حيث التكلفة:** لن تكون مقيداً بمزود لأنك دائماً تستطيع استضافة النظام بنفسك.
+
+## الميزات الرئيسية
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [تعرف على المزيد](/l/ar/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/ar/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [ابدأ](/l/ar/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/ar/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/ar/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/ar/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/ar/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/ar/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [ابدأ التكامل](/l/ar/developers/extend/capabilities/apis).
+
+## انضم الآن
+
+[سجل هنا](https://app.twenty.com) أو [كن مساهماً على GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..07fbd19550
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: كل شركة تعمل بطريقة مختلفة. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. يوفر لك ذلك قيمة فورية ويساعد فريقك على رؤية Twenty أثناء العمل من خلال البيانات الحقيقية. You can do so under Settings → Accounts.
+
+## 1. تخصيص نموذج البيانات الخاص بك
+
+يقدم Twenty المرونة التي تحتاجها لتصميم نموذج البيانات الذي يدعم أعمالك اليومية بأفضل طريقة ممكنة.
+قم بإنشاء كائنات وحقول من أي نوع، بما في ذلك العلاقات بين كائناتك المختلفة. يمكنك القيام بذلك من خلال الإعدادات ← نموذج البيانات.
+إليك بعض النصائح:
+
+* **You are not limited in the number of custom fields nor custom objects**. Adding custom objects and fields will not lead to upgrading your plan.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. ننصح باستخدام هذه الخيارات بقدر الإمكان، مع إضافة الحقول لفرز سجلاتك عند الضرورة. إليك مثالاً:
+ * من الأفضل استخدام كائن الأشخاص لعملائك وشركائك، وإنشاء حقل باسم `نوع الشخص` بدلاً من إنشاء كائن مخصص للشريك. لأنه لن يكون بإمكانك الوصول إلى رسائل البريد الإلكتروني المتبادلة مع هذا الشخص من سجلات الشريك.
+ * قم بإنشاء وجهات نظر مختلفة في الأشخاص، واحدة لعرض الشركاء وأخرى لعرض العملاء المحتملين.
+* لا يمكن أن يكون لشخصين نفس عنوان البريد الإلكتروني. لا يمكن أن يكون لشركتين نفس النطاق.
+* يمكنك تعطيل الحقول والكائنات القياسية التي لا ترغب في استخدامها.
+* You can hide fields from views: don't be afraid of creating fields, you won't have to display all of them.
+
+اقرأ [هذه المقالة](/l/ar/user-guide/data-model/overview) لتعلم كيفية تصميم نموذج بياناتك.
+
+## ٢. أدخل بياناتك
+
+إدخال بياناتك الحالية في Twenty يمنح فريقك السياق من البداية.
+
+### قم بتوصيل بريدك الإلكتروني
+
+إذا لم تقم بذلك عند إنشاء مساحتك، قم بتوصيل حساب **Google أو Microsoft** تحت الإعدادات → الحسابات. هذا يسمح لـ Twenty بـ:
+
+* استيراد رسائلك واجتماعاتك
+* إنشاء جهات الاتصال تلقائيًا بناءً على التفاعلات (اختياري)
+* الحفاظ على تاريخ الاتصالات واضحًا لفريقك
+
+**تستخدم مقدم خدمة آخر؟**
+يمكنك إضافة بريد آخر عبر SMTP أو تقويم آخر عبر CalDAV. ستحتاج إلى تفعيل الميزة تحت الإعدادات → الإصدارات → المختبر، ثم العودة إلى علامة التبويب الإعدادات → الحسابات.
+
+### استيراد البيانات عبر csv
+
+استخدم قائمة الأوامر (`Cmd + K` أو `Ctrl + K`) لاستيراد الأشخاص، الشركات، الفرص أو أي كائنات مخصصة عبر CSV.
+
+**إرشادات رئيسية**:
+
+* قم بتنزيل الملف النموذجي لفهم التنسيق المتوقع
+* حدد كل ملف بـ 10 آلاف سجل
+* Remove duplicate emails for People or duplicate domains for Companies
+* راجع وقم بإصلاح الأخطاء (المميزة باللون الأصفر) قبل الاستيراد
+
+اقرأ [هذه المقالة](/l/ar/user-guide/data-migration/overview) لمعرفة المزيد حول استيراد البيانات.
+
+## ٣. قم بإنشاء منظر العرض الأول الخاص بك
+
+Creating different views is key to make the data actionable for your team.
+إليك كيفية المتابعة:
+
+* **إضافة أو إخفاء الأعمدة**
+ إدارة الحقول المرئية في طريقة العرض بالنقر على الخيارات → الحقول (من الأعلى الأيمن). يمكنك إظهار/إخفاء الحقول من هناك.
+
+* **إعادة ترتيب الحقول**
+ إعادة ترتيب الحقول من طريقة العرض بالنقر على الخيارات → الحقول (من الأعلى الأيمن). قم بالسحب والإفلات لإعادة ترتيب الحقول.
+
+* **تصفية العرض الخاص بك**
+ قم بتضييق نطاق السجلات المعروضة باستخدام الفلاتر من الأعلى الأيمن.
+
+* **فرز السجلات**
+ أعد ترتيب السجلات المعروضة باستخدام وظيفة الفرز من الأعلى الأيمن أو بالنقر مباشرة على اسم العمود.
+
+* **اختر التخطيط**
+ يمكنك التبديل إلى تخطيط **Kanban** أو قائمة **مجموعة حسب**، طالما أن الكائن يحتوي على حقل اختيار من نوع `Stage` أو مشابه.
+
+* **احفظ عرضك كمفضلة**
+ يمكنك القيام بذلك باستخدام القائمة المنسدلة التي تعرض العروض المختلفة.
+
+## ماذا بعد؟
+
+ابدأ في إنشاء الأتمتة باستخدام [عمليات العمل](/l/ar/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..cb1da51d31
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: إنشاء مساحة عمل
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## الخطوة 1: التسجيل
+
+1. انتقل إلى [الاشتراك في Twenty](https://app.twenty.com).
+2. اختر طريقة التسجيل المفضلة لديك:
+ * **متابعة باستخدام Google** للتسجيل بحساب جوجل.
+ * **متابعة باستخدام Microsoft** للتسجيل بحساب مايكروسوفت.
+ * أو، **متابعة باستخدام البريد الالكتروني** للتسجيل عبر البريد الإلكتروني.
+
+
+
+## الخطوة 2: اختيار فترة التجربة
+
+اختر بين فترتين للتجربة:
+
+### 30 يومًا
+
+مع بطاقة ائتمان
+
+### 7 أيام
+
+بدون بطاقة ائتمان
+
+تشمل كلتا التجربتين:
+
+* وصول كامل
+* جهات اتصال غير محدودة
+* تكامل البريد الإلكتروني
+* كائنات مخصصة
+* واجهة برمجة التطبيقات والويب هوك
+
+يمكنك النقر على "تغيير الخطة" لاختيار خطة أو فترة فوترية مختلفة.
+
+
+
+## الخطوة 3: تأكيد الدفع وتهيئة الحساب
+
+بعد موافقة الدفع عبر Stripe، يتم توجيهك لإنشاء مساحة العمل والملف الشخصي المستخدم. تذكر أنه يمكنك إلغاء اشتراكك في أي وقت.
+
+## الدعم
+
+للاستفسارات أو المساعدة، تواصل مع فريق الدعم المتخصص عبر [contact@twenty.com](mailto:contact@twenty.com) أو أرسل رسالة على [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..679456589d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: احصل على لمحة سريعة عن كيفية التنقل في المنصة وأين تتخذ إجراءات مختلفة.
+---
+
+## التصميم الرئيسي
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. هذا هو المكان الذي تجري فيه جميع الأعمال اليومية.
+يمكنك **عرض، تعديل، حذف السجلات** من هنا وأيضاً **إنشاء عروض جديدة**.
+
+
+
+## شريط التنقل
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* التبديل بين **مساحات العمل المختلفة** باستخدام القائمة المنسدلة أو إنشاء مساحة عمل جديدة
+* استخدم **شريط البحث** (اضغط على `/` للتركيز عليه فوراً)
+* افتح قسم **الإعدادات**
+* احصل على وصول مباشر إلى **العروض المفضلة** لديك. المفضلات فريدة لكل مستخدم.
+* التبديل بين الكائنات المختلفة
+* **Create automations** using workflows
+* تواصل مع فريق الدعم وافتح دليل المستخدم الخاص بنا.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. يمكنك الوصول إليها بطريقتين:
+
+* **اختصار لوحة المفاتيح**: اضغط `Cmd + K` (Mac) أو `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* إنشاء سجلات جديدة
+* **استيراد وتصدير البيانات عبر csv**
+* إنشاء عروض جديدة
+* الوصول إلى السجلات المحذوفة (يدعم Twenty عمليات الحذف المنطقي والدائم)
+* عرض اختصارات لوحة المفاتيح للوصول بسرعة إلى الكائنات في مساحة العمل الخاصة بك
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## العروض
+
+كل كائن (مثل الفرص أو الأشخاص) يدعم عدة عروض. لست مقيداً بعدد معين من العروض لكل كائن.
+
+استخدم القائمة المنسدلة في أعلى يسار التصميم الرئيسي للتبديل بين العروض المختلفة. على سبيل المثال:
+
+* Use a Kanban view to track opportunities by stage
+* استخدم عرض Group By لإنشاء أقسام وتحسين الكفاءة
+* استخدم عوامل التصفية للتركيز على سجلات محددة (مثل العملاء المحتملين الذين تم إنشاؤهم الأسبوع الماضي)
+* احفظ العروض المفلترة لاستخدامها لاحقاً
+* عروض مفضلة للوصول السريع
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/ar/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## الإعدادات
+
+افتح الإعدادات من أعلى اليسار للقيام بما يلي:
+
+* **ربط حسابات البريد الإلكتروني والتقويم** لديك لتزامن سلس للبريد الإلكتروني والتقويم
+* خصص **نموذج بياناتك**: أنشئ كائنات وحقولاً وعلاقات مخصصة
+* **Access the API playground and configure webhooks**
+* **إدارة أذونات المستخدم** وعناصر التحكم في الوصول إلى مساحة العمل
+* دعوة أعضاء الفريق وإدارة أدوار المستخدم
+* تعديل ملف التعريف الخاص بك وتفضيلات مساحة العمل
+* تكوين الفوترة ومراقبة استخدام اعتمادات سير العمل
+* اكتشف أحدث الإصدارات والميزات القادمة (تحت قسم الإصدارات → علامة تبويب المختبر)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/ar/user-guide/introduction.mdx b/packages/twenty-docs/l/ar/user-guide/introduction.mdx
new file mode 100644
index 0000000000..6a85ad5cb4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..b6f8db7bd2
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: الصلاحيات
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+نظام أذونات Twenty يمكنك من التحكم في الوصول إلى ثلاثة مجالات رئيسية:
+
+* **الكائنات والحقول**: التحكم بمن يمكنه عرض أو تعديل أو حذف السجلات والحقول الفردية
+* **Settings**: Manage access to workspace configuration and administrative functions
+* **الإجراءات**: التحكم في الإجراءات العامة لمساحة العمل مثل استيراد البيانات أو إرسال رسائل البريد الإلكتروني
+
+## إنشاء دور
+
+لإنشاء دور جديد:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. تحت **كل الأدوار**، انقر على **+ إنشاء دور**
+3. أدخل اسم الدور
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Click **Save** to finish
+
+## حذف دور
+
+لحذف دور:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. انقر على الدور الذي ترغب في إزالته
+3. افتح علامة التبويب **الإعدادات**، ثم انقر على **حذف الدور**
+4. انقر على **تأكيد** في النافذة المنبثقة
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. All except the **Admin** role can be deleted. يجب دائمًا أن يكون هناك عضو واحد على الأقل معين على دور **المشرف**.
+
+
+## تخصيص الأدوار للأعضاء
+
+### عرض التعيينات الحالية
+
+* اذهب إلى **الإعدادات → الأدوار**
+* رؤية جميع الأدوار وعدد الأعضاء المعينين لكل منها
+* عرض الأعضاء الذين لديهم الأدوار المختلفة
+
+### تعيين دور لعضو
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. انقر على الدور الذي ترغب في تعيينه
+3. افتح علامة التبويب **التعيين**
+4. انقر على **+ تعيين لعضو**
+5. اختر عضو مساحة العمل من القائمة
+6. أكد التعيين
+
+### تعيين الدور الافتراضي
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. في قسم **الخيارات**، اعثر على **الدور الافتراضي**
+3. اختر أي دور يجب أن يحصل عليه الأعضاء الجدد تلقائيًا
+4. سيتم تعيين أعضاء مساحة العمل الجدد هذا الدور عند انضمامهم
+
+
+ You can only assign roles to existing workspace members. لدعوة أعضاء جدد، استخدم [إدارة الأعضاء](/l/ar/user-guide/settings/capabilities/member-management).
+
+
+## تخصيص الأذونات
+
+Permissions determine what each role can access or modify within your workspace, including workspace objects records, settings, and actions.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | الوصف |
+| --------------------------------- | -------------------------------------- |
+| **عرض السجلات في جميع العناصر** | View records in lists and detail pages |
+| **تحرير السجلات في جميع العناصر** | Modify existing records |
+| **حذف السجلات من جميع العناصر** | Soft-delete records (can be restored) |
+| **إتلاف السجلات في جميع العناصر** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | الوصف |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### إدارة تجاوزات الأذونات
+
+To override inherited permissions:
+
+1. انقر على **X** لإزالة القاعدة الموروثة
+2. Select the specific permissions you want
+3. انقر على أيقونة **تراجع** البرتقالية (السهم الدائري) للتراجع عن التغييرات
+
+عند الانتهاء، انقر على **إنهاء**، ثم **حفظ** عند العودة إلى صفحة الدور.
+
+### أذونات إعدادات مساحة العمل
+
+تحكم في الوصول إلى إعدادات مساحة العمل بطريقتين:
+
+* تبديل **الوصول الكامل للإعدادات** لمنح الوصول الكامل
+* أو تمكين أذونات محددة (مثل توليد مفتاح API، تفضيلات مساحة العمل، تعيين الأدوار، تكوين نموذج البيانات، إعدادات الأمان، وإدارة الحركات)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### أذونات الإجراءات في مساحة العمل
+
+التحكم في الوصول إلى الإجراءت العامة لمساحة العمل:
+
+* تبديل **الوصول الكامل للتطبيق** لمنح الأذونات الكاملة
+* أو تمكين الإجراءات الفردية مثل **إرسال البريد الإلكتروني**، **استيراد CSV**، و**تصدير CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. انقر على الدور الذي ترغب في تعيينه
+3. افتح علامة التبويب **التعيين**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. أكد التعيين
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. انقر على الدور الذي ترغب في تعيينه
+3. افتح علامة التبويب **التعيين**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. أكد التعيين
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..88cefaf0e7
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Prerequisites
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### ٣. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. انتقل إلى **الإعدادات → الأعضاء**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## أفضل الممارسات
+
+### Security
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## استكشاف الأخطاء وإصلاحها
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### الحصول على المساعدة
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/ar/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/ar/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..e3deb9c1b4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Roles
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## الصلاحيات
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. اذهب إلى **الإعدادات → الأدوار**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## التسجيل الموحد
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/ar/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..11eb0a6bf4
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: الأذونات والوصول
+description: إدارة الأدوار والأذونات والتحكم في الوصول ضمن مساحة العمل.
+---
+
+
+
+
+
+يتيح لك نظام الأذونات في Twenty التحكم بمن يمكنه الوصول إلى البيانات وتعديلها في مساحة العمل لديك. أنشئ أدوارًا، وامنح أذونات، وقم بتكوين تسجيل الدخول الأحادي (SSO) للوصول الآمن.
+
+## ما الذي يتضمنه هذا القسم
+
+
+
+ أنشئ أدوارًا وكوّن أذونات الكائنات والحقول والإعدادات.
+
+
+
+ إعداد تسجيل الدخول الأحادي مع موفّر الهوية لديك.
+
+
+
+ أسئلة شائعة حول الأدوار والأذونات وتسجيل الدخول الأحادي (SSO).
+
+
+
+## الميزات الرئيسية
+
+* **الوصول القائم على الأدوار**: أنشئ أدوارًا مخصّصة بأذونات محددة
+* **أذونات الكائنات**: التحكم بمن يمكنه عرض أو تعديل أو حذف السجلات
+* **أذونات الحقول**: تقييد الوصول إلى الحقول الحساسة
+* **أذونات الإعدادات**: التحكم بالوصول إلى تكوين مساحة العمل
+* **تكامل SSO**: قم بتكوين تسجيل الدخول الأحادي لأمان المؤسسات (خطة المؤسسة)
+
+## روابط سريعة
+
+* [إنشاء دور](/l/ar/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [تكوين SSO](/l/ar/user-guide/permissions-access/capabilities/sso-configuration)
+* [إدارة أعضاء الفريق](/l/ar/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..c8ef98d989
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## نطاق مساحة العمل
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### تخصيص النطاق
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## النطاقات المعتمدة
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### إضافة نطاق وصول معتمد
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. حفظ
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## النطاقات العامة
+
+توفير بيئة استضافة كاملة وآمنة على هذه النطاقات.
+
+### إضافة نطاق عام
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..b70e428125
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: إدارة الأعضاء
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## دعوة أعضاء جدد
+
+### Using Email Invitation
+
+1. انتقل إلى **الإعدادات → الأعضاء**
+2. Click **+ Invite**
+3. أدخل عنوان البريد الإلكتروني للشخص
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. انتقل إلى **الإعدادات → الأعضاء**
+2. انسخ رابط دعوة مساحة العمل
+3. شارك الرابط مع أعضاء الفريق الجدد
+4. سيحصلون على الوصول بمجرد التسجيل
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/ar/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## نطاقات الوصول المعتمدة
+
+Allow team members to join automatically based on their email domain:
+
+1. اذهب إلى **الإعدادات → النطاقات**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/ar/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/ar/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/capabilities/profile-settings.mdx b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/profile-settings.mdx
new file mode 100644
index 0000000000..4be490286b
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/profile-settings.mdx
@@ -0,0 +1,43 @@
+---
+title: إعدادات الملف الشخصي
+description: إدارة ملفك الشخصي وإعدادات الأمان الشخصية.
+---
+
+## المعلومات الشخصية
+
+### الاسم والبريد الإلكتروني
+
+* **اسم العرض**: قم بتحديث كيفية ظهور اسمك لأعضاء مساحة العمل الآخرين
+* **عنوان البريد الإلكتروني**: قم بتغيير بريد تسجيل الدخول الخاص بك (يتطلب التحقق)
+* **صورة الملف الشخصي**: قم بتحميل صورة رمزية مخصصة أو استخدم الأحرف الأولى من اسمك
+
+## إعدادات الأمان
+
+### المصادقة الثنائية (2FA)
+
+فعّل المصادقة الثنائية لإضافة طبقة أمان إضافية إلى حسابك:
+
+1. انتقل إلى **الإعدادات → إعدادات الملف الشخصي**
+2. انقر على **تمكين المصادقة الثنائية**
+3. قم بمسح رمز الاستجابة السريعة باستخدام تطبيق المصادقة الخاص بك
+4. أدخل رمز التحقق للتأكيد
+
+### إدارة كلمات المرور
+
+* **تغيير كلمة المرور**: قم بتحديث كلمة المرور الحالية الخاصة بك
+* **شروط كلمة المرور**: يجب ألا تقل عن 8 أحرف
+
+## إدارة الملف الشخصي
+
+### حذف الحساب
+
+
+ سيؤدي حذف حسابك إلى إزالة وصولك إلى جميع مساحات العمل بشكلٍ دائم. لا يمكن التراجع عن هذا الإجراء؛ ستفقد الوصول إلى جميع مساحات العمل التي أنت عضو فيها، ويُستحسن بدلًا من ذلك مغادرة مساحات العمل على حدة إذا كنت تريد فقط الخروج من فرق معينة.
+
+
+لحذف حسابك:
+
+1. انتقل إلى **الإعدادات → إعدادات الملف الشخصي**
+2. قم بالتمرير إلى **منطقة الخطر**
+3. انقر على **حذف الحساب**
+4. أكد عن طريق كتابة عنوان بريدك الإلكتروني
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..4e4e8c86a3
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: إعدادات الإصدارات
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## ميزات المختبر
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. اذهب إلى **الإعدادات → الإصدارات**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..409f17d41f
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: إعدادات مساحة العمل
+description: Customize your workspace name and branding.
+---
+
+Those are accessible under **Settings → General**.
+
+## صورة مساحة العمل
+
+* **تحميل الشعار**: إضافة شعار مخصص لمساحة العمل
+* **التنسيقات المدعومة**: ملفات PNG و JPEG و GIF تحت حجم 10MB
+* **إزالة**: حذف شعار مساحة العمل الحالي
+
+## اسم مساحة العمل
+
+* **الاسم**: تغيير اسم العرض لمساحة العمل
+* يظهر هذا الاسم لجميع أعضاء مساحة العمل
+
+## Danger Zone
+
+
+ حذف مساحة العمل الخاصة بك سيقوم بإزالة جميع البيانات بشكل دائم ولن يمكن التراجع عن ذلك. سوف يتم فقد جميع بيانات مساحة العمل للأبد، سيفقد جميع الأعضاء حق الوصول فورًا، ولن يمكن عكس هذا الإجراء.
+
+
+لحذف مساحة العمل الخاصة بك:
+
+1. انقر على زر **حذف مساحة العمل**
+2. أكد الحذف عند الطلب
+
+**ملاحظة**: يستطيع فقط مدراء مساحة العمل حذف المساحات.
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/ar/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..f22b925eb9
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: أسئلة شائعة حول الإعدادات
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## إعدادات مساحة العمل
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## إعدادات الملف الشخصي
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. انقر على **تمكين المصادقة الثنائية**
+ 4. قم بمسح رمز الاستجابة السريعة باستخدام تطبيق المصادقة الخاص بك
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete Account**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## إعدادات التجربة
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. اذهب إلى **الإعدادات → الحسابات**
+ 2. انقر على **إضافة حساب**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. اذهب إلى **الإعدادات → الحسابات**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## النطاقات
+
+
+
+ نعم! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## ميزات المختبر
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/settings/overview.mdx b/packages/twenty-docs/l/ar/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..9cba923c84
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: \ا\ل\إ\ع\د\ا\د\ا\ت
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. اذهب إلى **الإعدادات → الحسابات**
+2. انقر على **إضافة حساب**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/ar/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. انتقل إلى **الإعدادات → الأعضاء**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## الخطوات التالية
+
+* [Workspace settings](/l/ar/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/ar/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/ar/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..10876d1280
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: عرض التقويم
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/ar/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..367761b725
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### عرض الجداول
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### عرض كانبان
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## أفضل الممارسات
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/ar/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/ar/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..f5aacb4968
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ----------- | -------------------------------------------------- |
+| نص | Equals, Contains, Starts with, Ends with, Is empty |
+| رقم | Equals, Greater than, Less than, Between, Is empty |
+| تاريخ | Equals, Before, After, Between, Is empty |
+| اختيار | Equals, Is any of, Is empty |
+| مربع اختيار | Is true, Is false |
+| علاقة | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/ar/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/ar/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..6d2abb34d5
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## حول عرض كانبان.
+
+توضح عروض كانبان التدفقات العملية بشكل مرئي، حيث يرمز كل عمود إلى مرحلة محددة وكل بطاقة تمثل سجل.
+
+## Move Cards between Stages
+
+يمكنك نقل كل بطاقة بين المراحل بينما تتقدم عبر سير العمل الخاص بك عن طريق السحب والإفلات. للمتابعة، اضغط باستمرار على البطاقة وانقلها إلى المرحلة التالية.
+
+
+
+## Add and Delete Stages
+
+يمكنك تخصيص سير العمل لديك ليتناسب مع احتياجاتك باستخدام المراحل، والتي تمثل قيمة في حقل التحديد:
+
+### إضافة المراحل
+
+لإضافة مرحلة، انتقل إلى إعدادات حقل الاختيار عن طريق الانتقال إلى الإعدادات > نموذج البيانات، وتحديد الكائن، ثم الحقل الذي يعتمد عليه لوحة كانبان الخاصة بك.
+
+
+
+### إزالة مراحل
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+يمكنك تكوين لوحة عرض كانبان لإظهار بعض الحقول وإخفاء الأخرى. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+يمكنك أيضًا إعادة ترتيب ترتيب الحقول عن طريق الضغط باستمرار على اسم الحقل وسحبه إلى المكان الذي تريده.
+
+
+
+## عرض مضغوط
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | الوصف |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## أفضل الممارسات
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..9602fc267c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: عرض الجداول
+description: Display your data in a spreadsheet-like list format.
+---
+
+## حول عرض الجداول
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**حالات الاستخدام:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/ar/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..42672b5bd5
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## View Visibility
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## المفضلات
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/ar/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/ar/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..4a286aa0b7
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Prerequisites
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. انقر على **حفظ**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| كائن | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| الفرص | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/ar/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..37c2371a81
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Prerequisites
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. انقر على **حفظ**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Completed |
+
+## Related
+
+* [Kanban Views](/l/ar/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/ar/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..edf8b21e9d
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. انقر على **حفظ**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| الخيار | الوصف |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. حفظ
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/ar/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..3043403e65
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: تقييد الوصول إلى عرضك
+description: تحكّم في من يمكنه رؤية عروضك المخصّصة.
+---
+
+لكل عرض (باستثناء العروض الافتراضية "كلّ [اسم الكائن]") إعداد رؤية خاص به.
+
+## الخطوات
+
+1. افتح العرض الذي تريد تقييد الوصول إليه
+2. انقر على **الخيارات** في الزاوية اليمنى العليا
+3. انقر على **الرؤية**
+4. اختر **غير مدرج**
+
+أصبح عرضك الآن مرئيًا لك فقط.
+
+## خيارات الرؤية
+
+| الإعداد | من يمكنه الرؤية |
+| --------------- | ---------------------- |
+| **مساحة العمل** | جميع أعضاء مساحة العمل |
+| **غير مدرج** | أنت فقط |
+
+## الملاحظات
+
+* لا يمكن جعل العروض الافتراضية "كلّ [اسم الكائن]" غير مدرجة
+* لا تظهر العروض غير المدرجة في القوائم المنسدلة للعروض لدى المستخدمين الآخرين
+* يمكنك تغيير الرؤية للعودة إلى مساحة العمل في أي وقت
+
+## ذات صلة
+
+* [إعدادات العرض](/l/ar/user-guide/views-pipelines/capabilities/view-settings) — جميع خيارات إعداد العرض
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..12a97e6239
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| المرحلة | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## أفضل الممارسات
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/ar/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..5e83a7ccd9
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: إظهار المبلغ المتوقع في خط سير المبيعات لديك},{
+description: احسب واعرض قيم الصفقات الموزونة استنادًا إلى احتمال المرحلة.
+---
+
+المبلغ المتوقع هو قيمة محسوبة: **المبلغ × الاحتمال**. يساعدك هذا على توقّع الإيرادات من خلال وزن الصفقات بناءً على مدى احتمالية إغلاقها.
+
+
+ هذا مثال على إنشاء [حقول الصيغ](/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields) باستخدام سير العمل.
+
+
+يرشدك هذا الدليل إلى إعداد الحقول المخصصة وسير العمل اللازمة لحساب المبالغ المتوقعة وعرضها في خط سير المبيعات لديك.
+
+## الخطوة 1: إنشاء حقول مخصصة
+
+تحتاج إلى حقلين مخصصين على كائن «الفرص».
+
+### إنشاء حقل الاحتمال
+
+1. انتقل إلى **الإعدادات → نموذج البيانات → الفرص**
+2. انقر **+ إضافة حقل**
+3. التكوين:
+ * **الاسم**: الاحتمال
+ * **النوع**: رقم
+ * **الوصف**: احتمال قائم على المرحلة (0-100%)
+4. انقر على **حفظ**
+
+### إنشاء حقل المبلغ المتوقع
+
+1. انقر **+ إضافة حقل**
+2. التكوين:
+ * **الاسم**: المبلغ المتوقع
+ * **النوع**: عملة
+ * **الوصف**: محسوب: المبلغ × الاحتمال
+3. انقر على **حفظ**
+
+### اختياري: جعل الحقول للقراءة فقط للمستخدمين
+
+إذا كنت لا تريد أن يحرّر المستخدمون هذه الحقول المحسوبة يدويًا:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. حدِّد الدور لتكوينه
+3. اعثر على كائن «الفرص»
+4. عيّن حقلي **الاحتمال** و**المبلغ المتوقع** كحقول للقراءة فقط
+
+يضمن هذا أن يتم تحديث هذه القيم عبر «سير العمل» فقط.
+
+## الخطوة 2: إنشاء سير العمل رقم 1 — تحديث الاحتمال عند تغيير المرحلة
+
+يضبط سير العمل هذا «الاحتمال» تلقائيًا عند انتقال فرصة إلى مرحلة جديدة.
+
+### إنشاء سير العمل
+
+1. انتقل إلى **سير العمل**
+2. انقر **+ سير عمل جديد**
+3. سمِّه "تحديث الاحتمال عند تغيير المرحلة"
+
+### تكوين المشغّل
+
+1. أضِف مشغّل **إنشاء أو تحديث سجل**
+2. حدِّد **الفرص** على أنه الكائن
+3. التصفية على: تم تحديث حقل **المرحلة**
+
+### أضِف تفرعات لكل مرحلة
+
+أنشئ تفرعًا لكل مرحلة مع احتمالها:
+
+| المرحلة | الاحتمال |
+| ------------------ | -------- |
+| جديد | 10% |
+| مؤهل | 25% |
+| اجتماع | 40% |
+| العرض | 60% |
+| تفاوض | 80% |
+| تم الإغلاق - ربح | 100% |
+| تم الإغلاق - خسارة | 0% |
+
+
+ لإنشاء تفرع جديد، انقر بزر الماوس الأيمن على لوحة سير العمل وانقر **إجراء جديد**. بعد ذلك، اربط هذا الإجراء بالعقدة السابقة عبر سحب السهم من العقدة السابقة إلى هذا الإجراء الجديد.
+
+
+لكل مرحلة:
+
+1. أضِف عقدة **تصفية**: المرحلة = [اسم المرحلة]
+2. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقل: الاحتمال
+ * القيمة: [احتمال تلك المرحلة]
+
+### حساب المبلغ المتوقع
+
+بعد انضمام التفرعات مجددًا:
+
+1. أضِف عقدة **تصفية**: المبلغ غير فارغ
+2. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقل: المبلغ المتوقع
+ * القيمة: المبلغ × الاحتمال
+
+## الخطوة 3: إنشاء سير العمل رقم 2 — إعادة الحساب عند تغيير المبلغ
+
+يحدّث سير العمل هذا «المبلغ المتوقع» عند تغيّر «مبلغ الصفقة».
+
+### إنشاء سير العمل
+
+1. انتقل إلى **سير العمل**
+2. انقر **+ سير عمل جديد**
+3. سمِّه "إعادة حساب المبلغ المتوقع عند تغيير المبلغ"
+
+### تكوين المشغّل
+
+1. أضِف مشغّل **إنشاء أو تحديث سجل**
+2. حدِّد **الفرص** على أنه الكائن
+3. التصفية على: تم تحديث حقل **المبلغ**
+
+### إضافة المنطق
+
+1. أضِف عقدة **تصفية**: المبلغ غير فارغ
+2. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقل: المبلغ المتوقع
+ * القيمة: المبلغ × الاحتمال
+
+## الخطوة 4: العرض في خط سير المبيعات لديك
+
+اعرض الآن إجماليات «المبلغ المتوقع» في طريقة عرض كانبان لديك:
+
+1. افتح طريقة عرض كانبان **خط سير المبيعات**
+2. انقر **الرقم** الموجود بجوار أي اسم مرحلة أعلى العمود
+3. اختر **المجموع**
+4. اختر **المبلغ المتوقع**
+
+سيعرض كل عمود الآن إجمالي القيمة الموزونة في خط السير لتلك المرحلة.
+
+## ملخص
+
+| المكوّن | الغرض |
+| ---------------------- | ----------------------------------------------------------------- |
+| **حقل الاحتمال** | يخزّن احتمال الفوز القائم على المرحلة |
+| **حقل المبلغ المتوقع** | يخزّن المبلغ × الاحتمال |
+| **سير العمل رقم 1** | يحدّث «الاحتمال» عند تغيير المرحلة، ثم يعيد حساب «المبلغ المتوقع» |
+| **سير العمل رقم 2** | يعيد حساب «المبلغ المتوقع» عند تغيير «المبلغ» |
+| **التجميع** | يعرض مجموع «المبلغ المتوقع» لكل مرحلة |
+
+## ذات صلة
+
+* [حقول الصيغ](/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields) — إنشاء حقول محسوبة باستخدام سير العمل
+* [طرق عرض كانبان](/l/ar/user-guide/views-pipelines/capabilities/kanban-views) — تجميعات الأعمدة
+* [كيفية إنشاء حقول مخصصة](/l/ar/user-guide/data-model/how-tos/create-custom-fields) — تكوين الحقول
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..1cd8c3ebca
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: تتبّع مدة بقاء الفرص في كل مرحلة
+description: راقِب سرعة الصفقات بتتبُّع وقت دخول الفرص إلى كل مرحلة.
+---
+
+
+ هذا مثال على إنشاء [حقول الصيغة](/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields) باستخدام سير العمل — وتحديدًا حسابات التواريخ.
+
+
+يساعدك تتبُّع وقت دخول الفرص إلى كل مرحلة على تحديد نقاط الاختناق وقياس سرعة الصفقات.
+
+يرشدك هذا الدليل إلى إعداد حقول مخصّصة وسير عمل لتسجيل وقت انتقال الفرصة إلى كل مرحلة تلقائيًا، وحساب عدد الأيام التي أمضتها في المرحلة السابقة.
+
+## الخطوة 1: إنشاء حقول مخصّصة
+
+تحتاج إلى نوعين من الحقول لكل مرحلة:
+
+* **حقول التاريخ والوقت**: تسجيل وقت دخول الفرصة إلى كل مرحلة
+* **حقول الأرقام**: تخزين عدد الأيام التي أمضتها الفرصة في كل مرحلة
+
+### إنشاء حقول "آخر دخول"
+
+1. انتقل إلى **الإعدادات → نموذج البيانات → الفرص**
+2. لكل مرحلة، انقر **+ إضافة حقل** وقم بالتهيئة:
+ * **الاسم**: آخر دخول [اسم المرحلة] (مثال: "آخر دخول جديد"، "آخر دخول مؤهّل")
+ * **النوع**: تاريخ ووقت
+ * **الوصف**: الطابع الزمني عند دخول الفرصة هذه المرحلة
+3. انقر على **حفظ**
+
+أنشئ هذه الحقول:
+
+* آخر دخول جديد
+* آخر دخول مؤهّل
+* آخر دخول اجتماع
+* آخر دخول عرض
+* آخر دخول تفاوض
+* آخر دخول مغلقة - ربح
+* آخر دخول مغلقة - خسارة
+
+### إنشاء حقول "الأيام في المرحلة"
+
+1. لكل مرحلة، انقر **+ إضافة حقل** وقم بالتهيئة:
+ * **الاسم**: الأيام في [اسم المرحلة] (مثال: "الأيام في جديد"، "الأيام في مؤهّل")
+ * **النوع**: رقم
+ * **الوصف**: عدد الأيام المقضية في هذه المرحلة
+2. انقر على **حفظ**
+
+أنشئ هذه الحقول:
+
+* الأيام في جديد
+* الأيام في مؤهّل
+* الأيام في اجتماع
+* الأيام في عرض
+* الأيام في تفاوض
+
+
+ لا تحتاج إلى حقول "الأيام في" لمرحلتي "مغلقة - ربح" و"مغلقة - خسارة" لأنها مراحل نهائية.
+
+
+### اختياري: جعل الحقول للقراءة فقط
+
+إذا كنت لا تريد أن يحرّر المستخدمون هذه الحقول المحسوبة يدويًا:
+
+1. اذهب إلى **الإعدادات → الأدوار**
+2. حدِّد الدور لتهيئته
+3. اعثر على كائن الفرص
+4. عيِّن حقول "آخر دخول" و"الأيام في" كحقول للقراءة فقط
+
+## الخطوة 2: إنشاء سير العمل
+
+يتولّى سير العمل الواحد هذا المهمتين معًا:
+
+* يسجّل الطابع الزمني عند الدخول إلى مرحلة جديدة
+* يحسب الأيام المُستغرَقة في المرحلة السابقة
+
+### إنشاء سير العمل
+
+1. انتقل إلى **سير العمل**
+2. انقر **+ سير عمل جديد**
+3. سمِّه "تتبُّع وقت المرحلة"
+
+### تهيئة المشغِّل
+
+1. أضِف مشغِّل **تحديث السجل**
+2. حدِّد **الفرص** ككائن
+3. التصفية على: تم تحديث حقل **المرحلة**
+
+### إضافة تفرّعات لكل مرحلة
+
+
+ لإنشاء تفرّع جديد، انقر بزر الفأرة الأيمن على لوحة سير العمل ثم انقر **إجراء جديد**. بعد ذلك، اربط هذا الإجراء بالعُقدة السابقة بسحب السهم من العُقدة السابقة إلى هذا الإجراء الجديد.
+
+
+---
+
+**التفرّع 1: المرحلة = جديد (المرحلة الأولى)**
+
+نظرًا لأنها المرحلة الأولى، فإننا نسجّل فقط طابع وقت الدخول—ولا توجد مرحلة سابقة للحساب.
+
+1. أضِف عُقدة **تصفية**: المرحلة = جديد
+2. أضِف إجراء **كود**:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقل: آخر دخول جديد
+ * القيمة: `now` من عُقدة الكود
+
+---
+
+**التفرّع 2: المرحلة = مؤهّل**
+
+عند الانتقال إلى مرحلة مؤهّل، سجّل وقت الدخول واحسب أيضًا الأيام التي أمضتها في مرحلة جديد.
+
+1. أضِف عُقدة **تصفية**: المرحلة = مؤهّل
+2. أضِف إجراء **كود**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. اضبط مُدخلات عُقدة الكود: اربط `lastEnteredPreviousStage` بحقل **آخر دخول جديد**
+4. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقول المطلوب تحديثها:
+ * آخر دخول مؤهّل = `now`
+ * الأيام في جديد = `daysInPreviousStage`
+
+---
+
+**التفرّع 3: المرحلة = اجتماع**
+
+عند الانتقال إلى مرحلة اجتماع، سجّل وقت الدخول واحسب أيضًا الأيام التي أمضتها في مرحلة مؤهّل.
+
+1. أضِف عُقدة **تصفية**: المرحلة = اجتماع
+2. أضِف إجراء **كود**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. اضبط مُدخلات عُقدة الكود: اربط `lastEnteredPreviousStage` بحقل **آخر دخول مؤهّل**
+4. أضِف إجراء **تحديث سجل**:
+ * السجل: الفرصة المُشغِّلة
+ * الحقول المطلوب تحديثها:
+ * آخر دخول اجتماع = `now`
+ * الأيام في مؤهّل = `daysInPreviousStage`
+
+---
+
+**تابِع لبقية المراحل:**
+
+| المرحلة | السجلات | يحسب |
+| ------------- | ---------------------- | ---------------- |
+| عرض | آخر دخول عرض | الأيام في اجتماع |
+| تفاوض | آخر دخول تفاوض | الأيام في عرض |
+| مغلقة - ربح | آخر دخول مغلقة - ربح | الأيام في تفاوض |
+| مغلقة - خسارة | آخر دخول مغلقة - خسارة | الأيام في تفاوض |
+
+لا حاجة لعودة التفرّعات للاندماج—فكل واحد يعمل بشكل مستقل عند تحقق شرط مرحلته.
+
+## الخطوة 3: تحليل الوقت في المرحلة
+
+مع تسجيل الطوابع الزمنية وعدّ الأيام، يمكنك الآن تحليل سرعة الصفقات.
+
+### إنشاء عرض "صفقات بطيئة"
+
+1. أنشئ عرض جدول للفرص
+2. أضِف أعمدة: الاسم، المرحلة، الأيام في [المرحلة السابقة]، المبلغ
+3. رتِّب حسب حقل "الأيام في" (تنازليًا)
+4. رشِّح حسب المرحلة للتركيز على مرحلة واحدة في كل مرة
+
+الصفقات في الأعلى أمضت أطول وقت في المرحلة السابقة.
+
+### استخدم التجميعات
+
+في عرض كانبان لمسار الصفقات لديك:
+
+1. انقر الرقم بجانب اسم مرحلة
+2. حدِّد **المتوسط**
+3. اختر حقل "الأيام في"
+
+سيُظهر هذا متوسط الوقت الذي تمضيه الصفقات في كل مرحلة.
+
+## ملخص
+
+| المكوِّن | الغرض |
+| --------------------- | ---------------------------------------------- |
+| **حقول آخر دخول** | تخزين وقت دخول الفرصة إلى كل مرحلة |
+| **حقول الأيام في** | تخزين عدد الأيام المقضية في كل مرحلة |
+| **سير العمل** | يسجّل الطابع الزمني ويحسب الأيام في خطوة واحدة |
+| **العروض والتجميعات** | تحليل سرعة الصفقات وتحديد نقاط الاختناق |
+
+## ذات صلة
+
+* [سير العمل](/l/ar/user-guide/workflows/overview) — أساسيات الأتمتة
+* [كيفية إنشاء حقول مخصّصة](/l/ar/user-guide/data-model/how-tos/create-custom-fields) — تهيئة الحقول
+* [عروض كانبان](/l/ar/user-guide/views-pipelines/capabilities/kanban-views) — التجميعات
diff --git a/packages/twenty-docs/l/ar/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/ar/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..efa88b90c3
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: العروض والمسارات
+description: تعرّف على كيفية إنشاء العروض وإدارتها في Twenty.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## فهم العروض
+
+العروض هي إعدادات محفوظة تحدد كيفية عرض بياناتك. يمكن أن يتضمن كل عرض ما يلي:
+
+* **التخطيط**: جدول، كانبان، أو تقويم
+* **عوامل التصفية**: تحديد السجلات التي سيتم عرضها
+* **الفرز**: كيفية ترتيب السجلات
+* **الحقول**: الأعمدة المرئية
+
+## أنواع العروض
+
+### عرض الجدول
+
+عرض افتراضي يشبه جداول البيانات، يعرض السجلات في صفوف مع أعمدة قابلة للتخصيص.
+
+### عرض كانبان
+
+عرض لوحة بصري تظهر فيه السجلات كبطاقات منظَّمة حسب المراحل. مثالي لـ:
+
+* مسارات المبيعات
+* تتبع المشاريع
+* أي سير عمل بمراحل محددة
+
+### عرض التقويم
+
+عرض السجلات ذات حقول التاريخ على تقويم. مثالي لـ:
+
+* الاجتماعات والفعاليات
+* المواعيد النهائية وتواريخ الاستحقاق
+* التخطيط القائم على الوقت
+
+## إنشاء طريقة عرض.
+
+هناك طريقتان لإنشاء عرض جديد.
+
+### استخدام قائمة العرض المنسدلة
+
+1. انتقل إلى أي كائن (الأشخاص، الشركات، إلخ)
+2. انقر على اسم العرض في أعلى اليسار (يُظهر العرض الحالي مع سهم منسدل)
+3. انقر على **+ إضافة عرض**
+4. قم بتسمية العرض ثم انقر على **إنشاء**
+5. اختر تخطيطًا (جدول، كانبان، أو تقويم) من ضمن **الخيارات**
+6. أضف عوامل التصفية والفرز حسب الحاجة
+7. حدد الحقول التي سيتم عرضها وأعد ترتيبها
+8. انقر على **حفظ**
+
+
+
+### ابدأ بتحرير عرض موجود
+
+1. انتقل إلى أي كائن (الأشخاص، الشركات، إلخ)
+2. اختر تخطيطًا (جدول، كانبان، أو تقويم) من ضمن **الخيارات** أو أضف عوامل التصفية والفرز حسب الحاجة
+3. انقر على **حفظ كعرض جديد**
+4. قم بتسمية العرض ثم انقر على **إنشاء**
+5. واصل تحرير عرضك الجديد
+6. انقر على **تحديث العرض** لحفظ الإعدادات الإضافية
+
+
+
+## إدارة العروض
+
+### تحرير عرض
+
+1. اختر العرض من القائمة المنسدلة
+2. أجرِ التغييرات الخاصة بك (عوامل التصفية، الفرز، الأعمدة)
+3. انقر على **حفظ** لتحديث العرض
+
+### إعادة تسمية عرض أو تغيير أيقونته
+
+1. افتح قائمة العرض المنسدلة
+2. انقر على قائمة **⋮** بجانب اسم العرض
+3. اختر **تحرير**
+4. غيّر الاسم أو الأيقونة
+5. انقر على **حفظ**
+
+### إعادة ترتيب العروض
+
+1. افتح قائمة العرض المنسدلة
+2. انقر واسحب عرضًا من مقبضه
+3. أسقطه في الموضع المطلوب
+4. يتم حفظ الترتيب الجديد تلقائيًا
+
+### إضافة إلى المفضلات
+
+ثبّت العروض المستخدمة بشكل متكرر للوصول السريع:
+
+1. افتح قائمة العرض المنسدلة
+2. انقر على قائمة **⋮** بجانب أحد العروض
+3. اختر **إضافة إلى المفضلات**
+4. سيظهر العرض في قسم المفضلات لديك
+
+### حذف عرض
+
+1. اختر العرض المراد حذفه
+2. انقر على قائمة العرض المنسدلة
+3. انقر على قائمة **⋮** بجانب العرض
+4. اختر **حذف**
+5. أكد الحذف
+
+
+ لا يمكن استعادة العروض المحذوفة. تأكد من رغبتك في إزالته قبل التأكيد.
+
+
+## ظهور العرض
+
+لكل عرض (باستثناء عروض "كل [اسم الكائن]" الافتراضية) إعداد ظهور خاص به.
+
+لتغيير الظهور:
+
+1. افتح العرض
+2. انقر على **الخيارات → الظهور**
+3. اختر:
+ * **مساحة العمل**: مرئي لجميع أعضاء مساحة العمل
+ * **غير مدرج**: مرئي لك فقط
+
+
+ لا يمكن تغيير ظهور عروض "كل [اسم الكائن]" الافتراضية.
+
+
+## الخطوات التالية
+
+* [عروض الجداول](/l/ar/user-guide/views-pipelines/capabilities/table-views)
+* [عروض كانبان](/l/ar/user-guide/views-pipelines/capabilities/kanban-views)
+* [عوامل التصفية والفرز](/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [إعدادات العرض](/l/ar/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..8dcb4d2aa0
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Prerequisites
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**الإعداد**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| الحقل | القيمة |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `مرحبا بك في {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| نوع المُحفِز | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**الإعداد**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**الإعداد**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**الإعداد**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## أفضل الممارسات
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### استكشاف الأخطاء وإصلاحها
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..eec8d14651
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## أفضل الممارسات
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..366895811f
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | مثال |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### النتيجة
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | الوصف |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## أفضل الممارسات
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..0a8334517b
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: إجراءات سير العمل
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+تحدد الإجراءات ما يحدث بعد تنفيذ الزناد. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### إنشاء سجل جديد
+
+يضيف سجل جديد إلى كائن محدد.
+
+**الإعداد**:
+
+* اختر الكائن المستهدف
+* املأ الحقول الضرورية والاختيارية
+* Use data from previous steps or input values manually to populate fields
+
+**المخرجات**: بيانات السجل المنشأ حديثاً متاحة للاستخدام في الخطوات التالية.
+
+### تحديث السجل
+
+يقوم بتعديل سجل موجود في كائن محدد.
+
+
+
+**الإعداد**:
+
+* اختر الكائن المستهدف
+* اختر السجل المحدد لتحديثه.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* اختر الحقول لتعديل القيم وأدخل القيم الجديدة
+
+**المخرجات**: بيانات السجل المحدثة متاحة للاستخدام في الخطوات التالية.
+
+### حذف السجل
+
+يزيل سجلاً من كائن محدد.
+
+**التكوين**:
+
+* اختر الكائن المستهدف
+* اختر السجل المحدد لحذفه
+
+**المخرجات**: تظل بيانات السجل المحذوف متاحة للاستخدام في الخطوات التالية.
+
+### البحث في السجلات
+
+يجد السجلات داخل كائن معين باستخدام شروط التصفية.
+
+**التكوين**:
+
+* اختر الكائن للبحث
+* حدد معايير التصفية لتضييق النتائج
+* قم بتكوين الفرز والقيود
+
+**المخرجات**: تعيد السجلات المطابقة التي يمكن استخدامها في الخطوات اللاحقة.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/ar/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**التكوين**:
+
+* اختر الكائن المستهدف
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* استخدم البيانات من الخطوات السابقة لملء الحقول
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### مكرر
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**التكوين**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* حدد الإجراءات لتنفيذها على كل سجل في الحلقة.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### تصفية
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**التكوين**:
+
+* Select the record to filter
+* حدد شروط ومعايير التصفية
+* قم بتكوين السجلات التي يجب أن تمر إلى الخطوات اللاحقة
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| النوع | الوصف |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**حالات الاستخدام**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### إرسال البريد الإلكتروني
+
+يرسل بريدًا إلكترونيًا من سير العمل الخاص بك. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**التكوين**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* ادخل عنوان البريد الإلكتروني المستلم.
+
+
+ Only one recipient is possible at the moment.
+
+
+* اضبط سطر الموضوع.
+* قم بإنشاء نص الرسالة. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### نموذج
+
+يعرض نموذجاً أثناء تنفيذ سير العمل لجمع مدخلات المستخدم. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. بالنسبة لمهام سير العمل مع محركات أخرى (سجل تم إنشاؤه، تم تحديثه، إلخ)، يمكن الوصول إلى النماذج فقط من خلال واجهة تشغيل سير العمل، وهو ليس التجربة المتوقعة. سيتم إصدار مركز الإشعارات في عام 2026 لدعم النماذج في مهام سير العمل المؤتمتة بشكل صحيح.
+
+
+**التكوين**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**المخرجات**: استجابات النموذج متاحة للاستخدام في الخطوات اللاحقة.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### كود
+
+يشغل جافا سكريبت مخصص ضمن سير العمل الخاص بك.
+
+**التكوين**:
+
+* الوصول إلى المتغيرات من الخطوات السابقة. You can edit the variables names dynamically.
+
+
+
+* اكتب شيفرة جافا سكريبت في المحرر
+* إرجاع المتغيرات للاستخدام في الخطوات اللاحقة
+* اختبر الكود مباشرة في الخطوة
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### طلب HTTP
+
+يرسل طلبًا إلى واجهة برمجية خارجية كجزء من سير العمل الخاص بك.
+
+
+
+**التكوين**:
+
+* ادخل عنوان رابط واجهة برمجية. Using parameters from previous steps is possible.
+* اختر طريقة HTTP (GET, POST, PUT, PATCH, DELETE)
+* أضف الرؤوس والقيم المطلوبة
+* قدّم مثالًا للمخرجات لمعاينة البنية
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**التكوين**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/ar/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/ar/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..f231969433
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: تفرعات سير العمل
+description: أنشئ مسارات متوازية ومنطقًا شرطيًا في سير العمل لديك.
+---
+
+تتيح لك التفرعات تقسيم سير العمل إلى مسارات متعددة يمكن أن تعمل بالتوازي أو بشكل شرطي استنادًا إلى بياناتك.
+
+
+
+## كيفية عمل التفرعات
+
+عند إنشاء عدة اتصالات من عقدة واحدة، يصبح كل مسار تفرعًا. افتراضيًا، **تُنفَّذ جميع التفرعات بالتوازي**—ولا تنتظر بعضها بعضًا.
+
+## إنشاء التفرعات
+
+### إضافة تفرع جديد
+
+1. **انقر بزر الماوس الأيمن على اللوحة الرئيسية** لسير العمل (وليس على عقدة موجودة)
+2. انقر على **إضافة عقدة**
+3. اختر نوع العقدة لتفرعك الجديد
+4. اسحب سهمًا من أسفل الخطوة السابقة إلى أعلى هذا الإجراء الجديد
+5. كرّر لإضافة مزيد من التفرعات من العقدة نفسها
+
+
+ كل تفرع مستقل. إن إضافة تفرع لا يؤثر في المسارات الأخرى الموجودة من تلك العقدة.
+
+
+### التخطيط المرئي
+
+تظهر التفرعات كمسارات متوازية في محرر سير العمل. يمكنك سحب العقد لإعادة ترتيب التخطيط المرئي دون التأثير في التنفيذ.
+
+## التفرعات الشرطية
+
+نظرًا إلى أن جميع التفرعات تعمل افتراضيًا، استخدم عقد **عامل التصفية** للتحكم في المسارات التي تُنفَّذ فعليًا:
+
+| التفرع | شرط عامل التصفية | الإجراء |
+| ------ | ----------------------- | --------------------------- |
+| A | المرحلة = "Won" | إرسال بريد إلكتروني للتهنئة |
+| B | المرحلة = "Lost" | إنشاء مهمة متابعة |
+| C | المرحلة = "Negotiation" | إخطار المدير |
+
+1. أنشئ تفرعات من المشغّل لديك أو الإجراء
+2. أضف عقدة **عامل التصفية** بوصفها الخطوة الأولى في كل تفرع
+3. قم بإعداد كل عامل تصفية بشروط متبادلة الاستبعاد
+4. أضف إجراءاتك بعد كل عامل تصفية
+
+سيتابع التنفيذ فقط التفرع/التفرعات التي يتحقق فيها شرط عامل التصفية.
+
+## دمج التفرعات
+
+**لا تُدمَج التفرعات تلقائيًا.** يعمل كل تفرع بشكل مستقل حتى ينتهي. لديك مرونة كاملة في كيفية التعامل مع ذلك:
+
+* **الخيار 1: إبقاء التفرعات منفصلة**
+ يتولى كل تفرع إجراءات المتابعة الخاصة به بشكل مستقل. هذه أبسط مقاربة عندما لا تحتاج التفرعات إلى الالتقاء.
+
+* **الخيار 2: دمج التفرعات يدويًا**
+ عند إنشاء سير العمل، يمكنك توصيل عدة تفرعات يدويًا بالإجراء اللاحق نفسه. ما عليك سوى سحب الأسهم من نهاية كل تفرع إلى عقدة مشتركة.
+
+
+ بينما يمكنك استخدام عقدة [Delay](/l/ar/user-guide/workflows/capabilities/workflow-actions#delay) لإيقاف التنفيذ مؤقتًا، إلا أنه لا يمكن ضبطها حاليًا للانتظار "حتى ينتهي تفرع آخر".
+
+
+## ذات صلة
+
+* [كيفية استخدام التفرعات في سير العمل](/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows) - دليل خطوة بخطوة
+* [إجراءات سير العمل](/l/ar/user-guide/workflows/capabilities/workflow-actions) - الإجراءات المتاحة بما في ذلك عامل التصفية
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..849bcc5150
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: رصيد سير العمل
+description: Understand workflow credit consumption and management.
+---
+
+Workflow credits power your automations in Twenty. فهم كيفية عملها يساعدك على تحسين التكاليف وإدارة ميزانية الأتمتة بفعالية.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## كيف يعمل استهلاك الرصيد
+
+Credits are consumed when workflows execute, not when you create them. يستهلك كل إجراء سير عمل الرصيد بناءً على تعقيده.
+
+### استهلاك الرصيد حسب نوع الإجراء
+
+* **العمليات الأساسية الداخلية**: استهلاك رصيد منخفض جدًا
+ * البحث في السجلات
+ * إنشاء سجل
+ * تحديث السجل
+ * حذف السجل
+ * Form actions
+
+* **Complex operations**: Higher credit consumption
+ * إجراءات الكود (تنفيذ JavaScript)
+ * طلبات HTTP إلى الخدمات الخارجية
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### الخصم في الوقت الحقيقي
+
+يتم خصم الرصيد في الوقت الفعلي عند تنفيذ سير العمل. هذا يعني:
+
+* Draft workflows don't consume credits
+* Only active, running workflows use your credit allocation
+* Failed workflows still consume credits for completed steps
+
+## إدارة الرصيد
+
+### التحقق من استخدام الرصيد
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. View your current credit consumption and remaining balance
+3. Monitor usage patterns to optimize your workflows
+
+### شراء رصيد إضافي
+
+If you need more credits beyond your plan allocation:
+
+1. اذهب إلى **الإعدادات → الفواتير**
+2. اضغط على الخيار لشراء رصيد إضافي. توفر باقات بأحجام مختلفة.
+3. يتم إضافة الرصيد إلى الرصيد الحالي الخاص بك.
+
+## أفضل الممارسات
+
+* **المعالجة الدفعية**: استخدم العمليات الجماعية وإجراءات المكرر بفعالية
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* تحسين إجراءات الكود للكفاءة
+* قم بتجميع العمليات لتقليل طلبات الإجراءات الفردية
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..aeb2115223
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: عمليات تشغيل سير العمل
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| الحالة | الوصف |
+| ---------------- | ------------------------------------------------------------------------ |
+| **جارٍ التنفيذ** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * تنسيق بيانات غير صالح
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..7739c434c1
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: محفزات سير العمل
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+تبدأ سير العمل دائمًا بمحفز واحد يحدد متى ينبغي تشغيل الأتمتة.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * أعضاء مساحة العمل
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## إنشاء سجل
+
+يبدأ سير العمل عندما يتم إنشاء سجل جديد في كائن محدد (أشخاص أو شركات أو فرص أو أي كائن مخصص).
+
+**التكوين**: حدد نوع الكائن لمراقبة السجلات الجديدة.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## تحديث السجل
+
+يبدأ سير العمل عندما يتم إجراء تغييرات على سجل موجود.
+
+**التكوين**:
+
+* اختر نوع الكائن
+* اختر الحقول التي تريد مراقبتها للتغييرات بشكل اختياري
+
+## تحديث أو إنشاء سجل
+
+يبدأ سير العمل عندما يتم إنشاء أو تحديث سجل في كائن محدد.
+
+**أهمية الموضوع**: هذا المحفز مهم بشكل خاص لأن السجلات التي تنشأ بطرق مختلفة تتصرف بشكل مختلف:
+
+* **استيراد API/CSV**: يتم إنشاء السجلات مع ملء جميع الحقول فورًا
+* **الإنشاء اليدوي**: يتم إنشاء السجلات أولاً، ثم يتم إضافة الحقول في التحديثات اللاحقة
+
+**التكوين**:
+
+* اختر نوع الكائن لمراقبته
+* اختر الحقول التي تريد مراقبتها للتغييرات بشكل اختياري
+* سيتم تشغيل سير العمل في كل من الإنشاء الأولي وأي تحديثات لاحقة
+
+## حذف السجل
+
+يبدأ سير العمل عندما يتم إزالة سجل من كائن.
+
+**التكوين**: حدد نوع الكائن لمراقبة عمليات الحذف.
+
+## Manual Trigger
+
+يبدأ سير العمل عندما يتم تشغيله بواسطة إجراء المستخدم. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**إعداد التوفر**:
+اختر كيفية التعامل مع تحديد السجل في سير العمل:
+
+* **العالمي**: لا يتطلب أي سجل لتشغيل سير العمل هذا. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **مفرد**: سيتم تمرير السجل (السجلات) المحددة إلى سير العمل الخاص بك. تم تكوين هذا لكائن معين. يمكن اختيار عدة سجلات قبل إطلاق سير العمل. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **الاختيار الشامل**: سيتم تمرير السجل/السجلات المحددة إلى سير العمل الخاص بك. تم تكوين هذا لكائن معين. يمكن اختيار عدة سجلات قبل إطلاق سير العمل. سيتم تشغيل سير العمل مرة واحدة، مما يوفر القائمة الكاملة للسجلات كمدخلات. This means the workflow needs to contain an [Iterator action](/l/ar/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**تكوين إضافي**:
+
+* حدد الكائن المستهدف (للتوفر الفردي والشامل)
+* اختر رمز الأمر لتفعيل سير العمل
+* قم بتكوين موضع شريط التنقل (مثبت أو غير مثبت)
+
+**طرق الوصول**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* زر مخصص في شريط التنقل العلوي (إذا تم تكوينه)
+
+## Time-Based Trigger: On a Schedule
+
+يبدأ سير العمل على أساس دوري تحدده.
+
+**التكوين**:
+
+* اختر وحدة الوقت (الدقائق، الساعات، الأيام)
+* أدخل قيمة أو استخدم تعبيرات كرون مخصصة للجدولة المتقدمة
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+يبدأ سير العمل عندما يتم استقبال طلب GET أو POST من خدمة خارجية.
+
+
+
+**التكوين**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ------------------------ |
+| New leads need processing | إنشاء سجل |
+| Data changes need sync | تحديث السجل |
+| Import/manual data handling | تحديث أو إنشاء سجل |
+| Cleanup after deletion | حذف السجل |
+| User-initiated action | التشغيل يدويًا |
+| Recurring reports | بجدول زمني |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..9bcaa15b82
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: إصدارات سير العمل
+description: إدارة إصدارات ومسودات سير العمل.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## حول الإصدارات
+
+في كل مرة تقوم فيها بتنشيط سير عمل، يتم إنشاء إصدار جديد. يتيح لك ذلك تتبُّع التغييرات بمرور الوقت والرجوع إلى التكوينات السابقة عند الحاجة.
+
+## حالات الإصدارات
+
+| الحالة | الوصف |
+| --------- | ----------------------------------- |
+| **مسودة** | قيد التحرير، ولم تُنشَر بعد |
+| **نشط** | إصدار فعّال يستجيب للمحفِّزات |
+| **معطل** | كان نشطًا مسبقًا ولكن أُوقِف يدويًا |
+| **مؤرشف** | إصدارات سابقة محفوظة للسجلّ |
+
+## العمل مع المسودات
+
+عند تحرير سير عمل نشط، تُحفَظ تغييراتك كـ **مسودة**. يستمر الإصدار النشط في العمل أثناء عملك على التحديثات.
+
+بعد الانتهاء من التحرير، يمكنك:
+
+* **تنشيط**: نشر المسودة كالإصدار النشط الجديد (يُؤرشف الإصدار السابق)
+* **تجاهل**: حذف المسودة والاحتفاظ بالإصدار النشط الحالي
+
+## سجل الإصدارات
+
+### عرض الإصدارات السابقة
+
+1. افتح سير العمل
+2. انقر فوق علامة التبويب **الإصدارات**
+3. اعرض جميع الإصدارات السابقة مع الطوابع الزمنية
+
+### استعادة إصدار
+
+1. اعثر على الإصدار الذي تريد استعادته
+2. انقر **استخدام كمسودة**
+3. يُنسَخ الإصدار إلى مسودة جديدة
+4. أجرِ أي تحديثات لازمة
+5. قم بالتنشيط عند الاستعداد
+
+## أفضل الممارسات
+
+### إدارة الإصدارات
+
+* قم بالتنشيط فقط عند الجاهزية للبيئة الإنتاجية
+* حافظ على التغييرات ذات المغزى بين الإصدارات
+* وثّق التغييرات الكبرى في أسماء أو أوصاف سير العمل
+* اختبر في وضع المسودة قبل التنشيط
+
+### التراجع عن التغييرات
+
+* إذا تسبب إصدار جديد في مشاكل، فاستعد الإصدار السابق
+* استخدم سجل الإصدارات لتتبُّع ما تغيّر
+* اختبر دائمًا الإصدارات المُستعادة قبل التنشيط
+
+## سير العمل الشائعة
+
+### تحرير سريع
+
+1. أجرِ تغييرات طفيفة على سير عمل نشط
+2. اختبر في وضع المسودة
+3. قم بتنشيط الإصدار الجديد
+
+### مراجعة رئيسية
+
+1. استخدم الإصدار السابق كنقطة انطلاق
+2. أجرِ تغييرات كبيرة في المسودة
+3. اختبر جميع السيناريوهات بشكل شامل
+4. قم بالتنشيط عندما تكون واثقًا
+
+### الرجوع إلى إصدار سابق
+
+1. حدِّد المشكلة في الإصدار الحالي
+2. اعثر على آخر إصدار يعمل في السجل
+3. انقر **استخدام كمسودة**
+4. قم بالتنشيط لاستعادة السلوك السابق
+
+## ذات صلة
+
+* [البدء مع سير العمل](/l/ar/user-guide/workflows/overview)
+* [تشغيلات سير العمل](/l/ar/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..647b60b8ee
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | كود |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | القيمة |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| المصدر | بيانات |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..f4fb0e18b0
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. حفظ
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| الحقل | القيمة |
+| -------------- | ---------------------------------------------------- |
+| **Object** | الأشخاص |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..9f5005c66a
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | القيمة |
+| ------------- | --------------------------------- |
+| **Field** | المرحلة |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | القيمة |
+| ------------ | ---------------------------------------- |
+| **Object** | الشركة |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | القيمة |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Action | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| ٢ | تصفية | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | كود | Format data for invoicing API |
+| 5 | طلب HTTP | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..c1181553a2
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | مثال |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| الحقل | القيمة |
+| ----------------- | ---------------------------------------------------- |
+| الاسم الأول | `{{trigger.body.firstName}}` |
+| الاسم الأخير | `{{trigger.body.lastName}}` |
+| البريد الإلكتروني | `{{trigger.body.email}}` |
+| الشركة | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..de60b4cdeb
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Configure:
+
+| الحقل | القيمة |
+| ------------------- | ------------------------------- |
+| **Object** | الشركات |
+| **Record** | `{{trigger.object.company.id}}` |
+| **نوع** | العميل |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **مالك الحساب** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Configure:
+
+| الحقل | القيمة |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | المهام |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Configure:
+
+| الحقل | القيمة |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Configure:
+
+| الحقل | القيمة |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. التحقق:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Trigger
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### الإجراءات
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..40d6a50a29
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Configure:
+
+| الحقل | القيمة |
+| ---------- | ----------------------------------------------- |
+| **Object** | الفرص |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| الحقل | القيمة |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..b6f979f4a1
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## نظرة عامة
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Prerequisites
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/ar/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/ar/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..0a1f4604ab
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## الاستخدامات الشائعة
+
+| المصدر | Destination | Fields to Copy |
+| ------ | ----------- | ------------------------------- |
+| الشركة | الفرصة | Industry, Company Size, ARR |
+| شخص | الفرصة | Email, Phone, Title |
+| الفرصة | الشركة | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### إعداد
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### إعداد
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### إعداد
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/ar/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## أفضل الممارسات
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..39f200d662
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## الاستخدامات الشائعة
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### إعداد
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### إعداد
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### إعداد
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### إعداد
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## أفضل الممارسات
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### "الاختبار"
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..21fa459176
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## نظرة عامة
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configure:
+
+| الحقل | القيمة |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..005a2a3a3c
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Professional Services
+description: Get professional help building complex workflows and automations from Twenty's team and certified partners.
+---
+
+## متى تحتاج إلى مساعدة احترافية؟
+
+Consider professional services for:
+
+* تكامل أنظمة متعددة ومعقدة
+* منطق الأعمال المتقدم وقواعد الأتمتة
+* Large-scale data processing workflows
+* تطوير واجهة برمجة التطبيقات المخصصة
+* تدريب الفريق وتحسين سير العمل
+* عندما تكون الموارد الداخلية غير متوفرة
+
+## خيارات الخدمة
+
+### حزم الانضمام
+
+Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages):
+
+* **إنشاء سير العمل**: بناء سير عمل مخصصة لعمليات عملك
+* **تصميم نموذج البيانات**: تحسين هيكل البيانات الخاصة بك لأتمتة سير العمل
+* **نقل البيانات**: استيراد البيانات الموجودة بدمج سير العمل السليم
+
+### شركاء التنفيذ
+
+Work with certified partners for advanced customizations. Contact us at contact@twenty.com to connect with our [implementation partners](https://twenty.com/partners).
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..0f5f3b3b1b
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: استكشاف مشكلات سير العمل وإصلاحها
+description: Common workflow issues and how to resolve them.
+---
+
+## المشاكل الشائعة والحلول
+
+### لم يتم تشغيل سير العمل
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**حلول**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**حلول**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**حلول**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**حلول**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**حلول**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..eee212fbae
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | النوع | Records Required | عمليات تشغيل سير العمل |
+ | ----- | ---------------- | ---------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/ar/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **أمثلة**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/ar/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **حلول**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | القيمة | Behavior |
+ | ----- | ------ | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/ar/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/ar/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..3d682267b8
--- /dev/null
+++ b/packages/twenty-docs/l/ar/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: سير العمل
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## أهمية تدفقات العمل
+
+تم تصميم Twenty لتوفير أقصى قدر من المرونة للمستخدمين. بدلاً من إجبارك على تكييف عمليات عملك مع ميزات ثابتة ومعدة مسبقًا، تتيح تدفقات العمل لك بناء الأتمتة التي تُنشئ نظام إدارة علاقات العملاء (CRM) الأنسب لحالات الاستخدام الفريدة الخاصة بك.
+
+تدفقات العمل هي ميزة داخل تطبيق Twenty لبناء هذه الأتمتة. توفر لك لبنات البناء لإنشاء ما تحتاجه عملك تمامًا، عند الحاجة إليه.
+
+## ماذا يمكنني أن أفعل مع تدفقات العمل؟
+
+نوصي ببناء الأتمتة لغرضين رئيسيين:
+
+1. **الأتمتة الداخلية لتسهيل العمل اليومي لفريقك**: قلل من كمية الإدخالات اليدوية والمهام المتكررة التي تبطئ فريقك.
+2. **إدخال البيانات في Twenty وخارجها**: اربط Twenty من خلال النداءات البرمجية (API) وإشعارات الويب (webhooks) بقاعدة البيانات الخاصة بك والأدوات الأخرى.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## أفضل الممارسات في سير العمل
+
+* **تحرير أسماء الخطوات**: أعد تسمية خطوات سير العمل بشكل واضح لبيان ما يقوم به كل منها. يساعد هذا في الصيانة ويجعل تسليمها إلى زملاء العمل سهلاً
+* **استخدم بيانات الخطوة السابقة**: يمكنك استخدام الحقول من السجلات التي تمت إعادتها بواسطة أي خطوة سابقة في سير العمل
+* **ابدأ ببساطة**: ابدأ بسير عمل بسيط وأضف التعقيد بمرور الوقت بينما تصبح أكثر راحة مع النظام
+* **خطط قبل البناء**: قم برسم منطق سير العمل الخاص بك قبل البدء في البناء لتجنب التوقف في منتصف الطريق
+
+## الخطوات التالية
+
+* [Workflow Triggers](/l/ar/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ar/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/best-practices-server.mdx
new file mode 100644
index 0000000000..050205c459
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/best-practices-server.mdx
@@ -0,0 +1,22 @@
+---
+title: Osvědčené postupy
+---
+
+Tento dokument popisuje osvědčené postupy, které byste měli dodržovat při práci na backendu.
+
+## Follow a modular approach
+
+Backend sleduje modulární přístup, což je základní princip při práci s NestJS. Ujistěte se, že rozdělujete svůj kód na znovupoužitelné moduly, abyste udrželi čistý a organizovaný kód.
+Každý modul by měl zahrnovat určitou funkci nebo funkcionalitu a mít jasně definovaný rozsah. This modular approach enables clear separation of concerns and removes unnecessary complexities.
+
+## Expose services to use in modules
+
+Always create services that have a clear and single responsibility, which enhances code readability and maintainability. Pojmenovávejte služby výstižně a konzistentně.
+
+Měli byste také zpřístupnit služby, které chcete používat v jiných modulech. Zpřístupnění služeb ostatním modulům je možné díky výkonnému systému injektování závislostí v NestJS a podporuje volné vazby mezi komponentami.
+
+## Vyhněte se použití typu `any`
+
+Když deklarujete proměnnou jako `any`, kontrolor typů TypeScriptu neprovádí kontrolu typů, což umožňuje přiřadit proměnné jakýkoliv typ hodnot. TypeScript používá odvozování typů ke stanovení typu proměnné na základě hodnoty. Prohlášením jako `any` TypeScript již nemůže odvodit typ. To ztěžuje chycení chyb souvisejících s typy během vývoje, což vede k chybám za běhu a činí kód obtížně udržovatelným, méně spolehlivým a těžším na pochopení pro ostatní.
+
+Proto by všechno mělo mít typ. Pokud tedy vytvoříte nový objekt se jménem a příjmením, měli byste vytvořit rozhraní nebo typ, který obsahuje jméno a příjmení a definuje tvar objektu, se kterým pracujete.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..d7ae0c4a78
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Architektura složek
+info: Podrobný pohled do struktury složek našeho serveru
+---
+
+Struktura adresářů backendu je následující:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Ability
+
+Definuje oprávnění a zahrnuje zpracovníky pro každou entitu.
+
+## Dekorátory
+
+Definuje vlastní dekorátory v NestJS pro přídavnou funkčnost.
+
+See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.
+
+## Filtry
+
+Zahrnuje filtry výjimek k zpracování výjimek, které mohou nastat v koncových bodech GraphQL.
+
+## Guards
+
+See [guards](https://docs.nestjs.com/guards) for more details.
+
+## Health
+
+Zahrnuje veřejně dostupné REST API (healthz), které vrací JSON k potvrzení, zda databáze funguje, jak se očekává.
+
+## Metadata
+
+Definuje vlastní objekty a poskytuje GraphQL API (graphql/metadata).
+
+## Pracovní prostor
+
+Generates and serves custom GraphQL schema based on the metadata.
+
+### Struktura adresáře pracovního prostoru
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+Kořen adresáře pracovního prostoru zahrnuje `workspace.factory.ts`, soubor obsahující funkci `createGraphQLSchema`. Tato funkce generuje specifická schémata pracovních prostorů pomocí metadat pro přizpůsobení schématu individuálním pracovním prostorům. Oddělením konstrukce schématu a resolveru používáme funkci `makeExecutableSchema`, která kombinuje tyto různé prvky.
+
+Tato strategie neslouží pouze k organizaci, ale pomáhá i v optimalizaci, jako je ukládání vytvořených typových definic do mezipaměti pro zvýšení výkonu a škálovatelnosti.
+
+### Workspace Schema builder
+
+Generuje schéma GraphQL a zahrnuje:
+
+#### Továrny:
+
+Specializované konstruktory pro generování konstrukcí souvisejících s GraphQL.
+
+* type.factory překládá metadata pole do typů GraphQL pomocí `TypeMapperService`.
+* type-definition.factory vytváří vstupní nebo výstupní grafové objekty odvozené z `objectMetadata`.
+
+#### GraphQL typy
+
+Zahrnuje výčty, vstupy, objekty a skaláry a slouží jako stavební bloky pro konstrukci schématu.
+
+#### Rozhraní a objektové definice
+
+Obsahuje plány pro GraphQL entity a zahrnuje jak předdefinované, tak vlastní typy jako `MONEY` nebo `URL`.
+
+#### Služby
+
+Obsahuje službu, která spojuje FieldMetadataType s odpovídajícími GraphQL skalárami nebo modifikátory dotazů.
+
+#### Úložiště
+
+Zahrnuje třídu `TypeDefinitionsStorage`, která obsahuje opakovaně použitelné definice typů, zabraňující duplikaci typů GraphQL.
+
+### Workspace Resolver Builder
+
+Vytváří funkce pro řešení dotazů a mutací v GraphQL schématu.
+
+Každá továrna v tomto adresáři je zodpovědná za produkci specifického typu resolveru, jako je továrna `FindManyResolverFactory`, navržená pro adaptabilní aplikaci na různé tabulky.
+
+### Runner dotazů pracovního prostoru
+
+Spouští vygenerované dotazy na databázi a analyzuje výsledek.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..c3dc38c3ad
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,100 @@
+---
+title: Příkazy backendu
+---
+
+## Užitečné příkazy
+
+Tyto příkazy by měly být vykonávány z adresáře packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### První nastavení
+
+```
+npx nx database:reset twenty-server # setup the database with dev seeds
+```
+
+### Spuštění serveru
+
+```
+npx nx run twenty-server:start
+```
+
+### Linter
+
+```
+npx nx run twenty-server:lint # přidejte --fix pro opravu chyb ve formátování
+```
+
+### Testovat
+
+```
+npx nx run twenty-server:test:unit # spuštění jednotkových testů
+npx nx run twenty-server:test:integration # spuštění integračních testů
+```
+
+Poznámka: můžete spustit `npx nx run twenty-server:test:integration:with-db-reset`, pokud potřebujete před spuštěním integračních testů obnovit databázi.
+
+### Obnovení databáze
+
+If you want to reset and seed the database, you can run the following command:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migrace
+
+#### Pro objekty ve schématech Core/Metadata (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Pro objekty Pracovní plochy
+
+Nejsou žádné soubory migrací, migrace jsou generovány automaticky pro každou pracovní plochu, uloženy v databázi a aplikovány tímto příkazem
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ This will drop the database and re-run the migrations and seed.
+
+ Make sure to back up any data you want to keep before running this command.
+
+
+## Technologický stack
+
+Twenty primárně používá NestJS pro backend.
+
+Prisma byl první ORM, který jsme použili. Ale aby uživatelé mohli vytvářet vlastní pole a vlastní objekty, dává větší smysl používat nižší úroveň, abychom mohli mít jemnou kontrolu. Projekt nyní používá TypeORM.
+
+Takto nyní vypadá technologický stack.
+
+**Jádro**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Databáze**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Integrace třetích stran**
+
+* [Sentry](https://sentry.io/welcome/) pro sledování chyb
+
+**Testování**
+
+* [Jest](https://jestjs.io/)
+
+**Nástroje**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Vývoj**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..5acea6cec1
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Nahlášení chyb
+
+Chcete-li nahlásit chybu, prosím [vytvořte issue na GitHubu](https://github.com/twentyhq/twenty/issues/new).
+
+O pomoc můžete také požádat na [Discordu](https://discord.gg/cx5n4Jzs57).
+
+## Požadavky na funkce
+
+Pokud si nejste jisti, zda se jedná o chybu, a máte pocit, že je to spíše žádost o funkci, pak byste pravděpodobně měli [otevřít diskuzi](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Než začnete
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..e1e5da752b
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,324 @@
+---
+title: Osvědčené postupy
+---
+
+Tento dokument popisuje osvědčené postupy, které byste měli dodržovat při práci na frontend.
+
+## Správa stavu
+
+React a Recoil zajišťují správu stavu v kódu.
+
+### Použijte `useRecoilState` k ukládání stavu
+
+Je dobrým zvykem vytvořit tolik atomů, kolik potřebujete ke správě stavu.
+
+
+ Je lepší použít více atomů než se snažit být příliš stručný s prop drilling.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ výchozí: 'výchozí hodnota',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Nepoužívejte `useRef` k ukládání stavu
+
+Vyhněte se používání `useRef` k ukládání stavu.
+
+Pokud chcete ukládat stav, měli byste použít `useState` nebo `useRecoilState`.
+
+Podívejte se, jak spravovat překreslení, pokud máte pocit, že potřebujete `useRef`, abyste zabránili některým překreslením.
+
+## Správa překreslení
+
+Překreslení může být obtížné spravovat v Reactu.
+
+Zde jsou některá pravidla, která je třeba dodržovat, abyste se vyhnuli zbytečnému překreslování.
+
+Pamatujte, že můžete **vždy** zabránit opakovanému renderování pochopením jejich příčiny.
+
+### Pracujte na úrovni kořene
+
+Vyhýbání se překreslení v nových funkcích je nyní snadné tím, že je eliminujete na úrovni kořene.
+
+Komponenta sidecar `PageChangeEffect` obsahuje pouze jedno `useEffect`, kde drží veškerou logiku vykonávanou při změně stránky.
+
+Tímto způsobem víte, že existuje pouze jedno místo, které může spustit překreslování.
+
+### Vždy přemýšlejte dvakrát, než přidáte `useEffect` do svého kódu
+
+Překreslování je často způsobeno zbytečným `useEffect`.
+
+Měli byste přemýšlet, zda potřebujete `useEffect`, nebo jestli můžete logiku přesunout do funkce obsluhy událostí.
+
+Obecně budete snadno moci přesunout logiku do funkce `handleClick` nebo `handleChange`.
+
+Můžete je také najít v knihovnách jako Apollo: `onCompleted`, `onError` atd.
+
+### Použijte sourozenou komponentu k extrakci logiky `useEffect` nebo získávání dat
+
+Pokud máte pocit, že potřebujete přidat `useEffect` do svého základního komponentu, měli byste zvážit jeho extrakci do sidecar komponenty.
+
+Stejný postup můžete aplikovat na logiku získávání dat pomocí Apollo hooks.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Použijte Recoil family states a Recoil family selectors
+
+Stavy rodiny třísek a selektory jsou skvělý způsob, jak se vyhnout překreslování.
+
+Jsou užitečné, když potřebujete uložit seznam položek.
+
+### Neměli byste používat `React.memo(MyComponent)`
+
+Vyhněte se používání `React.memo()`, protože to neřeší příčinu překreslování, ale spíše přeruší řetězec překreslování, což může vést k neočekávanému chování a ztěžuje refaktorování kódu.
+
+### Omezit použití `useCallback` nebo `useMemo`
+
+Často nejsou nutné a kód ztěžují na čtení a údržbu pro nepodstatné zlepšení výkonu.
+
+## Console.logs
+
+Příkazy `console.log` jsou hodnotné při vývoji, protože poskytují pohled na hodnoty proměnných a průběh kódu v reálném čase. Ale, zanechání v produkčním kódu může vést k několika problémům:
+
+1. **Výkon**: Přílišné logování může ovlivnit výkon za běhu, zejména u aplikací na straně klienta.
+
+2. **Bezpečnost**: Logování citlivých dat může vystavit kritické informace komukoliv, kdo nahlédne do konzole prohlížeče.
+
+3. **Čistota**: Naplnění konzole logy může zatížit důležitá varování nebo chyby, které je třeba vidět.
+
+4. **Profesionalita**: Koneční uživatelé nebo klienti kontrolující konzolu a vidící množství logovacích příkazů mohou zpochybnit kvalitu a úroveň kódu.
+
+Ujistěte se, že odstraníte všechny `console.logs`, než uvedete kód do produkce.
+
+## Pojmenovávání
+
+### Pojmenování proměnných
+
+Jména proměnných by měla přesně zobrazovat účel nebo funkci proměnné.
+
+#### Problém s generickými jmény
+
+Generická jména v programování nejsou ideální, protože postrádají specifikaci, což vede k nejednoznačnosti a snižuje čitelnost kódu. Taková jména neposkytnou informace o účelu proměnné nebo funkce, čímž ztěžují vývojářům pochopení záměru kódu bez hlubšího zkoumání. To může vést ke zvýšené době ladění, vyšší náchylnosti k chybám a obtížím při údržbě a spolupráci. Mezitím, použití popisných jmen činí kód samozřejmým a snadněji navigovatelným, čímž se zvyšuje jeho kvalita a produktivita vývojáře.
+
+```tsx
+// ❌ Špatně, používá generický název, který jasně nekomunikuje svůj účel ani obsah
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Dobře, používá popisný název
+const [email, setEmail] = useState('');
+```
+
+#### Některá slova, kterým se vyhnout v názvech proměnných
+
+* dummy
+
+### Obsluhovače událostí
+
+Jména obsluhovačů událostí by měla začínat `handle`, zatímco `on` je prefix používaný k pojmenování událostí v komponentech props.
+
+```tsx
+// ❌ Špatně
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Dobře
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Volitelné props
+
+Vyhněte se tomu, abyste pro volitelný props předávali výchozí hodnotu.
+
+**PŘÍKLAD**
+
+Vezměte komponent `EmailField` definovanou níže:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Použití**
+
+```tsx
+// ❌ Špatně, předání stejné hodnoty jako výchozí nepřidává žádnou hodnotu
+const Form = () => ;
+```
+
+```tsx
+// ✅ Dobře, předpokládá výchozí hodnotu
+const Form = () => ;
+```
+
+## Komponenta jako props
+
+Pokuste se co nejvíce předávat neinstancované komponenty jako props, aby si děti mohly samy rozhodnout, které props potřebují předat.
+
+Nejčastější příklad je komponenta ikon:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Aby React pochopil, že komponenta je komponenta, musíte použít PascalCase, aby později ji bylo možné instancovat pomocí ``
+
+## Prop Drilling: Udržujte to minimální
+
+Prop drilling, v kontextu React, odkazuje na praktiku předávání stavových proměnných a jejich setterů skrze mnoho vrstev komponent, i když mezilehlé komponenty je nepoužívají. Zatímco občas je to nutné, přehnané prop drilling může vést k:
+
+1. **Snížená čitelnost**: Sledování původu nebo využití vlastnosti může být komplikované ve složitě vnořených strukturách komponent.
+
+2. **Problémy s údržbou**: Změny v struktuře vlastností jedné komponenty mohou vyžadovat úpravy v některých komponentech, i když tyto vlastnosti přímo nepoužívají.
+
+3. **Snížená znovupoužitelnost komponentů**: Komponent přijímající mnoho props pouze pro jejich předání, se stává méně univerzálním a obtížněji použitelným v různých kontextech.
+
+Pokud máte pocit, že používáte přílišné prop drilling, podívejte se na osvědčené postupy správy stavu.
+
+## Importy
+
+Při importu, upřednostněte určené aliasy před upřesňováním úplných či relativních cest.
+
+**Aliasy**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Použití**
+
+```tsx
+// ❌ Špatně, specifikuje celou relativní cestu
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Dobře, využívá určené aliasy
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Validace schématu
+
+[Zod](https://github.com/colinhacks/zod) je validátor schémat pro netypová data:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email musí být platný email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Heslo musí obsahovat alespoň 8 znaků'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Zlomové změny
+
+Vždy proveďte důkladné manuální testování, abyste zajistili, že úpravy nezpůsobily problémy jinde, zejména pokud testy zatím nebyly široce integrovány.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..2931aa5401
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Architektura složek
+info: Podrobný pohled na naši architekturu složek
+---
+
+V tomto průvodci prozkoumáte detaily struktury projektového adresáře a jak přispívá k organizaci a udržovatelnosti Twenty.
+
+Následováním této konvence architektury složek je snazší najít soubory související s konkrétními funkcemi a zajistit rozšiřitelnost a udržovatelnost aplikace.
+
+```
+front
+└───modules
+│ └───module1
+│ │ └───submodule1
+│ └───module2
+│ └───ui
+│ │ └───display
+│ │ └───inputs
+│ │ │ └───buttons
+│ │ └───...
+└───pages
+└───...
+```
+
+## Stránky
+
+Zahrnuje komponenty nejvyšší úrovně definované aplikačními trasami. Importují více nízkoúrovňových komponent ze složky modulů (více podrobností níže).
+
+## Moduly
+
+Každý modul představuje funkci nebo skupinu funkcí s jejich specifickými komponenty, stavy a provozní logikou.
+Všechny by měly dodržovat strukturu níže. You can nest modules within modules (referred to as submodules) and the same rules will apply.
+
+```
+module1
+ └───components
+ │ └───component1
+ │ └───component2
+ └───constants
+ └───contexts
+ └───graphql
+ │ └───fragments
+ │ └───queries
+ │ └───mutations
+ └───hooks
+ │ └───internal
+ └───states
+ │ └───selectors
+ └───types
+ └───utils
+```
+
+### Kontexty
+
+Kontext je způsob, jak předávat data skrz strom komponent, aniž by se musely na každé úrovni ručně předávat props.
+
+Více podrobností naleznete v [React Context](https://react.dev/reference/react#context-hooks).
+
+### GraphQL
+
+Zahrnuje fragmenty, dotazy a mutace.
+
+Více podrobností naleznete v [GraphQL](https://graphql.org/learn/).
+
+* Fragmenty
+
+Fragment je znovupoužitelný kus dotazu, který můžete použít na různých místech. By using fragments, it's easier to avoid duplicating code.
+
+Více podrobností naleznete v [GraphQL Fragments](https://graphql.org/learn/queries/#fragments).
+
+* Dotazy
+
+Více podrobností naleznete v [GraphQL Queries](https://graphql.org/learn/queries/).
+
+* Mutace
+
+Více podrobností naleznete v [GraphQL Mutations](https://graphql.org/learn/queries/#mutations).
+
+### Hooks
+
+Více podrobností naleznete v [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks).
+
+### Stavy
+
+Obsahuje logiku správy stavů. To řeší [RecoilJS](https://recoiljs.org).
+
+* Selektory: Více podrobností naleznete v [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors).
+
+Vestavěná správa stavů v Reactu stále spravuje stav uvnitř komponenty.
+
+### Utils
+
+Měly by obsahovat pouze znovupoužitelné čisté funkce. Otherwise, create custom hooks in the `hooks` folder.
+
+## UI
+
+Obsahuje všechny znovupoužitelné komponenty UI použité v aplikaci.
+
+Tato složka může obsahovat podsložky, jako jsou `data`, `display`, `feedback` a `input` pro specifické typy komponent. Každá komponenta by měla být samostatná a znovupoužitelná, takže ji můžete použít v různých částech aplikace.
+
+Oddělením komponent UI od ostatních komponent ve složce `modules` je snazší udržovat konzistentní design a provádět změny v rozhraní, aniž by to ovlivnilo jiné části (obchodní logiku) kódové základny.
+
+## Rozhraní a závislosti
+
+Můžete importovat kód jiných modulů z jakéhokoliv modulu kromě složky `ui`. Díky tomu zůstane jeho kód snadno testovatelný.
+
+### Interní
+
+Každá část (hooky, stavy, ...) modulu může mít složku `internal`, která obsahuje části používané pouze v rámci modulu.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
new file mode 100644
index 0000000000..c9cac72736
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
@@ -0,0 +1,90 @@
+---
+title: Příkazy Frontend
+---
+
+## Užitečné příkazy
+
+### Spuštění aplikace
+
+```bash
+npx nx start twenty-front
+```
+
+### Regenerujte schéma GraphQL na základě API graphql schématu
+
+```bash
+npx nx run twenty-front:graphql:generate --configuration=metadata
+```
+
+NEBO
+
+```bash
+npx nx run twenty-front:graphql:generate
+```
+
+### Linter
+
+```bash
+npx nx run twenty-front:lint # pass --fix to fix lint errors
+```
+
+## Překlady
+
+```bash
+npx nx run twenty-front:lingui:extract
+npx nx run twenty-front:lingui:compile
+```
+
+### Testovat
+
+```bash
+npx nx run twenty-front:test # spusťte jest testy
+npx nx run twenty-front:storybook:serve:dev # spusťte storybook
+npx nx run twenty-front:storybook:test # spusťte testy # (vyžaduje, aby byl spuštěn yarn storybook:serve:dev)
+npx nx run twenty-front:storybook:coverage # (vyžaduje, aby byl spuštěn yarn storybook:serve:dev)
+```
+
+## Technologický stack
+
+Projekt má čistý a jednoduchý stack s minimálním počtem šablonových kódů.
+
+**Aplikace**
+
+* [React](https://react.dev/)
+* [Apollo](https://www.apollographql.com/docs/)
+* [GraphQL Codegen](https://the-guild.dev/graphql/codegen)
+* [Recoil](https://recoiljs.org/docs/introduction/core-concepts)
+* [TypeScript](https://www.typescriptlang.org/)
+
+**Testování**
+
+* [Jest](https://jestjs.io/)
+* [Storybook](https://storybook.js.org/)
+
+**Nástroje**
+
+* [Yarn](https://yarnpkg.com/)
+* [Craco](https://craco.js.org/docs/)
+* [ESLint](https://eslint.org/)
+
+## Architektura
+
+### Směrování
+
+[React Router](https://reactrouter.com/) zajišťuje směrování.
+
+Aby se předešlo zbytečnému [překreslování](/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) je veškerá logika směrování v `useEffect` v `PageChangeEffect`.
+
+### Správa stavu
+
+[Recoil](https://recoiljs.org/docs/introduction/core-concepts) zajišťuje správu stavu.
+
+Podívejte se na [osvědčené postupy](/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) pro více informací o správě stavu.
+
+## Testování
+
+[Jest](https://jestjs.io/) slouží jako nástroj pro testování jednotek, zatímco [Storybook](https://storybook.js.org/) je pro testování komponent.
+
+Jest je primárně určen pro testování pomocných funkcí, nikoli samotných komponent.
+
+Storybook slouží k testování chování izolovaných komponent, stejně jako k zobrazování návrhového systému.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/storybook.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/storybook.mdx
new file mode 100644
index 0000000000..9c12128441
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/storybook.mdx
@@ -0,0 +1,8 @@
+---
+title: Storybook
+description: Prozkoumejte knihovnu komponent UI na Twenty
+---
+
+View our complete component library and documentation in Storybook.
+
+[Open Storybook →](https://storybook.twenty.com)
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..35a95c6b21
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: Stylová příručka
+---
+
+Tento dokument obsahuje pravidla pro psaní kódu.
+
+Cílem zde je mít konzistentní kódovou základnu, která je snadno čitelná a snadno udržovatelná.
+
+Pro toto je lepší být trochu více rozvláčný než být příliš stručný.
+
+Vždy mějte na paměti, že lidé čtou kód častěji, než ho píší, zvláště u projektu s otevřeným zdrojovým kódem, kde může kdokoli přispět.
+
+Existuje mnoho pravidel, která zde nejsou definována, ale která jsou automaticky kontrolována lintery.
+
+## React
+
+### Používejte funkcionální komponenty
+
+Vždy používejte funkcionální komponenty TSX.
+
+Nepoužívejte implicitní `import` s `const`, protože je obtížnější číst a importovat s automatickým dokončováním kódu.
+
+```tsx
+// ❌ Špatné, obtížnější číst a importovat s automatickým doplňkem kódu
+const MyComponent = () => {
+ return Ahoj světe
;
+};
+
+export default MyComponent;
+
+// ✅ Dobré, snadné čtení a import s automatickým dokončováním kódu
+export function MyComponent() {
+ return Ahoj světe
;
+};
+```
+
+### Vlastnosti
+
+Create the type of the props and call it `(ComponentName)Props` if there's no need to export it.
+
+Use props destructuring.
+
+```tsx
+// ❌ Špatné, žádný typ
+export const MyComponent = (props) => Ahoj {props.name}
;
+
+// ✅ Dobré, typ
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Ahoj {name}
;
+```
+
+#### Upusťte od používání `React.FC` nebo `React.FunctionComponent` k definování typů rekvizit
+
+```tsx
+/* ❌ - Špatné, definuje anotace typů komponent s `FC`
+ * - S `React.FC` komponent implicitně přijímá rekvizitu `children`
+ * i když není definována v typu rekvizity. To nemusí být vždy
+ * žádoucí, zejména pokud komponenta nemá v úmyslu vykreslovat
+ * podřízené komponenty.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### No Single Variable Prop Spreading in JSX Elements
+
+Avoid using single variable prop spreading in JSX elements, like `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá.
+
+```tsx
+/* ❌ - Špatné, šíří jedinou proměnnou prop do základní komponenty
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Odůvodnění:
+
+* Na první pohled je jasné, které prop kód předává, čímž je snazší pochopit a udržovat.
+* It helps to prevent tight coupling between components via their props.
+* Linting tools make it easier to identify misspelled or unused props when you list props explicitly.
+
+## JavaScript
+
+### Používejte operátor nullish-coalescing `??`
+
+```tsx
+// ❌ Špatné, může vrátit 'default' i když je hodnota 0 nebo ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Dobré, vrací 'default' pouze pokud je hodnota null nebo undefined
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Používejte volitelné zřetězení `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Používejte `type` místo `interface`
+
+Vždy používejte `type` místo `interface`, protože se téměř vždy překrývají a `type` je flexibilnější.
+
+```tsx
+// ❌ Špatné
+interface MyInterface {
+ name: string;
+}
+
+// ✅ Dobré
+type MyType = {
+ name: string;
+};
+```
+
+### Používejte textové literály místo výčtů
+
+[Textové literály](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) jsou preferovaný způsob pro zpracování hodnot podobných výčtům v TypeScriptu. Jsou snadněji rozšířitelné pomocí Pick a Omit a nabízejí lepší uživatelský zážitek, zejména s automatickým dokončováním kódu.
+
+Proč TypeScript doporučuje vyhnout se výčtům zjistíte [zde](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Špatné, využívá výčet
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ Dobré, používá textový literál
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL a interní knihovny
+
+Měli byste používat výčty, které generuje kód generátor GraphQL.
+
+Je také lepší používat výčet při používání interní knihovny, aby interní knihovna nemusela vystavovat textový typ neusouvisející s interním API.
+
+Příklad:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Styling
+
+### Používejte StyledComponents
+
+Styling komponenty s [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Špatné
+Ahoj světe
+```
+
+```tsx
+// ✅ Dobré
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Prefixujte stylizované komponenty "Styled", abyste je odlišili od "skutečných" komponent.
+
+```tsx
+// ❌ Špatné
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Dobré
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Theming
+
+Využití tématu pro většinu stylování komponent je preferovaný přístup.
+
+#### Jednotky měření
+
+Vyhýbejte se používání hodnot `px` nebo `rem` přímo ve stylizovaných komponentách. Potřebné hodnoty jsou obvykle již definovány v tématu, takže se doporučuje využívat je pro tyto účely.
+
+#### Barvy
+
+Refrain from introducing new colors; instead, use the existing palette from the theme. Pokud by došlo k tomu, že paleta neodpovídá, prosím nechte komentář, aby to tým mohl napravit.
+
+```tsx
+// ❌ Špatné, přímo specifikuje hodnoty stylu bez využití tématu
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Dobré, využívá téma
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Prosazování Zákazu Importů Typů
+
+Vyhýbejte se typovým importům. K prosazení tohoto standardu pravidlo ESLint kontroluje a hlásí jakékoli typové importy. To pomáhá udržovat konzistenci a čitelnost v TypeScript kódu.
+
+```tsx
+// ❌ Špatné
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Špatné
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Dobré
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Proč Zákaz Importů Typů
+
+* **Consistency**: By avoiding type imports and using a single approach for both type and value imports, the codebase remains consistent in its module import style.
+
+* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. Tím se snižuje dvojznačnost a usnadňuje pochopení účelu importovaných symbolů.
+
+* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code.
+
+### Pravidlo ESLint
+
+Pravidlo ESLint, `@typescript-eslint/consistent-type-imports`, prosazuje standard zákazu importů typů. Toto pravidlo generuje chyby nebo varování pro jakékoli porušení typového importu.
+
+Upozorňujeme, že toto pravidlo konkrétně řeší vzácné okrajové případy, kdy dochází k neúmyslným typovým importům. TypeScript sám odrazuje tuto praxi, jak je uvedeno v [poznámkách k verzi TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). Ve většině případů byste neměli potřebovat používat pouze typové importy.
+
+To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..864d9ecd98
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,59 @@
+---
+title: Práce s Figma
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+Figma je nástroj pro návrh uživatelského rozhraní, který pomáhá překlenout komunikační bariéru mezi návrháři a vývojáři.
+Tento průvodce vysvětluje, jak můžete spolupracovat s Figma.
+
+## Přístup
+
+1. **Přístup ke sdílenému odkazu:** K Figma souboru projektu můžete přistoupit [zde](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **Přihlásit se:** Pokud ještě nejste přihlášeni, Figma vás k tomu vyzve.
+ Klíčové funkce jsou dostupné pouze přihlášeným uživatelům, jako je režim pro vývojáře a možnost výběru dedikovaného rámce.
+
+
+ Nebudete moci účinně spolupracovat bez účtu.
+
+
+## Struktura Figma
+
+On the left sidebar, you can access the different pages of Twenty's Figma. Takto jsou organizovány:
+
+* **Stránka komponentů:** Toto je první stránka. Návrhář ji používá k vytváření a organizování znovupoužitelných návrhových prvků použitých v celém návrhovém souboru. Například tlačítka, ikony, symboly nebo jakékoli jiné znovupoužitelné komponenty. Slouží k zajištění konzistence v celém návrhu.
+* **Hlavní stránka:** Druhá stránka je hlavní stránka, která zobrazuje kompletní uživatelské rozhraní projektu. Můžete stisknout **"Přehrát"**, abyste použili kompletní prototyp aplikace.
+* **Stránky funkcí:** Ostatní stránky jsou obvykle věnovány funkcím ve vývoji. Obsahují návrh specifických funkcí nebo modulů aplikace či webu. Typicky se stále vyvíjejí.
+
+## Užitečné tipy
+
+S přístupem pouze pro čtení nemůžete návrh upravovat, ale máte přístup ke všem funkcím užitečným pro přeměnu návrhu na kód.
+
+### Použití režimu pro vývojáře
+
+Dev Mode Figma zvyšuje produktivitu vývojářů díky snadné navigaci designem, efektivnímu spravování prvků, efektivním komunikačním nástrojům, integracím do nástrojů, rychlým částem kódu a klíčovým informacím o vrstvě, čímž překonává mezeru mezi návrhem a vývojem. O Dev Mode se můžete dozvědět více [zde](https://www.figma.com/dev-mode/).
+
+Přepněte na režim „Vývojář“ v pravé části nástrojové lišty, kde si můžete prohlédnout specifikace návrhu, kopírovat CSS a přistupovat k prvkům.
+
+### Použití prototypu
+
+Klikněte na libovolný prvek na plátně a stiskněte tlačítko „Přehrát“ v pravém horním rohu rozhraní k zobrazení prototypu. Režim prototypu vám umožňuje interakci s návrhem, jakoby to byl finální produkt. Ukazuje tok mezi obrazovkami a jak se prvky uživatelského rozhraní jako tlačítka, odkazy nebo menu chovají při interakci.
+
+1. **Pochopení přechodů a animací:** V prototypovém režimu můžete vidět libovolné přechody nebo animace, které návrhář přidal mezi obrazovky nebo prvky UI, což poskytuje jasné vizuální instrukce vývojářům o zamýšleném chování a stylu.
+2. **Objasnění implementace:** Prototyp může také pomoci snížit nejasnosti. Vývojáři s ním mohou interagovat pro lepší pochopení funkčnosti či vzhledu konkrétních prvků.
+
+Pro podrobnější detaily a pokyny k Figma platformě můžete navštívit oficiální [Figma Documentation](https://help.figma.com/hc/en-us).
+
+### Měření vzdálenosti
+
+Vyberte prvek, podržte klávesu `Option` (Mac) nebo `Alt` (Windows) a pak přejeďte kurzorem nad jiným prvkem, abyste viděli vzdálenost mezi nimi.
+
+### Rozšíření Figma pro VSCode (doporučeno)
+
+[Figma pro VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension)
+vám umožňuje procházet a zkoumat návrhové soubory, spolupracovat s návrháři, sledovat změny a zrychlit implementaci – vše bez opuštění vašeho textového editoru.
+Je součástí našich doporučených rozšíření.
+
+## Spolupráce
+
+1. **Použití komentářů:** Jste vítáni použít funkci komentářů kliknutím na bublinu vlevo na nástrojové liště.
+2. **Rozhovor prostřednictvím kurzoru:** Hezkou funkcí Figma je Rozhovor prostřednictvím kurzoru. Stačí stisknout `;` na Macu a `/` ve Windows a odeslat zprávu, pokud vidíte, že někdo jiný používá Figma současně s vámi.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/cs/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..3ea693995d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,332 @@
+---
+title: Místní nastavení
+description: Průvodce pro přispěvatele (nebo zvídavé vývojáře), kteří chtějí spustit Twenty lokálně.
+---
+
+## Předpoklady
+
+
+
+ Než nainstalujete a použijete Twenty, ujistěte se, že máte na svém počítači nainstalovány následující balíčky:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` nebude fungovat, měli byste místo něj použít `yarn`. Yarn je nyní součástí Node.js, takže jej nemusíte instalovat samostatně.
+ Musíte pouze spustit `corepack enable`, abyste povolili Yarn, pokud jste to ještě neudělali.
+
+
+
+
+ 1. Nainstalujte WSL
+ Otevřete PowerShell jako správce a spusťte:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Nyní byste měli vidět výzvu k restartování počítače. Pokud ne, restartujte jej ručně.
+
+ Při restartu se otevře okno PowerShell a nainstaluje Ubuntu. Tento proces může chvíli trvat.
+ Zobrazí se výzva k vytvoření uživatelského jména a hesla pro vaši instalaci Ubuntu.
+
+ 2. Nainstalujte a nastavte git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Vaše Jméno"
+
+ git config --global user.email "vasemail@domena.com"
+ ```
+
+ 3. Nainstalujte nvm, node.js a yarn
+
+
+ Použijte `nvm` pro instalaci správné verze `node`. `nvmrc` zajišťuje, že všichni přispěvatelé používají stejnou verzi.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Zavřete a znovu otevřete terminál, abyste použili nvm. Potom spusťte následující příkazy.
+
+ ```bash
+
+ nvm install # instaluje doporučenou verzi node
+
+ nvm use # používá doporučenou verzi node
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Krok 1: Git Clone
+
+V terminálu spusťte následující příkaz.
+
+
+
+ Pokud jste ještě nenastavili SSH klíče, můžete se naučit, jak to udělat, [zde](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Krok 2: Umístěte se na kořen
+
+```bash
+cd twenty
+```
+
+Všechny příkazy v následujících krocích byste měli provádět z kořene projektu.
+
+## Krok 3: Nastavení PostgreSQL databáze
+
+
+
+ **Možnost 1 (doporučeno):** Pro lokalní vytvoření databáze:
+ Použijte následující odkaz pro instalaci PostgreSQL na vašem Linuxovém stroji: [Instalace PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Poznámka: Možná budete potřebovat přidat `sudo -u postgres` k příkazu před `psql`, abyste předešli chybám s oprávněními.
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Možnost 1 (doporučeno):** Pro lokalní vytvoření databáze pomocí `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Můžete zjistit, zda PostgreSQL server běží, spuštěním:
+
+ ```bash
+ brew services list
+ ```
+
+ Instalátor nemusí automaticky vytvořit uživatele `postgres` při instalaci
+ přes Homebrew na MacOS. Místo toho vytvoří PostgreSQL roli, která odpovídá vašemu uživatelskému jménu v MacOS (např. "john").
+ Pro zkontrolování a vytvoření uživatele `postgres`, pokud je to nutné, postupujte takto:
+
+ ```bash
+ # Připojit se k PostgreSQL
+ psql postgres
+ nebo
+ psql -U $(whoami) -d postgres
+ ```
+
+ Po zobrazení výzvy psql (postgres=#) spusťte:
+
+ ```bash
+ # Seznam existujících PostgreSQL rolí
+ \du
+ ```
+
+ Zobrazí se výstup podobný tomuto:
+
+ ```bash
+ Jméno role | Vlastnosti | Členem
+ -----------+-------------+-----------
+ john | Superuživatel | {}
+ ```
+
+ Pokud nevidíte roli `postgres`, pokračujte na další krok.
+ Vytvořte uživatelskou roli `postgres` ručně:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Tím vytvoříte superuživatelskou roli pojmenovanou `postgres` s přístupovými právy.
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Všechny následující kroky je třeba provádět v terminálu WSL (v rámci vaší virtuálního stroje).
+
+ **Možnost 1:** Pro lokalní vytvoření PostgreSQL:
+ Použijte následující odkaz pro instalaci PostgreSQL na vašem Linuxovém virtuálním stroji: [Instalace PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Poznámka: Možná budete potřebovat přidat `sudo -u postgres` k příkazu před `psql`, abyste předešli chybám s oprávněními.
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+ Používání Dockeru na WSL přidává další vrstvu složitosti.
+ Použijte tuto možnost pouze pokud si jste jisti extra kroky včetně zapnutí [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Nyní můžete přistupovat k databázi na [localhost:5432](localhost:5432), s uživatelem `postgres` a heslem `postgres`.
+
+## Krok 4: Nastavení Redis databáze (cache)
+
+Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího výkonu.
+
+
+
+ **Možnost 1:** Pro lokalní vytvoření Redis:
+ Použijte následující odkaz pro instalaci Redis na vašem Linuxovém stroji: [Instalace Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Možnost 1 (doporučeno):** Pro lokalní vytvoření Redis pomocí `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Spusťte redis server:
+ `brew services start redis`
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Možnost 1:** Pro lokalní vytvoření Redis:
+ Použijte následující odkaz pro instalaci Redis na vašem Linuxovém virtuálním stroji: [Instalace Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Možnost 2:** Pokud máte nainstalován docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Pokud potřebujete GUI klienta, doporučujeme [redis insight](https://redis.io/insight/) (dostupná je bezplatná verze)
+
+## Krok 5: Nastavení proměnných prostředí
+
+Použijte proměnné prostředí nebo `.env` soubory, abyste nakonfigurovali váš projekt. Více informací [zde](/l/cs/developers/self-host/capabilities/setup)
+
+Zkopírujte soubory `.env.example` v `/front` a `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/cs/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Krok 6: Instalace závislostí
+
+Pro sestavení Twenty serveru a zavedení některých dat do vaší databáze spusťte následující příkaz:
+
+```bash
+yarn
+```
+
+Všimněte si, že `npm` nebo `pnpm` nebudou fungovat.
+
+## Krok 7: Spuštění projektu
+
+
+
+ V závislosti na vaší Linuxové distribuci mohl být Redis server spuštěn automaticky.
+ Pokud ne, zkontrolujte [instalační průvodce Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) pro vaši distribuci.
+
+
+
+ Redis by již měl být spuštěn. Pokud ne, spusťte:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ V závislosti na vaší Linuxové distribuci mohl být Redis server spuštěn automaticky.
+ Pokud ne, zkontrolujte [instalační průvodce Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) pro vaši distribuci.
+
+
+
+Nastavte svou databázi pomocí následujícího příkazu:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Spusťte server, pracovní proces a frontendové služby:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+Alternativně můžete spustit všechny služby najednou:
+
+```bash
+npx nx start
+```
+
+## Krok 8: Použijte Twenty
+
+**Frontend**
+
+Frontend Twenty bude spuštěný na [http://localhost:3001](http://localhost:3001).
+Můžete se přihlásit pomocí výchozího demo účtu: `tim@apple.dev` (heslo: `tim@apple.dev`)
+
+**Backend**
+
+* Server Twenty poběží na [http://localhost:3000](http://localhost:3000)
+* K GraphQL API se dostanete na [http://localhost:3000/graphql](http://localhost:3000/graphql)
+* K REST API je přístup na [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## Řešení potíží
+
+Pokud narazíte na jakýkoli problém, zkontrolujte sekci [Řešení potíží](/l/cs/developers/self-host/capabilities/troubleshooting) pro možná řešení.
diff --git a/packages/twenty-docs/l/cs/developers/contribute/contribute.mdx b/packages/twenty-docs/l/cs/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..dc2b9422de
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Přehled
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/cs/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/cs/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..c0ef85cd53
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: API
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty bylo vytvořeno s ohledem na vývojáře, nabízíme výkonné API, které se přizpůsobí vašemu vlastnímu datovému modelu. Nabízíme čtyři typy API, které splňují různé potřeby integrace.
+
+## Přístup orientovaný na vývojáře
+
+Twenty generates APIs specifically for your data model:
+
+* **Nejsou vyžadována dlouhá ID**: Používejte v koncových bodech přímo názvy objektů a polí.
+* **Standardní a vlastní objekty jsou rovnocenně zpracovány**: Vaše vlastní objekty mají stejnou podporu API jako vestavěné.
+* **Vyhrazené koncové body**: Každý objekt a pole má svůj vlastní koncový bod API.
+* **Vlastní dokumentace**: Generována specificky pro datový model vašeho pracovního prostoru.
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### Core API
+
+Přístupné na `/rest/` nebo `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Spravování vztahů mezi záznamy.
+
+### Metadata API
+
+Přístupné na `/rest/metadata/` nebo `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Vytvářet, upravovat nebo mazat objekty a pole.
+* Konfigurace nastavení pracovního prostoru.
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Formát | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## Koncové body API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Ověření
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Vytvořit API klíč
+
+1. Go to **Settings → APIs & Webhooks**
+2. Click **+ Create key**
+3. Nakonfigurujte:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Klikněte na **Uložit**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Přejděte na **Nastavení → Role**
+2. Click on the role to assign
+3. Otevřete záložku **Přiřazení**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/cs/user-guide/permissions-access/capabilities/permissions) for details.
+
+### Spravovat API klíče
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Go to **Settings → APIs & Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Hromadné operace
+
+Both REST and GraphQL support batch operations:
+
+* **Velikost dávky**: Až 60 záznamů na požadavek.
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | Hodnota |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/cs/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/cs/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..73b50a4170
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Předpoklady
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+Odtud můžete:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Ověření
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Příklady:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Řešení potíží
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/cs/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/cs/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..9c0672f7c6
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooky
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Vytvořit Webhook
+
+1. Přejděte na **Nastavení → API & Webhooks → Webhooks**
+2. Klikněte na **+ Vytvořit webhook**
+3. Enter your webhook URL (must be publicly accessible)
+4. Klikněte na **Uložit**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Spravovat Webhooky
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Události
+
+Twenty sends webhooks for these event types:
+
+| Událost | Příklad |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Pole | Popis |
+| ---------------- | ------------------------------------------------ |
+| `událost` | What happened (e.g., `person.created`) |
+| `data` | The full record that was created/updated/deleted |
+| `časové razítko` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Ověření Webhooku
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Hlavička | Popis |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Metoda | Směr | Use Case |
+| ---------------------------- | ---- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/cs/developers/extend/extend.mdx b/packages/twenty-docs/l/cs/developers/extend/extend.mdx
new file mode 100644
index 0000000000..41ec86598f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Přehled
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/cs/developers/introduction.mdx b/packages/twenty-docs/l/cs/developers/introduction.mdx
new file mode 100644
index 0000000000..b029cd7e9c
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/cs/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/cs/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..4e129b4f21
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Click w/ Docker Compose
+---
+
+
+ Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/cs/developers/contribute/capabilities/local-setup).
+
+
+## Přehled
+
+Tato příručka poskytuje podrobný návod k instalaci a konfiguraci aplikace Twenty pomocí Docker Compose. Cílem je zjednodušit proces a zabránit běžným úskalím, která by mohla narušit vaše nastavení.
+
+**Důležité:** Měňte pouze nastavení výslovně uvedená v tomto průvodci. Změna jiných konfigurací může vést k problémům.
+
+Podívejte se na dokumentaci [Nastavení Proměnných Prostředí](/l/cs/developers/self-host/capabilities/setup) pro pokročilou konfiguraci. Všechny proměnné prostředí musí být deklarovány v souboru docker-compose.yml na úrovni serveru a/nebo pracovníka v závislosti na proměnné.
+
+## Systémové Požadavky
+
+* RAM: Ujistěte se, že vaše prostředí má alespoň 2GB RAM. Nedostatek paměti může způsobit zhroucení procesů.
+* Docker & Docker Compose: Ujistěte se, že obě jsou nainstalovány a aktuální.
+
+## Možnost 1: Jednořádkový skript
+
+Nainstalujte nejnovější stabilní verzi Twenty jedním příkazem:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Pro instalaci konkrétní verze nebo větve vypište:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Nahraďte x.y.z požadovaným číslem verze.
+* Nahraďte branch-name názvem větve, kterou chcete nainstalovat.
+
+## Možnost 2: Manuální kroky
+
+Postupujte podle těchto kroků pro ruční nastavení.
+
+### Krok 1: Nastavení souboru Prostředí
+
+1. **Vytvořte soubor .env**
+
+ Zkopírujte příklad souboru prostředí do nového souboru .env ve vašem pracovním adresáři:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Generate Secret Tokens**
+
+ Spusťte následující příkaz k generování jedinečného náhodného řetězce:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Důležité:** Udržujte tuto hodnotu v tajnosti / nesdílejte ji.
+
+3. **Aktualizujte `.env` soubor**
+
+ Nahraďte místoblokovou hodnotu ve svém .env souboru vygenerovaným tokenem:
+
+ ```ini
+ APP_SECRET=první_náhodný_řetězec
+ ```
+
+4. **Nastavte Heslo pro Postgres**
+
+ Aktualizujte hodnotu `PG_DATABASE_PASSWORD` ve vašem .env souboru silným heslem bez speciálních znaků.
+
+ ```ini
+ PG_DATABASE_PASSWORD=moje_silné_heslo
+ ```
+
+### Krok 2: Získání souboru Docker Compose
+
+Stáhněte soubor `docker-compose.yml` do svého pracovního adresáře:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Krok 3: Spuštění aplikace
+
+Spusťte Docker kontejnery:
+
+```bash
+docker compose up -d
+```
+
+### Krok 4: Přístup k aplikaci
+
+Pokud hostujete twentyCRM na svém vlastním počítači, otevřete svůj prohlížeč a přejděte na stránku [http://localhost:3000](http://localhost:3000).
+
+If you host it on a server, check that the server is running and that everything is ok with
+
+```bash
+curl http://localhost:3000
+```
+
+## Konfigurace
+
+### Otevření Twenty pro Externí Přístup
+
+Ve výchozím nastavení běží Twenty na `localhost` na portu `3000`. Pro přístup přes externí doménu nebo IP adresu musíte nakonfigurovat `SERVER_URL` ve vašem `.env` souboru.
+
+#### Porozumění `SERVER_URL`
+
+* **Protokol:** Použijte `http` nebo `https` v závislosti na vašem nastavení.
+ * Použijte `http` pokud nemáte nastavené SSL.
+ * Použijte `https` pokud máte SSL nakonfigurované.
+* **Doména/IP:** Toto je doménové jméno nebo IP adresa, kde je vaše aplikace přístupná.
+* **Port:** Uveďte číslo portu, pokud nepoužíváte výchozí porty (`80` pro `http`, `443` pro `https`).
+
+### Požadavky na SSL
+
+SSL (HTTPS) je potřebné pro správné fungování některých funkcí prohlížeče. I když tyto funkce mohou fungovat během místního vývoje (protože prohlížeče zacházejí s localhost jinak), správná konfigurace SSL je nutná při hostování Twenty na běžné doméně.
+
+Například rozhraní schránky může vyžadovat zabezpečený kontext - některé funkce jako tlačítka kopírování v aplikaci nemusí fungovat bez povoleného HTTPS.
+
+Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pro optimální bezpečnost a funkčnost.
+
+#### Konfigurace `SERVER_URL`
+
+1. **Určete svou přístupovou URL**
+ * **Bez Reverzní Proxy (Přímý Přístup):**
+
+ Pokud přistupujete k aplikaci přímo bez reverzní proxy:
+
+ ```ini
+ SERVER_URL=http://vaše-doména-nebo-ip:3000
+ ```
+
+ * **S Reverzní Proxy (Standardní Porty):**
+
+ Pokud používáte reverzní proxy jako Nginx nebo Traefik a máte SSL nakonfigurované:
+
+ ```ini
+ SERVER_URL=https://vaše-doména-nebo-ip
+ ```
+
+ * **S Reverzní Proxy (Vlastní Porty):**
+
+ Pokud používáte nestandardní porty:
+
+ ```ini
+ SERVER_URL=https://vaše-doména-nebo-ip:vlastní-port
+ ```
+
+2. **Aktualizujte `.env` Soubor**
+
+ Otevřete svůj `.env` soubor a aktualizujte `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://vaše-doména-nebo-ip:váš-port
+ ```
+
+ **Příklady:**
+
+ * Přímý přístup bez SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Přístup přes doménu s SSL:
+ ```ini
+ SERVER_URL=https://mojeaplikace.com
+ ```
+
+3. **Restartujte Aplikaci**
+
+ Pro aplikaci změn restartujte Docker kontejnery:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Úvahy
+
+* **Konfigurace reverzního proxy:**
+
+ Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Configure SSL termination and any necessary headers.
+
+* **Nastavení firewallu:**
+
+ Otevřete nezbytné porty v firewallu, aby byl umožněn externí přístup.
+
+* **Konzistence:**
+
+ `SERVER_URL` musí odpovídat způsobu, jakým uživatelé přistupují k vaší aplikaci ve svých prohlížečích.
+
+#### Perzistence
+
+* **Datové svazky:**
+
+ Konfigurace Docker Compose používá svazky k ukládání dat pro databázi a úložiště serverů.
+
+* **Bezstavová prostředí:**
+
+ Pokud nasazujete do bezstavového prostředí (např. některé cloudové služby), nakonfigurujte externí úložiště pro uchování dat.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Řešení potíží
+
+Pokud narazíte na jakýkoli problém, zkontrolujte sekci [Řešení potíží](/l/cs/developers/self-host/capabilities/troubleshooting) pro možná řešení.
diff --git a/packages/twenty-docs/l/cs/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/cs/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..7b110ffa4f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: Nastavení
+---
+
+# Správa konfigurace
+
+
+ **Instalujete poprvé?** Postupujte podle [průvodce instalací Docker Compose](/l/cs/developers/self-host/capabilities/docker-compose) k rozchození Twenty, a poté se sem vraťte pro konfiguraci.
+
+
+Twenty nabízí **dvě konfigurační režimy** pro různé potřeby nasazení:
+
+**Přístup k administračnímu panelu:** Pouze uživatelé s administrátorskými právy (`canAccessFullAdminPanel: true`) mohou přistupovat k rozhraní pro konfiguraci.
+
+## 1. Konfigurace Admin panelu (výchozí)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # výchozí
+```
+
+**Most configuration happens through the UI** after installation:
+
+1. Access your Twenty instance (usually `http://localhost:3000`)
+2. Jděte na **Nastavení / Admin panel / Konfigurační proměnné**
+3. Nakonfigurujte integrace, e-mail, úložiště a další
+4. Změny se projeví okamžitě (u nasazení s více kontejnery do 15 sekund)
+
+
+ **Nasazení s více kontejnery:** Při použití databázové konfigurace (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`) čtou oba serverové i pracovní kontejnery ze stejné databáze. Změny v administračním panelu se dotýkají obou automaticky, což eliminuje potřebu duplicitních proměnných prostředí mezi kontejnery (s výjimkou infrastrukturních proměnných).
+
+
+**Co můžete konfigurovat přes administrační panel:**
+
+* **Autentizace** - Google/Microsoft OAuth, nastavení hesla
+* **E-mail** - nastavení SMTP, šablony, ověření
+* **Úložiště** - konfigurace S3, místní cesty k úložišti
+* **Integrace** - Gmail, Google Kalendář, služby Microsoft
+* **Pracovní postup & Omezení rychlosti** - limity provádění, škrcení API
+* **A ještě mnohem více...**
+
+
+
+
+ Každá proměnná je dokumentována s popisy ve vašem administračním panelu v sekci **Nastavení → Admin panel → Konfigurační proměnné**.
+ Některá nastavení infrastruktury, jako připojení k databázi (`PG_DATABASE_URL`), URL serveru (`SERVER_URL`) a tajemství aplikace (`APP_SECRET`), lze konfigurovat pouze prostřednictvím souboru `.env`.
+
+ [Kompletní technická referenční příručka →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Konfigurace pouze přes prostředí
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Všechna konfigurace je spravována prostřednictvím souborů `.env`:**
+
+1. Nastavte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ve vašem souboru `.env`
+2. Přidejte všechny konfigurační proměnné do souboru `.env`
+3. Restartujte kontejnery, aby se změny projevily
+4. Admin panel will show current values but cannot modify them
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Integrace Gmail & Google Kalendář
+
+### Vytvořte projekt Google Cloud
+
+1. Přejděte na [Google Cloud Console](https://console.cloud.google.com/)
+2. Vytvořte nový projekt nebo vyberte existující
+3. Povolte tyto API:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### Konfigurace OAuth
+
+1. Přejděte na [Pověření](https://console.cloud.google.com/apis/credentials)
+2. Vytvořte OAuth 2.0 Client ID
+3. Přidejte tyto URI přesměrování:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Konfigurace v Twenty
+
+1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
+2. Najděte sekci **Google Auth**
+3. Nastavte tyto proměnné:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
+
+
+**Požadované rozsahy** (automaticky konfigurované):
+[Zobrazit relevantní zdrojový kód](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Pokud je vaše aplikace v testovacím režimu
+
+Pokud je vaše aplikace v testovacím režimu, budete muset přidat testovací uživatele do vašeho projektu.
+
+V části [Obrazovka souhlasu s OAuth](https://console.cloud.google.com/apis/credentials/consent) přidejte své testovací uživatele do sekce "Testovací uživatelé".
+
+## Integrace Microsoft 365
+
+
+ Uživatelé musí mít [Licence Microsoft 365](https://admin.microsoft.com/Adminportal/Home), aby mohli používat API Kalendáře a Zpráv. Bez něj nebudou moci synchronizovat svůj účet na Twenty.
+
+
+### Vytvořte projekt v Microsoft Azure
+
+Budete muset vytvořit projekt v [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) a získat pověření.
+
+### Povoleňte API
+
+Na konzoli Microsoft Azure povolte následující API v "Povoleních":
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profile
+* Microsoft Graph: offline_access
+
+Poznámka: "Mail.ReadWrite" a "Mail.Send" jsou povinné pouze v případě, že chcete odesílat e-maily pomocí našich pracovních postupů. Můžete použít "Mail.Read" místo toho, pokud chcete pouze přijímat e-maily.
+
+### Autorizované URI přesměrování
+
+Musíte přidat následující URI přesměrování do vašeho projektu:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Konfigurace v Twenty
+
+1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
+2. Najděte sekci **Microsoft Auth**
+3. Nastavte tyto proměnné:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
+
+
+### Konfigurace rozsahů
+
+[Zobrazit relevantní zdrojový kód](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'email'
+* 'profil'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Pokud je vaše aplikace v testovacím režimu
+
+Pokud je vaše aplikace v testovacím režimu, budete muset přidat testovací uživatele do vašeho projektu.
+
+Přidejte své testovací uživatele do sekce "Uživatelé a skupiny".
+
+## Pracovní úkoly pro Kalendář & Zprávy
+
+Po konfiguraci integrací Gmail, Google Kalendář nebo Microsoft 365 je třeba spustit úlohy na synchronizaci dat na pozadí.
+
+Zaregistrujte následující opakující se úlohy ve vašem pracovním kontejneru:
+
+```bash
+# z vašeho pracovního kontejneru
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## Konfigurace Emailu
+
+1. Jděte na **Nastavení → Admin panel → Konfigurační proměnné**
+2. Najděte sekci **E-mail**
+3. Nakonfigurujte své nastavení SMTP:
+
+
+
+ Budete potřebovat zřídit [Heslo aplikace](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ **smtp4dev** je falešný SMTP e-mailový server pro vývoj a testování.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** je falešný SMTP e-mailový server pro vývoj a testování.
+
+ * Spusťte obraz smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Přístup k uživatelskému rozhraní smtp4dev zde: [http://localhost:8090](http://localhost:8090)
+ * Nastavte následující proměnné:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
+
diff --git a/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..20866bee34
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,227 @@
+---
+title: Řešení potíží
+---
+
+## Řešení potíží
+
+If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting,
+here are some solutions for common problems.
+
+### Vlastní hosting
+
+#### First install results in `password authentication failed for user "postgres"`
+
+🚨 **DŮLEŽITÉ: Toto řešení je POUZE pro nové instalace** 🚨
+Pokud máte existující instanci Twenty s produkčními daty, **NEPROVÁDĚJTE** tyto kroky, protože trvale smažou vaši databázi!
+
+Při první instalaci Twenty můžete chtít změnit výchozí heslo pro databázi.
+Heslo, které nastavíte během první instalace, se stane trvale uloženým v objemu databáze. Pokud se později pokusíte toto heslo změnit v konfiguraci, aniž byste odstranili starý objem, dojde k chybám autentizace, protože databáze stále používá původní heslo.
+
+⚠️ VAROVÁNÍ: Následující kroky trvale SMAŽÍ veškerá data z databáze! ⚠️
+Pokračujte pouze v případě, že se jedná o novou instalaci bez důležitých dat.
+
+K aktualizaci `PG_DATABASE_PASSWORD` musíte:
+
+```sh
+# Aktualizovat PG_DATABASE_PASSWORD ve .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR line breaks found [Windows]
+
+This is due to the line break characters of Windows and the git configuration. Zkuste spustit:
+
+```
+git config --global core.autocrlf false
+```
+
+Pak smažte úložiště a naklonujte jej znovu.
+
+#### Chybí schéma metadat
+
+Během instalace Twenty musíte nastavit svou postgres databázi s správnými schématy, rozšířeními a uživateli.
+Pokud se vám podaří spustit toto nastavování, měli byste mít ve své databázi schémata `default` a `metadata`.
+Pokud ne, ujistěte se, že na vašem počítači neběží více než jedna instance postgres.
+
+#### Cannot find module 'twenty-emails' or its corresponding type declarations.
+
+Před spuštěním inicializace databáze musíte sestavit balíček `twenty-emails` s `npx nx run twenty-emails:build`
+
+#### Chybí balíček twenty-x
+
+Ujistěte se, že v kořenovém adresáři spouštíte `yarn` a poté spusťte `npx nx server:dev twenty-server`. Pokud stále nefunguje, zkuste chybějící balíček sestavit ručně.
+
+#### Lint při ukládání nefunguje
+
+Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. If this doesn't work try adding this to your vscode setting (on the dev container scope):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### Při spuštění `npx nx start` nebo `npx nx start twenty-front` došlo k chybě nedostatku paměti
+
+In `packages/twenty-front/.env` uncomment `VITE_DISABLE_TYPESCRIPT_CHECKER=true` and `VITE_DISABLE_ESLINT_CHECKER=true` to disable background checks thus reducing amount of needed RAM.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
+
+Pro obejití proveďte níže uvedený příkaz v terminálu nebo jej přidejte do profilu .bashrc, aby se automatizovalo nastavení:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+Příznak --max-old-space-size=8192 nastavuje horní limit 8 GB pro hromadu v Node.js; využití se škáluje s požadavkem aplikace.
+Odkaz: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. V Twenty jsme si všimli, že některá rozšíření VScode zabírala hodně paměti RAM, takže jsme je dočasně deaktivovali.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### Při běhu `npx nx start` se v protokolech objevují podivné [0] a [1]
+
+To je očekávané, protože příkaz `npx nx start` spouští více příkazů v pozadí
+
+#### E-maily nejsou odesílány
+
+Většinou je to proto, že `worker` neběží na pozadí. Zkuste spustit
+
+```
+npx nx worker twenty-server
+```
+
+#### Nelze připojit můj účet Microsoft 365
+
+Většinou je to proto, že váš administrátor pro váš účet nepovolil licenci Microsoft 365. Zkontrolujte [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Pokud máte chybový kód `AADSTS50020`, pravděpodobně používáte osobní účet Microsoft. Tento přístup ještě není podporován. Více informací [zde](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### Při běhu `yarn` se v konzoli objevují varování
+
+Varování informují o načítání dalších závislostí, které nejsou explicitně uvedeny v `package.json`, takže pokud se neobjeví žádná vážná chyba, vše by mělo fungovat podle očekávání.
+
+#### Když uživatel přistoupí na přihlašovací stránku, v protokolech se objeví chybová zpráva o neautorizovaném uživateli, který se snaží přistoupit k pracovnímu prostoru
+
+To je očekávané, protože uživatel je neautorizovaný, když je odhlášen, protože jeho identita není ověřena.
+
+#### Jak zkontrolovat, zda váš worker běží?
+
+* Jděte na [webhook-test.com](https://webhook-test.com/) a zkopírujte **Svou unikátní webhook URL**.
+
+
+
+
+
+* Otevřete svou Twenty aplikaci, přejděte na `/settings` a na levé dolní části obrazovky aktivujte přepínač **Pokročilé**.
+* Vytvořte nový webhook.
+* Vložte **Svou unikátní webhook URL** do pole **Endpoint Url** ve Twenty. Nastavte **Filtry** na `Companies` a `Created`.
+
+
+
+
+
+* Přejděte na `/objects/companies` a vytvořte nový záznam společnosti.
+* Vraťte se na [webhook-test.com](https://webhook-test.com/) a zkontrolujte, zda byla přijata nová **POST request**.
+
+
+
+
+
+* Pokud byla přijata **POST request**, váš worker běží úspěšně. V opačném případě je potřeba zkontrolovat váš worker.
+
+#### Front-end se nedaří spustit a vrací chybu TS5042: Možnost 'project' nelze kombinovat se zdrojovými soubory na příkazovém řádku
+
+Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Administrační panel není přístupný
+
+Spusťte `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` v databázovém kontejneru pro získání přístupu k administračnímu panelu.
+
+### 1-click Docker compose
+
+#### Nelze se přihlásit
+
+Pokud se nemůžete přihlásit po nastavení:
+
+1. Spusťte následující příkazy:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Restartujte Docker kontejnery:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Poznámka: příkaz database:reset kompletně smaže vaši databázi a vytvoří ji znovu od základu.
+
+#### Problémy s připojením za reverzní proxy
+
+Pokud provozujete Twenty za reverzní proxy a máte problémy s připojením:
+
+1. **Ověřte SERVER_URL:**
+
+ Ujistěte se, že `SERVER_URL` ve vašem `.env` souboru odpovídá vaší externí přístupové URL, včetně `https`, pokud je SSL povoleno.
+
+2. **Zkontrolujte nastavení reverzní proxy:**
+
+ * Potvrďte, že vaše reverzní proxy správně směruje požadavky na server Twenty.
+ * Ujistěte se, že záhlaví jako `X-Forwarded-For` a `X-Forwarded-Proto` jsou správně nastaveny.
+
+3. **Restartujte služby:**
+
+ Po provedení změn restartujte jak reverzní proxy, tak kontejnery Twenty.
+
+#### Error when uploading an image - permission denied
+
+Switching the data folder ownership on the host from root to another user and group resolves this problem.
+
+## Získání pomoci
+
+Pokud se setkáte s problémy, které tento průvodce nepokrývá:
+
+* Zkontrolujte protokoly:
+
+ View container logs for error messages:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Podpora komunity:
+
+ Obraťte se na [komunitu Twenty](https://github.com/twentyhq/twenty/issues) nebo [podpůrné kanály](https://discord.gg/cx5n4Jzs57) pro pomoc.
diff --git a/packages/twenty-docs/l/cs/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/cs/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..afc06bdc64
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Průvodce upgradem
+---
+
+## Obecné pokyny
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Pokud jste použili Docker Compose, postupujte takto:
+
+1. V terminálu, na hostiteli, kde Twenty běží, vypněte Twenty: `docker compose down`
+
+2. Upgradujte verzi změnou hodnoty `TAG` v souboru .env vedle vašeho docker-compose. (Doporučujeme zvážit verzi `major.minor`, jako je `v0.53`)
+
+3. Opětovně zapněte Twenty pomocí `docker compose up -d`
+
+Chcete-li upgradovat svou instanci o několik verzí, například z v0.33.0 na v0.35.0, musíte svou instanci postupně upgradovat, v tomto příkladu z v0.33.0 na v0.34.0 a poté z v0.34.0 na v0.35.0.
+
+**Ujistěte se, že máte po každém upgradu nepoškozenou zálohu.**
+
+## Kroky upgradu specifické pro danou verzi
+
+## v1.0
+
+Ahoj Twenty v1.0! 🎉
+
+## v0.60
+
+### Vylepšení výkonu
+
+Všechny interakce s metadatovým API byly optimalizovány pro lepší výkon, zejména pro manipulaci s metadaty objektů a operace vytváření pracovních prostorů.
+
+We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations.
+
+Pokud po upgradu narazíte na problémy s výkonem, může být nutné vyprázdnit cache, aby bylo zajištěno její sladění s nejnovějšími změnami. Spusťte tento příkaz v kontejneru twenty-server:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Upgradujte svou instanci Twenty pro použití v0.55 image
+
+Už nemusíte spouštět žádný příkaz, nový obraz se automaticky postará o spuštění všech požadovaných migrací.
+
+### Chyba `Uživatel nemá oprávnění`
+
+Pokud po upgradu narazíte na chyby autorizace na většině požadavků, může být nutné vyprázdnit cache, abyste znovu provedli vyhodnocení nejnovějších oprávnění.
+
+Ve svém kontejneru `twenty-server` spusťte:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Tento problém je specifický pro tuto verzi Twenty a neměl by být vyžadován pro budoucí upgrady.
+
+### v0.54
+
+Od verze `0.53`, nejsou nutné žádné manuální akce.
+
+#### Omezení metadatového schématu
+
+Sloučili jsme schéma `metadata` do `core`, abychom zjednodušili načítání dat z `TypeORM`.
+Sloučili jsme krok příkazu `migrate` do příkazu `upgrade`. Nedoporučujeme ručně spouštět `migrate` v žádném z vašich kontejnerů server/worker.
+
+### Od v0.53
+
+Od `0.53` je upgrade programově upraven v rámci `DockerFile`, což znamená, že od této chvíle již nemusíte ručně spouštět žádný příkaz.
+
+Ujistěte se, že upgradujete svou instanci postupně, aniž byste přeskočili hlavní verzi (např. `0.43.3` na `0.44.0` je povoleno, ale `0.43.1` na `0.45.0` nikoli), aby se předešlo asynchronizaci verzí pracovního prostoru, což by mohlo mít za následek chybu při běhu a chybějící funkčnost.
+
+Chcete-li zkontrolovat, zda byl pracovní prostor správně migrován, můžete zkontrolovat jeho verzi v databázi v tabulce `core.workspace`.
+
+Měla by se vždy nacházet v rozmezí vaší aktuální instance Twenty `major.minor` verze. Můžete zkontrolovat verzi instance na ovládacím panelu administrátora (na `/settings/admin-panel`, přístupné, pokud máte v databázi nastaveno uživatelské vlastnosti `canAccessFullAdminPanel` na true) nebo spuštěním `echo $APP_VERSION` ve vašem kontejneru `twenty-server`.
+
+Chcete-li opravit asynchronizaci verzí pracovního prostoru, budete muset upgradovat z odpovídající verze twenty podle souvisejícího průvodce upgradem po jednotlivých krocích, až do dosažení požadované verze.
+
+#### Odstranění `auditLog`
+
+Odstranili jsme standardní objekt auditLog, což znamená, že váš záložní soubor může být po této migraci výrazně zmenšen.
+
+### v0.51 až v0.52
+
+Upgradujte svou instanci Twenty pro použití v0.52 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Mám pracovní prostor zablokovaný ve verzi mezi `0.52.0` a `0.52.6`
+
+Bohužel `0.52.0` a `0.52.6` byly zcela odstraněny z dockerHub.
+Budete muset ručně změnit verzi pracovního prostoru na `0.51.0` v databázi a upgradovat pomocí twenty verze `0.52.11` podle jejího výše uvedeného průvodce upgradem.
+
+### v0.50 až v0.51
+
+Upgradujte svou instanci Twenty pro použití v0.51 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 až v0.50.0
+
+Upgradujte svou instanci Twenty pro použití v0.50.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Mutace Docker-compose.yml
+
+Tato verze obsahuje mutaci `docker-compose.yml`, která zajišťuje, že služba `worker` má přístup k objemu `server-local-data`.
+Aktualizujte svůj místní `docker-compose.yml` pomocí [docker-compose.yml v0.50.0](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 až v0.44.0
+
+Upgradujte svou instanci Twenty pro použití v0.44.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 až v0.43.0
+
+Upgradujte svou instanci Twenty pro použití v0.43.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+V této verzi jsme také přešli na obraz postgres:16 v docker-compose.yml.
+
+#### (Možnost 1) Migrace databáze
+
+Zachování existujícího obrazu postgres-spilo je v pořádku, ale budete muset zmrazit verzi v `docker-compose.yml` na 0.43.0.
+
+#### (Možnost 2) Migrace databáze
+
+Pokud chcete migrovat svou databázi na nový obraz postgres:16, postupujte podle těchto kroků:
+
+1. Zálohujte svou databázi z kontejneru postgres-spilo
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Ujistěte se, že váš záložní soubor není prázdný.
+
+2. Upgradujte svůj `docker-compose.yml` na použití obrazu postgres:16 podle [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) soubor.
+
+3. Obnovte databázi do nového kontejneru postgres:16
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 až v0.42.0
+
+Upgradujte svou instanci Twenty pro použití v0.42.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Proměnné prostředí**
+
+* Odstraněno: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Přidáno: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 až v0.41.0
+
+Upgradujte svou instanci Twenty pro použití v0.41.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Proměnné prostředí**
+
+* Odstraněno: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 až v0.40.0
+
+Upgradujte svou instanci Twenty pro použití v0.40.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Proměnné prostředí**
+
+* Přidáno: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 až v0.35.0
+
+Upgradujte svou instanci Twenty pro použití v0.35.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.35` se postará o datovou migraci všech pracovních míst.
+
+**Proměnné prostředí**
+
+* Nahradili jsme `ENABLE_DB_MIGRATIONS` s `DISABLE_DB_MIGRATIONS` (výchozí hodnota je nyní `false`, pravděpodobně nemusíte nastavovat nic)
+
+### v0.33.0 až v0.34.0
+
+Upgradujte svou instanci Twenty pro použití v0.34.0 image
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.34` se postará o datovou migraci všech pracovních míst.
+
+**Proměnné prostředí**
+
+* Odstraněno: `FRONT_BASE_URL`
+* Přidáno: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Aktualizovali jsme způsob, jakým zpracováváme frontend URL.
+Nyní můžete nastavit frontend URL pomocí proměnných `FRONT_DOMAIN`, `FRONT_PROTOCOL` a `FRONT_PORT`.
+Pokud není FRONT_DOMAIN nastavena, frontend URL se vrátí na `SERVER_URL`.
+
+### v0.32.0 až v0.33.0
+
+Upgradujte svou instanci Twenty pro použití v0.33.0 image
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+Příkaz `yarn command:prod cache:flush` vyprázdní cache Redis.
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.33` se postará o datovou migraci všech pracovních míst.
+
+Od této verze se obraz twenty-postgres pro DB stal zastaralým a místo něj se používá twenty-postgres-spilo.
+Pokud chcete pokračovat v používání obrazu twenty-postgres, jednoduše nahraďte `twentycrm/twenty-postgres:${TAG}` za `twentycrm/twenty-postgres` v docker-compose.yml.
+
+### v0.31.0 až v0.32.0
+
+Upgradujte svou instanci Twenty pro použití v0.32.0 image
+
+**Migrace schématu a dat**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.32` se postará o datovou migraci všech pracovních míst.
+
+**Proměnné prostředí**
+
+Aktualizovali jsme způsob, jakým zpracováváme připojení k Redis.
+
+* Odstraněno: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Přidáno: `REDIS_URL`
+
+Aktualizujte svůj `.env` soubor tak, aby používal novou proměnnou `REDIS_URL` místo jednotlivých parametrů připojení k Redis.
+
+Také jsme zjednodušili způsob, jakým zpracováváme tokeny JWT.
+
+* Odstraněno: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Přidáno: `APP_SECRET`
+
+Aktualizujte svůj `.env` soubor tak, aby používal novou proměnnou `APP_SECRET` místo jednotlivých tokenů (můžete použít stejný tajný řetězec jako dříve nebo vygenerovat nový náhodný řetězec)
+
+**Propojený účet**
+
+Pokud používáte propojený účet k synchronizaci vašich emailů a kalendářů Google, budete muset aktivovat [People API](https://developers.google.com/people) na konzoli Google Admin.
+
+### v0.30.0 až v0.31.0
+
+Upgradujte svou instanci Twenty pro použití v0.31.0 image
+
+**Migrace schématu a dat**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.31` se postará o datovou migraci všech pracovních míst.
+
+### v0.24.0 až v0.30.0
+
+Upgradujte svou instanci Twenty pro použití v0.30.0 image
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Aktualizovali jsme náš [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml), aby to odrážel.
+Ujistěte se, že jste aktualizovali svou konfiguraci a své proměnné prostředí odpovídajícím způsobem:
+
+```
+REDIS_HOST={váš-redis-host}
+REDIS_PORT={váš-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Migrace schématu a dat**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.30` se postará o datovou migraci všech pracovních míst.
+
+### v0.23.0 až v0.24.0
+
+Upgradujte svou instanci Twenty pro použití v0.24.0 image
+
+Spusťte následující příkazy:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny struktury databáze (core a metadata schémata)
+Příkaz `yarn command:prod upgrade-0.24` se postará o datovou migraci všech pracovních míst.
+
+### v0.22.0 až v0.23.0
+
+Upgradujte svou instanci Twenty pro použití v0.23.0 image
+
+Spusťte následující příkazy:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny na databázi.
+Příkaz `yarn command:prod upgrade-0.23` se postará o datovou migraci, včetně přesunu aktivit na úkoly/poznámky.
+
+### v0.21.0 až v0.22.0
+
+Upgradujte svou instanci Twenty pro použití v0.22.0 image
+
+Spusťte následující příkazy:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+Příkaz `yarn database:migrate:prod` aplikuje změny na databázi.
+Příkaz `yarn command:prod workspace:sync-metadata -f` synchronizuje definici standardních objektů s tabulkami metadata a aplikuje nezbytné migrace na existující pracovní prostory.
+Příkaz `yarn command:prod upgrade-0.22` aplikuje specifické datové transformace pro adaptaci na nové objektové defaultRequestInstrumentationOptions.
diff --git a/packages/twenty-docs/l/cs/developers/self-host/self-host.mdx b/packages/twenty-docs/l/cs/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..2ead41bf1f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Přehled
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/cs/navigation.json b/packages/twenty-docs/l/cs/navigation.json
index f5cc2e3272..df84c010ac 100644
--- a/packages/twenty-docs/l/cs/navigation.json
+++ b/packages/twenty-docs/l/cs/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Uživatelská příručka",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Začněme"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Datový model"
+ "label": "Datový model",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "CRM základy"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Pohledy"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Pracovní postupy"
+ "label": "Pracovní postupy",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Potřebujete další pomoc"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Spolupráce"
+ "ai": {
+ "label": "AI",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integrace & API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Reportování"
+ "dashboards": {
+ "label": "Panely",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Fakturace",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Nastavení"
- },
- "pricing": {
- "label": "Ceny"
- },
- "resources": {
- "label": "Zdroje"
+ "label": "Nastavení",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Vývojáři"
},
- "devGettingStarted": {
- "label": "Začněme",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Samohostování"
- },
- "apiAndWebhooks": {
- "label": "API a Webhooky"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Přispěje",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Vývoj frontendu",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Vývoj frontendu",
"groups": {
- "display": {
- "label": "Zobrazení"
- },
- "feedback": {
- "label": "Komentář"
- },
- "input": {
- "label": "Input"
- },
- "navigation": {
- "label": "Navigation"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Zobrazit"
+ },
+ "feedback": {
+ "label": "Zpětná vazba"
+ },
+ "input": {
+ "label": "Vstup"
+ },
+ "navigation": {
+ "label": "Navigace"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Vývoj backendu"
}
}
- },
- "backendDevelopment": {
- "label": "Vývoj backendu"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..95fc7e6fa3
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: Tooltip aplikace
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Krátká zpráva, která zobrazí další informace, když uživatel interaguje s prvkem.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Customer Insights
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | className | řetězec | Volitelná CSS třída pro dodatečné stylování. |
+ | anchorSelect | CSS selektor | Selektor pro kotvu tooltipu (prvek, který spouští tooltip). |
+ | obsah | textový řetězec | Obsah, který chcete zobrazit v rámci tooltipu. |
+ | delayHide | číslo | Zpoždění v sekundách před skrytím tooltipu poté, co kurzor opustí kotvu. |
+ | odsazení | číslo | Odsazení v pixelech pro umístění tooltipu. |
+ | noArrow | booleovská hodnota | Pokud je `true`, skrývá šipku na tooltipu. |
+ | isOpen | booleovská hodnota | Pokud je `true`, tooltip je výchozím způsobem otevřen. |
+ | umístění | řetězec `PlacesType` z `react-tooltipu` | Určuje umístění tooltipu. Hodnoty zahrnují `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, a `left-end`. |
+ | positionStrategy | `PositionStrategy` string from `react-tooltip` | Strategie umístění pro tooltip. Má dvě hodnoty: `absolute` a `fixed`. |
+
+
+
+## Přetékající text s tooltipem
+
+Řeší přetékající text a zobrazuje tooltip, když text přetéká.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------- | ----------------------------------------------------------- |
+ | text | řetězec | Obsah, který chcete zobrazit v oblasti přetékajícího textu. |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..6c51c5ab85
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Checkmark
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Představuje úspěšnou nebo dokončenou akci.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Rozšiřuje `React.ComponentPropsWithoutRef<'div'>` a přijímá všechny vlastnosti běžného prvku `div`.
+
+
+
+## Animated Checkmark
+
+Představuje ikonu zaškrtnutí s přidanou funkcí animace.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | ------------------ | --------------------------------- | ----------- |
+ | animuje | booleovská hodnota | Určuje, zda se zaškrtnutí animuje | nepravdivé |
+ | barva | řetězec | Barva zaškrtnutí | |
+ | trvání | číslo | Doba trvání animace v sekundách | 0,5 sekundy |
+ | velikost | číslo | Velikost zaškrtnutí | 28 pixelů |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..5ebfe4a729
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Čip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Vizuální prvek, který můžete používat jako kliknutelný nebo nekliknutelný kontejner se štítkem, volitelnými levými a pravými komponenty a různými styly pro zobrazení štítků a značek.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------------------------- | ---------------------------------------------------------------------------------------- |
+ | odkazNaEntitu | řetězec | Odkaz na entitu |
+ | entitaId | řetězec | Jedinečný identifikátor pro entitu |
+ | název | textový řetězec | Název entity |
+ | obrázekUrl | řetězec | s picture", |
+ | typAvatara | Typ avatara | Typ avatara, který chcete zobrazit. Má dvě možnosti: `zaoblený` a `hranatý` |
+ | varianta | `EntityChipVariant` výčet | Varianta čipu entity, kterou chcete zobrazit. Má dvě možnosti: `běžný` a `transparentní` |
+ | Levá ikona | Ikonová komponenta | React komponenta představující ikonu. Zobrazeno na levé straně čipu |
+
+
+
+## Příklady
+
+### Transparentní deaktivovaný čip
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Deaktivovaný čip s tooltipem
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Čip entity
+
+Prvek podobný čipu pro zobrazení informací o entitě.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------------------------- | ---------------------------------------------------------------------------------------- |
+ | odkazNaEntitu | řetězec | Odkaz na entitu |
+ | entitaId | řetězec | Jedinečný identifikátor pro entitu |
+ | název | řetězec | Název entity |
+ | obrázekUrl | řetězec | s picture", |
+ | typAvatara | Typ avatara | Typ avatara, který chcete zobrazit. Má dvě možnosti: `zaoblený` a `hranatý` |
+ | varianta | `EntityChipVariant` výčet | Varianta čipu entity, kterou chcete zobrazit. Má dvě možnosti: `běžný` a `transparentní` |
+ | Levá ikona | Ikonová komponenta | React komponenta představující ikonu. Zobrazeno na levé straně čipu |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..3bee822936
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: Ikony
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Seznam ikon používaných po celé naší aplikaci.
+
+## Tabler Icons
+
+V celé aplikaci používáme ikony Tabler pro React.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ Každou ikonu můžete importovat jako komponentu. Zde je příklad:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | ------- | ------------------------------ | ------------- |
+ | velikost | číslo | Výška a šířka ikony v pixelech | 24 |
+ | barva | řetězec | Barva ikon | současnáBarva |
+ | stroke | číslo | Šířka tahu ikony v pixelech | 2 |
+
+
+
+## Custom Icons
+
+Kromě ikon Tabler aplikace používá také některé vlastní ikony.
+
+### Icon Address Book
+
+Zobrazí ikonu adresáře.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | ----- | ------------------------------ | ------- |
+ | velikost | číslo | Výška a šířka ikony v pixelech | 24 |
+ | stroke | číslo | Šířka tahu ikony v pixelech | 2 |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..3b800ad2a0
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Malý odznak nebo "pilulka" označující, že něco brzy přijde.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/cs/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/cs/twenty-ui/display/tag.mdx
index 86a7c89f5b..b8663a5e78 100644
--- a/packages/twenty-docs/l/cs/twenty-ui/display/tag.mdx
+++ b/packages/twenty-docs/l/cs/twenty-ui/display/tag.mdx
@@ -4,41 +4,35 @@ image: /images/user-guide/table-views/table.png
---
-
+
Komponenta pro vizuální kategorizaci nebo označení obsahu.
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
-
-
-```jsx
-import { Tag } from "@/ui/display/tag/components/Tag";
-
-export const MyComponent = () => {
- return (
- console.log("click")}
- />
- );
-};
-```
-
-
-
-
-
-| Vlastnosti | Typ | Popis |
-| ---------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| className | textový řetězec | Volitelný název pro dodatečné stylování |
-| barva | textový řetězec | Barva štítku. Možnosti zahrnují: `zelená`, `tyrkysová`, `nebeská`, `modrá`, `fialová`, `růžová`, `červená`, `oranžová`, `žlutá`, `šedá` |
-| text | textový řetězec | Obsah štítku |
-| onClick | funkce | Volitelná funkce vyvolaná při kliknutí uživatele na štítek |
-
-
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | barva | řetězec | Barva štítku. Možnosti zahrnují: `zelená`, `tyrkysová`, `nebeská`, `modrá`, `fialová`, `růžová`, `červená`, `oranžová`, `žlutá`, `šedá` |
+ | text | textový řetězec | Obsah štítku |
+ | onClick | funkce | Volitelná funkce vyvolaná při kliknutí uživatele na štítek |
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/block-editor.mdx
new file mode 100644
index 0000000000..0385cee972
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/block-editor.mdx
@@ -0,0 +1,31 @@
+---
+title: Blokový Editor
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Používá blokově založený editor bohatého textu od [BlockNote](https://www.blocknotejs.org/) pro umožnění uživatelům editovat a zobrazovat bloky obsahu.
+
+
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
+
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ----------------- | ------------------------------------------- |
+ | editor | `BlockNoteEditor` | Instance nebo konfigurace blokového editoru |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..396815de60
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Tlačítka
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+Seznam tlačítek a skupin tlačítek používaných v celé aplikaci.
+
+## Tlačítko
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | --------------------- | ---------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název třídy pro dodatečné stylování |
+ | Ikona | `React.ComponentType` | Volitelná komponenta ikony, která se zobrazuje v rámci tlačítka |
+ | název | řetězec | Textový obsah tlačítka |
+ | fullWidth | booleovská hodnota | Určuje, zda by tlačítko mělo zabírat celou šířku svého kontejneru |
+ | varianta | řetězec | Vizualní stylová varianta tlačítka. Možnosti zahrnují `primární`, `sekundární` a `terciární` |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` |
+ | pozice | řetězec | Pozice tlačítka ve vztahu k jeho sourozencům. Možnosti zahrnují: `samostatné`, `levé`, `pravé` a `střední` |
+ | akcent | řetězec | Barva akcentu tlačítka. Options include: `default`, `blue`, and `danger` |
+ | brzy | booleovská hodnota | Indikuje, jestli je tlačítko označené jako "brzy" (například pro nadcházející funkce) |
+ | neaktivní | booleovská hodnota | Specifies whether the button is disabled or not |
+ | focus | booleovská hodnota | Určuje, zda tlačítko má zaměření |
+ | onClick | funkce | Funkce zpětného volání, která se spustí, když uživatel klikne na tlačítko |
+
+
+
+## Skupina tlačítek
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | --------------- | ------------------------------------------------------------------------------------------------------------------ |
+ | varianta | řetězec | The visual style variant of the buttons within the group. Možnosti zahrnují `primární`, `sekundární` a `terciární` |
+ | velikost | řetězec | Velikost tlačítek ve skupině. Má dvě možnosti: `střední` a `malé` |
+ | akcent | textový řetězec | Barva akcentu tlačítek ve skupině. Options include `default`, `blue` and `danger` |
+ | className | řetězec | Volitelný název třídy pro dodatečné stylování |
+ | děti | ReactNode | Pole prvků React představující jednotlivá tlačítka ve skupině |
+
+
+
+## Plovoucí tlačítko
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | --------------------- | ------------------------------------------------------------------------------------------------------ |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | Ikona | `React.ComponentType` | Volitelná komponenta ikony, která se zobrazuje v rámci tlačítka |
+ | název | řetězec | Textový obsah tlačítka |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` |
+ | pozice | řetězec | Pozice tlačítka ve vztahu k jeho sourozencům. Options include: `standalone`, `left`, `middle`, `right` |
+ | přidatStín | booleovská hodnota | Určuje, zda se má na tlačítko přidat stín |
+ | použítRozmazání | booleovská hodnota | Určuje, zda se má na tlačítko použít rozostření |
+ | neaktivní | booleovská hodnota | Determines whether the button is disabled |
+ | focus | booleovská hodnota | Indikuje, zda tlačítko má zaměření |
+
+
+
+## Plovoucí skupina tlačítek
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | --------- | ------------------------------------------------------------- | ------- |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` | malý |
+ | děti | ReactNode | Pole prvků React představující jednotlivá tlačítka ve skupině | |
+
+
+
+## Plovoucí ikonové tlačítko
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | --------------------- | ---------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | Ikona | `React.ComponentType` | Volitelná komponenta ikony, která se zobrazuje v rámci tlačítka |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` |
+ | pozice | řetězec | Pozice tlačítka ve vztahu k jeho sourozencům. Možnosti zahrnují: `samostatné`, `levé`, `pravé` a `střední` |
+ | přidatStín | booleovská hodnota | Určuje, zda se má na tlačítko přidat stín |
+ | použítRozmazání | booleovská hodnota | Určuje, zda se má na tlačítko použít rozostření |
+ | neaktivní | booleovská hodnota | Determines whether the button is disabled |
+ | focus | booleovská hodnota | Indikuje, zda tlačítko má zaměření |
+ | onClick | funkce | Funkce zpětného volání, která se spustí, když uživatel klikne na tlačítko |
+ | jeAktivní | booleovská hodnota | Určuje, zda je tlačítko v aktivním stavu |
+
+
+
+## Plovoucí skupina ikonových tlačítek
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` |
+ | ikonová tlačítka | pole | Pole objektů, z nichž každé představuje ikonové tlačítko ve skupině. Každý objekt by měl obsahovat ikonovou komponentu, kterou chcete zobrazit v tlačítku, funkci, kterou chcete vyvolat při kliknutí uživatele na tlačítko, a určení, zda by tlačítko mělo být aktivní či nikoli. |
+
+
+
+## Light Button
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------------------ | ------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | ikona | `React.ReactNode` | Ikona, kterou chcete zobrazit v tlačítku |
+ | název | řetězec | Textový obsah tlačítka |
+ | akcent | řetězec | Barva akcentu tlačítka. Options include: `secondary` and `tertiary` |
+ | aktivní | booleovská hodnota | Určuje, zda je tlačítko v aktivním stavu |
+ | neaktivní | booleovská hodnota | Determines whether the button is disabled |
+ | focus | booleovská hodnota | Indikuje, zda tlačítko má zaměření |
+ | onClick | funkce | Funkce zpětného volání, která se spustí, když uživatel klikne na tlačítko |
+
+
+
+## Light Icon Button
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | --------------------- | ------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+ | testId | řetězec | Testovací identifikátor pro tlačítko |
+ | Ikona | `React.ComponentType` | Volitelná komponenta ikony, která se zobrazuje v rámci tlačítka |
+ | název | řetězec | Textový obsah tlačítka |
+ | velikost | řetězec | Velikost tlačítka. Má dvě možnosti: `malé` a `střední` |
+ | akcent | řetězec | Barva akcentu tlačítka. Options include: `secondary` and `tertiary` |
+ | aktivní | booleovská hodnota | Určuje, zda je tlačítko v aktivním stavu |
+ | neaktivní | booleovská hodnota | Determines whether the button is disabled |
+ | focus | booleovská hodnota | Indikuje, zda má tlačítko zaměření |
+ | onClick | funkce | Funkce zpětného volání, která se spustí, když uživatel klikne na tlačítko |
+
+
+
+## Hlavní tlačítko
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | -------------------- | -------------------------------- | ---------------------------------------------------------------------------------- |
+ | název | řetězec | Textový obsah tlačítka |
+ | fullWidth | booleovská hodnota | Určuje, zda by tlačítko mělo zabírat celou šířku svého kontejneru |
+ | varianta | řetězec | Vizuální stylová varianta tlačítka. Options include `primary` and `secondary` |
+ | brzy | booleovská hodnota | Indikuje, zda je tlačítko označeno jako "brzy" (například pro nadcházející funkce) |
+ | Ikona | `React.ComponentType` | Volitelná komponenta ikony, která se zobrazuje v rámci tlačítka |
+ | React `button` props | `React.ComponentProps<'button'>` | All standard HTML button props are supported |
+
+
+
+## Zaoblené tlačítko s ikonou
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | -------------------- | ----------------------------------------------- | ----- |
+ | Ikona | `React.ComponentType` | |
+ | React `button` props | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..713fbaca44
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: Zaškrtávací políčko
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Používané, když uživatel potřebuje vybrat více hodnot z několika možností.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange function fired")}
+ onCheckedChange={() => console.log("onCheckedChange function fired")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | ------------------ | ------------------------------------------------------------------------------------------- |
+ | zaškrtnuté | booleovská hodnota | Ukazuje, zda je zaškrtávací políčko zaškrtnuté |
+ | neurčitý stav | booleovská hodnota | Ukazuje, zda je zaškrtávací políčko ve stavu neurčitosti (ani zaškrtnuté, ani nezaškrtnuté) |
+ | onChange | funkce | Callback funkce, kterou chcete spustit, když se změní stav zaškrtávacího políčka |
+ | onCheckedChange | funkce | Callback funkce, kterou chcete spustit, když se změní stav „zaškrtnutí“ |
+ | varianta | textový řetězec | Vizuální stylová varianta boxu. Možnosti zahrnují: "primární", "sekundární" a "terciární" |
+ | velikost | řetězec | Velikost zaškrtávacího políčka. Má dvě možnosti: "malý" a "velký" |
+ | tvar | řetězec | Tvar zaškrtávacího políčka. Má dvě možnosti: "čtvercový" a "zaoblený" |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..08715f9a1e
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Barevné schéma
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Karta barevného schématu
+
+Zobrazuje různá barevná schémata a je speciálně přizpůsobená pro světlé a tmavé motivy.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------------- | --------------------------------------- | ------------------------------------------------------------------------------ | ------- |
+ | varianta | řetězec | Varianta barevného schématu. Možnosti zahrnují `Tmavý`, `Světlý` a `Systémový` | světlý |
+ | vybráno | booleovská hodnota | If `true`, displays a checkmark to indicate the selected color scheme | |
+ | další vlastnosti | `React.ComponentPropsWithoutRef<'div'>` | Standardní vlastnosti HTML `div` elementu | |
+
+
+
+## Výběr barevného schématu
+
+Umožňuje uživatelům vybrat různá barevná schémata.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ---------------- | -------------------------------------------------------------------------------------- |
+ | hodnota | `Barevné schéma` | Aktuálně vybrané barevné schéma |
+ | onChange | funkce | Funkce zpětného volání, kterou chcete spustit při výběru barevného schématu uživatelem |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..3c55f95105
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: Výběr Ikony
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Rozbalovací výběr ikon, který uživatelům umožňuje vybrat ikonu ze seznamu.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Selected Icon:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------- |
+ | neaktivní | booleovská hodnota | Deaktivuje výběr ikon, pokud je nastavena hodnota `true` |
+ | onChange | funkce | Vyvolá se funkce zpětného volání, když uživatel vybere ikonu. Přijímá objekt s vlastnostmi `iconKey` a `Icon` |
+ | selectedIconKey | textový řetězec | The key of the initially selected icon |
+ | onClickOutside | funkce | Funkce zpětného volání, vyvolaná, když uživatel klikne mimo rozbalovací nabídku. |
+ | onClose | funkce | Callback function triggered when the dropdown is closed |
+ | onOpen | funkce | Funkce zpětného volání, vyvolaná, když je rozbalovací nabídka otevřena. |
+ | varianta | řetězec | The visual style variant of the clickable icon. Možnosti zahrnují: "primární", "sekundární" a "terciární" |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..89b7fd6811
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Vstup obrázku
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Umožňuje uživatelům nahrát a odstranit obrázek.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | -------------- | ------------------ | -------------------------------------------------------------------------------------------------- |
+ | obrázek | řetězec | URL zdroje obrázku |
+ | onUpload | funkce | Funkce, která se spustí při nahrání nového obrázku uživatelem. Přijímá objekt `File` jako parametr |
+ | onRemove | funkce | Funkce, která se spustí po kliknutí uživatele na tlačítko odstranění |
+ | onAbort | funkce | Funkce, která se spustí při kliknutí uživatele na tlačítko přerušení během nahrávání obrázku |
+ | isUploading | booleovská hodnota | Indicates whether an image is currently being uploaded |
+ | chybová zpráva | řetězec | Volitelná chybová zpráva k zobrazení pod vstupním polem pro obrázek |
+ | neaktivní | booleovská hodnota | If `true`, the entire input is disabled, and the buttons are not clickable |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..a1c1403662
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Rádio
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Používá se, když uživatelé mohou vybrat pouze jednu možnost ze série možností.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | ---------------------- | ---------------------------------------------------------------------------------- |
+ | styl | Vlastnosti `React.CSS` | Další inline styly pro komponentu |
+ | className | řetězec | Volitelná CSS třída pro další stylování |
+ | zaškrtnuté | booleovská hodnota | Indicates whether the radio button is checked |
+ | hodnota | řetězec | Označení nebo text spojený s radiobuttonem |
+ | onChange | funkce | The function called when the selected radio button is changed |
+ | onCheckedChange | funkce | The function called when the `checked` state of the radio button changes |
+ | velikost | řetězec | Velikost radiobuttonu. Možnosti zahrnují: `velký` a `malý` |
+ | neaktivní | booleovská hodnota | If `true`, the radio button is disabled and not clickable |
+ | labelPosition | řetězec | Pozice textu označení vzhledem k radiobuttonu. Má dvě možnosti: `vlevo` a `vpravo` |
+
+
+
+## Radio Group
+
+Groups together related radio buttons.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | --------------- | ----------------- | ---------------------------------------------------------------------------------- |
+ | hodnota | řetězec | Hodnota aktuálně vybraného radiobuttonu |
+ | onChange | funkce | The callback function triggered when the radio button is changed |
+ | přiZměněHodnoty | funkce | Funkce spouštěná při změně vybrané hodnoty ve skupině. |
+ | děti | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/select.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/select.mdx
new file mode 100644
index 0000000000..e8ff342e75
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/select.mdx
@@ -0,0 +1,51 @@
+---
+title: Vybrat
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+Umožňuje uživatelům vybrat hodnotu z nabídky předdefinovaných možností.
+
+
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
+
+ import { Select } from '@/ui/input/components/Select';
+
+ export const MyComponent = () => {
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelná CSS třída pro dodatečné stylování. |
+ | neaktivní | booleovská hodnota | Pokud je nastaveno na `true`, zakáže interakci uživatele s komponentou. |
+ | štítek | textový řetězec | Štítek popisující účel komponenty `Vybrat`. |
+ | onChange | funkce | Funkce volaná při změně vybraných hodnot. |
+ | možnosti | pole | Represents the options available for the `Selected` component. It's an array of objects where each object has a `value` (the unique identifier), `label` (the unique identifier), and an optional `Icon` |
+ | hodnota | řetězec | Reprezentuje aktuálně vybranou hodnotu. Měla by odpovídat jedné z `hodnot` v poli `možnosti`. |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/text.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..f8942a3069
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Text
+image: /images/user-guide/notes/notes_header.png
+---
+
+
+
+
+
+## Text Input
+
+Umožňuje uživatelům zadávat a upravovat text.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | -------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
+ | className | řetězec | Volitelný název pro další stylování |
+ | štítek | řetězec | Reprezentuje štítek pro vstup |
+ | onChange | funkce | Funkce, která se zavolá, když se změní hodnota vstupu |
+ | fullWidth | booleovská hodnota | Udává, zda by měl vstup zabírat 100 % šířky |
+ | disableHotkeys | booleovská hodnota | Indikuje, zda jsou pro vstup povoleny horké klávesy |
+ | chyba | řetězec | Reprezentuje chybovou zprávu, která se má zobrazit. Pokud je poskytnuta, také přidává ikonu chyby na pravou stranu vstupu |
+ | onKeyDown | funkce | Called when a key is pressed down while the input field is focused. Přijímá `React.KeyboardEvent` jako argument |
+ | Pravá Ikona | Ikonová komponenta | Volitelná komponenta ikony zobrazená na pravé straně vstupu |
+
+ Komponenta také přijímá jiné vlastnosti HTML vstupního prvku.
+
+
+
+## Automatická velikost vstupního textu
+
+Textová vstupní komponenta, která automaticky přizpůsobuje svou výšku na základě obsahu.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------- | --------------------------------------------------------------------------- |
+ | onValidate | funkce | The callback function you want to trigger when the user validates the input |
+ | minRows | číslo | Minimální počet řádků pro textovou oblast |
+ | zástupný text | řetězec | Náhradní text, který chcete zobrazit, když je textová oblast prázdná |
+ | onFocus | funkce | The callback function you want to trigger when the text area gains focus |
+ | varianta | řetězec | Varianta vstupu. Možnosti zahrnují: `výchozí`, `ikona`, a `tlačítko` |
+ | buttonTitle | řetězec | Název pro tlačítko (pouze pro variantu tlačítka) |
+ | hodnota | řetězec | Úvodní hodnota pro textovou oblast |
+
+
+
+## Textová Oblast
+
+Umožňuje vytvoření víceřádkových textových vstupů.
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------------------ | -------------------------------------------------------------- |
+ | neaktivní | booleovská hodnota | Naznačuje, zda je textová oblast deaktivovaná |
+ | minRows | číslo | Minimální počet viditelných řádků pro textovou oblast. |
+ | onChange | funkce | Callback function triggered when the text area content changes |
+ | zástupný text | řetězec | Zástupný text zobrazený, když je textová oblast prázdná |
+ | hodnota | řetězec | Aktuální hodnota textové oblasti |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/cs/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..615b52403f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Přepínač
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ----------------- | ------------------ | --------------------------------------------------------------------------------------------- | ------------ |
+ | hodnota | booleovská hodnota | Aktuální stav přepínače | `nepravdivé` |
+ | onChange | funkce | Callback funkce spuštěná při změně stavu přepínače | |
+ | barva | řetězec | Color of the toggle when it\ | modré barvy |
+ | velikostPřepínače | řetězec | Velikost přepínače, která ovlivňuje jak výšku, tak šířku. Má dvě možnosti: `malé` a `střední` | střední |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/introduction.mdx b/packages/twenty-docs/l/cs/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..0dbd213621
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Přehled
+description: Knihovna komponent pro Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Komponenty
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..c3a6eab483
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: Menu Item
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Univerzální položka menu navržená k použití v menu nebo navigačním seznamu.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Icon button clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------------- | ------------------ | ------------------------------------------------------------------------------------------ |
+ | Levá ikona | Ikonová komponenta | Volitelná levá ikona zobrazená před textem v položce menu |
+ | akcent | řetězec | Určuje barvu akcentu položky menu. Options include: `default`, `danger`, and `placeholder` |
+ | text | textový řetězec | Textový obsah položky menu |
+ | ikonová tlačítka | pole | Seznam objektů představujících další ikony tlačítek spojené s položkou menu |
+ | isTooltipOpen | booleovská hodnota | Řídí viditelnost tooltipu spojeného s položkou menu |
+ | testId | řetězec | Atribut data-testid pro testovací účely |
+ | onClick | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+## Variants
+
+Různé varianty komponenty položky menu zahrnují následující:
+
+### Příkaz
+
+Položka menu ve stylu příkazu v menu pro označení klávesových zkratek.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Command clicked!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------ | ------------------ | ------------------------------------------------------------ |
+ | Levá ikona | Ikonová komponenta | Volitelná levá ikona zobrazená před textem v položce menu |
+ | text | řetězec | Textový obsah položky menu |
+ | firstHotKey | řetězec | První klávesová zkratka spojená s příkazem |
+ | secondHotKey | řetězec | Druhá klávesová zkratka spojená s příkazem |
+ | isSelected | booleovská hodnota | Určuje, zda je položka menu vybrána nebo zvýrazněna |
+ | onClick | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Draggable
+
+A draggable menu item component designed to be used in a menu or list where items can be dragged, and additional actions can be performed through icon buttons.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------------- | ------------------ | ---------------------------------------------------------------------------- |
+ | Levá ikona | Ikonová komponenta | Volitelná levá ikona zobrazená před textem v položce menu |
+ | akcent | řetězec | Barva akcentu položky menu. Může být `default`, `placeholder`, nebo `danger` |
+ | ikonová tlačítka | pole | Seznam objektů představujících další ikony tlačítek spojené s položkou menu |
+ | isTooltipOpen | booleovská hodnota | Řídí viditelnost tooltipu spojeného s položkou menu |
+ | onClick | funkce | Funkce zpětného volání spuštěná při kliknutí na odkaz |
+ | text | řetězec | Textový obsah položky menu |
+ | isDragDisabled | booleovská hodnota | Určuje, zda je táhnutí zakázáno |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Multi Select
+
+Provides a way to implement multi-select functionality with an associated checkbox.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------------------ | --------------------------------------------------------------------- |
+ | Levá ikona | Ikonová komponenta | Volitelná levá ikona zobrazená před textem v položce menu |
+ | text | řetězec | Textový obsah položky menu |
+ | vybráno | booleovská hodnota | Určuje, zda je položka menu vybrána (zaškrtnuto) |
+ | poZměněVýběru | funkce | Funkce zpětného volání spuštěná při změně stavu zaškrtávacího políčka |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Multi Select Avatar
+
+A multi-select menu item with an avatar, a checkbox for selection, and textual content.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="První možnost"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ------------- | ------------------ | --------------------------------------------------------------------- |
+ | avatar | `ReactNode` | Avatar nebo ikona, která má být zobrazena na levé straně položky menu |
+ | text | řetězec | Textový obsah položky menu |
+ | vybráno | booleovská hodnota | Určuje, zda je položka menu vybrána (zaškrtnuto) |
+ | poZměněVýběru | funkce | Funkce zpětného volání spuštěná při změně stavu zaškrtávacího políčka |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Navigovat
+
+Položka menu s volitelnou levou ikonou, textovým obsahem a ikonou šipky vpravo.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Přejít na jinou stránku");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | --------------- | ------------------------------------------------------------ |
+ | LeváIkona | KomponentaIkony | Volitelná levá ikona zobrazená před textem v položce menu |
+ | text | řetězec | Textový obsah položky menu |
+ | poKliknutí | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Vybrat
+
+Výběrová položka menu, s volitelným levým obsahem (ikonou a textem) a indikátorem (ikonou zaškrtnutí) pro vybraný stav.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Položka menu byla vybrána");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------------------ | ------------------------------------------------------------ |
+ | LeváIkona | KomponentaIkony | Volitelná levá ikona zobrazená před textem v položce menu |
+ | text | řetězec | Textový obsah položky menu |
+ | vybráno | booleovská hodnota | Určuje, zda je položka menu vybrána (zaškrtnuto) |
+ | neaktivní | booleovská hodnota | Určuje, zda je položka menu neaktivní |
+ | zvýrazněno | booleovská hodnota | Určuje, zda je položka menu aktuálně přejeta kurzorem |
+ | poKliknutí | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Vybrat Avatar
+
+Výběrová položka menu s avatarem, s volitelným levým obsahem (avatar a text) a indikátorem (ikonou zaškrtnutí) pro vybraný stav.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Položka menu vybrána");
+ };
+
+ return (
+ }
+ text="První možnost"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------------------ | ----------------------------------------------------------------- |
+ | avatar | `ReactNode` | Avatar nebo ikona, která se zobrazuje na levé straně položky menu |
+ | text | řetězec | Textový obsah položky menu |
+ | vybráno | booleovská hodnota | Označuje, zda je položka menu vybrána (zaškrtnuta) |
+ | neaktivní | booleovská hodnota | Označuje, zda je položka menu deaktivována |
+ | zvýrazněno | booleovská hodnota | Označuje, zda je položka menu aktuálně zvýrazněna |
+ | testId | řetězec | Atribut data-testid pro testovací účely |
+ | onClick | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Vybrat barvu
+
+Volitelná položka menu s ukázkou barvy pro situace, kdy chcete, aby uživatelé zvolili barvu z menu.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Položka menu vybrána");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | barva | řetězec | The theme color to be displayed as a sample in the menu item. Možnosti zahrnují: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow` a `gray` |
+ | vybráno | booleovská hodnota | Označuje, zda je položka menu vybrána (zaškrtnuta) |
+ | neaktivní | booleovská hodnota | Označuje, zda je položka menu deaktivována |
+ | zvýrazněno | booleovská hodnota | Označuje, zda je položka menu aktuálně zvýrazněna |
+ | varianta | řetězec | Varianta ukázky barvy. Může být buďto `default` nebo `pipeline` |
+ | onClick | funkce | Funkce zpětného volání spuštěná při kliknutí na položku menu |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
+
+### Přepnout
+
+Položka menu s přidruženým přepínačem k umožnění nebo zakázání určité funkce
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------------- | ------------------ | ------------------------------------------------------------ |
+ | Levá ikona | Ikonová komponenta | Volitelná levá ikona zobrazená před textem v položce menu |
+ | text | řetězec | Textový obsah položky menu |
+ | přepnuto | booleovská hodnota | Označuje, zda je přepínač v "zapnutém" nebo "vypnutém" stavu |
+ | naZměnuPřepnutí | funkce | Funkce zpětného volání spuštěná při změně stavu přepínače |
+ | velikostPřepnutí | řetězec | Velikost přepínače. Může být buď \ |
+ | className | řetězec | Volitelný název pro dodatečné stylování |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx
new file mode 100644
index 0000000000..227ff3c15a
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx
@@ -0,0 +1,34 @@
+---
+title: Step Bar
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Zobrazuje postup přes sekvenci číslovaných kroků zvýrazněním aktuálního kroku. Vykreslí kontejner s kroky, z nichž každý je reprezentován komponentou `Step`.
+
+
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+
+ export const MyComponent = () => {
+ return (
+
+ Krok 1
+ Krok 2
+ Krok 3
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis |
+ | ---------- | ----- | ------------------------------------------------------------------------------------ |
+ | activeStep | číslo | Index aktuálně aktivního kroku. To určuje, který krok by měl být vizuálně zvýrazněn. |
+
+
diff --git a/packages/twenty-docs/l/cs/twenty-ui/progress-bar.mdx b/packages/twenty-docs/l/cs/twenty-ui/progress-bar.mdx
new file mode 100644
index 0000000000..675883f4be
--- /dev/null
+++ b/packages/twenty-docs/l/cs/twenty-ui/progress-bar.mdx
@@ -0,0 +1,66 @@
+---
+title: Zpětná vazba
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+Udává průběh nebo odpočítávání a pohybuje se zprava doleva.
+
+
+
+ ```jsx
+ import { ProgressBar } from "twenty-ui/feedback";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | ------------------ | ------------------------------------------------------------------------------------ | --------- |
+ | trvání | číslo | The total duration of the progress bar animation in milliseconds | 3 |
+ | zpoždění | číslo | Zpoždění spuštění animace indikačního pruhu v milisekundách | 0 |
+ | easing | textový řetězec | Easing function for the progress bar animation | easeInOut |
+ | barHeight | číslo | Výška pruhu v pixelech | 24 |
+ | barvaPruhu | textový řetězec | Barva pruhu | gray80 |
+ | autoStart | booleovská hodnota | Pokud `true`, animace indikačního pruhu se automaticky spustí při načtení komponenty | `pravda` |
+
+
+
+## Kruhový indikátor průběhu
+
+Udává průběh úkolu, často používané na načítacích obrazovkách nebo v oblastech, kde chcete uživateli sdělovat probíhající procesy.
+
+
+
+ ```jsx
+ import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Vlastnosti | Typ | Popis | Výchozí |
+ | ---------- | --------------- | ------------------------------------ | ------------- |
+ | velikost | číslo | Velikost kruhového indikačního pruhu | 50 |
+ | barWidth | číslo | Šířka čáry indikačního pruhu | 5 |
+ | barvaPruhu | textový řetězec | Barva indikačního pruhu | současnáBarva |
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..f1d6cb80cf
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Přehled
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Popis |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/cs/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/cs/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..9ccc96e47d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Přehled
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Popis |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/cs/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..7ec06a0c47
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: Oprávnění a řízení přístupu
+description: Ovládejte, k čemu mohou agenti AI ve vašem pracovním prostoru přistupovat a co mohou měnit.
+---
+
+## Přehled
+
+Agenti AI respektují vaši stávající strukturu oprávnění. To je obzvlášť důležité pro týmy, které chtějí přesně řídit, k čemu mohou automatizované procesy AI v jejich pracovním prostoru přistupovat nebo co mohou upravovat.
+
+## Přiřadit roli agentovi AI
+
+1. Přejděte na **Nastavení → Role**
+2. Klikněte na roli, kterou chcete přiřadit
+3. Otevřete záložku **Přiřazení**
+4. V části **Agenti AI** klikněte na **+ Přiřadit agentovi AI**
+5. Vyberte agenta AI ze seznamu
+6. Potvrďte přiřazení
+
+## Proč přiřazovat role agentům AI?
+
+| Výhoda | Popis |
+| ------------------- | --------------------------------------------------------------- |
+| **Bezpečnost** | Omezte, k jakým datům mohou agenti AI přistupovat nebo je měnit |
+| **Soulad** | Zajistěte, aby AI zpracovávala pouze data, která potřebuje |
+| **Kontrola** | Zabraňte nechtěným akcím automatizací AI |
+| **Auditovatelnost** | Sledujte, které akce provedl který agent |
+
+
+ U agentů AI běžících v pracovních postupech přiřazení role zajistí, že agent nebude mít přístup k datům mimo zamýšlený rozsah ani je nebude moci upravovat — i když má pracovní postup širší oprávnění.
+
+
+## Související
+
+* [Oprávnění](/l/cs/user-guide/permissions-access/capabilities/permissions) — podrobné informace o vytváření a správě rolí
+* [Agenti AI](/l/cs/user-guide/ai/capabilities/ai-agents) — možnosti AI v pracovních postupech
diff --git a/packages/twenty-docs/l/cs/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/cs/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/ai/overview.mdx b/packages/twenty-docs/l/cs/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..1111dcd2e8
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: AI
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## What's Coming
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Případy použití:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Přejděte na **Nastavení → Role**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Stay Updated
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/cs/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/cs/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..950d319c37
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: Cenové plány
+description: Zjistěte více o cenových plánech Twenty a jak mezi nimi přepínat.
+---
+
+## Přehled
+
+Twenty nabízí flexibilní ceny pro týmy všech velikostí, ať už dáváte přednost hostování v cloudu, nebo self‑hostingu.
+
+## Cloudové plány
+
+### Pro (Cloud)
+
+Pro týmy připravené škálovat:
+
+* Všechny základní funkce CRM
+* Synchronizace e-mailů a kalendáře
+* Pracovní postupy a automatizace
+* Standardní podpora
+
+
+ Prémiové funkce (SSO a oprávnění na úrovni řádků) nejsou součástí plánu Pro.
+
+
+### Organizace (Cloud)
+
+Pro větší týmy s pokročilými potřebami:
+
+* Vše z plánu Pro
+* **Prémiové funkce**: integrace SSO a oprávnění na úrovni řádků
+* Prioritní podpora
+
+## Plány pro self‑hosting
+
+### Zdarma (self‑hosting)
+
+Hostujte Twenty na vlastní infrastruktuře bez poplatků:
+
+* Součástí jsou všechny funkce plánu Pro
+* Podpora komunity přes Discord
+* Plná kontrola nad vašimi daty
+
+### Organizace (self‑hosting)
+
+Pro týmy, které při self‑hostingu potřebují prémiové funkce:
+
+* Všechny funkce plánu Pro
+* **Prémiové funkce**: integrace SSO a oprávnění na úrovni řádků
+* Podpora týmu Twenty
+* Není vyžadováno zveřejnit vlastní kód jako open‑source před distribucí
+
+## Prémiové funkce
+
+Prémiové funkce jsou dostupné pouze v plánech Organizace (Cloud nebo self‑hosting):
+
+* **Integrace SSO**: jednotné přihlášení s vaším poskytovatelem identity
+* **Oprávnění na úrovni řádků**: jemně odstupňované řízení přístupu na úrovni záznamu
+
+## Přepínání plánů
+
+### Přejít na Organizaci
+
+1. Přejděte na **Nastavení → Fakturace**
+2. Klikněte na **Přepnout na Organizaci**
+3. Potvrďte upgrade
+
+### Přejít na Pro
+
+Chcete-li přejít na nižší plán, kontaktujte podporu.
+
+### Přepnout na roční fakturaci
+
+1. Přejděte na **Nastavení → Fakturace**
+2. Klikněte na **Přepnout na roční**
+3. Ušetřete s roční fakturací
+
+### Přepnout na měsíční fakturaci
+
+Chcete-li přepnout zpět na měsíční fakturaci, kontaktujte podporu.
diff --git a/packages/twenty-docs/l/cs/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/cs/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..e7f62bdc6d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Kredity pracovních postupů
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Přehled
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Měsíční | 5 million/month |
+| Roční | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Využití kreditu |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI prompts** (coming soon) | Variable based on usage |
+
+Kredity jsou odečítány v reálném čase, když se pracovní postupy provádějí.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Přejděte na **Nastavení → Fakturace**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Nákup dalších kreditů
+
+Need more credits?
+
+1. Přejděte na **Nastavení → Fakturace**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/cs/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/cs/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..9a437e109f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Ceny
+
+
+
+ Ano, můžete používat Twenty zdarma při vlastním hostingu. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Podpora je dostupná prostřednictvím naší komunity na Discordu.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ We do not offer free seats. Cena je stanovena za uživatele a každý uživatel potřebuje licenci pro přístup k Twenty.
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`. Pak klikněte na `Přepnout na Organizaci`.
+
+
+
+ Obraťte se přímo na náš tým prostřednictvím Podpory, momentálně není snadné toto provést pomocí uživatelského rozhraní.
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`. Then click on `Switch to Yearly`.
+
+
+
+ Obraťte se přímo na náš tým prostřednictvím Podpory, momentálně není snadné toto provést pomocí uživatelského rozhraní.
+
+
+
+ To najdete v `Nastavení → Fakturace`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Každá akce v pracovním postupu spotřebovává kredity podle své složitosti:
+
+ * **Základní interní operace** (jako je vyhledávání, aktualizace, vytváření záznamů) spotřebovávají velmi málo kreditů
+ * **Složitější operace** jako uzly pro kód a požadavky na externí služby spotřebovávají více kreditů
+ * **AI návrhy** (brzy k dispozici) také budou spotřebovávat více kreditů na základě použití.
+
+ Kredity jsou odečítány v reálném čase, když se pracovní postupy provádějí. Svou spotřebu můžete sledovat v **Nastavení → Fakturace**, abyste mohli sledovat spotřebu a zbývající kredity.
+
+
+
+ Další kredity si můžete zakoupit v `Nastavení → Fakturace`.
+
+
+
+## Fakturace
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`.
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`. Pak klikněte na `Zobrazit podrobnosti fakturace`. Tam budete moct přidat novou platební metodu.
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`. Pak klikněte na `Zobrazit podrobnosti fakturace`. Tam budete moct upravit fakturační informace.
+
+
+
+ To můžete udělat v `Nastavení → Fakturace`. Pak klikněte na `Zobrazit podrobnosti fakturace`. Všechny své faktury uvidíte v dolní části obrazovky.
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx b/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..dd2219f27e
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Fakturace
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Plán | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/cs/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..7219da8969
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Kalendář
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/cs/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Záložka kalendáře
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Osoby**: Prohlédněte si všechny naplánované schůzky s konkrétním kontaktem
+* **Společnosti**: Zobrazte si všechny schůzky týkající se společnosti a jejích zaměstnanců
+* **Příležitosti**: Přístup k historii schůzek souvisejících se společností spojenou s touto příležitostí
+
+### Prohlížení historie schůzek
+
+1. **Navigace na záznam**: Přejděte na jakýkoliv záznam Osoby, Společnosti, nebo Příležitosti
+2. **Výběr záložky Kalendáře**: Klikněte na záložku `Kalendář` vedle záložky Emailů
+3. **Procházení historie schůzek**: Zobrazte si všechny naplánované schůzky a jejich detaily
+4. **Přístup k detailům schůzek**: Zobrazte si účastníky schůzek, časy a související informace
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Co se synchronizuje
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Co se nesynchronizuje
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..887e750abe
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Poznámka**: Chcete-li připojit své emailové účty a konfigurovat nastavení synchronizace, navštivte [Nastavení Emailu a Kalendáře](/l/cs/user-guide/calendar-emails/overview).
+
+## Jak funguje integrace emailu
+
+Twenty automaticky propojuje emaily z vašich připojených schránek s příslušnými CRM záznamy, udržuje historii komunikace na jednom místě.
+
+### Objects Where Emails Can Be Found
+
+Emailové konverzace se zobrazují ve třech hlavních objektech:
+
+* **Osoby**: Zobrazte si všechny emaily vyměněné s konkrétním kontaktem
+* **Společnosti**: Prohlédněte si všechny emaily týkající se společnosti a jejích zaměstnanců
+* **Příležitosti**: Přístup k emailovým vláknům souvisejícím se společností spojenou s touto příležitostí. Emailová vlákna od jednotlivých osob k příležitosti nejsou zatím zobrazena.
+
+### Prohlížení emailových vláken
+
+1. **Navigace na záznam**: Přejděte na jakýkoliv záznam Osoby, Společnosti, nebo Příležitosti
+2. **Výběr záložky Emailů**: Klikněte na záložku `Emaily` pro zobrazení synchronizovaných emailů
+3. **Otevření emailového vlákna**: Klikněte na jakýkoliv email, abyste otevřeli a přečetli si celou konverzaci
+4. **Procházení historie**: Projděte si kompletní emailovou historii s tímto kontaktem
+
+
+
+## Co uvidíte
+
+### Zobrazení emailového vlákna
+
+Když otevřete emailové vlákno, můžete:
+
+* **Read Full Conversations**: See the complete email exchange
+* **Zobrazit účastníky**: Zobrazit všechny osoby zapojené do emailového vlákna
+* **Check Timestamps**: Know exactly when each email was sent
+* **Přístup k souvislostem**: Porozumět kompletní historii komunikace
+
+### Email Visibility
+
+V závislosti na nastavení vaší schránky, můžete vidět:
+
+* **Plný obsah**: Kompletní text emailu a detaily
+* **Předmět + Metadata**: Předmět emailu, odesílatel, příjemce a časové razítko
+* **Pouze Metadata**: Základní informace bez obsahu emailu
+
+## Chování synchronizace emailu
+
+### Co se synchronizuje
+
+* **Externí emaily**: Všechny emaily s kontakty mimo vaši organizaci
+* **Automatické propojení**: Emailové zprávy se připojí k existujícím záznamům Osoby a Společnosti
+* **Více adres**: Emailové zprávy z jakékoliv adresy se propojují se stejným záznamem kontaktu
+* **Aktualizace**: Nové emaily se objeví do 5 minut
+
+### Co se nesynchronizuje
+
+* **Interní emaily**: Emailové zprávy mezi kolegy (stejná doména) zůstávají soukromé
+* **Skupinové emaily**: Distribuční seznamy a skupinové emailové zprávy jsou vyloučeny
+* **Vyloučené složky**: Složky, které jste se rozhodli nesynchronizovat (nastavení pod Nastavení → Účty → Email)
+
+### Selektivní synchronizace složek (Laboratorní funkce)
+
+Ovládejte, které emailové složky se synchronizují s Twenty:
+
+1. Povolte `Složka zpráv` v Nastavení → Načítání → Lab
+2. Konfigurujte složky pod Nastavení → Účty → Email
+3. Vyberte konkrétní složky k zahrnutí nebo vyloučení (příchozí, odeslané, archiv, vlastní složky)
+
+## Řešení problémů s synchronizací emailu
+
+### Běžné problémy se synchronizací
+
+* **Zpoždění synchronizace**: Emailové zprávy se zobrazují do 5 minut, ale původní import může trvat déle
+* **Chybějící emaily**: Zkontrolujte, zda:
+ * Složky jsou vyloučeny v nastavení Složky zpráv
+ * Automatické vytváření kontaktů je deaktivováno (emaily potřebují existující záznamy Twenty)
+ * Email je od kolegů (stejná doména) nebo skupinových seznamů
+ * Schránka stále dokončuje původní synchronizaci
+
+### Omezení emailů
+
+* **Systémové složky**: Některé emailové složky nemusí být k dispozici pro synchronizaci
+* **Aliasy**: Pouze skutečné schránky mohou být připojeny (ne aliasy emailů)
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..a4cc8ad1a8
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/cs/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..ddc17017e4
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Objekt | What You See |
+| ---------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Společnosti** | All emails with anyone from that company (based on email domain) |
+| **Příležitosti** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Vlastní objekty
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..36f24d1eae
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Přehled
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Přejděte na **Nastavení → Účty**
+2. Klikněte na **Přidat účet**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..02fd3dc084
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: Omezte import emailů
+description: Ovládejte, které emaily se importují do Twenty.
+---
+
+## Přehled
+
+Ve výchozím nastavení Twenty synchronizuje všechny externí emaily z vaší připojené poštovní schránky. Můžete omezit, co se importuje, pomocí **výběru složek** a **nastavení viditelnosti**.
+
+## Metoda 1: Výběr složek (doporučeno)
+
+Ovládejte, které emailové složky se synchronizují s Twenty:
+
+1. Přejděte do **Nastavení → Vydání → Lab**
+2. Povolte **Složku zpráv**
+3. Vraťte se na **Nastavení → Účty**
+4. Vyberte svůj připojený emailový účet
+5. Vyberte, které složky chcete synchronizovat:
+
+| Složka | Popis |
+| ------------------ | --------------------------------------- |
+| **Doručená pošta** | Hlavní příchozí emaily |
+| **Odeslaná pošta** | Odchozí emaily, které jste odeslali |
+| **Archiv** | Archivované zprávy |
+| **Vlastní složky** | Jakékoli konkrétní složky, které chcete |
+
+6. Vylučte složky, které nechcete synchronizovat (Spam, Koš, osobní složky)
+
+Toto vám dává přesnou kontrolu nad tím, které emaily se objeví ve vašem CRM bez synchronizace všeho.
+
+## Metoda 2: Nastavení automatického vytváření kontaktů
+
+Ovládejte, kdy se z emailů vytvářejí kontakty:
+
+1. Přejděte na **Nastavení → Účty**
+2. Vyberte svou připojenou poštovní schránku
+3. Vyberte možnost:
+ * **Deaktivováno**: Kontakty se nevytvářejí, ale emaily se stále synchronizují s existujícími kontakty
+ * **Odeslané a přijaté**: Vytvářejte kontakty ze všech externích emailů
+ * **Pouze odeslané**: Vytvářejte kontakty pouze z emailů, které odesíláte
+
+## Co je vždy vyloučeno
+
+Tyto emaily se nikdy nesynchronizují bez ohledu na nastavení:
+
+* **Interní emaily**: Zprávy mezi kolegy (stejná doména)
+* **Skupinové emaily**: Distribuční seznamy a skupinové zprávy
+* **Spam/Koš**: Systémové složky jsou obvykle vyloučeny
+
+## Důležité upozornění
+
+Neposkytujeme CC emailovou adresu pro selektivní synchronizaci. Použijte výše uvedenou funkci výběru složek, abyste dosáhli stejné úrovně kontroly.
diff --git a/packages/twenty-docs/l/cs/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/cs/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..f9a704f7a2
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Možnosti Připojení
+
+### Účet Google (Gmail & Google Kalendář)
+
+1. Přejděte na **Nastavení → Účty**
+2. Klikněte na **Přidat účet**
+3. Select **Continue with Google**
+4. Autorizujte Twenty pro přístup k vašemu Gmailu a Google Kalendáři
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Your emails and calendar events will start syncing automatically
+
+### Účet Microsoft (Outlook & Microsoft Kalendář)
+
+1. Přejděte na **Nastavení → Účty**
+2. Klikněte na **Přidat účet**
+3. Select **Continue with Microsoft**
+4. Autorizujte Twenty pro přístup k vašemu Outlooku a Microsoft Kalendáři
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Your emails and calendar events will start syncing automatically
+
+### Nastavení SMTP/CalDAV (Další Poskytovatelé)
+
+Pro další poskytovatele emailu a kalendáře:
+
+1. Přejděte na **Nastavení → Vydání → Laboratoř** pro povolení funkce
+2. Vraťte se na **Nastavení → Účty**
+3. Nakonfigurujte nastavení SMTP pro email
+4. Nakonfigurujte nastavení CalDAV pro kalendář
+5. Otestujte připojení
+
+### Více Poštovních Schránek
+
+* **Neomezené Účty**: Připojte více emailových účtů na uživatele
+* **Správa Účtů**: Přepínejte mezi různými poštovními schránkami
+* **Nastavení Synchronizace**: Konfigurujte různé nastavení pro každou schránku
+
+
+ Pouze skutečné schránky mohou být připojeny (např. podpora@domena.com s vlastní schránkou). Emailové aliasy, které přeposílají do jiné schránky, nemohou být připojeny do Twenty.
+
+
+## Konfigurace Emailu
+
+### Viditelnost Zpráv
+
+Vyberte různé úrovně viditelnosti pro vaše emaily:
+
+* **Pouze Metadata**: Sdílejte pouze základní informace (odesílatel, příjemce, datum, čas)
+* **Předmět a Metadata**: Sdílejte řádek předmětu spolu s metadaty
+* **Veškerý Obsah Emailu**: Sdílejte celý obsah emailu včetně příloh
+
+### Automatické Vytváření Kontaktů
+
+* **Deaktivováno**: Žádné automatické vytváření kontaktů
+* **Pro zprávy odeslané a přijaté**: Vytvářejte kontakty pro všechny externí emailové interakce
+* **Pouze pro odeslané zprávy**: Vytvářejte kontakty pouze pro emaily, které posíláte
+* **Poznámka**: Interní emaily (stejná doména) nejsou synchronizovány kvůli zachování soukromí
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Řízení, které emaily se synchronizují s Výběrem Složek Zpráv (Laboratorní Funkce)
+
+Ovládejte, které emailové složky se synchronizují s Twenty:
+
+1. Přejděte na **Nastavení → Vydání → Laboratoř** a povolte **Složku Zpráv**
+2. Vraťte se na **Nastavení → Účty** a vyberte svůj propojený emailový účet
+3. Vyberte, které složky chcete synchronizovat:
+ * **Doručená Pošta**: Hlavní příchozí emaily
+ * **Odeslané**: Odchozí emaily, které jste odeslali
+ * **Vlastní Složky**: Jakékoli specifické složky, které chcete zahrnout
+ * **Vyloučení Složek**: Přeskočte složky jako Spam, Koš nebo osobní složky
+
+Toto vám dává přesnou kontrolu nad tím, které emaily se objeví ve vašem CRM bez synchronizace všeho.
+
+**Co se Synchronizuje:**
+
+* **Externí Emaily**: Všechny emaily s externími kontakty z vybraných složek
+* **Interní Emaily**: Není synchronizováno (emaily ve stejné doméně zůstávají soukromé)
+* **Přílohy**: Přichází v H1 2026
+
+**Poznámka**: Neposkytujeme CC emailovou adresu pro selektivní synchronizaci. Místo toho použijte výše uvedenou funkci Složka Zpráv pro dosažení stejné úrovně kontroly nad tím, které emaily se synchronizují s Twenty.
+
+## Konfigurace Kalendáře
+
+### Viditelnost Událostí
+
+Vyberte, co bude viditelné pro ostatní uživatele ve vašem pracovním prostoru:
+
+* **Vše**: Veškeré podrobnosti události budou sdíleny s vaším týmem
+* **Metadata**: Sdílet se bude pouze datum a účastníci s vaším týmem
+
+### Automatické Vytváření Kontaktů pro Schůzky
+
+* **Ano**: Automaticky vytvářejte kontakty pro účastníky schůzek, kteří nejsou ve vašem CRM
+* **Ne**: Spojujte schůzky jen s již existujícími kontakty
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Řízení, které události se synchronizují
+
+* **Import Schůzek**: Automaticky importujte události kalendáře
+* **Propojování Kontaktů**: Spojujte schůzky s Lidmi a Záznamy Společností
+
+**Co se Synchronizuje:**
+
+* **Schůzky**: Události kalendáře s externími účastníky
+* **Propojování Kontaktů**: Události automaticky propojené s CRM záznamy
+* **Události Týmu**: Sdílená viditelnost kalendáře
+
+## Frekvence Synchronizace
+
+**Aktualizace každých 5 minut**: Data emailu a kalendáře se automaticky synchronizují každých 5 minut po úvodním importu.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Další kroky
+
+* [Mailbox capabilities](/l/cs/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/cs/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..b770342b20
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Panely
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Přehled
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Osvědčené postupy
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Oblíbené
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..c61da650a3
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widgety
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Styling
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..f0f017cb94
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Ještě ne. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/cs/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..e756c969ec
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Panely
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Panely
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Karty
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widgety
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Uložit
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Osvědčené postupy
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Další kroky
+
+* [Widgets and visualizations](/l/cs/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/cs/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..817d3c9f4f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Jak to funguje
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/cs/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/cs/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..e4b4bd2f6b
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Relační pole
+
+Please see our dedicated article: [Import Relations Between Objects](/l/cs/user-guide/data-migration/capabilities/import-relations)
+
+### Výběrová Pole
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..121d6c0291
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Podporované formáty souborů
+description: Formáty souborů podporované pro import dat v Twenty.
+---
+
+## Podporované formáty
+
+Twenty podporuje pro import tři formáty souborů:
+
+| Formát | Přípona | Poznámky |
+| ------------------ | ------- | ------------------------------ |
+| **CSV** | .csv | Doporučeno, nejkompatibilnější |
+| **Excel** | .xlsx | Moderní formát Excelu |
+| **Excel (starší)** | .xls | Starší formát Excelu |
+
+## Požadavky na soubory
+
+| Požadavek | Hodnota |
+| ----------------- | ------------------------------------------ |
+| **Kódování** | Doporučeno UTF-8 |
+| **Limit záznamů** | 10,000 záznamů na soubor |
+| **Struktura** | První řádek musí obsahovat záhlaví sloupců |
+| **Obsah** | V každém souboru pouze jeden typ objektu |
+
+## Osvědčené postupy pro CSV
+
+* **Oddělovač**: Použijte čárku (`,`) nebo středník (`;`)
+* **Textový kvalifikátor**: Použijte dvojité uvozovky (`\"`) pro text obsahující čárky
+* **Konce řádků**: Windows (CRLF) nebo Unix (LF), obojí je podporováno
+* **Prázdné hodnoty**: Nechte buňky prázdné, nepoužívejte "NULL" ani "N/A"
+
+## Osvědčené postupy pro Excel
+
+Při exportu z Excelu:
+
+* Odstraňte vzorce (exportujte pouze hodnoty)
+* Odstraňte prázdné řádky na konci
+* Zajistěte, aby nebyly sloučené buňky
+* Použijte pouze první list
+
+## Velké datové sady
+
+Pro datové sady větší než 10,000 záznamů:
+
+* Rozdělte na více souborů
+* Nebo použijte [import přes API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api) pro neomezený počet záznamů
+
+Pro velmi rozsáhlé migrace (100,000+ záznamů) je API výrazně rychlejší a spolehlivější než importy CSV.
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..04765a571e
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Přehled
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Příklad**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Objekt | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Společnosti** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Členové pracovního prostoru** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..5fdc297af9
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Přehled
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Objekt | Unique Fields |
+| ------------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Společnosti** | `id`, `domain` |
+| **Vlastní objekty** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Osvědčené postupy
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..640bae19ad
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Přehled
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Případy použití:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/cs/developers/extend/capabilities/apis).
+
+### Oprávnění
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Relační pole
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/cs/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Další kroky
+
+* [How to Update Existing Records](/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/cs/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..e2c80aaa8b
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Přehled
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Chybová zpráva | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Co uvidíte
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Co uvidíte
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### Email
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Doména
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Datum
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Telefon
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Příklad |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Booleovská hodnota
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Měna
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Příklad |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Číslo
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/cs/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Co uvidíte
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Co uvidíte
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/cs/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Co uvidíte
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Vztahy
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Datový model
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/cs/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/cs/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/cs/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..e8a9dd2e5f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Přehled
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Než začnete
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/cs/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Pole | Required? | Formát | Poznámky |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Text | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Číslo | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Chyba | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Ano! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Řešení potíží
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/cs/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..28de4f6180
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Přehled
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Než začnete
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Pole | Required? | Formát | Poznámky |
+| ----------------- | ----------- | ----------------- | ------------------------- |
+| **Email** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Text | |
+| **Last Name** | Recommended | Text | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Text | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Příklad |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Formát | Příklad |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Poznámky |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| Email | **Email** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Telefon | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Chyba | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Ano! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Řešení potíží
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/cs/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..5de5bb8076
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Přehled
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | Hodnota |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Dokumentace |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/cs/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/cs/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Osvědčené postupy
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/cs/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Profesionální služby
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/cs/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Ano! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/cs/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..c67f6a782f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Přehled
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Vztah | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Společnost | Osoby |
+| Companies → Opportunities | Společnost | Příležitosti |
+| People → Tasks | Osoba | Úkoly |
+| People → Notes | Osoba | Poznámky |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| ------------------------------- | --------------------------------------------------------------- |
+| **Společnosti** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Členové pracovního prostoru** | `id` (UUID), `email` (not name) |
+| **Vlastní objekty** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Identifikátor | Formát | Příklad |
+| ------------- | -------------- | -------------------------------------- |
+| Doména | URL format | `https://acme.com` |
+| Email | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Ano! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Můžete buď:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Řešení potíží
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/cs/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..bdda2abf99
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Migrace z jiných CRM
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Přehled
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Přejděte na **Nastavení → Členové**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Vlastní objekty
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ----------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **Email** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Znovuvytvoření pracovních postupů
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/cs/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Běžné problémy a řešení
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Post-migrační kontrolní seznam
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Konfigurace
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Potřebujete pomoc?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/cs/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..1675ee6d08
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Migrace z vlastních serverů do cloudu
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Přehled
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Společnosti
+2. Osoby
+3. Příležitosti
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Příklad:**
+
+Před:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+Po:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Zobrazení
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Pracovní postupy
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Integrace
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Post-migrační kontrolní seznam
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Potřebujete pomoc?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/cs/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..4c088cb542
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: Připravte své soubory CSV
+description: Kompletní návod krok za krokem, jak naformátovat data pro import do Twenty.
+---
+
+## Přehled
+
+Tento průvodce vás provede přípravou vašeho souboru CSV pro úspěšný import. Postupujte podle těchto kroků, abyste předešli chybám.
+
+## Krok 1: Zkontrolujte požadavky na soubor
+
+Než začnete, ujistěte se, že váš soubor splňuje tyto požadavky:
+
+| Požadavek | Podrobnosti |
+| ------------------- | --------------------------- |
+| **Formát** | CSV, XLSX nebo XLS |
+| **Limit velikosti** | 10 000 záznamů na soubor |
+| **Kódování** | Doporučeno: UTF-8 |
+| **Struktura** | Jeden typ objektu na soubor |
+
+U datasetů větších než 10 000 záznamů je rozdělte do více souborů nebo použijte [import přes API](/l/cs/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Krok 2: Stáhněte si ukázkový soubor
+
+**Toto je nejdůležitější krok.** Ukázkový soubor ukazuje přesné názvy sloupců a formát, který Twenty očekává.
+
+1. Přejděte do zobrazení objektu (Osoby, Společnosti atd.)
+2. Klikněte na **⋮** → **Importovat záznamy**
+3. Klikněte na **Stáhnout ukázkový soubor**
+4. Tento soubor použijte jako svou šablonu
+
+**Profesionální tip:** Místo toho exportujte několik existujících záznamů. Tím získáte reálné příklady, jak mají být data naformátována, a názvy sloupců se během importu namapují automaticky.
+
+## Krok 3: Odstraňte duplicitní hodnoty
+
+Twenty vynucuje jedinečnost u některých polí. Duplicity způsobí chyby při importu.
+
+| Objekt | Jedinečná pole |
+| ------------------- | ------------------------------------------------------------ |
+| **Osoby** | `id`, `email` |
+| **Společnosti** | `id`, `domain` |
+| **Vlastní objekty** | `id`, plus jakékoli pole, které jste označili jako jedinečné |
+
+**Před importem:**
+
+1. Seřaďte tabulku podle jedinečného pole (e‑mailu nebo domény)
+2. Odstraňte nebo sloučte duplicitní řádky
+3. Zkontrolujte duplicity, které už v Twenty existují
+
+**Dočasně smazané záznamy se započítávají do jedinečnosti.** Záznamy v Command Menu → See deleted records způsobí chyby kvůli duplicitám. Trvale je smažte, nebo je obnovte a aktualizujte.
+
+## Krok 4: Správně naformátujte každý typ pole
+
+Různé typy polí vyžadují specifické formáty. Zde je úplný přehled:
+
+### Textová pole
+
+* Není vyžadováno žádné speciální formátování
+* Počáteční a koncové mezery jsou automaticky oříznuty
+
+### E‑mailová pole
+
+* Musí být ve validním formátu e‑mailu: `name@domain.com`
+* Musí být jedinečné (žádné duplicity v souboru ani v Twenty)
+* Pro další e‑maily použijte tento formát ve sloupci **E‑maily / Další e‑maily**:
+
+```
+[\"jane@twenty.com\",\"jane.doe@twenty.com\"]
+```
+
+### Doménová pole
+
+* **Doporučený formát**: `https://domain.com`
+* Odpovídá formátu používanému synchronizací schránky/kalendáře (předchází duplicitám)
+* Vyplňte oba sloupce:
+ * **Doména / Štítek domény**: `domain.com`
+ * **Doména / URL domény**: `https://domain.com`
+* Musí být jedinečné v rámci vašeho souboru i v Twenty
+
+### Telefonní pole
+
+Telefon je **vnořené pole**, které vyžaduje více sloupců:
+
+| Sloupec | Příklad |
+| ------------------------------------------------------ | ------------ |
+| **Telefony / Hlavní telefonní číslo** | `4159095555` |
+| **Telefony / Kód země hlavního telefonu** | `US` |
+| **Telefony / Mezinárodní předvolba hlavního telefonu** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Příklad |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Výběrová Pole
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Další kroky
+
+Your file is ready! Now:
+
+* [Import Companies](/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..30eb24272f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Přehled
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Případy použití:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Jak to funguje
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Objekt | Recommended | Alternative | Poznámky |
+| ------------------- | ---------------- | ----------- | ---------------------------- |
+| **People** | `email` | `id` | Email is human-readable |
+| **Společnosti** | `doména` | `id` | Domain is human-readable |
+| **Vlastní objekty** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Výsledek |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Výsledek | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Ano! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Osvědčené postupy
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Řešení potíží
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/cs/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/cs/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/cs/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..e341f11fc3
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: Migrace dat
+description: Importujte a exportujte svá data CRM pomocí souborů CSV nebo rozhraní API.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Metody importu
+
+Twenty podporuje dvě hlavní metody pro import dat:
+
+| Metoda | Vhodné pro | Limit objemu |
+| ------------------- | ------------------------------------------ | ------------------------------- |
+| **Import CSV** | Standardní migrace, pravidelné aktualizace | 10 000 záznamů v jednom souboru |
+| **Import přes API** | Migrace ve velkém měřítku, automatizace | Bez omezení |
+
+U velmi velkých datových sad (statisíce záznamů) použijte rozhraní API. Naši [implementační partneři](/l/cs/user-guide/getting-started/capabilities/implementation-services) mohou v případě potřeby pomoci se spuštěním těchto skriptů.
+
+## Základy importu CSV
+
+Můžete importovat data pro libovolný objekt pomocí souborů CSV, XLSX nebo XLS. Každý soubor by měl obsahovat **pouze jeden typ objektu** (např. pouze záznamy Osob).
+
+**Pole musí existovat před importem.** Nahrání souboru CSV vytvoří záznamy, ale nevytvoří pole. Pokud potřebujete vlastní pole, nejprve je vytvořte v **Nastavení → Datový model**.
+
+### Postup
+
+1. Přejděte k objektu, do kterého chcete importovat data
+2. Klikněte na ikonu **⋮** vpravo nahoře (to je Nabídka příkazů) a klikněte na **Importovat záznamy**
+3. Stáhněte si šablonový soubor, abyste zajistili, že vaše data mají očekávaný formát
+4. Nahrajte naformátovaný soubor CSV
+5. Přiřaďte sloupce k polím Twenty
+6. Zkontrolujte chyby (zvýrazněné žlutě) a opravte je, přímo úpravou v uživatelském rozhraní
+7. Potvrďte import
+
+### Import relací mezi objekty
+
+Relace mezi objekty můžete importovat pomocí funkce importu CSV. Na související objekt musíte odkazovat pomocí jedinečného pole z tohoto objektu: `id`, `email` pro Osoby a členy pracovního prostoru, `domain` pro společnosti, případně jakékoli jiné pole nastavené jako jedinečné v datovém modelu pro jakýkoli jiný objekt.
+
+**Smazané záznamy se započítávají do jedinečnosti.** Dočasně smazané záznamy (viditelné v Nabídka příkazů → Zobrazit smazané záznamy) se zahrnují do kontrol jedinečnosti. Pokud importujete záznam se stejnou jedinečnou hodnotou jako má smazaný záznam, smazaný záznam bude obnoven.
+
+
+ **Pořadí importu je důležité!**
+
+ Při importu souvisejících objektů nahrávejte soubory v tomto pořadí:
+
+ 1. **Společnosti** nejdříve ("jedna" strana vztahů)
+ 2. **Osoby** jako druhé (propojené se společnostmi přes companyId)
+ 3. **Příležitosti** jako třetí (propojené se společnostmi/osobami)
+ 4. **Vlastní objekty** s relacemi nakonec
+
+ Proč? "Jedna" strana vztahu jedna ku mnohým musí existovat dříve, než na ni můžete odkazovat. Například záznam společnosti musí existovat dříve, než importujete osobu s ID této společnosti.
+
+
+Podívejte se prosím na [tento článek](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) s podrobným návodem, jak postupovat.
+
+## Exportovat Data
+
+Exportujte data svého pracovního prostoru pro zálohy, vytváření přehledů nebo migraci.
+
+### Postup
+
+1. Přejděte k objektu, který chcete exportovat
+2. Nastavte zobrazení se sloupci, které potřebujete
+3. Klikněte na **⋮** → **Exportovat zobrazení**
+4. Uložte soubor CSV
+
+**Exportují se pouze viditelné sloupce.** Soubor CSV bude obsahovat jen sloupce zobrazené ve vašem aktuálním zobrazení. Před exportem přidejte nebo skryjte sloupce, abyste určili, která data budou zahrnuta.
+
+**Limity exportu**: až 20 000 záznamů na jeden export.
+
+## Oprávnění
+
+Import a export dat vyžadují konkrétní oprávnění:
+
+* **Import**: Vyžaduje oprávnění "Import CSV"
+* **Export**: Vyžaduje oprávnění "Export CSV"
+
+Pokud tato oprávnění nemáte, kontaktujte správce pracovního prostoru.
+
+## Další kroky
+
+* [Připravte své soubory CSV](/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [Importujte relace mezi objekty](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Import přes API pro velké datové sady](/l/cs/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..5c8f1dbf12
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Pole
+description: Pochopte roli polí a jak je spravovat.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## O polích
+
+Pole jsou jako sloupce v tabulce. Ukládají různé typy dat, jako je text, čísla nebo data. Pole mohou být standardní (vestavěná) nebo vlastní (ty, které vytvoříte).
+
+### Standardní pole
+
+Standardní pole jsou předem vestavěná v systému Twenty, aby pokryla běžné obchodní potřeby.
+
+Například `Křestní jméno` a `Příjmení` jsou standardní pole v objektu `Lidé`. Ukládají textová data pro jednotlivá jména.
+
+Nemůžete smazat standardní pole, ale můžete je deaktivovat, pokud je nepotřebujete.
+
+Můžete také přizpůsobit možnosti standardních polí typu `SELECT`, například možnosti pro `Stage` u příležitostí.
+
+
+
+### Vlastní pole
+
+Vlastní pole lze přidat k jakémukoli objektu. Můžete ukládat text, čísla, data, výběry z rozbalovacího seznamu a další. Použijte vlastní pole ke sledování informací, které jsou specifické pro vaše podnikání.
+
+Například vlastní pole pro SpaceX by mohlo být `Status aktivity rakety`, indikující, zda je raketa funkční.
+
+
+
+## Typy polí
+
+Twenty podporuje různé typy polí:
+
+| Typ | Popis | Příklad |
+| ------------------ | -------------------------------------------------------- | -------------------- |
+| Adresa | Strukturovaná adresa s ulicí, městem, státem, zemí a PSČ | Adresa kanceláře |
+| Pole | Seznam textových hodnot | Štítky |
+| Booleovská hodnota | Zaškrtávací políčko s hodnotami ano/ne | Aktivní |
+| Měna | Peněžní hodnota s kódem měny | Částka obchodu (USD) |
+| Datum | Datumové hodnoty | Datum uzavření |
+| Datum a čas | Datum s časem | Čas schůzky |
+| Doména | Doména webu (používá se pro společnosti) | acme.com |
+| Email | E-mailové adresy (primární + další) | Kontaktní e-mail |
+| JSON | Strukturovaná data ve formátu JSON | Vlastní metadata |
+| Odkazy | URL s popisky (primární + sekundární) | Web, LinkedIn |
+| Dlouhý text | Víceřádkový text | Popis, poznámky |
+| Vícenásobný výběr | Více možností z předdefinovaného seznamu | Štítky, kategorie |
+| Číslo | Číselné hodnoty (celá čísla nebo desetinná čísla) | Množství, skóre |
+| Telefon | Telefonní čísla s kódem země | Pracovní telefon |
+| Hodnocení | Hvězdičkové hodnocení (1-5) | Priorita, skóre |
+| Vztah | Odkazy na záznamy v jiných objektech | Společnost → Lidé |
+| Vybrat | Jedna možnost z předdefinovaného seznamu | Fáze, stav |
+| Text | Jednořádkový text | Jméno, název |
+
+## Vytvořit vlastní pole
+
+Pro přidání vlastního pole k libovolnému objektu postupujte podle těchto kroků:
+
+1. Přejděte na `Nastavení` v levém postranním panelu.
+2. Přejděte na `Datový model`, poté zvolte objekt, který chcete přizpůsobit.
+3. Pokračujte kliknutím na `Přidat pole`.
+4. Vyberte název a typ pole, který vyhovuje vašim požadavkům. Zvažte přidání popisu pole pro lepší pochopení.
+
+Vaše nově vytvořené pole je nyní dostupné mezi poli aplikace. Pro jeho zobrazení na konkrétním pohledu klikněte na nabídku možností, poté zvolte `Pole`.
+
+
+
+**Rychlý způsob:** Klikněte na tlačítko **+** v pravém horním rohu tabulky objektu, poté zvolte `Přizpůsobit pole`. To vás vezme přímo do nastavení Datového modelu.
+
+
+
+## Deaktivovat pole
+
+Můžete deaktivovat pole, aby bylo skryté v aplikaci, aniž byste ztratili data. Představte si to jako skrytí pole místo jeho smazání.
+
+Takto to můžete udělat:
+
+1. Najděte pole, které chcete deaktivovat ve vašem nastavení objektu.
+
+2. Klikněte na tři tečky `⋮` vedle pole pro otevření nabídky.
+
+3. Zvolte `Deaktivovat` z nabídky.
+
+
+
+Co se stane, když deaktivujete pole?
+
+1. **V aplikaci:** Pole zmizí a nemůžete k němu přidat nové hodnoty.
+
+2. **Existující relace:** Pokud se jedná o relační pole, stávající spojení zůstanou, ale nemůžete vytvořit nová.
+
+3. **Přístup k API:** Stále můžete přistupovat k poli a jeho údajům prostřednictvím API.
+
+Můžete znovu aktivovat Standardní a Vlastní pole nebo máte možnost je trvale vymazat.
+
+## Unikátní pole
+
+Udělte poli unikátnost, abyste zajistili, že různé záznamy nemohou mít stejnou hodnotu. Například e-mailové adresy jsou unikátní pro každého jednotlivce.
+
+Pokud narazíte na chybu při nastavování unikátnosti, zkontrolujte duplicitní hodnoty ve svých datech (včetně smazaných záznamů).
+
+## Nejlepší praktiky pro konfiguraci polí
+
+### Nejlepší praktiky pro konfiguraci polí
+
+* **Jednotné a množné názvy musí být odlišné**: Naše GraphQL API potřebuje různá jména pro mutace
+* **Chráněné názvy polí**: některé názvy jsou vyhrazeny pro systémové použití (např. `Type`, `Application`)
+
+### Měnová a Telefonní Pole
+
+* **Výchozí měna**: může být nakonfigurována prostřednictvím datového modelu
+* **Výchozí předvolby zemí**: lze konfigurovat pro telefonní pole prostřednictvím datového modelu
+
+### Výběrová Pole
+
+* **Lze zvolit výchozí možnost** pro každé výběrové pole
+
+### Textová pole záznamů
+
+* **Každý objekt má jedno hlavní zobrazovací pole**: Toto pole se objevuje v levém sloupci a představuje záznam při propojení s jinými objekty. Musí být textové pole. Například, Lidé používají `Jméno` jako hlavní pole, takže když někoho propojujete s firmou, uvidíte jeho jméno ve firmě.
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..f1df669cd7
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Objekty
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standardní objekty
+
+Standardní objekty jsou předdefinované entity ve vašem pracovním prostoru, které vám pomáhají začít. Jsou součástí sdíleného datového modelu přístupného všem uživatelům Twenty. Můžete je používat tak, jak jsou, přizpůsobit je nebo je deaktivovat.
+
+
+
+### Osoby
+
+Objekt `People` ukládá vaše kontakty. Obsahuje kontaktní údaje a historii interakcí, takže vidíte všechny zákaznické interakce na jednom místě.
+
+### Společnost
+
+The `Companies` object stores your business accounts. It includes details like industry, size and location. Společnosti jsou propojené s objekty `People` a `Opportunities`.
+
+### Příležitosti
+
+Objekt `Opportunities` ukládá údaje související s nabídkami. Sleduje průběh potenciálních prodejů, od prospectingu po uzavření, zaznamenává fáze, velikosti nabídek, související účty a očekávané datum uzavření. Můžete si prohlédnout svůj prodejní kanál v rozložení kanban.
+
+### Poznámky
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Úkoly
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Vlastní objekty
+
+Vlastní objekty vám umožňují ukládat informace, které jsou jedinečné pro vaši organizaci a které standardní objekty nezvládnou. For example, if you're SpaceX, you may want to create a custom object for Rockets and Launches.
+
+
+
+### Creating a New Custom Object
+
+Chcete-li vytvořit nový vlastní objekt:
+
+1. Přejděte do Nastavení na postranním panelu vlevo.
+2. Pod pracovní prostorem přejděte na Datový model. Tady budete moci vidět přehled všech vašich stávajících Standardních a Vlastních objektů (jak aktivních, tak neaktivních).
+
+
+
+3. Klikněte na `+ Nový objekt` v horní části. Enter the name (both singular and plural), choose an icon, and add a description for your custom object and hit Save (at the top right). Using Listing as an example of custom object, the singular would be "listing" and the plural would be "listings" along with a description like "Listings that hosts created to showcase their property."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Osvědčené postupy
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..72cd557670
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Relační pole
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Klikněte na **Uložit**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ------------ | ----------- | ------------- |
+| Osoby | Společnosti | Many-to-One |
+| Příležitosti | Společnosti | Many-to-One |
+| Příležitosti | Osoby | Many-to-One |
+
+## Osvědčené postupy
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..74a8255846
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/cs/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Klikněte na **Uložit**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/cs/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/cs/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/cs/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..ea4bc483e2
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/cs/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Klikněte na **Uložit**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/cs/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/cs/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/cs/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/cs/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..2a750d4901
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Než začnete
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/cs/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Klikněte na **Uložit**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/cs/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..b88eed2261
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: Přizpůsobte si svůj datový model
+description: Přehled možností přizpůsobení datového modelu.
+---
+
+Datový model Twenty je plně přizpůsobitelný. Vytvářejte objekty, pole a vztahy podle potřeb vašeho podnikání.
+
+## Rychlé odkazy
+
+| Chci... | Průvodce |
+| ---------------------- | ------------------------------------------------------------------------------------ |
+| Vytvořit nový objekt | [Jak vytvořit vlastní objekty](/l/cs/user-guide/data-model/how-tos/create-custom-objects) |
+| Přidat pole do objektu | [Jak vytvořit vlastní pole](/l/cs/user-guide/data-model/how-tos/create-custom-fields) |
+| Propojit objekty | [Jak vytvořit relační pole](/l/cs/user-guide/data-model/how-tos/create-relation-fields) |
+
+## Další informace
+
+* [Porozumění vašemu datovému modelu](/l/cs/user-guide/data-model/overview) — klíčové pojmy a tipy pro plánování
+* [Objekty](/l/cs/user-guide/data-model/capabilities/objects) — standardní vs. vlastní objekty
+* [Pole](/l/cs/user-guide/data-model/capabilities/fields) — všechny typy polí
+* [Relační pole](/l/cs/user-guide/data-model/capabilities/relation-fields) — propojování objektů
+* [FAQ k datovému modelu](/l/cs/user-guide/data-model/how-tos/data-model-faq) — často kladené otázky
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..75769e6153
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Data Model FAQ
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Správa objektů
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Ještě ne. Pořadí objektů v navigaci je aktuálně pevně nastavené, ale tato funkce je plánována pro budoucí vydání.
+
+
+
+ Všechny aktivní objekty se zobrazují v navigaci. You can deactivate objects you don't need under **Settings → Data Model**.
+
+
+
+## Možnosti polí
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ Naše API GraphQL používá obě formy pro různé operace:
+
+ * `createPerson` (jednotné) pro akce na jednotlivých záznamech
+ * `createPeople` (množné) pro hromadné operace
+
+ To vytváří omezení, když jsou jednotné a množné formy stejné, ale zlepšuje to zkušenost vývojářů.
+
+
+
+ Některé názvy polí, jako `Typ` nebo `Aplikace`, jsou vyhrazeny pro systémové použití. Zvolte alternativní názvy jako `Kategorie` nebo `Klasifikace`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Formula fields are coming in **Q1 2026**. Mezitím můžete použít pracovní postupy pro automatické výpočty a aktualizace hodnot polí.
+
+
+
+ Vnořená pole přijdou v **Q1 2026**. Aktuálně můžete použít pracovní postupy k přenesení hodnot polí z příbuzných objektů. Například k zobrazení odvětví společnosti na záznamu Osoby vytvořte vlastní pole pro Lidi a použijte pracovní postup k synchronizaci hodnoty.
+
+
+
+ Přerovnávání polí bude dostupné s vlastními rozloženími ve **Q4 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## Vztahy
+
+
+
+ Ano! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/cs/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Přístup a oprávnění
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Reach out to your workspace administrator. Přístup k modelu dat je obvykle omezen pouze na správce.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Potřebujete další pomoc?
+
+Check our [Implementation Services](/l/cs/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/cs/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/cs/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..bf304b4a55
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Datový model
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Datový model je struktura, která definuje, jak jsou informace organizovány ve vašem CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Objekty
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Pole
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Název
+* Email
+* Telefon
+* Pracovní pozice
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Záznamy
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Například:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Polí** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Každý podnik funguje jinak. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Tyto jdou nad rámec jednoho pole, protože nesou svá vlastní data a vztahy.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Zeptejte se sami sebe:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Další kroky
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/cs/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/cs/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/cs/user-guide/data-model/how-tos/create-relation-fields)
+
+## Potřebujete pomoc?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/cs/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..5544b38da7
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glosář
+description: Seznamte se se základní terminologií používanou v aplikaci Twenty.
+---
+
+## API
+
+API (rozhraní pro programování aplikací) umožňuje propojení Twenty s dalšími softwarovými systémy a vytváření vlastních integrací.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Nabídka příkazů
+
+Nabídka příkazů je rozhraní pro rychlý přístup (otevírá se `Cmd + K` na Macu a `Ctrl + K` na Windows), které vám umožní provádět akce, vytvářet záznamy a efektivně se pohybovat ve vašem pracovním prostoru.
+
+## Společnost & Lidé
+
+The CRM has two fundamental types of records:
+
+* "Společnost" představuje podnik nebo organizaci.
+* "Lidé" představují vaše aktuální a potenciální zákazníky nebo klienty.
+
+## Vlastní pole
+
+Vlastní pole jsou datová pole, která vytváříte k zachycení informací specifických pro vaše obchodní potřeby a procesy.
+
+## Datový model
+
+Datový model je struktura, která definuje, jak jsou informace v CRM uspořádány, včetně toho, jaké objekty existují, jejich vlastnosti (pole) a jak se navzájem vztahují.
+
+## Oblíbené
+
+Oblíbené jsou záznamy, které jste označili pro rychlý přístup, objevují se na postranní liště pro okamžitou navigaci k důležitým datům.
+
+## Pole
+
+A field refers to a specific area where particular data is stored for an entity.
+
+## Integrace
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Iterátor
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+"Kanban" je vizuální způsob sledování obchodních procesů pomocí karet a sloupců. Každý sloupec představuje fázi vašeho procesu (například: nové, probíhající, vyhrané, ztracené) a záznamy přesouváte prostřednictvím těchto fází podle postupu.
+
+## Objekt
+
+Objekt je datová struktura, která představuje specifický typ entity ve vašem CRM (např. Lidé, Společnosti nebo Příležitosti). Objekty mohou být standardní (vestavěné) nebo vlastní (vytvořené vámi).
+
+## Příležitosti
+
+Příležitosti v Twenty CRM jsou potenciální obchody nebo prodeje s účty či kontakty.
+
+## Záznam
+
+A Record indicates an instance of an object, like a specific account or contact.
+
+## Relační pole
+
+Relation Fields create connections between different objects, allowing you to link records together (like connecting a Person to a Company).
+
+## Standardní pole
+
+Standardní pole jsou předem vytvořená datová pole, která jsou s objekty přítomná již ve výchozím stavu a poskytují běžnou funkčnost v rámci všech pracovních prostorů.
+
+## Úkoly
+
+Úkoly v Twenty CRM jsou přiřazené aktivity týkající se kontaktů, účtů nebo příležitostí.
+
+## Spouštěče
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Pohledy
+
+Zobrazení záznamů si můžete přizpůsobit pomocí pohledů a pro každý pohled nastavit různé filtry, rozvržení a možnosti řazení.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhooky
+
+Webhooky jsou automatizované zprávy odesílané z Twenty na jiné aplikace při výskytu specifických událostí, což umožňuje synchronizaci dat v reálném čase.
+
+## Pracovní postupy
+
+Pracovní postupy jsou automatizované procesy, které spouštějí akce na základě specifických podmínek a pomáhají vám automatizovat opakující se úkoly a obchodní procesy.
+
+## Pracovní prostor
+
+"Pracovní prostor" obvykle představuje společnost používající Twenty. Obsahuje všechny záznamy a data, která vy a členové vašeho týmu do Twenty přidáte.
+Má jedno doménové jméno, kterým je obvykle doména, kterou vaše společnost používá pro e-mailové adresy zaměstnanců.
+
+## Členové pracovního prostoru
+
+Členové pracovního prostoru jsou uživatelé Twenty z vašeho týmu, kteří mají přístup k vašemu pracovnímu prostoru. They can be assigned as owners or assignees for records.
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..207e799ca1
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Implementační služby
+description: Whether you need help getting started or creating advanced customizations, we have a solution.
+---
+
+## Úvodní balíčky
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Data Model Design**: Design and create your custom data model with objects, fields, and relationships
+* **Migrace dat**: Migrujte svá aktuální data z vašeho současného CRM do Twenty
+* **Workflow Creation**: Create custom workflows to support your business processes
+
+## Implementační partneři
+
+Pracujte s certifikovanými partnery Twenty pro pokročilejší přizpůsobení a integrace. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..03ed3a0996
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Co je Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Vize
+
+Vytvořit dobré CRM je obtížné, protože je potřeba najít rovnováhu.
+Pro každé podnikání se požadavky zdají být jednoduché, ale potřeby každého jsou odlišné.
+Výsledkem je CRM, které je buď příliš základní, nebo se snaží být mistrem ve všem, ale nakonec nezvládne nic dokonale.
+
+Zpočátku vypadá Twenty jako většina CRM, které již znáte: můžete sledovat obchody, organizovat kontakty, řídit úkoly a poznámky.
+**Ale to, co ho odlišuje, je náš přístup k rozšiřitelnosti. Budujeme otevřenou platformu, která poskytuje stavební bloky pro řešení vašich jedinečných podnikatelských problémů.**
+
+Upřednostňujeme univerzální principy a běžné vzory před seznamem funkcí.
+Nesnažíme se mít všechny odpovědi, ale místo toho umožňujeme uživatelům najít to, co pro ně funguje nejlépe.
+Open-source je základ našeho přístupu, zajišťuje, že Twenty se vyvíjí se svou komunitou, pro svou komunitu.
+
+## Výhody
+
+**Přizpůsobitelné:** Navržené tak, aby vyhovovalo vašim obchodním potřebám.
+
+**Řízeno komunitou:** Vytvořeno a udržováno velkou open-source komunitou.
+
+**Nákladově efektivní:** Už nikdy nebudete omezeni dodavatelem, protože můžete vždy hostovat sami.
+
+## Hlavní funkce
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Více se dozvíte zde](/l/cs/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/cs/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Začněte](/l/cs/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/cs/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/cs/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/cs/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/cs/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/cs/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Začněte integraci](/l/cs/developers/extend/capabilities/apis).
+
+## Připojte se nyní
+
+[Zaregistrujte se zde](https://app.twenty.com) nebo [připojte se jako přispěvatel na GitHub] (https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..d62f53d529
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Každý podnik funguje jinak. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. To vám dává okamžitou hodnotu a pomáhá vašemu týmu vidět Twenty v akci s reálnými daty. You can do so under Settings → Accounts.
+
+## 1. Přizpůsobte si svůj datový model
+
+Twenty nabízí flexibilitu, kterou potřebujete pro tvarování datového modelu, který nejlépe podpoří vaši každodenní práci.
+Vytvořte objekty a pole jakéhokoliv typu, včetně vztahů mezi různými objekty. Můžete to udělat v Nastavení → Datový model.
+Zde je několik tipů:
+
+* **Nejste omezeni počtem vlastních polí ani vlastních objektů**. Přidání vlastních objektů a polí nepovede k upgradu vašeho plánu.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Doporučujeme je používat co nejvíce, přidávat pole pro kategorizaci svých záznamů, pokud je potřeba. Zde je příklad:
+ * Je lepší používat objekt Lidé pro své potenciální zákazníky a partnery, vytvořit pole na objektu Lidé s názvem `Typ osoby`, místo vytvoření vlastního objektu Partner. Protože byste nemohli přistupovat k e-mailům vyměněným s touto osobou z partnerových záznamů.
+ * Vytvořte různé pohledy pod Lidé, jeden pro zobrazení partnerů a jeden pro zobrazení potenciálních zákazníků.
+* Dva lidé nemohou mít stejnou e-mailovou adresu. Dvě společnosti nemohou mít stejnou doménu.
+* Můžete deaktivovat standardní pole a objekty, které nechcete používat.
+* You can hide fields from views: don't be afraid of creating fields, you won't have to display all of them.
+
+Přečtěte si [tento článek](/l/cs/user-guide/data-model/overview), kde se dozvíte, jak navrhnout svůj datový model.
+
+## 2. Přeneste svá data
+
+Přinesení vašich stávajících dat do Twenty dává vašemu týmu od začátku kontext.
+
+### Připojte svou e-mailovou schránku
+
+Pokud jste tak neučinili při vytváření svého pracovního prostoru, připojte svůj **Google nebo Microsoft účet** v Nastavení → Účty. To umožňuje Twenty:
+
+* Importovat vaše zprávy a schůzky
+* Automaticky vytvářet kontakty na základě interakcí (volitelně)
+* Udržujte historii komunikace viditelnou pro váš tým
+
+**Používáte jiného poskytovatele?**
+Můžete přidat jinou poštovní schránku přes SMTP nebo jiný kalendář přes CalDAV. Budete muset aktivovat tuto funkci v Nastavení → Verze → Laboratoře, a poté se vrátit na kartu Nastavení → Účty.
+
+### Importujte data pomocí csv
+
+Použijte příkazovou nabídku (`Cmd + K` nebo `Ctrl + K`), abyste importovali Lidi, Společnosti, Příležitosti nebo jakékoliv vlastní objekty pomocí CSV.
+
+**Klíčové pokyny**:
+
+* Stáhněte si vzorový soubor pro porozumění očekávanému formátu
+* Omezte každý soubor na 10 000 záznamů
+* Odstraňte duplicitní e-maily pro Lidi nebo duplicitní domény pro Společnosti
+* Před importem zkontrolujte a opravte chyby (označené žlutě)
+
+Přečtěte si [tento článek](/l/cs/user-guide/data-migration/overview), kde se dozvíte více o importu dat.
+
+## 3. Vytvořte svůj první pohled
+
+Vytváření různých pohledů je klíčové pro to, aby se data stala využitelnými pro váš tým.
+Zde je postup:
+
+* **Add or hide columns**
+ Manage the fields visible in a given view clicking on Options → Fields (from the top right). You can show/hide fields from there.
+
+* **Přeuspořádejte pole**
+ Přeuspořádejte pole v daném pohledu kliknutím na Možnosti → Pole (vpravo nahoře). Přetáhněte pole pro přeuspořádání.
+
+* **Filtrujte svůj pohled**
+ Zužte zobrazené záznamy pomocí Filtrů vpravo nahoře.
+
+* **Třídit záznamy**
+ Změňte pořadí zobrazených záznamů pomocí funkce Třídit vpravo nahoře nebo přímo kliknutím na název sloupce.
+
+* **Vyberte rozvržení**
+ Můžete přepnout na **Kanban rozložení** nebo seskupení seznamu podle, pokud má objekt `Stage` nebo podobné pole typu výběru.
+
+* **Uložte svůj pohled jako Oblíbené**
+ To lze provést pomocí rozbalovací nabídky, která zobrazuje různé pohledy.
+
+## Co dál?
+
+Začněte vytvářet automatizace pomocí [workflow](/l/cs/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..1eef3e08e0
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Vytvořte pracovní prostor
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Krok 1: Registrace
+
+1. Přejděte na [Registrace Twenty](https://app.twenty.com).
+2. Vyberte preferovanou metodu registrace:
+ * **Pokračovat s Googlem** pro registraci pomocí účtu Google.
+ * **Pokračovat s Microsoftem** pro registraci pomocí účtu Microsoft.
+ * Nebo, **Pokračovat s emailem** pro registraci pomocí emailu.
+
+
+
+## Krok 2: Výběr zkušební doby
+
+Vyberte mezi dvěma zkušebními obdobími:
+
+### 30 dní
+
+S kreditní kartou
+
+### 7 dní
+
+Bez kreditní karty
+
+Obě zkušební období zahrnují:
+
+* Plný přístup
+* Neomezený počet kontaktů
+* E-mailová integrace
+* Vlastní objekty
+* API & Webhooks
+
+Můžete kliknout na "Změnit plán" a zvolit jiný plán nebo fakturační interval.
+
+
+
+## Krok 3: Potvrzení platby a nastavení účtu
+
+Po schválení platby přes Stripe jste přesměrováni k vytvoření pracovního prostoru a uživatelského profilu. Nezapomeňte, že předplatné můžete kdykoliv zrušit.
+
+## Podpora
+
+For queries or help, connect with the dedicated support team at [contact@twenty.com](mailto:contact@twenty.com) or send a message on [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..c1caf0e9a4
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Získejte rychlý přehled o tom, jak se v platformě orientovat a kde provádět různé typy akcí.
+---
+
+## Hlavní rozvržení
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. This is where the day-to-day work happens.
+Můžete zde **zobrazit, upravit, smazat záznamy** i **vytvářet nová zobrazení**.
+
+
+
+## Navigační panel
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Přepínejte mezi svými **několika pracovními prostory** pomocí rozbalovacího menu nebo vytvořte nový pracovní prostor
+* Use the **search bar** (press `/` to focus on it instantly)
+* Otevřete sekci **Nastavení**
+* Mějte přímý přístup ke svým **oblíbeným zobrazením**. Oblíbené jsou unikátní pro každého uživatele.
+* Přepínejte mezi různými objekty
+* **Create automations** using workflows
+* Kontaktujte podporu a otevřete naši uživatelskou příručku.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. K němu můžete přistoupit dvěma způsoby:
+
+* **Klávesová zkratka**: Stiskněte `Cmd + K` (Mac) nebo `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Vytvářejte nové záznamy
+* **Import and export data via csv**
+* Vytvářejte nová zobrazení
+* Přistupujte k smazaným záznamům (Twenty podporuje logické i trvalé mazání)
+* Podívejte se na klávesové zkratky pro rychlý přístup k objektům ve vašem pracovním prostoru
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Zobrazení
+
+Every object (like Opportunities or People) supports multiple views. You're not limited in the number of views per object.
+
+Použijte rozbalovací menu v levém horním rohu hlavního rozvržení pro přepínání mezi různými zobrazeními. Například:
+
+* Použijte kanbanové zobrazení pro sledování příležitostí podle fáze
+* Použijte zobrazení Seskupit podle k vytváření sekcí a zlepšení efektivity
+* Použijte filtry k zaměření na konkrétní záznamy (např. potenciální zákazníci vytvoření v minulém týdnu)
+* Uložte filtrovaná zobrazení pro pozdější opakované používání
+* Oblíbená zobrazení pro rychlý přístup
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/cs/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Nastavení
+
+Open your Settings from the top left to:
+
+* **Propojte své účty e-mailové schránky a kalendáře** pro bezproblémovou synchronizaci e-mailů a kalendáře
+* Přizpůsobte svůj **datový model**: vytvořte vlastní objekty, pole a vztahy
+* **Access the API playground and configure webhooks**
+* **Spravujte uživatelská oprávnění** a přístupové kontroly pracovního prostoru
+* Pozvěte členy týmu a spravujte role uživatelů
+* Upravte svůj profil a preference pracovního prostoru
+* Configure billing and monitor workflow credits usage
+* Objevte nejnovější vydání a připravované funkce (v části Vydání → karta Lab)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/cs/user-guide/introduction.mdx b/packages/twenty-docs/l/cs/user-guide/introduction.mdx
new file mode 100644
index 0000000000..2b0e1e5989
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..6920107805
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Oprávnění
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Systém oprávnění v Twenty vám umožňuje řídit přístup ke třem hlavním oblastem:
+
+* **Objekty a pole**: Řiďte, kdo může prohlížet, upravovat nebo mazat záznamy a jednotlivá pole.
+* **Nastavení**: Spravujte přístup ke konfiguraci pracovního prostoru a administrativním funkcím.
+* **Akce**: Řiďte obecné akce v pracovním prostoru, jako je import dat nebo odesílání e-mailů.
+
+## Vytvořit roli
+
+Chcete-li vytvořit novou roli:
+
+1. Přejděte na **Nastavení → Role**
+2. V sekci **Všechny role** klikněte na **+ Vytvořit roli**
+3. Zadejte název role
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Click **Save** to finish
+
+## Smazat roli
+
+Chcete-li smazat roli:
+
+1. Přejděte na **Nastavení → Role**
+2. Klikněte na roli, kterou chcete odebrat
+3. Otevřete záložku **Nastavení** a klikněte na **Smazat roli**
+4. Klikněte na **Potvrdit** v modálním okně
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Všechny role kromě role **Administrátor** mohou být smazány. Musí být vždycky alespoň jeden člen přiřazen k roli **Administrátor**.
+
+
+## Přiřadit role členům
+
+### Zobrazit aktuální přiřazení
+
+* Přejděte na **Nastavení → Role**
+* Zjistěte všechny role a kolik členů je ke každé přiřazeno
+* Zobrazit, kteří členové mají jaké role
+
+### Přiřadit roli členu
+
+1. Přejděte na **Nastavení → Role**
+2. Klikněte na roli, kterou chcete přiřadit
+3. Otevřete záložku **Přiřazení**
+4. Klikněte na **+ Přiřadit členu**
+5. Vyberte člena pracovního prostoru ze seznamu
+6. Potvrďte přiřazení
+
+### Nastavit výchozí roli
+
+1. Přejděte na **Nastavení → Role**
+2. V sekci **Možnosti** najděte **Výchozí roli**
+3. Vyberte, kterou roli by noví členové měli automaticky obdržet
+4. Noví členové pracovního prostoru budou při příchodu k této roli přiřazeni.
+
+
+ You can only assign roles to existing workspace members. Chcete-li pozvat nové členy, použijte [Správa členů](/l/cs/user-guide/settings/capabilities/member-management).
+
+
+## Přizpůsobit oprávnění
+
+Oprávnění určují, ke kterým záznamům objektů, nastavením a akcím v rámci vašeho pracovního prostoru má každá role přístup nebo co může upravit.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Popis |
+| --------------------------------------- | -------------------------------------- |
+| **Zobrazit záznamy na všech objektech** | View records in lists and detail pages |
+| **Upravit záznamy na všech objektech** | Modify existing records |
+| **Smazat záznamy na všech objektech** | Soft-delete records (can be restored) |
+| **Zničit záznamy na všech objektech** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Popis |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Správa přepsání oprávnění
+
+To override inherited permissions:
+
+1. Klikněte na **X** pro odstranění zděděného pravidla
+2. Select the specific permissions you want
+3. Klikněte na oranžovou ikonu **Zpět** (kruhová šipka), abyste vrátili změny
+
+Až budete hotovi, klikněte na **Dokončit**, pak **Uložit** poté, co budete přesměrováni na stránku role.
+
+### Oprávnění nastavení pracovního prostoru
+
+Řídí přístup k nastavení pracovního prostoru dvěma způsoby:
+
+* Přepněte **Plný přístup k nastavením**, abyste udělili plný přístup
+* Nebo povolte specifická oprávnění (např. generování API klíčů, preference pracovního prostoru, přiřazování rolí, konfigurace datového modelu, bezpečnostní nastavení a správa pracovních postupů)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Oprávnění k akcím pracovního prostoru
+
+Řídí přístup k obecným akcím v pracovním prostoru:
+
+* Přepněte **Plný přístup k aplikaci**, abyste udělili plná oprávnění
+* Nebo povolte jednotlivé akce jako **Odeslat e-mail**, **Importovat CSV** a **Exportovat CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Přejděte na **Nastavení → Role**
+2. Klikněte na roli, kterou chcete přiřadit
+3. Otevřete záložku **Přiřazení**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Potvrďte přiřazení
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Přejděte na **Nastavení → Role**
+2. Klikněte na roli, kterou chcete přiřadit
+3. Otevřete záložku **Přiřazení**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Potvrďte přiřazení
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..2f4704023d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Předpoklady
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Přejděte na **Nastavení → Členové**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Osvědčené postupy
+
+### Bezpečnost
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Řešení potíží
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Získání pomoci
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/cs/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/cs/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..2cb2e5ffad
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Role
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Oprávnění
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Přejděte na **Nastavení → Role**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## Jednotné přihlášení
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/cs/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..b308f5395d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: Oprávnění a přístup
+description: Spravujte role, oprávnění a řízení přístupu ve svém pracovním prostoru.
+---
+
+
+
+
+
+Systém oprávnění Twenty vám umožňuje řídit, kdo může ve vašem pracovním prostoru přistupovat k datům a kdo je může upravovat. Vytvářejte role, přiřazujte oprávnění a konfigurujte SSO pro zabezpečený přístup.
+
+## Co je v této sekci
+
+
+
+ Vytvářejte role a spravujte oprávnění k objektům, polím a nastavením.
+
+
+
+ Nastavte jednotné přihlášení (SSO) se svým poskytovatelem identity.
+
+
+
+ Nejčastější otázky k rolím, oprávněním a SSO.
+
+
+
+## Klíčové funkce
+
+* **Přístup založený na rolích**: Vytvářejte vlastní role s konkrétními oprávněními
+* **Oprávnění k objektům**: Řiďte, kdo může zobrazovat, upravovat nebo mazat záznamy
+* **Oprávnění k polím**: Omezte přístup k citlivým polím
+* **Oprávnění k nastavením**: Řiďte přístup ke konfiguraci pracovního prostoru
+* **Integrace SSO**: Nakonfigurujte jednotné přihlášení pro podnikové zabezpečení (tarif Organization)
+
+## Rychlé odkazy
+
+* [Vytvořte roli](/l/cs/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [Nakonfigurujte SSO](/l/cs/user-guide/permissions-access/capabilities/sso-configuration)
+* [Spravujte členy týmu](/l/cs/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..cdf342047f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Doména pracovního prostoru
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Přizpůsobit doménu
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Schválené domény
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Přidat schválenou přístupovou doménu
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Uložit
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Veřejné domény
+
+Zajistěte kompletní a bezpečné hostingové prostředí na těchto doménách.
+
+### Přidat veřejnou doménu
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..f17bed09b0
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Správa členů týmu
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Pozvat nové členy
+
+### Using Email Invitation
+
+1. Přejděte na **Nastavení → Členové**
+2. Click **+ Invite**
+3. Zadejte emailovou adresu osoby
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Přejděte na **Nastavení → Členové**
+2. Copy the workspace invite link
+3. Sdílejte odkaz s novými členy týmu
+4. Získají přístup, jakmile se zaregistrují
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/cs/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Schválené přístupové domény
+
+Allow team members to join automatically based on their email domain:
+
+1. Přejděte na **Nastavení → Domény**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/cs/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/cs/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..fc45e0e004
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Nastavení vydání
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Funkce v Labu
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Přejděte do **Nastavení → Vydání**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..6315b68ad4
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Nastavení pracovního prostoru
+description: Přizpůsobte název a styl pracovního prostoru.
+---
+
+Those are accessible under **Settings → General**.
+
+## Obrázek pracovního prostoru
+
+* **Nahrát logo**: Přidejte vlastní logo pracovního prostoru
+* **Podporované formáty**: Soubory PNG, JPEG a GIF do 10MB
+* **Odstranit**: Smazat aktuální logo pracovního prostoru
+
+## Název pracovního prostoru
+
+* **Název**: Změňte zobrazovaný název pracovního prostoru
+* Tento název se zobrazí všem členům pracovního prostoru
+
+## Nebezpečná zóna
+
+
+ Smazáním pracovního prostoru trvale odstraníte všechna data a tuto akci nelze zvrátit. Všechna data pracovního prostoru budou navždy ztracena, všichni členové okamžitě ztratí přístup a tuto akci nelze zvrátit.
+
+
+Ke smazání pracovního prostoru:
+
+1. Klikněte na tlačítko **Smazat pracovní prostor**
+2. Potvrďte smazání, když budete vyzváni
+
+**Poznámka**: Pracovní prostory mohou mazat pouze administrátoři pracovního prostoru.
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/cs/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..c7cb6be566
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Nastavení FAQ
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Nastavení pracovního prostoru
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Nastavení profilu
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Klikněte na **Povolit 2FA**
+ 4. Naskenujte QR kód pomocí vaší autentizační aplikace
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Klikněte na **Smazat účet**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Nastavení prostředí
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Přejděte na **Nastavení → Účty**
+ 2. Klikněte na **Přidat účet**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Přejděte na **Nastavení → Účty**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Domény
+
+
+
+ Ano! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Funkce v Labu
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/settings/overview.mdx b/packages/twenty-docs/l/cs/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..4da34e795d
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Nastavení
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Přejděte na **Nastavení → Účty**
+2. Klikněte na **Přidat účet**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/cs/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Přejděte na **Nastavení → Členové**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Další kroky
+
+* [Workspace settings](/l/cs/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/cs/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/cs/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..9add43e6a2
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Kalendářní zobrazení
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/cs/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..d7ea5563d6
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Zobrazení tabulky
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Zobrazení Kanban
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Osvědčené postupy
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/cs/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/cs/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..d020c5695f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ------------------- | -------------------------------------------------- |
+| Text | Equals, Contains, Starts with, Ends with, Is empty |
+| Číslo | Equals, Greater than, Less than, Between, Is empty |
+| Datum | Equals, Before, After, Between, Is empty |
+| Vybrat | Equals, Is any of, Is empty |
+| Zaškrtávací políčko | Is true, Is false |
+| Vztah | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/cs/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/cs/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..4c66ea0b59
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## O zobrazení Kanban
+
+Kanban zobrazení vizuálně zobrazují tok procesů, kde každý sloupec představuje odlišnou fázi a každá karta reprezentuje záznam.
+
+## Přesun karet mezi fázemi
+
+Každou kartu můžete přesouvat mezi fázemi, jak prochází vaším pracovní postupem, tažením a pouštěním. Pro pokračování podržte klik na kartě a přesuňte ji do další fáze.
+
+
+
+## Add and Delete Stages
+
+Workflow si můžete přizpůsobit tak, aby vyhovoval vašim potřebám, pomocí fází, které představují hodnotu ve výběrovém poli:
+
+### Přidat fáze
+
+Pro přidání fáze přejděte do nastavení výběrového pole tak, že přejdete na Nastavení > Datový model, zvolíte svůj objekt a poté pole, na němž vaše Kanban tabule závisí.
+
+
+
+### Odstranit fáze
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Svou Kanban tabuli můžete nakonfigurovat tak, aby zobrazovala některá pole a skrývala jiná. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Pole můžete také přeuspořádat tak, že podržíte název pole a přetáhnete ho tam, kam chcete.
+
+
+
+## Kompaktní zobrazení
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Popis |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Osvědčené postupy
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..292bfcbefb
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Zobrazení tabulky
+description: Display your data in a spreadsheet-like list format.
+---
+
+## O zobrazení tabulky
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Případy použití:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/cs/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..6de6b72db3
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## Viditelnost zobrazení
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Oblíbené
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/cs/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..be44e92d0b
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Předpoklady
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Klikněte na **Uložit**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Objekt | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Příležitosti | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/cs/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..25f96c2fe7
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Předpoklady
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Klikněte na **Uložit**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Dokončeno |
+
+## Related
+
+* [Kanban Views](/l/cs/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/cs/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..3759132faa
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Klikněte na **Uložit**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Možnost | Popis |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Uložit
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/cs/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..1a96069842
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Omezte přístup ke svému zobrazení},{
+description: Ovládejte, kdo může vidět vaše vlastní zobrazení.
+---
+
+Každé zobrazení (s výjimkou výchozích zobrazení "All [Object Name]") má své vlastní nastavení viditelnosti.
+
+## Postup
+
+1. Otevřete zobrazení, které chcete omezit
+2. Klikněte na **Možnosti** v pravém horním rohu
+3. Klikněte na **Viditelnost**
+4. Vyberte **Neveřejné**
+
+Vaše zobrazení je nyní viditelné pouze pro vás.
+
+## Možnosti viditelnosti
+
+| Nastavení | Kdo může vidět |
+| -------------------- | ----------------------------------- |
+| **Pracovní prostor** | Všichni členové pracovního prostoru |
+| **Neveřejné** | Pouze vy |
+
+## Poznámky
+
+* Výchozí zobrazení "All [Object Name]" nelze nastavit jako neveřejná
+* Neveřejná zobrazení se nezobrazují v rozbalovacích nabídkách zobrazení ostatních uživatelů
+* Viditelnost můžete kdykoli změnit zpět na Pracovní prostor
+
+## Související
+
+* [Nastavení zobrazení](/l/cs/user-guide/views-pipelines/capabilities/view-settings) — všechny možnosti konfigurace zobrazení
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..e24b1ccdf9
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Fáze | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Osvědčené postupy
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/cs/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..a5df511932
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Zobrazte očekávanou částku ve své pipeline.
+description: Vypočítejte a zobrazte vážené hodnoty obchodů na základě pravděpodobnosti fáze.
+---
+
+Očekávaná částka je vypočítaná hodnota: **Částka × Pravděpodobnost**. To vám pomůže předpovídat tržby vážením obchodů podle toho, jak pravděpodobné je, že se uzavřou.
+
+
+ Toto je příklad vytváření [Vzorcových polí](/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields) pomocí pracovních postupů.
+
+
+Tento průvodce vás provede nastavením vlastních polí a pracovních postupů potřebných k výpočtu a zobrazení očekávaných částek ve vaší pipeline.
+
+## Krok 1: Vytvořte vlastní pole
+
+Na objektu Příležitosti potřebujete dvě vlastní pole.
+
+### Vytvořte pole Pravděpodobnost
+
+1. Přejděte do **Nastavení → Datový model → Příležitosti**
+2. Klikněte na **+ Přidat pole**
+3. Nakonfigurujte:
+ * **Název**: Pravděpodobnost
+ * **Typ**: Číslo
+ * **Popis**: Pravděpodobnost podle fáze (0–100 %)
+4. Klikněte na **Uložit**
+
+### Vytvořte pole Očekávaná částka
+
+1. Klikněte na **+ Přidat pole**
+2. Nakonfigurujte:
+ * **Název**: Očekávaná částka
+ * **Typ**: Měna
+ * **Popis**: Vypočteno: Částka × Pravděpodobnost
+3. Klikněte na **Uložit**
+
+### Volitelné: Nastavte pole pro uživatele jen pro čtení
+
+Pokud nechcete, aby uživatelé ručně upravovali tato vypočtená pole:
+
+1. Přejděte na **Nastavení → Role**
+2. Vyberte roli k nastavení
+3. Najděte objekt Příležitosti
+4. Nastavte pole **Pravděpodobnost** a **Očekávaná částka** jako pouze pro čtení
+
+Tím zajistíte, že tyto hodnoty mohou aktualizovat pouze pracovní postupy.
+
+## Krok 2: Vytvořte pracovní postup č. 1 — Aktualizace pravděpodobnosti při změně fáze
+
+Tento pracovní postup automaticky nastaví Pravděpodobnost, když se příležitost přesune do nové fáze.
+
+### Vytvořte pracovní postup
+
+1. Přejděte do **Pracovní postupy**
+2. Klikněte na **+ Nový pracovní postup**
+3. Pojmenujte ho "Aktualizace pravděpodobnosti při změně fáze"
+
+### Nakonfigurujte spouštěč
+
+1. Přidejte spouštěč **Záznam vytvořen nebo aktualizován**
+2. Vyberte **Příležitosti** jako objekt
+3. Filtr: pole **Fáze** je aktualizováno
+
+### Přidejte větve pro každou fázi
+
+Vytvořte větev pro každou fázi s její pravděpodobností:
+
+| Fáze | Pravděpodobnost |
+| ------------------- | --------------- |
+| Nový | 10 % |
+| Kvalifikovaný | 25 % |
+| Schůzka | 40 % |
+| Nabídka | 60 % |
+| Vyjednávání | 80 % |
+| Uzavřeno – vyhráno | 100 % |
+| Uzavřeno – prohráno | 0% |
+
+
+ Chcete-li vytvořit novou větev, klikněte pravým tlačítkem na plátno pracovního postupu a klikněte na **Nová akce**. Poté propojte tuto akci s předchozím uzlem přetažením šipky z předchozího uzlu na tuto novou akci.
+
+
+Pro každou fázi:
+
+1. Přidejte uzel **Filtr**: Fáze = [název fáze]
+2. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí příležitost
+ * Pole: Pravděpodobnost
+ * Hodnota: [pravděpodobnost pro danou fázi]
+
+### Vypočítejte očekávanou částku
+
+Poté, co se větve znovu spojí:
+
+1. Přidejte uzel **Filtr**: Částka není prázdná
+2. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí příležitost
+ * Pole: Očekávaná částka
+ * Hodnota: Částka × Pravděpodobnost
+
+## Krok 3: Vytvořte pracovní postup č. 2 — Přepočet při změně částky
+
+Tento pracovní postup aktualizuje Očekávanou částku, když se změní Částka u obchodu.
+
+### Vytvořte pracovní postup
+
+1. Přejděte do **Pracovní postupy**
+2. Klikněte na **+ Nový pracovní postup**
+3. Pojmenujte ho "Přepočítat očekávanou částku při změně částky"
+
+### Nakonfigurujte spouštěč
+
+1. Přidejte spouštěč **Záznam vytvořen nebo aktualizován**
+2. Vyberte **Příležitosti** jako objekt
+3. Filtr: pole **Částka** je aktualizováno
+
+### Přidejte logiku
+
+1. Přidejte uzel **Filtr**: Částka není prázdná
+2. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí příležitost
+ * Pole: Očekávaná částka
+ * Hodnota: Částka × Pravděpodobnost
+
+## Krok 4: Zobrazte ve své pipeline
+
+Nyní zobrazte součty očekávané částky ve svém zobrazení Kanban:
+
+1. Otevřete si zobrazení Kanban pro svou prodejní pipeline
+2. Klikněte na **číslo** vedle názvu libovolné fáze v horní části sloupce
+3. Vyberte **Součet**
+4. Vyberte **Očekávaná částka**
+
+Každý sloupec nyní zobrazuje celkovou váženou hodnotu pipeline pro danou fázi.
+
+## Souhrn
+
+| Komponenta | Účel |
+| ------------------------- | ----------------------------------------------------------------------------- |
+| **Pole Pravděpodobnost** | Ukládá pravděpodobnost výhry podle fáze |
+| **Pole Očekávaná částka** | Ukládá Částka × Pravděpodobnost |
+| **Pracovní postup č. 1** | Aktualizuje Pravděpodobnost při změně Fáze a poté přepočítá Očekávanou částku |
+| **Pracovní postup č. 2** | Přepočítá Očekávanou částku při změně Částky |
+| **Agregace** | Zobrazuje součet očekávané částky pro každou fázi |
+
+## Související
+
+* [Vzorcová pole](/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields) — vytvářejte vypočtená pole pomocí pracovních postupů
+* [Zobrazení Kanban](/l/cs/user-guide/views-pipelines/capabilities/kanban-views) — agregace sloupců
+* [Jak vytvořit vlastní pole](/l/cs/user-guide/data-model/how-tos/create-custom-fields) — konfigurace polí
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..8fed868681
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: Sledujte, jak dlouho obchodní příležitosti zůstávají v jednotlivých fázích.
+description: Sledujte tempo obchodů tím, že budete zaznamenávat, kdy obchodní příležitosti vstupují do jednotlivých fází.
+---
+
+
+ Toto je příklad vytváření [Vzorcová pole](/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields) pomocí pracovních postupů — konkrétně výpočtů dat.
+
+
+Sledování, kdy obchodní příležitosti vstupují do jednotlivých fází, pomáhá identifikovat úzká místa a měřit tempo obchodů.
+
+Tento průvodce vás provede nastavením vlastních polí a pracovního postupu, který automaticky zaznamená, kdy obchodní příležitost přejde do každé fáze, a spočítá, kolik dní strávila v předchozí fázi.
+
+## Krok 1: Vytvořte vlastní pole
+
+Pro každou fázi potřebujete dva typy polí:
+
+* **Pole Datum a čas**: zaznamenávají, kdy obchodní příležitost vstoupila do jednotlivých fází
+* **Číselná pole**: ukládají, kolik dní obchodní příležitost strávila v jednotlivých fázích
+
+### Vytvořte pole "Poslední vstup"
+
+1. Přejděte do **Nastavení → Datový model → Obchodní příležitosti**
+2. U každé fáze klikněte na **+ Přidat pole** a nastavte:
+ * **Název**: Poslední vstup: [název fáze] (např. "Poslední vstup: Nová", "Poslední vstup: Kvalifikace")
+ * **Typ**: Datum a čas
+ * **Popis**: Časové razítko, kdy obchodní příležitost vstoupila do této fáze
+3. Klikněte na **Uložit**
+
+Vytvořte tato pole:
+
+* Poslední vstup: Nová
+* Poslední vstup: Kvalifikace
+* Poslední vstup: Schůzka
+* Poslední vstup: Nabídka
+* Poslední vstup: Vyjednávání
+* Poslední vstup: Uzavřeno – vyhráno
+* Poslední vstup: Uzavřeno – prohráno
+
+### Vytvořte pole "Dny ve fázi"
+
+1. U každé fáze klikněte na **+ Přidat pole** a nastavte:
+ * **Název**: Dny v [názvu fáze] (např. "Dny v Nové", "Dny v Kvalifikaci")
+ * **Typ**: Číslo
+ * **Popis**: Počet dní strávených v této fázi
+2. Klikněte na **Uložit**
+
+Vytvořte tato pole:
+
+* Dny v Nové
+* Dny v Kvalifikaci
+* Dny ve Schůzce
+* Dny v Nabídce
+* Dny ve Vyjednávání
+
+
+ Pole "Dny v" pro Uzavřeno – vyhráno a Uzavřeno – prohráno nepotřebujete, protože to jsou konečné fáze.
+
+
+### Volitelné: Nastavte pole jen pro čtení
+
+Nechcete-li, aby uživatelé ručně upravovali tato vypočítávaná pole:
+
+1. Přejděte na **Nastavení → Role**
+2. Vyberte roli k nastavení
+3. Najděte objekt Obchodní příležitosti
+4. Nastavte pole "Poslední vstup" a "Dny v" jako jen pro čtení
+
+## Krok 2: Vytvořte pracovní postup
+
+Tento jediný pracovní postup zvládne obě úlohy:
+
+* Zaznamená časové razítko při vstupu do nové fáze
+* Spočítá dny strávené v předchozí fázi
+
+### Vytvořte pracovní postup
+
+1. Přejděte do **Pracovních postupů**
+2. Klikněte na **+ Nový pracovní postup**
+3. Pojmenujte ho "Sledování času ve fázích"
+
+### Nakonfigurujte spouštěč
+
+1. Přidejte spouštěč **Záznam aktualizován**
+2. Vyberte **Obchodní příležitosti** jako objekt
+3. Filtrovat: pole **Fáze** je aktualizováno
+
+### Přidejte větve pro každou fázi
+
+
+ Chcete-li vytvořit novou větev, klikněte pravým tlačítkem na plátno pracovního postupu a klikněte na **Nová akce**. Poté propojte tuto akci s předchozím uzlem přetažením šipky z předchozího uzlu na tuto novou akci.
+
+
+---
+
+**Větev 1: Fáze = Nová (první fáze)**
+
+Protože jde o první fázi, zaznamenáme pouze čas vstupu — není žádná předchozí fáze k výpočtu.
+
+1. Přidejte uzel **Filtr**: Fáze = Nová
+2. Přidejte akci **Kód**:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí obchodní příležitost
+ * Pole: Poslední vstup: Nová
+ * Hodnota: `now` z uzlu Kód
+
+---
+
+**Větev 2: Fáze = Kvalifikace**
+
+Při přesunu do Kvalifikace zaznamenejte čas vstupu A spočítejte dny strávené v Nové.
+
+1. Přidejte uzel **Filtr**: Fáze = Kvalifikace
+2. Přidejte akci **Kód**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Nakonfigurujte vstup uzlu Kód: namapujte `lastEnteredPreviousStage` na pole **Poslední vstup: Nová**
+4. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí obchodní příležitost
+ * Pole k aktualizaci:
+ * Poslední vstup: Kvalifikace = `now`
+ * Dny v Nové = `daysInPreviousStage`
+
+---
+
+**Větev 3: Fáze = Schůzka**
+
+Při přesunu do Schůzky zaznamenejte čas vstupu A spočítejte dny strávené v Kvalifikaci.
+
+1. Přidejte uzel **Filtr**: Fáze = Schůzka
+2. Přidejte akci **Kód**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Nakonfigurujte vstup uzlu Kód: namapujte `lastEnteredPreviousStage` na pole **Poslední vstup: Kvalifikace**
+4. Přidejte akci **Aktualizovat záznam**:
+ * Záznam: Spouštěcí obchodní příležitost
+ * Pole k aktualizaci:
+ * Poslední vstup: Schůzka = `now`
+ * Dny v Kvalifikaci = `daysInPreviousStage`
+
+---
+
+**Pokračujte pro zbývající fáze:**
+
+| Fáze | Záznamy | Počítá |
+| ------------------- | ----------------------------------- | ------------------ |
+| Nabídka | Poslední vstup: Nabídka | Dny ve Schůzce |
+| Vyjednávání | Poslední vstup: Vyjednávání | Dny v Nabídce |
+| Uzavřeno – vyhráno | Poslední vstup: Uzavřeno – vyhráno | Dny ve Vyjednávání |
+| Uzavřeno – prohráno | Poslední vstup: Uzavřeno – prohráno | Dny ve Vyjednávání |
+
+Větve není nutné znovu spojovat — každá se spouští nezávisle, když je splněna podmínka pro danou fázi.
+
+## Krok 3: Analyzujte čas ve fázi
+
+S zaznamenanými časovými razítky a počty dní můžete nyní analyzovat tempo obchodů.
+
+### Vytvořte zobrazení "Pomalé obchody"
+
+1. Vytvořte tabulkové zobrazení Obchodních příležitostí
+2. Přidejte sloupce: Název, Fáze, Dny v [předchozí fázi], Částka
+3. Seřaďte podle pole "Dny v" (sestupně)
+4. Filtrujte podle Fáze, abyste se zaměřili vždy na jednu fázi
+
+Obchody nahoře strávily v předchozí fázi nejvíce času.
+
+### Použijte agregace
+
+V kanbanovém zobrazení vašeho pipeline:
+
+1. Klikněte na číslo vedle názvu fáze
+2. Vyberte **Průměr**
+3. Zvolte pole "Dny v"
+
+Tím zobrazíte průměrný čas, který obchody tráví v jednotlivých fázích.
+
+## Souhrn
+
+| Součást | Účel |
+| ------------------------- | ----------------------------------------------------------------- |
+| **Pole "Poslední vstup"** | Ukládají, kdy obchodní příležitost vstoupila do jednotlivých fází |
+| **Pole "Dny v"** | Ukládají, kolik dní bylo stráveno v jednotlivých fázích |
+| **Pracovní postup** | V jednom kroku zaznamená časové razítko A spočítá dny |
+| **Zobrazení a agregace** | Analyzujte tempo obchodů a identifikujte úzká místa |
+
+## Související
+
+* [Pracovní postupy](/l/cs/user-guide/workflows/overview) — základy automatizace
+* [Jak vytvořit vlastní pole](/l/cs/user-guide/data-model/how-tos/create-custom-fields) — konfigurace polí
+* [Kanbanová zobrazení](/l/cs/user-guide/views-pipelines/capabilities/kanban-views) — agregace
diff --git a/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..b47e6d2eab
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Zobrazení a kanály
+description: Zjistěte, jak v Twenty vytvářet a spravovat zobrazení.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Porozumění zobrazením
+
+Zobrazení jsou uložená nastavení, která určují, jak se vaše data zobrazují. Každé zobrazení může mít vlastní:
+
+* **Rozvržení**: Tabulka, Kanban nebo Kalendář
+* **Filtry**: které záznamy zobrazit
+* **Řazení**: jak jsou záznamy seřazeny
+* **Pole**: které sloupce jsou viditelné
+
+## Typy zobrazení
+
+### Zobrazení tabulky
+
+Výchozí zobrazení podobné tabulkovému procesoru zobrazující záznamy v řádcích s přizpůsobitelnými sloupci.
+
+### Zobrazení Kanban
+
+Vizuální zobrazení nástěnky, kde se záznamy zobrazují jako karty uspořádané podle fází. Ideální pro:
+
+* Prodejní kanály
+* Sledování projektů
+* Jakýkoli pracovní postup s definovanými fázemi
+
+### Kalendářní zobrazení
+
+Zobrazte záznamy s poli data v kalendáři. Ideální pro:
+
+* Schůzky a události
+* Termíny a data splnění
+* Časové plánování
+
+## Vytvoření zobrazení
+
+Existují dva způsoby, jak vytvořit nové zobrazení.
+
+### Použití nabídky zobrazení
+
+1. Přejděte k libovolnému objektu (Lidé, Společnosti atd.)
+2. Klikněte na název zobrazení vlevo nahoře (zobrazuje aktuální zobrazení s rozbalovací šipkou)
+3. Klikněte na **+ Přidat zobrazení**
+4. Pojmenujte zobrazení a klikněte na **Vytvořit**
+5. Vyberte rozvržení (Tabulka, Kanban nebo Kalendář) v části **Možnosti**
+6. Podle potřeby přidejte filtry a řazení
+7. Vyberte, která pole zobrazit, a změňte jejich pořadí
+8. Klikněte na **Uložit**
+
+
+
+### Začněte úpravou existujícího zobrazení
+
+1. Přejděte k libovolnému objektu (Lidé, Společnosti atd.)
+2. Vyberte rozvržení (Tabulka, Kanban nebo Kalendář) v části **Možnosti** nebo podle potřeby přidejte filtry a řazení
+3. Klikněte na **Uložit jako nové zobrazení**
+4. Pojmenujte zobrazení a klikněte na **Vytvořit**
+5. Pokračujte v úpravách nového zobrazení
+6. Klikněte na **Aktualizovat zobrazení** pro uložení dalších nastavení
+
+
+
+## Správa zobrazení
+
+### Upravit zobrazení
+
+1. Vyberte zobrazení z nabídky
+2. Proveďte změny (filtry, řazení, sloupce)
+3. Klikněte na **Uložit** pro aktualizaci zobrazení
+
+### Přejmenovat zobrazení nebo změnit jeho ikonu
+
+1. Otevřete nabídku zobrazení
+2. Klikněte na nabídku **⋮** vedle názvu zobrazení
+3. Vyberte **Upravit**
+4. Změňte název nebo ikonu
+5. Klikněte na **Uložit**
+
+### Změnit pořadí zobrazení
+
+1. Otevřete nabídku zobrazení
+2. Klikněte a přetáhněte zobrazení za jeho úchyt
+3. Pusťte jej na požadované místo
+4. Nové pořadí se uloží automaticky
+
+### Přidat do oblíbených
+
+Připněte často používaná zobrazení pro rychlý přístup:
+
+1. Otevřete nabídku zobrazení
+2. Klikněte na nabídku **⋮** vedle zobrazení
+3. Vyberte **Přidat do oblíbených**
+4. Zobrazení se zobrazí v sekci Oblíbené
+
+### Smazat zobrazení
+
+1. Vyberte zobrazení ke smazání
+2. Klikněte na nabídku zobrazení
+3. Klikněte na nabídku **⋮** vedle zobrazení
+4. Vyberte **Smazat**
+5. Potvrďte smazání
+
+
+ Smazaná zobrazení nelze obnovit. Před potvrzením se ujistěte, že jej opravdu chcete odstranit.
+
+
+## Viditelnost zobrazení
+
+Každé zobrazení (kromě výchozích zobrazení "All [Object Name]") má vlastní nastavení viditelnosti.
+
+Chcete-li změnit viditelnost:
+
+1. Otevřete zobrazení
+2. Klikněte na **Možnosti → Viditelnost**
+3. Vyberte:
+ * **Pracovní prostor**: viditelné pro všechny členy pracovního prostoru
+ * **Neuvedené**: viditelné pouze pro vás
+
+
+ U výchozích zobrazení "All [Object Name]" nelze měnit viditelnost.
+
+
+## Další kroky
+
+* [Zobrazení tabulky](/l/cs/user-guide/views-pipelines/capabilities/table-views)
+* [Zobrazení Kanban](/l/cs/user-guide/views-pipelines/capabilities/kanban-views)
+* [Filtry a řazení](/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Nastavení zobrazení](/l/cs/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..40c9f32a73
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Předpoklady
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Nastavení**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Pole | Hodnota |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Vítejte ve {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Typ spouštěče | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Nastavení**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Nastavení**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Nastavení**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Osvědčené postupy
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Řešení potíží
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..09e2c9ca93
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Osvědčené postupy
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..3129daddda
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Příklad |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Výsledek
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Popis |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Řešení potíží
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Osvědčené postupy
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..ea8c8c2ebb
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Workflow Actions
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Akce definují, co se stane po spuštění. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Vytvořit záznam
+
+Přidává nový záznam do vybraného objektu.
+
+**Konfigurace**:
+
+* Vyberte cílový objekt
+* Vyplňte povinná a volitelná pole
+* Use data from previous steps or input values manually to populate fields
+
+**Výstup**: Data nově vytvořeného záznamu jsou k dispozici pro použití v následujících krocích.
+
+### Aktualizovat záznam
+
+Mění existující záznam ve vybraném objektu.
+
+
+
+**Konfigurace**:
+
+* Vyberte cílový objekt
+* Vyberte specifický záznam pro aktualizaci.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Vyberte pole k úpravě a zadejte nové hodnoty
+
+**Výstup**: Data aktualizovaného záznamu jsou k dispozici pro použití v následujících krocích.
+
+### Smazat záznam
+
+Odstraní záznam z vybraného objektu.
+
+**Konfigurace**:
+
+* Vyberte cílový objekt
+* Vyberte specifický záznam pro smazání
+
+**Výstup**: Data smazaného záznamu zůstávají k dispozici pro použití v následujících krocích.
+
+### Hledání záznamů
+
+Najde záznamy ve vybraném objektu pomocí filtračních podmínek.
+
+**Konfigurace**:
+
+* Vyberte objekt pro hledání
+* Nastavte kritéria filtru k zúžení výsledků
+* Nakonfigurujte řazení a limity
+
+**Výstup**: Vrací odpovídající záznamy, které lze použít v následujících krocích.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/cs/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Konfigurace**:
+
+* Vyberte cílový objekt
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Použijte data z předchozích kroků k vyplnění polí
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Iterátor
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Konfigurace**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Definujte akce, které budou provedeny na každém záznamu v cyklu.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filtr
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Konfigurace**:
+
+* Select the record to filter
+* Definujte filtrační podmínky a kritéria
+* Nakonfigurujte, které záznamy by měly projít do následujících kroků
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Typ | Popis |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Případy použití**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### Odeslat e-mail
+
+Odesílá e-mail z vašeho pracovního postupu. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Konfigurace**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Zadejte e-mailovou adresu příjemce.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Nastavte předmět.
+* Sestavte tělo zprávy. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Formulář
+
+Vyvolá formulář během provádění pracovního postupu pro sběr uživatelských vstupů. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. U workflow s jinými spouštěči (vytvoření záznamu, aktualizace atd.) jsou formuláře přístupné pouze přes rozhraní běžů workflow, což neodpovídá očekávané uživatelské zkušenosti. V roce 2026 bude uvedeno centrum oznámení pro správnou podporu formulářů v automatizovaných pracovních postupech.
+
+
+**Konfigurace**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Výstup**: Odpovědi z formuláře jsou k dispozici pro použití v následujících krocích.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Kód
+
+Runs custom JavaScript within your workflow.
+
+**Konfigurace**:
+
+* Přístup k proměnným z předchozích kroků. You can edit the variables names dynamically.
+
+
+
+* Zapište JavaScriptový kód v editoru
+* Vrátit proměnné pro použití v následujících krocích
+* Testovat kód přímo ve kroku
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### HTTP požadavek
+
+Sends a request to an external API as part of your workflow.
+
+
+
+**Konfigurace**:
+
+* Zadejte URL endpointu API. Using parameters from previous steps is possible.
+* Vyberte metodu HTTP (GET, POST, PUT, PATCH, DELETE)
+* Přidejte potřebné hlavičky a hodnoty
+* Poskytněte ukázku odpovědi pro zobrazení struktury
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Konfigurace**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/cs/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/cs/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..bac866b6aa
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: Větve pracovního postupu
+description: Vytvářejte paralelní cesty a podmíněnou logiku ve svých pracovních postupech.
+---
+
+Větve vám umožní rozdělit pracovní postup do více cest, které mohou běžet současně nebo podmíněně na základě vašich dat.
+
+
+
+## Jak větve fungují
+
+Když z jednoho uzlu vytvoříte více propojení, každá cesta se stane větví. Ve výchozím nastavení se **všechny větve provádějí paralelně** — nečekají na sebe navzájem.
+
+## Vytváření větví
+
+### Přidat novou větev
+
+1. **Klikněte pravým tlačítkem na hlavní plátno** pracovního postupu (ne na existující uzel)
+2. Klikněte na **Přidat uzel**
+3. Vyberte typ uzlu pro svou novou větev
+4. Přetáhněte šipku ze spodní části předchozího kroku na horní část této nové akce
+5. Opakujte pro přidání dalších větví ze stejného uzlu
+
+
+ Každá větev je nezávislá. Přidání větve neovlivní jiné existující cesty z tohoto uzlu.
+
+
+### Vizuální rozložení
+
+Větve se v editoru pracovního postupu zobrazují jako paralelní cesty. Můžete přetahovat uzly a upravovat tak vizuální rozložení, aniž by to ovlivnilo běh.
+
+## Podmíněné větve
+
+Protože se všechny větve ve výchozím nastavení spouštějí, použijte uzly **Filtr** ke kontrole, které cesty se skutečně provedou:
+
+| Větev | Podmínka filtru | Akce |
+| ----- | -------------------- | ------------------------------ |
+| A | Fáze = "Vyhráno" | Odeslat gratulační e‑mail |
+| B | Fáze = "Prohráno" | Vytvořit úkol následného kroku |
+| C | Fáze = "Vyjednávání" | Upozornit manažera |
+
+1. Vytvářejte větve ze svého spouštěče nebo akce
+2. Přidejte uzel **Filtr** jako první krok každé větve
+3. Nakonfigurujte každý filtr s navzájem se vylučujícími podmínkami
+4. Za každý filtr přidejte své akce
+
+V provádění bude pokračovat pouze větev (větve), kde je splněna podmínka filtru.
+
+## Slučování větví
+
+**Větve se automaticky neslučují.** Každá větev běží nezávisle, dokud neskončí. Máte plnou volnost v tom, jak to řešit:
+
+* **Možnost 1: Nechávejte větve oddělené**
+ Každá větev samostatně zpracovává své následné akce. Toto je nejjednodušší přístup, když není potřeba, aby se větve sbíhaly.
+
+* **Možnost 2: Sloučit větve ručně**
+ Při vytváření pracovního postupu můžete ručně připojit více větví ke stejné následné akci. Jednoduše přetáhněte šipky z konce každé větve do společného uzlu.
+
+
+ Ačkoli můžete k pozastavení běhu použít uzel [Delay](/l/cs/user-guide/workflows/capabilities/workflow-actions#delay), momentálně jej nelze nastavit tak, aby čekal "dokud neskončí jiná větev".
+
+
+## Související
+
+* [Jak používat větve v pracovních postupech](/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows) - Průvodce krok za krokem
+* [Akce pracovního postupu](/l/cs/user-guide/workflows/capabilities/workflow-actions) - Dostupné akce včetně Filtru
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..a2441c5e26
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Kredity pracovních postupů
+description: Understand workflow credit consumption and management.
+---
+
+Kredity pracovních postupů pohánějí vaše automatizace v Twenty. Pochopení, jak fungují, vám pomůže optimalizovat náklady a efektivně spravovat svůj rozpočet na automatizaci.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Jak funguje spotřeba kreditů
+
+Kredity se spotřebovávají při provádění pracovních postupů, nikoli při jejich vytváření. Každá akce v pracovním postupu spotřebovává kredity podle své složitosti:
+
+### Spotřeba kreditů podle typu akce
+
+* **Základní interní operace**: Velmi nízká spotřeba kreditů
+ * Hledání záznamů
+ * Vytvořit záznam
+ * Aktualizovat záznam
+ * Smazat záznam
+ * Akce formuláře
+
+* **Složitější operace**: Vyšší spotřeba kreditů
+ * Akce kódování (provádění JavaScriptu)
+ * HTTP požadavky na externí služby
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Okamžité stržení
+
+Kredity jsou strhávány v reálném čase při provádění pracovních postupů. Toto znamená:
+
+* Návrhy pracovních postupů nespotřebovávají kredity
+* Pouze aktivní, běžící pracovní postupy používají vaše přidělené kredity
+* Nezdařené pracovní postupy stále vyčerpávají kredity za dokončené kroky
+
+## Správa kreditů
+
+### Zkontrolujte využití kreditů
+
+1. Přejděte na **Nastavení → Fakturace**
+2. Zobrazte svoji aktuální spotřebu kreditů a zbývající zůstatek
+3. Sledujte vzory používání pro optimalizaci svých pracovních postupů
+
+### Nákup dalších kreditů
+
+Pokud potřebujete více kreditů než přidělení vašeho plánu:
+
+1. Přejděte na **Nastavení → Fakturace**
+2. Klikněte na možnost koupit další kredity. Balíčky různých velikostí jsou k dispozici.
+3. Kredity jsou přidány k vašemu aktuálnímu zůstatku
+
+## Osvedčené postupy
+
+* **Zpracování dávek**: Efektivně používejte hromadné operace a iterátory akcí
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Optimalizujte akce kódu pro efektivitu
+* Hromadné operace pro snížení individuálních volání akcí
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..1b356ac862
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Běhy průběhu práce
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Stav | Popis |
+| ------------- | ------------------------------------------------------------------------ |
+| **Běží** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Neplatný formát dat
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..524a6ba570
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: Spouštěče pracovních postupů
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Pracovní postupy vždy začínají jedním spouštěčem, který určuje, kdy by měla být automatizace spuštěna.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Členové pracovního prostoru
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Záznam je vytvořen
+
+Spouští pracovní postup, když je vytvořen nový záznam ve vybraném objektu (Lidé, Společnosti, Příležitosti nebo jakýkoli vlastní objekt).
+
+**Konfigurace**: Vyberte typ objektu, který chcete sledovat ohledně nových záznamů.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Záznam je aktualizován
+
+Spouští pracovní postup, když jsou v existujícím záznamu provedeny změny.
+
+**Konfigurace**:
+
+* Vyberte typ objektu
+* Volitelně specifikujte, které pole chcete sledovat pro změny
+
+## Záznam je aktualizován nebo vytvořen
+
+Spouští pracovní postup, když je záznam buď vytvořen, nebo aktualizován ve vybraném objektu.
+
+**Proč to je důležité**: Tento spouštěč je obzvláště užitečný, protože záznamy vytvořené různými metodami se chovají odlišně:
+
+* **API/CSV importy**: Záznamy jsou vytvořeny s okamžitě vyplněnými všemi poli
+* **Manuální tvorba**: Záznamy jsou nejprve vytvořeny, poté jsou pole přidávány v následných aktualizacích
+
+**Konfigurace**:
+
+* Vyberte typ objektu, který chcete sledovat
+* Volitelně specifikujte, které pole chcete sledovat pro změny
+* Pracovní postup se spustí jak při počátečním vytvoření, tak při jakýchkoliv následných aktualizacích
+
+## Záznam je odstraněn
+
+Spouští pracovní postup, když je záznam odstraněn z objektu.
+
+**Konfigurace**: Vyberte typ objektu, který chcete sledovat ohledně odstranění.
+
+## Manual Trigger
+
+Spustí pracovní postup, když jej vyvolá uživatelská akce. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Konfigurace dostupnosti**:
+Vyberte, jak má pracovní postup zpracovávat výběr záznamů:
+
+* **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Single**: The selected record(s) will be passed to your workflow. Toto je nastaveno pro daný objekt. Před spuštěním pracovního postupu je možné vybrat několik záznamů. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Hromadné**: Vybrané záznamy budou předány do vašeho pracovního postupu. Toto je nastaveno pro daný objekt. Před spuštěním pracovního postupu je možné vybrat několik záznamů. Pracovní postup poběží jednou, přičemž celý seznam záznamů bude použit jako vstup. This means the workflow needs to contain an [Iterator action](/l/cs/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Additional Configuration**:
+
+* Select the target object (for Single and Bulk availability)
+* Vyberte ikonu příkazu pro spuštění pracovního postupu
+* Nakonfigurujte umístění v navigaci (připnuté nebo nepřipnuté)
+
+**Způsoby přístupu**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Vlastní tlačítko v horní navigaci (pokud je nastaveno)
+
+## Time-Based Trigger: On a Schedule
+
+Spouští pracovní postup v opakovaných intervalech, které definujete.
+
+**Konfigurace**:
+
+* Vyberte časovou jednotku (minuty, hodiny, dny)
+* Zadejte hodnotu nebo použijte vlastní cron výrazy pro rozšířené plánování
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Starts the workflow when a GET or POST request is received from an external service.
+
+
+
+**Konfigurace**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ------------------------------------ |
+| New leads need processing | Záznam je vytvořen |
+| Data changes need sync | Záznam je aktualizován |
+| Import/manual data handling | Záznam je aktualizován nebo vytvořen |
+| Cleanup after deletion | Záznam je odstraněn |
+| User-initiated action | Spustit manuálně |
+| Recurring reports | On a Schedule |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..ec78c0cc27
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: Verze pracovního postupu},{
+description: Spravujte verze a koncepty pracovních postupů.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## O verzích
+
+Pokaždé, když aktivujete pracovní postup, se vytvoří nová verze. To vám umožní sledovat změny v čase a v případě potřeby se vrátit k předchozím konfiguracím.
+
+## Stavy verzí
+
+| Stav | Popis |
+| ---------------- | ------------------------------------ |
+| **Koncept** | Upravováno, dosud nezveřejněno |
+| **Aktivní** | Živá verze reagující na spouštěče |
+| **Deaktivováno** | Dříve aktivní, ale ručně zastaveno |
+| **Archivováno** | Minulé verze uchovávané pro historii |
+
+## Práce s koncepty
+
+Když upravíte aktivní pracovní postup, vaše změny se uloží jako **koncept**. Aktivní verze běží dál, zatímco pracujete na aktualizacích.
+
+Až dokončíte úpravy, můžete:
+
+* **Aktivovat**: Publikovat koncept jako novou aktivní verzi (předchozí verze bude archivována)
+* **Zahodit**: Smazat koncept a ponechat aktuální aktivní verzi
+
+## Historie Verzí
+
+### Zobrazení minulých verzí
+
+1. Otevřete pracovní postup
+2. Klikněte na kartu **Verze**
+3. Zobrazí se všechny předchozí verze s časovými razítky
+
+### Obnovení verze
+
+1. Najděte verzi, kterou chcete obnovit
+2. Klikněte na **Použít jako koncept**
+3. Verze se zkopíruje do nového konceptu
+4. Proveďte všechny potřebné aktualizace
+5. Aktivujte, až budete připraveni.
+
+## Osvědčené postupy
+
+### Správa verzí
+
+* Aktivujte teprve, až bude připraveno pro produkční prostředí.
+* Mezi verzemi udržujte smysluplné změny.
+* Zdokumentujte zásadní změny v názvech nebo popisech pracovních postupů
+* Testujte v režimu konceptu před aktivací
+
+### Vrácení změn
+
+* Pokud nová verze způsobuje problémy, obnovte předchozí verzi
+* Použijte historii verzí ke sledování toho, co se změnilo
+* Obnovené verze vždy otestujte před aktivací
+
+## Běžné pracovní postupy
+
+### Rychlá úprava
+
+1. Proveďte drobné změny v aktivním pracovním postupu
+2. Testujte v režimu konceptu
+3. Aktivujte novou verzi
+
+### Zásadní revize
+
+1. Použijte předchozí verzi jako výchozí bod
+2. Proveďte významné změny v konceptu
+3. Důkladně otestujte všechny scénáře
+4. Aktivujte, až budete mít jistotu
+
+### Vrácení zpět
+
+1. Identifikujte problém s aktuální verzí
+2. Najděte v historii poslední funkční verzi
+3. Klikněte na **Použít jako koncept**
+4. Aktivujte, abyste obnovili původní chování
+
+## Související
+
+* [Začínáme s pracovními postupy](/l/cs/user-guide/workflows/overview)
+* [Běhy pracovních postupů](/l/cs/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..1058ca852f
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Kód |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Hodnota |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Zdroj | Data |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..18f5c6d9e5
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Uložit
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Pole | Hodnota |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Osoby |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..11c9e0df81
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Hodnota |
+| ------------- | --------------------------------- |
+| **Field** | Fáze |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Hodnota |
+| ------------ | ---------------------------------------- |
+| **Object** | Společnost |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Hodnota |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Akce | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filtr | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Kód | Format data for invoicing API |
+| 5 | HTTP požadavek | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..51a6b3c0a9
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Příklad |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Pole | Hodnota |
+| ---------- | ---------------------------------------------------- |
+| Jméno | `{{trigger.body.firstName}}` |
+| Příjmení | `{{trigger.body.lastName}}` |
+| Email | `{{trigger.body.email}}` |
+| Společnost | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..a04da5ae4b
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Nakonfigurujte:
+
+| Pole | Hodnota |
+| ------------------- | ------------------------------- |
+| **Object** | Společnosti |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Typ** | Zákazník |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Vlastník účtu** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Nakonfigurujte:
+
+| Pole | Hodnota |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Úkoly |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Nakonfigurujte:
+
+| Pole | Hodnota |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Nakonfigurujte:
+
+| Pole | Hodnota |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Ověřit:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Trigger
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Akce
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..61921df6b9
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Nakonfigurujte:
+
+| Pole | Hodnota |
+| ---------- | ----------------------------------------------- |
+| **Object** | Příležitosti |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Pole | Hodnota |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..03cb44f3f4
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Přehled
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Předpoklady
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/cs/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/cs/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..a1f9f581ab
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Běžné scénáře použití
+
+| Zdroj | Destination | Fields to Copy |
+| ----------- | ----------- | ------------------------------- |
+| Společnost | Příležitost | Industry, Company Size, ARR |
+| Osoba | Příležitost | Email, Phone, Title |
+| Příležitost | Společnost | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Nastavení
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Nastavení
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Nastavení
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/cs/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Osvědčené postupy
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..4f3db10732
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Běžné scénáře použití
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Nastavení
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Nastavení
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Nastavení
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Nastavení
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Osvědčené postupy
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Testování
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..7f7217b49a
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Přehled
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configure:
+
+| Pole | Hodnota |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..64541f4ffe
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Řešení problémů s workflow
+description: Common workflow issues and how to resolve them.
+---
+
+## Běžné problémy a řešení
+
+### Workflow se nespouští
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Řešení**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Řešení**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Řešení**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Řešení**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Řešení**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..60fd9469a1
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Typ | Records Required | Běhy průběhu práce |
+ | --- | ---------------- | ------------------ |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/cs/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Příklady**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/cs/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Řešení**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | Hodnota | Behavior |
+ | ----- | ------- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/cs/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/cs/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..e985852459
--- /dev/null
+++ b/packages/twenty-docs/l/cs/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Pracovní postupy
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## Proč na Workflows záleží
+
+Twenty bylo vytvořeno, aby svým uživatelům přineslo maximální flexibilitu. Namísto toho, abyste byli nuceni přizpůsobovat vaše obchodní procesy rigidním, předem připraveným funkcím, vám Workflows umožňují vytvářet automatizace, které vytvářejí CRM, které nejlépe podporuje vaše jedinečné obchodní potřeby.
+
+Workflows jsou funkce v aplikaci Twenty pro vytváření těchto automatizací. Poskytují vám stavební bloky potřebné k vytvoření přesně toho, co váš obchod potřebuje, kdy to potřebuje.
+
+## Co mohu s Workflows dělat?
+
+Doporučujeme vytvářet automatizace pro dva hlavní účely:
+
+1. **Interní automatizace k usnadnění každodenní činnosti vašeho týmu**: Snižte množství manuálních vstupů a opakujících se úkolů, které zpomalují váš tým.
+2. **Přenášení dat do a z Twenty**: Připojte Twenty přes API volání a webhooks k vaší databázi a dalším nástrojům.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Workflow Best Practices
+
+* **Upravte názvy kroků**: Přejmenujte kroky vašeho workflowu a jasně popište, co každý z nich dělá. To pomáhá s údržbou a usnadňuje předání spolupracovníkům
+* **Využijte data z předchozích kroků**: Můžete použít pole záznamů vrácených z jakéhokoli předchozího kroku ve vašem workflowu
+* **Začněte jednoduše**: Začněte s jednoduchými workflowy a postupně přidávejte složitost, jakmile se s systémem více seznámíte
+* **Naplánujte před stavbou**: Zmapujte si logiku workflowu před tím, než začnete stavět, abyste se vyhnuli zaseknutí v polovině
+
+## Další kroky
+
+* [Workflow Triggers](/l/cs/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/cs/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/custom-objects.mdx
new file mode 100644
index 0000000000..386f428a99
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/custom-objects.mdx
@@ -0,0 +1,39 @@
+---
+title: Benutzerdefinierte Objekte
+---
+
+Objekte sind Strukturen, die es Ihnen ermöglichen, Daten (Aufzeichnungen, Attribute und Werte) zu speichern, die spezifisch für eine Organisation sind. Twenty bietet sowohl Standard- als auch benutzerdefinierte Objekte.
+
+Standard objects are in-built objects with a set of attributes available for all users. Beispiele für Standardobjekte in Twenty sind Unternehmen und Person. Standardobjekte verfügen über Standardfelder, die ebenfalls allen Twenty-Nutzern zur Verfügung stehen, wie z.B. Unternehmen.displayName.
+
+Benutzerdefinierte Objekte sind Objekte, die Sie erstellen können, um Informationen zu speichern, die einzigartig für Ihre Organisation sind. Sie sind nicht eingebaut; Mitglieder Ihres Arbeitsbereichs können benutzerdefinierte Objekte erstellen und anpassen, um Informationen zu speichern, für die Standardobjekte nicht geeignet sind.
+
+## High-level schema
+
+
+
+
+
+
+
+## Wie es funktioniert
+
+Benutzerdefinierte Objekte stammen aus Metadatentabellen, die Form, Namen und Typ der Objekte bestimmen. Alle diese Informationen sind in der Metadaten-Schema-Datenbank vorhanden, die aus Tabellen besteht:
+
+* **Datenquelle**: Gibt an, wo die Daten vorhanden sind.
+* **Objekt**: Beschreibt das Objekt und verlinkt zu einer Datenquelle.
+* **Feld**: Umreißt die Felder eines Objekts und verbindet es mit dem Objekt.
+
+Um ein benutzerdefiniertes Objekt hinzuzufügen, wird das Arbeitsbereichsmitglied die /metadata API abfragen. Dies aktualisiert die Metadaten entsprechend und berechnet ein GraphQL-Schema basierend auf den Metadaten, das in einem GQL-Cache für die spätere Verwendung gespeichert wird.
+
+
+
+
+
+
+
+Um Daten abzurufen, wird der Prozess durchgeführt, indem Abfragen über den /graphql-Endpunkt erstellt und über den Abfrage-Resolver weitergeleitet werden.
+
+
+
+
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..fd9ae52450
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+Feature flags are used to hide experimental features. Für Twenty werden sie auf der Arbeitsbereichsebene und nicht auf Benutzerebene festgelegt.
+
+## Adding a new feature flag
+
+In `FeatureFlagKey.ts` add the feature flag:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+Fügen Sie es auch dem Enum in `feature-flag.entity.ts` hinzu:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+Um ein Funktions-Flag auf einem **Backend**-Feature anzuwenden, verwenden Sie:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+Um ein Funktions-Flag auf einem **Frontend**-Feature anzuwenden, verwenden Sie:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## Konfigurieren Sie Funktions-Flags für die Bereitstellung
+
+Ändern Sie den entsprechenden Eintrag in der Tabelle `core.featureFlag`:
+
+| iD | schlüssel | workspaceId | wert |
+| -------- | ------------------------ | ------------------ | ------ |
+| Zufällig | `IS_FEATURENAME_ENABLED` | Arbeitsbereichs-ID | `wahr` |
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..32a5abd830
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Ordnerarchitektur
+info: A detailed look into our server folder architecture
+---
+
+Die Server-Verzeichnisstruktur ist wie folgt:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Fähigkeit
+
+Definiert Berechtigungen und enthält Handler für jedes Element.
+
+## Dekoratoren
+
+Definiert benutzerdefinierte Dekoratoren in NestJS für zusätzliche Funktionen.
+
+See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.
+
+## Filter
+
+Enthält Ausnahmefilter, um mögliche Ausnahmen bei GraphQL-Endpunkten zu behandeln.
+
+## Guards
+
+See [guards](https://docs.nestjs.com/guards) for more details.
+
+## Health
+
+Enthält eine öffentlich zugängliche REST-API (healthz), die ein JSON zurückgibt, um zu bestätigen, dass die Datenbank wie erwartet funktioniert.
+
+## Metadaten
+
+Definiert benutzerdefinierte Objekte und stellt eine GraphQL-API (graphql/metadaten) bereit.
+
+## Arbeitsbereich
+
+Generates and serves custom GraphQL schema based on the metadata.
+
+### Workspace Directory Structure
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+Der Stamm des Arbeitsbereichsverzeichnisses umfasst die Datei `arbeitsbereich.fabrik.ts`, die die Funktion `createGraphQLSchema` enthält. Diese Funktion generiert arbeitsbereichsspezifische Schemata, indem sie die Metadaten nutzt, um ein Schema für einzelne Arbeitsbereiche zu gestalten. Durch die Trennung von Schema- und Resolver-Erstellung verwenden wir die Funktion `makeExecutableSchema`, die diese diskreten Elemente kombiniert.
+
+Diese Strategie dient nicht nur der Organisation, sondern hilft auch bei der Optimierung, wie z.B. dem Caching generierter Typdefinitionen zur Leistungs- und Skalierbarkeitssteigerung.
+
+### Workspace Schema builder
+
+Generiert das GraphQL-Schema und umfasst:
+
+#### Fabriken:
+
+Spezialisierte Konstruktoren, um GraphQL-bezogene Konstrukte zu generieren.
+
+* Die type.factory übersetzt Feldmetadaten in GraphQL-Typen unter Verwendung des `TypeMapperService`.
+* Die type-definition.factory erstellt GraphQL-Eingabe- oder Ausgabeobjekte, die aus `objektMetadaten` abgeleitet sind.
+
+#### GraphQL-Typen
+
+Umfasst Aufzählungen, Eingaben, Objekte und Skalare und dient als Bausteine für die Schemakonstruktion.
+
+#### Schnittstellen und Objektdefinitionen
+
+Enthält die Blaupausen für GraphQL-Entitäten und umfasst sowohl vordefinierte als auch benutzerdefinierte Typen wie `MONEY` oder `URL`.
+
+#### Dienste
+
+Contains the service responsible for associating FieldMetadataType with its appropriate GraphQL scalar or query modifiers.
+
+#### Speicher
+
+Enthält die Klasse `TypeDefinitionsStorage`, die wiederverwendbare Typdefinitionen enthält und die Duplizierung von GraphQL-Typen verhindert.
+
+### Workspace Resolver Builder
+
+Erstellt Resolverfunktionen für die Abfrage und Änderung des GraphQL-Schemas.
+
+Jede Fabrik in diesem Verzeichnis ist für die Erstellung eines bestimmten Resolvertyps verantwortlich, wie die `FindManyResolverFactory`, die für eine vielseitige Anwendung auf verschiedenen Tabellen entwickelt wurde.
+
+### Arbeitsbereich Anfrage Ausführer
+
+Führt die generierten Anfragen auf der Datenbank aus und analysiert das Ergebnis.
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..d2cdabb86a
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,101 @@
+---
+title: Backend Befehle
+---
+
+## Nützliche Befehle
+
+Diese Befehle sollten aus dem Verzeichnis packages/twenty-server ausgeführt werden.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### Erstmalige Einrichtung
+
+```
+npx nx database:reset twenty-server # setup the database with dev seeds
+```
+
+### Server starten
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # --fix übergeben, um Lint-Fehler zu beheben
+```
+
+### Test
+
+```
+npx nx run twenty-server:test:unit # Unit-Tests ausführen
+npx nx run twenty-server:test:integration # Integrationstests ausführen
+```
+
+Hinweis: Sie können `npx nx run twenty-server:test:integration:with-db-reset` ausführen, falls Sie die Datenbank zurücksetzen müssen, bevor Sie die Integrationstests durchführen.
+
+### Datenbank zurücksetzen
+
+If you want to reset and seed the database, you can run the following command:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migrationen
+
+#### Für Objekte in Core/Metadata-Schemas (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Für Arbeitsbereichsobjekte
+
+Es gibt keine Migrationsdateien, Migrationen werden automatisch für jeden Arbeitsbereich generiert,
+in der Datenbank gespeichert und mit diesem Befehl angewendet
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ This will drop the database and re-run the migrations and seed.
+
+ Stellen Sie sicher, dass Sie alle Daten sichern, die Sie aufbewahren möchten, bevor Sie diesen Befehl ausführen.
+
+
+## Technologie-Stack
+
+Twenty verwendet in erster Linie NestJS für das Backend.
+
+Prisma war das erste ORM, das wir verwendeten. Um Benutzern die Möglichkeit zu geben, benutzerdefinierte Felder und Objekte zu erstellen, war eine niedrigere Ebene sinnvoller, da wir eine feinkörnige Kontrolle benötigen. Das Projekt verwendet jetzt TypeORM.
+
+Here's what the tech stack now looks like.
+
+**Kern**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Datenbank**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Externe Integrationen**
+
+* [Sentry](https://sentry.io/welcome/) zum Verfolgen von Fehlern
+
+**Tests**
+
+* [Jest](https://jestjs.io/)
+
+**Tools**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Entwicklung**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/zapier.mdx
new file mode 100644
index 0000000000..887243991d
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/zapier.mdx
@@ -0,0 +1,83 @@
+---
+title: Zapier App
+---
+
+Synchronisieren Sie mühelos Twenty mit über 3000 Apps mit [Zapier](https://zapier.com/). Automatisieren Sie Aufgaben, steigern Sie die Produktivität und stärken Sie Ihre Kundenbeziehungen!
+
+## Über Zapier
+
+Zapier ist ein Tool, das es Ihnen ermöglicht, Workflows zu automatisieren, indem Sie die Apps verbinden, die Ihr Team täglich nutzt. Das grundlegende Konzept von Zapier sind automatische Workflows, genannt Zaps, die Trigger und Aktionen umfassen.
+
+Erfahren Sie mehr darüber, wie Zapier funktioniert [hier](https://zapier.com/how-it-works).
+
+## Einrichtung
+
+### Schritt 1: Installieren Sie die Zapier-Pakete
+
+```bash
+cd packages/twenty-zapier
+
+yarn
+```
+
+### Schritt 2: Anmelden mit dem CLI
+
+Verwenden Sie Ihre Zapier-Anmeldedaten, um sich über das CLI anzumelden:
+
+```bash
+zapier login
+```
+
+### Step 3: Set environment variables
+
+Führen Sie im Ordner `packages/twenty-zapier` aus:
+
+```bash
+cp .env.example .env
+```
+
+Führen Sie die Anwendung lokal aus, gehen Sie zu [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks), und generieren Sie einen API-Schlüssel.
+
+Ersetzen Sie den Wert **YOUR_API_KEY** in der Datei `.env` durch den gerade generierten API-Schlüssel.
+
+## Entwicklung
+
+
+ Stellen Sie sicher, dass Sie `yarn build` vor jedem `zapier`-Befehl ausführen.
+
+
+### Test
+
+```bash
+yarn test
+```
+
+### Lint
+
+```bash
+yarn format
+```
+
+### Beobachten und kompilieren Sie, während Sie den Code bearbeiten
+
+```bash
+yarn watch
+```
+
+### Validieren Sie Ihre Zapier-App
+
+```bash
+yarn validate
+```
+
+### Stellen Sie Ihre Zapier-App bereit
+
+```bash
+yarn deploy
+```
+
+### Listet alle Zapier CLI-Befehle auf
+
+```bash
+zapier
+```
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..c9bf3779a1
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Fehler melden
+
+To report a bug, please [create an issue on GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+Sie können auch um Hilfe auf [Discord](https://discord.gg/cx5n4Jzs57) bitten.
+
+## Feature Requests
+
+Wenn Sie sich nicht sicher sind, ob es sich um einen Fehler handelt, und glauben, dass es eher eine Funktionsanforderung ist, sollten Sie wahrscheinlich [stattdessen eine Diskussion eröffnen](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Bevor Sie beginnen
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..788012b39b
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,325 @@
+---
+title: Beste Praktiken
+---
+
+Dieses Dokument beschreibt die besten Praktiken, die Sie beim Arbeiten am Frontend beachten sollten.
+
+## Zustandsverwaltung
+
+React und Recoil übernehmen die Zustandsverwaltung im Code.
+
+### Verwenden Sie `useRecoilState`, um den Zustand zu speichern.
+
+Es ist eine gute Praxis, so viele Atome zu erstellen, wie Sie benötigen, um Ihren Zustand zu speichern.
+
+
+ Es ist besser, zusätzliche Atome zu verwenden, als zu versuchen, mit Prop Drilling allzu knapp zu arbeiten.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'Standardwert',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Verwenden Sie `useRef` nicht, um den Zustand zu speichern.
+
+Vermeiden Sie die Verwendung von `useRef`, um den Zustand zu speichern.
+
+Wenn Sie den Zustand speichern möchten, sollten Sie `useState` oder `useRecoilState` verwenden.
+
+Sehen Sie sich [an, wie Re-Renderings verwaltet werden können](#managing-re-renders), falls Sie das Gefühl haben, dass Sie `useRef` benötigen, um einige Re-Renderings zu verhindern.
+
+## Re-Renderings verwalten
+
+Re-Renderings können in React schwer zu verwalten sein.
+
+Hier sind einige Regeln, die befolgt werden sollten, um unnötige Re-Renderings zu vermeiden.
+
+Beachten Sie, dass Sie **immer** Re-Renderings vermeiden können, indem Sie deren Ursache verstehen.
+
+### Arbeiten Sie auf der Root-Ebene
+
+Das Vermeiden von Re-Renderings in neuen Funktionen wird jetzt erleichtert, indem sie auf Root-Ebene eliminiert werden.
+
+Die `PageChangeEffect`-Sidecar-Komponente enthält nur einen `useEffect`-Hook, der die gesamte Logik für den Seitenwechsel enthält.
+
+Auf diese Weise wissen Sie, dass es nur einen Ort gibt, der ein Re-Rendering auslösen kann.
+
+### Denken Sie immer zweimal nach, bevor Sie `useEffect` in Ihre Codebasis aufnehmen.
+
+Re-Renderings werden oft durch unnötige `useEffect`-Verwendungen verursacht.
+
+Sie sollten überlegen, ob Sie `useEffect` benötigen oder ob Sie die Logik in eine Event-Handler-Funktion verschieben können.
+
+Es ist in der Regel einfach, die Logik in eine `handleClick` oder `handleChange`-Funktion zu verschieben.
+
+Sie können sie auch in Bibliotheken wie Apollo finden: `onCompleted`, `onError`, usw.
+
+### Verwenden Sie eine Geschwisterkomponente, um `useEffect`- oder Datenabruf-Logik auszulagern.
+
+Wenn Sie das Gefühl haben, Ihrer Root-Komponente einen `useEffect` hinzufügen zu müssen, sollten Sie erwägen, ihn in eine Sidecar-Komponente auszulagern.
+
+Dasselbe können Sie auch für die Datenabruflogik mit Apollo-Hooks anwenden.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Verwenden Sie Recoil-Familienzustände und Recoil-Familienselektoren
+
+Recoil-Familienzustände und -Selektoren sind eine großartige Möglichkeit, Re-Renders zu vermeiden.
+
+Sie sind nützlich, wenn Sie eine Liste von Elementen speichern müssen.
+
+### Sie sollten nicht `React.memo(MyComponent)` verwenden.
+
+Vermeiden Sie die Verwendung von `React.memo()`, da es nicht die Ursache für das Re-Rendering löst, sondern stattdessen die Re-Render-Kette unterbricht, was zu unerwartetem Verhalten führen kann und es sehr schwierig macht, den Code zu refaktorisieren.
+
+### Beschränken Sie die Nutzung von `useCallback` oder `useMemo`.
+
+Oft sind sie nicht erforderlich und machen den Code schwerer zu lesen und zu warten für einen Leistungsgewinn, der kaum wahrnehmbar ist.
+
+## Console.logs
+
+`console.log`-Anweisungen bieten während der Entwicklung wertvolle Echtzeit-Einblicke in Variablenwerte und den Codefluss. Aber wenn sie im Produktivcode belassen werden, kann dies zu mehreren Problemen führen:
+
+1. **Leistung**: Übermäßiges Logging kann die Laufzeitleistung beeinflussen, insbesondere bei clientseitigen Anwendungen.
+
+2. **Sicherheit**: Das Protokollieren sensibler Daten kann kritische Informationen offenlegen für jeden, der die Konsole des Browsers inspiziert.
+
+3. **Sauberkeit**: Das Ausfüllen der Konsole mit Logs kann wichtige Warnungen oder Fehler verdecken, die Entwickler oder Tools sehen müssen.
+
+4. **Professionalität**: Endbenutzer oder Kunden, die die Konsole überprüfen und eine Vielzahl von Protokollanweisungen sehen, könnten die Qualität und den Feinschliff des Codes in Frage stellen.
+
+Stellen Sie sicher, dass Sie alle `console.logs` entfernen, bevor Sie den Code in die Produktion übertragen.
+
+## Namensgebung
+
+### Variablenbenennung
+
+Variablennamen sollten den Zweck oder die Funktion der Variable genau beschreiben.
+
+#### Das Problem mit generischen Namen
+
+Generische Namen in der Programmierung sind nicht ideal, weil ihnen die Spezifität fehlt, was zu Mehrdeutigkeit und verminderter Lesbarkeit des Codes führt. Solche Namen vermitteln nicht den Zweck der Variablen oder Funktion, was es Entwicklern erschwert, die Absicht des Codes ohne tiefere Untersuchung zu verstehen. Dies kann zu erhöhten Debugging-Zeiten, höherer Fehleranfälligkeit und Schwierigkeiten bei der Wartung und Zusammenarbeit führen. In der Zwischenzeit macht eine beschreibende Namensgebung den Code selbsterklärend und einfacher zu navigieren, was die Codequalität und die Produktivität der Entwickler verbessert.
+
+```tsx
+// ❌ Schlecht, verwendet einen generischen Namen, der seinen
+// Zweck oder Inhalt nicht klar kommuniziert
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Gut, verwendet einen beschreibenden Namen
+const [email, setEmail] = useState('');
+```
+
+#### Einige Wörter, die in Variablennamen zu vermeiden sind
+
+* Dummy
+
+### Ereignis-Handler
+
+Ereignis-Handler-Namen sollten mit `handle` beginnen, während `on` als Präfix dient, um Ereignisse in Komponenten-Props zu benennen.
+
+```tsx
+// ❌ Schlecht
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Gut
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Optionale Props
+
+Vermeiden Sie es, den Standardwert für ein optionales Prop zu übergeben.
+
+**BEISPIEL**
+
+Betrachten Sie die unten definierte `EmailField`-Komponente:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Verwendung**
+
+```tsx
+// ❌ Schlecht, den gleichen Wert wie den Standardwert übergeben, fügt keinen Wert hinzu
+const Form = () => ;
+```
+
+```tsx
+// ✅ Gut, nimmt den Standardwert an
+const Form = () => ;
+```
+
+## Komponente als Props
+
+Versuchen Sie nach Möglichkeit, nicht instanziierte Komponenten als Props zu übergeben, damit untergeordnete Komponenten selbst entscheiden können, welche Props sie weiterreichen müssen.
+
+Das häufigste Beispiel dafür sind Icon-Komponenten:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Damit React versteht, dass die Komponente eine Komponente ist, müssen Sie PascalCase verwenden, damit sie später mit `` instanziiert werden kann.
+
+## Prop Drilling: Beschränken Sie es auf das Nötigste
+
+Prop Drilling im React-Kontext bezieht sich auf die Praxis, Zustandvariablen und deren Setter durch viele Komponentenebenen zu leiten, auch wenn Zwischenkomponenten sie nicht verwenden. Obwohl es manchmal notwendig ist, kann übermäßiges Prop Drilling zu Folgendem führen:
+
+1. **Verminderte Lesbarkeit**: Die Nachverfolgung, woher ein Prop stammt oder wo es verwendet wird, kann in einer tief verschachtelten Komponentenstruktur verworren werden.
+
+2. **Wartungsherausforderungen**: Änderungen in der Prop-Struktur einer Komponente können Anpassungen in mehreren Komponenten erfordern, selbst wenn sie das Prop nicht direkt verwenden.
+
+3. **Verringerte Wiederverwendbarkeit von Komponenten**: Eine Komponente, die viele Props nur zum Weiterreichen erhält, wird weniger universell und schwieriger in unterschiedlichen Kontexten wiederzuverwenden.
+
+Wenn Sie das Gefühl haben, dass Sie übermäßig Prop Drilling einsetzen, sehen Sie sich die [Best Practices für das Zustandsmanagement](#state-management) an.
+
+## Importe
+
+Beim Importieren sollten Sie die vorgesehenen Aliase anstelle der vollständigen oder relativen Pfade verwenden.
+
+**Die Aliase**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Verwendung**
+
+```tsx
+// ❌ Schlecht, gibt den vollständigen relativen Pfad an
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Gut, nutzt die vorgesehenen Aliase
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Schemavalidierung
+
+[Zod](https://github.com/colinhacks/zod) ist der Schema-Validator für ungetypte Objekte:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email muss eine gültige E-Mail sein'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Passwort muss mindestens 8 Zeichen enthalten'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Breaking Changes
+
+Führen Sie immer gründliche manuelle Tests durch, bevor Sie fortfahren, um sicherzustellen, dass keine Modifikationen anderswo Störungen verursacht haben, da Testen noch nicht umfassend integriert ist.
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..a2e22b0f5b
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Ordnerarchitektur
+info: Ein detaillierter Einblick in unsere Ordnerarchitektur
+---
+
+In diesem Leitfaden erkunden Sie die Details der Projektverzeichnisstruktur und wie sie zur Organisation und Wartbarkeit von Twenty beiträgt.
+
+Indem Sie diesem Ordnerarchitekturkonzept folgen, können Sie Dateien, die sich auf spezifische Funktionen beziehen, leichter finden und sicherstellen, dass die Anwendung skalierbar und wartbar ist.
+
+```
+front
+└───modules
+│ └───module1
+│ │ └───submodule1
+│ └───module2
+│ └───ui
+│ │ └───display
+│ │ └───inputs
+│ │ │ └───buttons
+│ │ └───...
+└───pages
+└───...
+```
+
+## Seiten
+
+Enthält die Top-Level-Komponenten, die durch die Anwendungsrouten definiert werden. They import more low-level components from the modules folder (more details below).
+
+## Module
+
+Jedes Modul repräsentiert eine Funktion oder eine Gruppe von Funktionen und umfasst deren spezifische Komponenten, Zustände und Betriebslogik.
+Sie sollten alle der untenstehenden Struktur folgen. Sie können Module innerhalb von Modulen (als Submodule bezeichnet) verschachteln, und die gleichen Regeln gelten.
+
+```
+module1
+ └───components
+ │ └───component1
+ │ └───component2
+ └───constants
+ └───contexts
+ └───graphql
+ │ └───fragments
+ │ └───queries
+ │ └───mutations
+ └───hooks
+ │ └───internal
+ └───states
+ │ └───selectors
+ └───types
+ └───utils
+```
+
+### Kontexte
+
+A context is a way to pass data through the component tree without having to pass props down manually at every level.
+
+Weitere Details finden Sie unter [React Context](https://react.dev/reference/react#context-hooks).
+
+### GraphQL
+
+Enthält Fragmente, Abfragen und Mutationen.
+
+Weitere Details finden Sie unter [GraphQL](https://graphql.org/learn/).
+
+* Fragmente
+
+Ein Fragment ist ein wiederverwendbares Stück einer Abfrage, das an verschiedenen Stellen verwendet werden kann. By using fragments, it's easier to avoid duplicating code.
+
+Weitere Details finden Sie unter [GraphQL Fragmente](https://graphql.org/learn/queries/#fragments).
+
+* Abfragen
+
+Weitere Details finden Sie unter [GraphQL Abfragen](https://graphql.org/learn/queries/).
+
+* Mutationen
+
+Weitere Details finden Sie unter [GraphQL Mutationen](https://graphql.org/learn/queries/#mutations).
+
+### Hooks
+
+Weitere Details finden Sie unter [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks).
+
+### Zustände
+
+Contains the state management logic. [RecoilJS](https://recoiljs.org) übernimmt dies.
+
+* Selektoren: Weitere Einzelheiten finden Sie unter [RecoilJS Selektoren](https://recoiljs.org/docs/basic-tutorial/selectors).
+
+Die integrierte Zustandsverwaltung von React verwaltet weiterhin den Zustand innerhalb einer Komponente.
+
+### Utils
+
+Sollte nur wiederverwendbare reine Funktionen enthalten. Andernfalls erstellen Sie benutzerdefinierte Hooks im `hooks`-Ordner.
+
+## UI
+
+Enthält alle wiederverwendbaren UI-Komponenten, die in der Anwendung verwendet werden.
+
+Dieser Ordner kann Unterordner wie `data`, `display`, `feedback` und `input` für bestimmte Komponententypen enthalten. Jede Komponente sollte in sich geschlossen und wiederverwendbar sein, sodass Sie sie in verschiedenen Teilen der Anwendung verwenden können.
+
+Indem Sie die UI-Komponenten von den anderen Komponenten im `modules`-Ordner trennen, ist es einfacher, ein konsistentes Design beizubehalten und Änderungen an der UI vorzunehmen, ohne andere Bereiche (Geschäftslogik) der Codebasis zu beeinflussen.
+
+## Schnittstelle und Abhängigkeiten
+
+Sie können Code anderer Module aus jedem Modul importieren, mit Ausnahme des `ui`-Ordners. This will keep its code easy to test.
+
+### Intern
+
+Jeder Teil (Hooks, Zustände, ...) eines Moduls kann einen `internal`-Ordner haben, der Teile enthält, die nur innerhalb des Moduls verwendet werden.
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..4ce27c0680
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,289 @@
+---
+title: Styleguide
+---
+
+Dieses Dokument enthält die Regeln, die beim Schreiben von Code beachtet werden müssen.
+
+Das Ziel ist es, eine konsistente Codebasis zu haben, die leicht lesbar und einfach zu warten ist.
+
+Hierfür ist es besser, etwas ausführlicher zu sein als zu knapp.
+
+Denken Sie daran, dass Code häufiger gelesen als geschrieben wird, insbesondere bei einem Open-Source-Projekt, zu dem jeder beitragen kann.
+
+Es gibt viele Regeln, die hier nicht definiert sind, die aber automatisch durch Linters überprüft werden.
+
+## React
+
+### Verwenden Sie funktionale Komponenten
+
+Verwenden Sie immer TSX-Funktionskomponenten.
+
+Vermeiden Sie `import` mit `const`, da es schwieriger zu lesen und schwerer mit Code-Vervollständigung zu importieren ist.
+
+```tsx
+// ❌ Schlecht, schwerer zu lesen, schwerer zu importieren mit Code-Vervollständigung
+const MeineKomponente = () => {
+ return Hallo Welt
;
+};
+
+export default MeineKomponente;
+
+// ✅ Gut, leicht zu lesen, leicht zu importieren mit Code-Vervollständigung
+export function MeineKomponente() {
+ return Hallo Welt
;
+};
+```
+
+### Props
+
+Erstellen Sie den Typ der Eigenschaften (props) und nennen Sie ihn `(ComponentName)Props`, wenn es nicht notwendig ist, ihn zu exportieren.
+
+Verwenden Sie Destrukturierung der Props.
+
+```tsx
+// ❌ Schlecht, ohne Typ
+export const MeineKomponente = (props) => Hallo {props.name}
;
+
+// ✅ Gut, mit Typ
+type MeineKomponenteProps = {
+ name: string;
+};
+
+export const MeineKomponente = ({ name }: MeineKomponenteProps) => Hallo {name}
;
+```
+
+#### Vermeiden Sie die Verwendung von `React.FC` oder `React.FunctionComponent`, um Prop-Typen zu definieren
+
+```tsx
+/* ❌ - Schlecht, definiert die Komponententyp-Anmerkungen mit `FC`
+ * - Mit `React.FC` akzeptiert die Komponente implizit ein `children`-Prop,
+ * selbst wenn es nicht im Prop-Typ definiert ist. Dies ist nicht immer gewünscht,
+ * insbesondere wenn die Komponente nicht beabsichtigt, Kinder zu rendern.
+ */
+const EmailFeld: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### Kein einzelnes Variablen-Propspreading in JSX-Elementen
+
+Vermeiden Sie das Propspreading einzelner Variablen in JSX-Elementen, wie `{...props}`. Diese Praxis führt oft zu weniger lesbarem und schwer wartbarem Code, da unklar ist, welche Props die Komponente erhält.
+
+```tsx
+/* ❌ - Schlecht, spreadet ein einzelnes Variablen-Prop in die darunterliegende Komponente
+ */
+const MeineKomponente = (props: EigeneProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Rational
+
+* Auf einen Blick ist klarer, welche Props der Code übergibt, was das Verständnis und die Wartung erleichtert.
+* Es verhindert eine enge Kopplung von Komponenten über ihre Props.
+* Linting-Tools erleichtern das Erkennen falsch geschriebener oder unbenutzter Props, wenn Sie Props explizit auflisten.
+
+## JavaScript
+
+### Verwenden Sie den Nullish-Coalescing-Operator `??`
+
+```tsx
+// ❌ Schlecht, kann 'default' zurückgeben, selbst wenn der Wert 0 oder '' ist
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Gut, wird `default` nur zurückgeben, wenn der Wert null oder undefiniert ist
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Verwenden Sie optionales Chaining `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Verwenden Sie `type` anstelle von `interface`
+
+Verwenden Sie immer `type` anstelle von `interface`, da sie fast immer überlappen und `type` flexibler ist.
+
+```tsx
+// ❌ Schlecht
+interface MeinInterface {
+ name: string;
+}
+
+// ✅ Gut
+type MeinTyp = {
+ name: string;
+};
+```
+
+### Verwenden Sie String-Literale anstelle von Enums
+
+[String-Literale](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) sind die bevorzugte Methode, um enum-ähnliche Werte in TypeScript zu handhaben. Sie sind einfacher mit Pick und Omit zu erweitern und bieten eine bessere Entwicklererfahrung, vor allem mit Code-Vervollständigung.
+
+Warum TypeScript empfiehlt, Enums zu vermeiden, sehen Sie [hier](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Schlecht, verwendet ein Enum
+enum Farbe {
+ Rot = "red",
+ Grün = "green",
+ Blau = "blue",
+}
+
+let farbe = Farbe.Rot;
+```
+
+```tsx
+// ✅ Gut, verwendet ein String-Literal
+
+let farbe: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL und interne Bibliotheken
+
+Sie sollten die von GraphQL Codegen generierten Enums verwenden.
+
+Es ist auch besser, ein Enum zu verwenden, wenn eine interne Bibliothek verwendet wird, damit die interne Bibliothek keinen String-Literal-Typ freigeben muss, der nicht zur internen API gehört.
+
+Beispiel:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Styling
+
+### Verwenden Sie StyledComponents
+
+Stylen Sie die Komponenten mit [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Schlecht
+Hallo Welt
+```
+
+```tsx
+// ✅ Gut
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Prefixen Sie stilisierte Komponenten mit "Styled", um sie von "echten" Komponenten zu unterscheiden.
+
+```tsx
+// ❌ Schlecht
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Gut
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Themenbindung
+
+Die Nutzung des Themas für den Großteil der Komponenten-Styling ist der bevorzugte Ansatz.
+
+#### Einheiten von Messungen
+
+Vermeiden Sie die Verwendung direkter `px`- oder `rem`-Werte innerhalb der gestylten Komponenten. Die erforderlichen Werte sind in der Regel bereits im Thema definiert, daher wird empfohlen, das Thema für diese Zwecke zu nutzen.
+
+#### Farben
+
+Vermeiden Sie es, neue Farben einzuführen; verwenden Sie stattdessen die vorhandene Palette aus dem Thema. Sollte es eine Situation geben, in der die Palette nicht übereinstimmt, hinterlassen Sie bitte einen Kommentar, damit das Team dies korrigieren kann.
+
+```tsx
+// ❌ Schlecht, gibt direkt Stilwerte an, ohne das Thema zu nutzen
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Gut, nutzt das Thema
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Durchsetzung von No-Type Imports
+
+Vermeiden Sie Typ-Importe. Um diesen Standard durchzusetzen, überprüft eine ESLint-Regel alle Typ-Importe und meldet sie. Dies trägt zur Konsistenz und Lesbarkeit des TypeScript-Codes bei.
+
+```tsx
+// ❌ Schlecht
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Schlecht
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Gut
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Warum keine Typ-Importe?
+
+* **Konsistenz**: Durch das Vermeiden von Typ-Importen und die Verwendung eines einzigen Ansatzes für sowohl Typ- als auch Wertimporte bleibt die Modulimportstruktur der Codebasis konsistent.
+
+* **Lesbarkeit**: Keine Typ-Importe verbessern die Lesbarkeit des Codes, da klar wird, wann Werte oder Typen importiert werden. Dies reduziert die Zweideutigkeit und erleichtert das Verständnis des Zwecks der importierten Symbole.
+
+* **Wartbarkeit**: Es verbessert die Wartbarkeit der Codebasis, da Entwickler Typ-Only-Imports beim Überprüfen oder Ändern von Code identifizieren und lokalisieren können.
+
+### ESLint-Regel
+
+Eine ESLint-Regel, `@typescript-eslint/consistent-type-imports`, setzt den No-Type-Import-Standard durch. Diese Regel generiert Fehler oder Warnungen bei Verstößen gegen Typ-Importe.
+
+Bitte beachten Sie, dass diese Regel speziell seltene Randfälle behandelt, in denen unbeabsichtigte Typ-Importe auftreten. TypeScript selbst lehnt diese Praxis ab, wie in den [TypeScript 3.8 Release Notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html) erwähnt. In den meisten Situationen sollten Typ-Only-Imports nicht benötigt werden.
+
+Um sicherzustellen, dass Ihr Code mit dieser Regel übereinstimmt, achten Sie darauf, ESLint als Teil Ihres Entwicklungsworkflows auszuführen.
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..3aa734dd49
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,58 @@
+---
+title: Mit Figma arbeiten
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+Figma ist ein kollaboratives Interface-Design-Tool, das dazu beiträgt, die Kommunikationsbarriere zwischen Designern und Entwicklern zu überwinden.
+Dieser Leitfaden erklärt, wie Sie mit Figma zusammenarbeiten können.
+
+## Zugriff
+
+1. **Access the shared link:** You can access the project's Figma file [here](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **Anmelden:** Wenn Sie nicht bereits angemeldet sind, werden Sie von Figma dazu aufgefordert.
+ Schlüsselfunktionen sind nur für angemeldete Benutzer verfügbar, wie der Entwicklermodus und die Möglichkeit, einen dedizierten Rahmen auszuwählen.
+
+
+ Ohne ein Konto können Sie nicht effektiv zusammenarbeiten.
+
+
+## Figma-Struktur
+
+On the left sidebar, you can access the different pages of Twenty's Figma. So sind sie organisiert:
+
+* **Komponentenseite:** Dies ist die erste Seite. Der Designer verwendet sie zur Erstellung und Organisation der wiederverwendbaren Designelemente, die in der gesamten Designdatei verwendet werden. For example, buttons, icons, symbols, or any other reusable components. Sie dient dazu, die Konsistenz im gesamten Design beizubehalten.
+* **Hauptseite:** Die zweite Seite ist die Hauptseite, die die vollständige Benutzeroberfläche des Projekts zeigt. Sie können ***Play*** drücken, um den vollständigen App-Prototypen zu verwenden.
+* **Funktionsseiten:** Die anderen Seiten sind normalerweise den in Arbeit befindlichen Funktionen gewidmet. Sie enthalten das Design spezifischer Funktionen oder Module der Anwendung oder Website. Normalerweise sind sie noch in Arbeit.
+
+## Nützliche Tipps
+
+Mit Lesezugriff können Sie das Design nicht bearbeiten, aber Sie können alle Funktionen nutzen, die nützlich sind, um die Designs in Code zu konvertieren.
+
+### Verwenden Sie den Dev-Modus
+
+Der Dev-Modus von Figma verbessert die Produktivität von Entwicklern, indem er eine einfache Navigation im Design, effektive Ressourcenverwaltung, effiziente Kommunikationstools, Toolbox-Integrationen, schnelle Codeschnipsel und wichtige Ebeneninformationen bereitstellt, die die Lücke zwischen Design und Entwicklung schließen. Weitere Informationen über den Dev-Modus finden Sie [hier](https://www.figma.com/dev-mode/).
+
+Wechseln Sie in der rechten Teil der Toolbar in den "Entwickler"-Modus, um Designspezifikationen anzuzeigen, CSS zu kopieren und auf Ressourcen zuzugreifen.
+
+### Den Prototyp verwenden
+
+Klicken Sie auf ein beliebiges Element auf der Leinwand und drücken Sie die Schaltfläche “Play” oben rechts in der Oberfläche, um die Prototyp-Ansicht zu öffnen. Der Prototypenmodus ermöglicht es Ihnen, mit dem Design zu interagieren, als wäre es das endgültige Produkt. Er zeigt den Fluss zwischen Bildschirmen und wie sich Interface-Elemente wie Schaltflächen, Links oder Menüs bei Interaktionen verhalten.
+
+1. **Übergänge und Animationen verstehen:** Im Prototypenmodus können Sie Übergänge oder Animationen sehen, die ein Designer zwischen Bildschirmen oder UI-Elementen hinzugefügt hat, um Entwicklern klare visuelle Anweisungen zu beabsichtigtem Verhalten und Stil zu bieten.
+2. **Implementierungsklarheit:** Ein Prototyp kann auch helfen, Unklarheiten zu reduzieren. Entwickler können damit interagieren, um ein besseres Verständnis der Funktionalität oder des Aussehens bestimmter Elemente zu erlangen.
+
+Für umfassendere Details und Anleitungen zum Erlernen der Figma-Plattform können Sie die offizielle [Figma-Dokumentation](https://help.figma.com/hc/en-us) besuchen.
+
+### Abstände messen
+
+Wählen Sie ein Element aus, halten Sie die `Option`-Taste (Mac) oder `Alt`-Taste (Windows) gedrückt und fahren Sie dann mit der Maus über ein anderes Element, um den Abstand zwischen ihnen anzuzeigen.
+
+### Figma-Erweiterung für VSCode (Empfohlen)
+
+[Figma für VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) ermöglicht es Ihnen, durch Design-Dateien zu navigieren und diese zu inspizieren, mit Designern zusammenzuarbeiten, Änderungen zu verfolgen und die Implementierung zu beschleunigen - alles, ohne Ihren Texteditor zu verlassen.
+Es ist Teil unserer empfohlenen Erweiterungen.
+
+## Zusammenarbeit
+
+1. **Kommentare verwenden:** Sie sind eingeladen, die Kommentarfunktion zu nutzen, indem Sie auf das Blasensymbol im linken Teil der Toolbar klicken.
+2. **Cursor-Chat:** Eine nette Funktion von Figma ist der Cursor-Chat. Drücken Sie einfach `;` auf Mac und `/` unter Windows, um eine Nachricht zu senden, wenn Sie sehen, dass jemand anderes Figma zur gleichen Zeit wie Sie verwendet.
diff --git a/packages/twenty-docs/l/de/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/de/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..0761589652
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: Lokale Einrichtung
+description: Der Leitfaden für Mitwirkende (oder neugierige Entwickler), die Twenty lokal ausführen möchten.
+---
+
+## Voraussetzungen
+
+
+
+ Bevor Sie Twenty installieren und verwenden können, stellen Sie sicher, dass Sie Folgendes auf Ihrem Computer installiert haben:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` wird nicht funktionieren, Sie sollten stattdessen `yarn` verwenden. Yarn wird jetzt mit Node.js geliefert, so dass Sie es nicht separat installieren müssen.
+ Sie müssen nur `corepack enable` ausführen, um Yarn zu aktivieren, wenn Sie das noch nicht getan haben.
+
+
+
+
+ 1. Installieren Sie WSL
+ Öffnen Sie PowerShell als Administrator und führen Sie aus:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Sie sollten nun eine Aufforderung sehen, Ihren Computer neu zu starten. Wenn nicht, starten Sie ihn manuell neu.
+
+ Nach dem Neustart wird ein PowerShell-Fenster geöffnet und Ubuntu installiert. Dies kann einige Zeit in Anspruch nehmen.
+ Sie werden aufgefordert, einen Benutzernamen und ein Passwort für Ihre Ubuntu-Installation zu erstellen.
+
+ 2. Git installieren und konfigurieren
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Your Name"
+
+ git config --global user.email "youremail@domain.com"
+ ```
+
+ 3. nvm, node.js und yarn installieren
+
+
+ Verwenden Sie `nvm`, um die korrekte `node`-Version zu installieren. Die `.nvmrc` stellt sicher, dass alle Mitwirkenden die gleiche Version verwenden.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Schließen und öffnen Sie Ihr Terminal erneut, um nvm zu verwenden. Führen Sie dann die folgenden Befehle aus.
+
+ ```bash
+
+ nvm install # installiert empfohlene node-Version
+
+ nvm use # verwendet empfohlene node-Version
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Schritt 1: Git klonen
+
+Führen Sie in Ihrem Terminal den folgenden Befehl aus.
+
+
+
+ Wenn Sie SSH-Schlüssel noch nicht eingerichtet haben, können Sie [hier](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh) erfahren, wie das geht.
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Schritt 2: Positionieren Sie sich im Stammverzeichnis
+
+```bash
+cd twenty
+```
+
+Alle folgenden Befehle innerhalb des Projekts sind vom Stammverzeichnis aus auszuführen.
+
+## Schritt 3: Einrichten einer PostgreSQL-Datenbank
+
+
+
+ **Option 1 (bevorzugt):** Um Ihre Datenbank lokal bereitzustellen:
+ Verwenden Sie den folgenden Link, um PostgreSQL auf Ihrem Linux-Rechner zu installieren: [Postgresql-Installation](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Hinweis: Möglicherweise müssen Sie `sudo -u postgres` dem Befehl vor `psql` hinzufügen, um Berechtigungsfehler zu vermeiden.
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Option 1 (bevorzugt):** Um Ihre Datenbank lokal mit `brew` bereitzustellen:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Sie können überprüfen, ob der PostgreSQL-Server läuft, indem Sie folgendes ausführen:
+
+ ```bash
+ brew services list
+ ```
+
+ Der Installer erstellt möglicherweise nicht standardmäßig den Benutzer `postgres`, wenn er
+ über Homebrew auf MacOS installiert wird. Stattdessen wird eine PostgreSQL-Rolle erstellt, die Ihrem macOS
+ Benutzernamen (z. B. "john") entspricht.
+ Um zu überprüfen und, falls erforderlich, den Benutzer `postgres` zu erstellen, führen Sie folgende Schritte aus:
+
+ ```bash
+ # Verbinden Sie sich mit PostgreSQL
+ psql postgres
+ oder
+ psql -U $(whoami) -d postgres
+ ```
+
+ Sobald Sie sich an der psql-Eingabeaufforderung (postgres=#) befinden, führen Sie aus:
+
+ ```bash
+ # Vorhandene PostgreSQL-Rollen auflisten
+ \du
+ ```
+
+ Sie werden eine Ausgabe ähnlich der folgenden sehen:
+
+ ```bash
+ Rolle Name | Attribute | Mitglied von
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Wenn Sie keine `postgres`-Rolle sehen, fahren Sie mit dem nächsten Schritt fort.
+ Erstellen Sie die Rolle `postgres` manuell:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Dadurch wird eine Superuser-Rolle namens `postgres` mit Anmeldezugriff erstellt.
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Alle folgenden Schritte sind im WSL-Terminal auszuführen (innerhalb Ihrer virtuellen Maschine)
+
+ **Option 1:** Um Ihr PostgreSQL lokal bereitzustellen:
+ Verwenden Sie den folgenden Link, um PostgreSQL auf Ihrer Linux-VM zu installieren: [Postgresql-Installation](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Hinweis: Möglicherweise müssen Sie `sudo -u postgres` dem Befehl vor `psql` hinzufügen, um Berechtigungsfehler zu vermeiden.
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+ Die Ausführung von Docker auf WSL fügt eine zusätzliche Komplexitätsschicht hinzu.
+ Verwenden Sie diese Option nur, wenn Sie mit den zusätzlichen Schritten vertraut sind, einschließlich der Aktivierung von [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Sie können jetzt über [localhost:5432](localhost:5432) auf die Datenbank zugreifen, mit dem Benutzer `postgres` und dem Passwort `postgres`.
+
+## Schritt 4: Einrichten einer Redis-Datenbank (Cache)
+
+Twenty benötigt einen Redis-Cache, um die beste Leistung zu bieten
+
+
+
+ **Option 1:** Bereitstellung von Redis lokal:
+ Verwenden Sie den folgenden Link, um Redis auf Ihrem Linux-Rechner zu installieren: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Option 1 (bevorzugt):** Bereitstellung von Redis lokal mit `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Starten Sie Ihren Redis-Server:
+ `brew services start redis`
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Option 1:** To provision your Redis locally:
+ Use the following link to install Redis on your Linux virtual machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Option 2:** Wenn Sie Docker installiert haben:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Wenn Sie eine Client-GUI benötigen, empfehlen wir [redis insight](https://redis.io/insight/) (kostenlose Version verfügbar)
+
+## Schritt 5: Einrichten von Umgebungsvariablen
+
+Verwenden Sie Umgebungsvariablen oder `.env`-Dateien, um Ihr Projekt zu konfigurieren. More info [here](/l/de/developers/self-host/capabilities/setup)
+
+Kopieren Sie die `.env.example`-Dateien in `/front` und `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/de/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Schritt 6: Abhängigkeiten installieren
+
+Um den Twenty-Server zu bauen und einige Daten in Ihre Datenbank zu seeden, führen Sie den folgenden Befehl aus:
+
+```bash
+yarn
+```
+
+Bitte beachten Sie, `npm` oder `pnpm` funktionieren nicht.
+
+## Schritt 7: Das Projekt ausführen
+
+
+
+ Je nach Ihrer Linux-Distribution könnte der Redis-Server automatisch gestartet werden.
+ Wenn nicht, überprüfen Sie den [Redis Installationsleitfaden](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) für Ihre Distribution.
+
+
+
+ Redis sollte bereits laufen. Falls nicht, führen Sie aus:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ Je nach Ihrer Linux-Distribution könnte der Redis-Server automatisch gestartet werden.
+ Wenn nicht, überprüfen Sie den [Redis Installationsleitfaden](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) für Ihre Distribution.
+
+
+
+Richten Sie Ihre Datenbank mit folgendem Befehl ein:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Starten Sie den Server, den Worker und die Frontend-Dienste:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+Alternativ können Sie alle Dienste auf einmal starten:
+
+```bash
+npx nx start
+```
+
+## Schritt 8: Verwenden Sie Twenty
+
+**Frontend**
+
+Das Frontend von Twenty läuft unter [http://localhost:3001](http://localhost:3001).
+Sie können sich mit dem Standard-Demokonto anmelden: `tim@apple.dev` (Passwort: `tim@apple.dev`)
+
+**Backend**
+
+* Der Server von Twenty wird unter [http://localhost:3000](http://localhost:3000) verfügbar sein.
+* Die GraphQL-API kann unter [http://localhost:3000/graphql](http://localhost:3000/graphql) erreicht werden.
+* Die REST-API ist erreichbar unter [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## Fehlerbehebung
+
+Sollten Sie auf ein Problem stoßen, schauen Sie sich die [Fehlerbehebung](/l/de/developers/self-host/capabilities/troubleshooting) für Lösungen an.
diff --git a/packages/twenty-docs/l/de/developers/contribute/contribute.mdx b/packages/twenty-docs/l/de/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..962b6fe6b6
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Überblick
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Erste Schritte
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/de/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/de/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..2a08a0d66a
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: APIs
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty wurde so entwickelt, dass es entwicklerfreundlich ist und leistungsstarke APIs bietet, die sich an Ihr individuelles Datenmodell anpassen. Wir bieten vier verschiedene API-Typen, um unterschiedlichen Integrationsanforderungen gerecht zu werden.
+
+## Entwickler-Erst-Ansatz
+
+Twenty generates APIs specifically for your data model:
+
+* **Keine langen IDs erforderlich**: Verwenden Sie Ihre Objekt- und Feldnamen direkt in Endpunkten
+* **Standard- und benutzerdefinierte Objekte werden gleich behandelt**: Ihre benutzerdefinierten Objekte erhalten dieselbe API-Behandlung wie integrierte
+* **Dedizierte Endpunkte**: Jedes Objekt und Feld erhält seinen eigenen API-Endpunkt
+* **Benutzerdefinierte Dokumentation**: Speziell für das Datenmodell Ihres Arbeitsplatzes generiert
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### Core API
+
+Zugriff auf `/rest/` oder `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Verwalten von Datensatzbeziehungen
+
+### Metadata API
+
+Zugriff auf `/rest/metadata/` oder `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Create, modify, or delete objects and fields
+* Konfigurieren der Arbeitsbereichseinstellungen
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Format | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## API-Endpunkte
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Authentifizierung
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Create an API Key
+
+1. Gehen Sie zu **Einstellungen → APIs & Webhooks**
+2. Click **+ Create key**
+3. Konfigurieren:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Klicken Sie auf **Speichern**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Click on the role to assign
+3. Öffnen Sie den Tab **Zuweisungen**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/de/user-guide/permissions-access/capabilities/permissions) for details.
+
+### API-Schlüssel verwalten
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Gehen Sie zu **Einstellungen → APIs & Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Batch-Vorgänge
+
+Both REST and GraphQL support batch operations:
+
+* **Batch-Größe**: Bis zu 60 Datensätze pro Anfrage
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | Wert |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/de/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/de/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..f9d22df63b
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Voraussetzungen
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Erste Schritte
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+Von hier aus können Sie:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Authentifizierung
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Beispiele:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Fehlerbehebung
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/de/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/de/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..1f2d836048
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooks
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Webhook erstellen
+
+1. Gehen Sie zu **Einstellungen → APIs & Webhooks → Webhooks**
+2. Klicken Sie auf **+ Webhook erstellen**
+3. Enter your webhook URL (must be publicly accessible)
+4. Klicken Sie auf **Speichern**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Webhooks verwalten
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Ereignisse
+
+Twenty sends webhooks for these event types:
+
+| Ereignis | Beispiel |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Feld | Beschreibung |
+| ------------- | ------------------------------------------------ |
+| `ereignis` | What happened (e.g., `person.created`) |
+| `daten` | The full record that was created/updated/deleted |
+| `zeitstempel` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Webhook-Validierung
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Kopfzeile | Beschreibung |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Methode | Richtung | Use Case |
+| ---------------------------- | -------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/de/developers/extend/extend.mdx b/packages/twenty-docs/l/de/developers/extend/extend.mdx
new file mode 100644
index 0000000000..37695c72fe
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Überblick
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Erste Schritte
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/de/developers/introduction.mdx b/packages/twenty-docs/l/de/developers/introduction.mdx
new file mode 100644
index 0000000000..2bcbbff87b
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Erste Schritte
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..41a1592ea5
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Weitere Methoden
+---
+
+
+ Dieses Dokument wird von der Community gepflegt. Es könnte Probleme enthalten.
+
+
+## Kubernetes über Terraform und Manifeste
+
+Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+Deploy Twenty on servers using Coolify. (offizielles Bild auf Coolify wird bald verfügbar sein)
+
+[Coolify-Dokumentation](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Deploy Twenty on EasyPanel with the community maintained template below.
+
+[Bereitstellung auf EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Deploy Twenty on servers with Elest.io using link below.
+
+[Bereitstellung auf Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty auf Railway
+
+Deploy Twenty on Railway with the community maintained template below.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty auf Sealos
+
+Stellen Sie Twenty auf Sealos mit der untenstehenden, von der Community gepflegten Vorlage bereit.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Andere
+
+Bitte zögern Sie nicht, einen PR zu öffnen, um mehr Optionen für Cloud-Anbieter hinzuzufügen.
diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..4703cc82fb
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Klick mit Docker Compose
+---
+
+
+ Docker-Container sind für die Produktion oder das Selbsthosten bestimmt. Für Beiträge siehe bitte das [Lokale Setup](/l/de/developers/contribute/capabilities/local-setup).
+
+
+## Überblick
+
+This guide provides step-by-step instructions to install and configure the Twenty application using Docker Compose. Das Ziel ist, den Prozess übersichtlich zu gestalten und häufige Fallstricke zu vermeiden, die Ihre Einrichtung unterbrechen könnten.
+
+**Wichtig:** Ändern Sie nur die in dieser Anleitung explizit erwähnten Einstellungen. Andere Konfigurationen zu ändern, kann zu Problemen führen.
+
+See docs [Setup Environment Variables](/l/de/developers/self-host/capabilities/setup) for advanced configuration. All environment variables must be declared in the docker-compose.yml file at the server and / or worker level depending on the variable.
+
+## Systemanforderungen
+
+* RAM: Stellen Sie sicher, dass Ihre Umgebung mindestens 2 GB RAM hat. Unzureichender Speicher kann dazu führen, dass Prozesse abstürzen.
+* Docker & Docker Compose: Stellen Sie sicher, dass beide installiert und aktuell sind.
+
+## Option 1: One-line script
+
+Installieren Sie die neueste stabile Version von Twenty mit einem einzigen Befehl:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Um eine spezifische Version oder Zweig zu installieren:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Ersetzen Sie x.y.z mit der gewünschten Versionsnummer.
+* Ersetzen Sie branch-name durch den Namen des Zweigs, den Sie installieren möchten.
+
+## Option 2: Manuelle Schritte
+
+Follow these steps for a manual setup.
+
+### Schritt 1: Einrichten der Umgebungsdatei
+
+1. **Erstellen Sie die .env Datei**
+
+ Kopieren Sie die Beispielumgebungsdatei in eine neue .env-Datei in Ihrem Arbeitsverzeichnis:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Erstellen Sie geheime Tokens**
+
+ Führen Sie den folgenden Befehl aus, um eine eindeutige Zufallszeichenfolge zu generieren:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Wichtig:** Bewahren Sie diesen Wert geheim auf / teilen Sie ihn nicht.
+
+3. **Aktualisieren Sie die `.env`**
+
+ Ersetzen Sie den Platzhalterwert in Ihrer .env-Datei durch das generierte Token:
+
+ ```ini
+ APP_SECRET=erster_zufälliger_string
+ ```
+
+4. **Setzen Sie das Postgres-Passwort**
+
+ Aktualisieren Sie den Wert `PG_DATABASE_PASSWORD` in der .env-Datei mit einem starken Passwort ohne Sonderzeichen.
+
+ ```ini
+ PG_DATABASE_PASSWORD=mein_starkes_passwort
+ ```
+
+### Schritt 2: Beschaffen Sie die Docker Compose-Datei
+
+Laden Sie die `docker-compose.yml`-Datei in Ihr Arbeitsverzeichnis herunter:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Schritt 3: Anwendung starten
+
+Starten Sie die Docker-Container:
+
+```bash
+docker compose up -d
+```
+
+### Step 4: Access the Application
+
+If you host twentyCRM on your own computer, open your browser and navigate to [http://localhost:3000](http://localhost:3000).
+
+If you host it on a server, check that the server is running and that everything is ok with
+
+```bash
+curl http://localhost:3000
+```
+
+## Konfiguration
+
+### Twenty für externen Zugriff freigeben
+
+Standardmäßig läuft Twenty auf `localhost` an Port `3000`. Um über eine externe Domain oder IP-Adresse darauf zuzugreifen, müssen Sie die `SERVER_URL` in Ihrer `.env`-Datei konfigurieren.
+
+#### Understanding `SERVER_URL`
+
+* **Protokoll:** Verwenden Sie `http` oder `https` je nach Konfiguration.
+ * Verwenden Sie `http`, wenn Sie kein SSL eingerichtet haben.
+ * Verwenden Sie `https`, wenn Sie SSL konfiguriert haben.
+* **Domain/IP:** Dies ist der Domainname oder die IP-Adresse, unter der Ihre Anwendung zugänglich ist.
+* **Port:** Include the port number if you're not using the default ports (`80` for `http`, `443` for `https`).
+
+### SSL-Anforderungen
+
+SSL (HTTPS) ist erforderlich, damit bestimmte Browserfunktionen ordnungsgemäß funktionieren. Obwohl diese Funktionen möglicherweise während der lokalen Entwicklung funktionieren (da Browser localhost anders behandeln), ist eine ordnungsgemäße SSL-Einrichtung erforderlich, wenn Twenty auf einer regulären Domain gehostet wird.
+
+Zum Beispiel erfordert die Clipboard-API möglicherweise einen sicheren Kontext - einige Funktionen wie Kopierknöpfe in der gesamten Anwendung funktionieren möglicherweise nicht ohne aktiviertes HTTPS.
+
+Wir empfehlen dringend, Twenty hinter einem Reverse-Proxy mit SSL-Beendigung für optimale Sicherheit und Funktionalität zu konfigurieren.
+
+#### Konfiguration der `SERVER_URL`
+
+1. **Bestimmen Sie Ihre Zugriffs-URL**
+ * **Ohne Reverse-Proxy (Direkter Zugriff):**
+
+ Wenn Sie direkt ohne Reverse-Proxy auf die Anwendung zugreifen:
+
+ ```ini
+ SERVER_URL=http://your-domain-or-ip:3000
+ ```
+
+ * **Mit Reverse-Proxy (Standard-Ports):**
+
+ Wenn Sie einen Reverse-Proxy wie Nginx oder Traefik verwenden und SSL konfiguriert haben:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip
+ ```
+
+ * **Mit Reverse-Proxy (Benutzerdefinierte Ports):**
+
+ Wenn Sie nicht standardisierte Ports verwenden:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip:custom-port
+ ```
+
+2. **Aktualisieren Sie die `.env` Datei**
+
+ Öffnen Sie Ihre `.env`-Datei und aktualisieren Sie die `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://your-domain-or-ip:your-port
+ ```
+
+ **Beispiele:**
+
+ * Direkter Zugriff ohne SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Zugriff über Domain mit SSL:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **Starten Sie die Anwendung neu**
+
+ Damit die Änderungen wirksam werden, starten Sie die Docker-Container neu:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Überlegungen
+
+* **Reverse Proxy-Konfiguration:**
+
+ Stellen Sie sicher, dass Ihr Reverse-Proxy Anfragen an den richtigen internen Port weiterleitet (`3000` standardmäßig). Configure SSL termination and any necessary headers.
+
+* **Firewall-Einstellungen:**
+
+ Öffnen Sie die notwendigen Ports in Ihrer Firewall, um externen Zugriff zu ermöglichen.
+
+* **Konsistenz:**
+
+ Die `SERVER_URL` muss mit der Art und Weise übereinstimmen, wie Nutzer in ihren Browsern auf Ihre Anwendung zugreifen.
+
+#### Persistenz
+
+* **Data Volumes:**
+
+ The Docker Compose configuration uses volumes to persist data for the database and server storage.
+
+* **Zustandslose Umgebungen:**
+
+ If deploying to a stateless environment (e.g., certain cloud services), configure external storage to persist data.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Fehlerbehebung
+
+Sollten Sie auf ein Problem stoßen, schauen Sie sich die [Fehlerbehebung](/l/de/developers/self-host/capabilities/troubleshooting) für Lösungen an.
diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..7772bb9f6c
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: Einrichtung
+---
+
+# Konfigurationsverwaltung
+
+
+ **Erstinstallation?** Folgen Sie dem [Docker Compose-Installationshandbuch](/l/de/developers/self-host/capabilities/docker-compose), um Twenty zum Laufen zu bringen, und kehren Sie dann hierher zurück, um die Konfiguration fortzusetzen.
+
+
+Twenty bietet **zwei Konfigurationsmodi**, um unterschiedlichen Implementierungsbedürfnissen gerecht zu werden:
+
+**Admin panel access:** Only users with admin privileges (`canAccessFullAdminPanel: true`) can access the configuration interface.
+
+## 1. Admin-Panel-Konfiguration (Standard)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # Standard
+```
+
+**Die meiste Konfiguration erfolgt über die Benutzeroberfläche** nach der Installation:
+
+1. Greifen Sie auf Ihre Twenty-Instanz zu (normalerweise `http://localhost:3000`)
+2. Gehen Sie zu **Einstellungen / Admin-Panel / Konfigurationsvariablen**
+3. Konfigurieren Sie Integrationen, E-Mail, Speicherung und mehr
+4. Änderungen werden sofort wirksam (innerhalb von 15 Sekunden für Mehrcontainer-Bereitstellungen)
+
+
+ **Mehr-Container-Bereitstellungen:** Bei Verwendung der Datenbankkonfiguration (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`) lesen sowohl Server- als auch Worker-Container aus derselben Datenbank. Änderungen im Admin-Panel wirken sich auf beide Container aus, wodurch die Notwendigkeit entfällt, Umgebungsvariablen zwischen den Containern zu duplizieren (außer Infrastrukturvariablen).
+
+
+**Was Sie über das Admin-Panel konfigurieren können:**
+
+* **Authentifizierung** - Google/Microsoft OAuth, Passwort-Einstellungen
+* **E-Mail** - SMTP-Einstellungen, Vorlagen, Verifizierung
+* **Speicherung** - S3-Konfiguration, lokale Speicherpfade
+* **Integrationen** - Gmail, Google Kalender, Microsoft-Dienste
+* **Arbeitsablauf & Ratenbegrenzung** - Ausführungslimits, API-Drosselung
+* **Und vieles mehr...**
+
+
+
+
+ Jede Variable ist mit Beschreibungen in Ihrem Admin-Panel dokumentiert unter **Einstellungen → Admin-Panel → Konfigurationsvariablen**.
+ Einige Infrastruktureinstellungen wie Datenbankverbindungen (`PG_DATABASE_URL`), Server-URLs (`SERVER_URL`) und Anwendungsgeheimnisse (`APP_SECRET`) können nur über die `.env`-Datei konfiguriert werden.
+
+ [Vollständige technische Referenz →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Nur-Umgebungs-Konfiguration
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Alle Konfiguration wird über `.env`-Dateien verwaltet:**
+
+1. Setzen Sie `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` in Ihrer `.env`-Datei
+2. Fügen Sie alle Konfigurationsvariablen zu Ihrer `.env`-Datei hinzu
+3. Starten Sie Container neu, damit Änderungen wirksam werden
+4. Im Admin-Panel werden aktuelle Werte angezeigt, können jedoch nicht geändert werden
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Gmail- & Google Kalender-Integration
+
+### Erstellen Sie ein Projekt auf Google Cloud
+
+1. Gehen Sie zum [Google Cloud-Konsole](https://console.cloud.google.com/)
+2. Erstellen Sie ein neues Projekt oder wählen Sie ein vorhandenes aus
+3. Aktivieren Sie diese APIs:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Kalender API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### OAuth konfigurieren
+
+1. Gehen Sie zu [Anmeldedaten](https://console.cloud.google.com/apis/credentials)
+2. Erstellen Sie eine OAuth 2.0-Client-ID
+3. Fügen Sie diese Weiterleitungs-URIs hinzu:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### In Twenty konfigurieren
+
+1. Gehen Sie zu **Einstellungen → Admin-Panel → Konfigurationsvariablen**
+2. Finden Sie den Abschnitt **Google Auth**
+3. Setzen Sie diese Variablen:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Nur-Umgebungsmodus:** Wenn Sie `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` setzen, fügen Sie diese Variablen stattdessen Ihrer `.env`-Datei hinzu.
+
+
+**Erforderliche Scopes** (automatisch konfiguriert):
+[Siehe relevanten Quellcode](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Wenn Ihre Anwendung im Testmodus ist
+
+Wenn Ihre Anwendung im Testmodus ist, müssen Sie Testbenutzer zu Ihrem Projekt hinzufügen.
+
+Fügen Sie im [OAuth-Zustimmungsbildschirm](https://console.cloud.google.com/apis/credentials/consent) Ihre Testbenutzer dem Abschnitt "Testbenutzer" hinzu.
+
+## Microsoft 365-Integration
+
+
+ Benutzer müssen eine [Microsoft 365-Lizenz](https://admin.microsoft.com/Adminportal/Home) besitzen, um die Kalender- und Messaging-API verwenden zu können. Ohne eine solche Lizenz können sie ihr Konto nicht mit Twenty synchronisieren.
+
+
+### Erstellen Sie ein Projekt in Microsoft Azure
+
+Sie müssen ein Projekt in [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) erstellen und die Anmeldeinformationen erhalten.
+
+### APIs aktivieren
+
+Aktivieren Sie diese APIs im "Berechtigungen"-Bereich der Microsoft Azure-Konsole:
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Kalender.Read
+* Microsoft Graph: Benutzer.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profil
+* Microsoft Graph: offline_access
+
+Hinweis: "Mail.ReadWrite" und "Mail.Send" sind nur erforderlich, wenn Sie E-Mails mit unseren Workflow-Aktionen senden möchten. Sie können stattdessen "Mail.Read" verwenden, wenn Sie nur E-Mails empfangen möchten.
+
+### Autorisierte Redirect-URIs
+
+Sie müssen die folgenden Weiterleitungs-URIs zu Ihrem Projekt hinzufügen:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### In Twenty konfigurieren
+
+1. Gehen Sie zu **Einstellungen → Admin-Panel → Konfigurationsvariablen**
+2. Finden Sie den Abschnitt **Microsoft Auth**
+3. Setzen Sie diese Variablen:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Nur-Umgebungsmodus:** Wenn Sie `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` setzen, fügen Sie diese Variablen stattdessen Ihrer `.env`-Datei hinzu.
+
+
+### Scopes konfigurieren
+
+[Siehe relevanten Quellcode](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'e-Mail'
+* 'profil'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Kalender.Read'
+
+### Wenn Ihre Anwendung im Testmodus ist
+
+Wenn Ihre Anwendung im Testmodus ist, müssen Sie Testbenutzer zu Ihrem Projekt hinzufügen.
+
+Fügen Sie Ihre Testbenutzer dem Abschnitt "Benutzer und Gruppen" hinzu.
+
+## Hintergrundaufgaben für Kalender & Messaging
+
+Nachdem Sie Gmail-, Google Kalender- oder Microsoft 365-Integrationen konfiguriert haben, müssen Sie die Hintergrundaufgaben starten, die Daten synchronisieren.
+
+Registrieren Sie die folgenden wiederkehrenden Aufgaben in Ihrem Worker-Container:
+
+```bash
+# von Ihrem Worker-Container
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## E-Mail-Konfiguration
+
+1. Gehen Sie zu **Einstellungen → Admin-Panel → Konfigurationsvariablen**
+2. Finden Sie den Abschnitt **E-Mail**
+3. Konfigurieren Sie Ihre SMTP-Einstellungen:
+
+
+
+ Sie müssen ein [App-Passwort](https://support.google.com/accounts/answer/185833) bereitstellen.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ Beachten Sie, dass, wenn Sie die Zwei-Faktor-Authentifizierung aktiviert haben, ein [App-Passwort](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9) bereitgestellt werden muss.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** ist ein Fake-SMTP-Mailserver für Entwicklung und Tests.
+
+ * Führen Sie das smtp4dev-Image aus: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Rufen Sie die smtp4dev-Benutzeroberfläche hier auf: [http://localhost:8090](http://localhost:8090)
+ * Setzen Sie die folgenden Variablen:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Nur-Umgebungsmodus:** Wenn Sie `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` setzen, fügen Sie diese Variablen stattdessen Ihrer `.env`-Datei hinzu.
+
diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..1edf39a1d2
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,226 @@
+---
+title: Fehlerbehebung
+---
+
+## Fehlerbehebung
+
+Wenn Sie bei der Einrichtung der Entwicklungsumgebung, dem Upgrade Ihrer Instanz oder dem Self-Hosting auf Probleme stoßen, finden Sie hier einige Lösungen für häufige Probleme.
+
+### Selbsthosting
+
+#### Erste Installation führt zu `password authentication failed for user "postgres"`
+
+🚨 **WICHTIG: Diese Lösung ist NUR für Neuinstallationen** 🚨
+Wenn Sie bereits eine bestehende Twenty-Instanz mit Produktionsdaten haben, **NICHT** diesen Schritten folgen, da diese permanent Ihre Datenbank löschen!
+
+Bei der ersten Installation von Twenty möchten Sie möglicherweise das Standard-Datenbankpasswort ändern.
+Das während der ersten Installation gesetzte Passwort wird dauerhaft im Datenbank-Volumen gespeichert. Wenn Sie später versuchen, dieses Passwort in Ihrer Konfiguration zu ändern, ohne das alte Volumen zu entfernen, erhalten Sie Authentifizierungsfehler, da die Datenbank noch das ursprüngliche Passwort verwendet.
+
+⚠️ WARNUNG: Die folgenden Schritte werden ALLE Datenbankdaten PERMANENT LÖSCHEN! ⚠️
+Fahren Sie nur fort, wenn dies eine Neuinstallation ohne wichtige Daten ist.
+
+Um das `PG_DATABASE_PASSWORD` zu aktualisieren, müssen Sie:
+
+```sh
+# Aktualisieren Sie das PG_DATABASE_PASSWORD in .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR-Zeilenumbrüche gefunden [Windows]
+
+Dies liegt an den Zeilenumbruchzeichen von Windows und der git-Konfiguration. Versuchen Sie Folgendes auszuführen:
+
+```
+git config --global core.autocrlf false
+```
+
+Löschen Sie dann das Repository und klonen Sie es erneut.
+
+#### Fehlendes Metadaten-Schema
+
+Während der Twenty-Installation müssen Sie Ihre Postgres-Datenbank mit den richtigen Schemata, Erweiterungen und Benutzern bereitstellen.
+Wenn Sie diese Bereitstellung erfolgreich durchführen, sollten Sie `default` und `metadata` Schemata in Ihrer Datenbank haben.
+Falls nicht, stellen Sie sicher, dass auf Ihrem Rechner nicht mehr als eine Postgres-Instanz läuft.
+
+#### Modul 'twenty-emails' oder seine entsprechenden Typdeklarationen nicht gefunden.
+
+Sie müssen das Paket `twenty-emails` erstellen, bevor Sie die Initialisierung der Datenbank mit `npx nx run twenty-emails:build` ausführen.
+
+#### Fehlendes Twenty-x Paket
+
+Stellen Sie sicher, dass Sie `yarn` im Root-Verzeichnis ausführen und dann `npx nx server:dev twenty-server` ausführen. Wenn das immer noch nicht funktioniert, versuchen Sie, das fehlende Paket manuell zu erstellen.
+
+#### Lint beim Speichern funktioniert nicht
+
+Normalerweise sollte dies sofort mit der installierten eslint-Erweiterung funktionieren. Wenn es nicht funktioniert, versuchen Sie, dies zu Ihren vscode-Einstellungen hinzuzufügen (im Entwicklungscontainer-Bereich):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### Beim Ausführen von `npx nx start` oder `npx nx start twenty-front` wird ein Speicherfehler angezeigt
+
+Kommentieren Sie in `packages/twenty-front/.env` `VITE_DISABLE_TYPESCRIPT_CHECKER=true` und `VITE_DISABLE_ESLINT_CHECKER=true` aus, um Hintergrundprüfungen zu deaktivieren und den RAM-Bedarf zu reduzieren.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Wenn Sie zum Beispiel am Server arbeiten, führen Sie nur `npx nx worker twenty-server` aus.
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
+
+Eine Möglichkeit ist, den Befehl unten im Terminal auszuführen oder ihn im .bashrc-Profil hinzuzufügen, um ihn automatisch einzurichten:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+Das Flag --max-old-space-size=8192 setzt ein oberes Limit von 8GB für den Node.js-Heap; der Verbrauch steigt mit dem Bedarf der Anwendung.
+Referenz: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. Bei Twenty haben wir festgestellt, dass einige vscode-Erweiterungen viel RAM verwenden, daher deaktivieren wir sie vorübergehend.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### Beim Ausführen von `npx nx start` gibt es seltsame [0] und [1] in den Logs
+
+Das ist zu erwarten, da der Befehl `npx nx start` im Hintergrund weitere Befehle ausführt.
+
+#### Es werden keine E-Mails gesendet
+
+Meistens liegt das daran, dass der `worker` nicht im Hintergrund läuft. Versuchen Sie auszuführen
+
+```
+npx nx worker twenty-server
+```
+
+#### Kann mein Microsoft 365-Konto nicht verbinden
+
+Meistens liegt das daran, dass Ihr Administrator die Microsoft 365-Lizenz für Ihr Konto nicht aktiviert hat. Überprüfen Sie [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Wenn Sie einen Fehlercode `AADSTS50020` haben, bedeutet dies wahrscheinlich, dass Sie ein privates Microsoft-Konto verwenden. Dies wird derzeit nicht unterstützt. Weitere Informationen [hier](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### Beim Ausführen von `yarn` erscheinen Warnungen in der Konsole
+
+Warnungen informieren über das Ziehen zusätzlicher Abhängigkeiten, die nicht explizit in `package.json` angegeben sind. Solange kein schwerwiegender Fehler auftritt, sollte alles wie erwartet funktionieren.
+
+#### Wenn der Benutzer auf die Anmeldeseite zugreift, wird ein Fehler über einen unberechtigten Benutzer, der versucht, auf den Arbeitsbereich zuzugreifen, in den Logs angezeigt
+
+Das ist zu erwarten, da der Benutzer ohne Anmeldung nicht berechtigt ist, da seine Identität nicht verifiziert ist.
+
+#### Wie überprüfen Sie, ob Ihr Worker läuft?
+
+* Gehen Sie zu [webhook-test.com](https://webhook-test.com/) und kopieren Sie **Ihre einzigartige Webhook-URL**.
+
+
+
+
+
+* Öffnen Sie Ihre Twenty-App, navigieren Sie zu `/settings`, und aktivieren Sie den **Erweitert**-Schalter unten links auf dem Bildschirm.
+* Erstellen Sie einen neuen Webhook.
+* Fügen Sie **Ihre einzigartige Webhook-URL** in das Feld **Endpoint-Url** in Twenty ein. Stellen Sie die **Filter** auf `Companies` und `Created` ein.
+
+
+
+
+
+* Gehen Sie zu `/objects/companies` und erstellen Sie einen neuen Unternehmenseintrag.
+* Kehren Sie zu [webhook-test.com](https://webhook-test.com/) zurück und prüfen Sie, ob ein neuer **POST-Anfrage** empfangen wurde.
+
+
+
+
+
+* Wenn eine **POST-Anfrage** empfangen wird, läuft Ihr Worker erfolgreich. Andernfalls müssen Sie Ihren Worker beheben.
+
+#### Front-End startet nicht und gibt Fehler TS5042 zurück: Option "project" kann nicht mit Quelldateien auf der Befehlszeile gemischt werden
+
+Kommentieren Sie das Checker-Plugin in `packages/twenty-ui/vite-config.ts` wie im folgenden Beispiel aus
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Admin-Panel nicht zugänglich
+
+Führen Sie den folgenden Befehl im Datenbankcontainer aus, um Zugriff auf das Admin-Panel zu erhalten: `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';`
+
+### 1-Klick Docker Compose
+
+#### Kann mich nicht einloggen
+
+Wenn Sie sich nach der Einrichtung nicht anmelden können:
+
+1. Führen Sie die folgenden Befehle aus:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Starten Sie die Docker-Container neu:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Beachten Sie, dass der database:reset-Befehl Ihre Datenbank vollständig löscht und neu erstellt.
+
+#### Verbindungsprobleme hinter einem Reverse-Proxy
+
+Wenn Sie Twenty hinter einem Reverse-Proxy ausführen und Verbindungsprobleme haben:
+
+1. **SERVER_URL überprüfen:**
+
+ Stellen Sie sicher, dass `SERVER_URL` in Ihrer `.env`-Datei mit Ihrer externen Zugriffs-URL übereinstimmt, einschließlich `https`, falls SSL aktiviert ist.
+
+2. **Reverse-Proxy-Einstellungen prüfen:**
+
+ * Stellen Sie sicher, dass Ihr Reverse-Proxy Anfragen korrekt an den Twenty-Server weiterleitet.
+ * Stellen Sie sicher, dass Header wie `X-Forwarded-For` und `X-Forwarded-Proto` korrekt gesetzt sind.
+
+3. **Dienste neu starten:**
+
+ Starten Sie nach Änderungen sowohl den Reverse-Proxy als auch die Twenty-Container neu.
+
+#### Fehler beim Hochladen eines Bildes – Berechtigung verweigert
+
+Das Ändern des Datenordner-Eigentums auf dem Host von root zu einem anderen Benutzer und Gruppe löst dieses Problem.
+
+## Hilfe erhalten
+
+Wenn Sie auf Probleme stoßen, die in diesem Leitfaden nicht behandelt werden:
+
+* Protokolle überprüfen:
+
+ Überprüfen Sie die Container-Logs auf Fehlermeldungen:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Unterstützung aus der Community:
+
+ Wenden Sie sich an die [Twenty Community](https://github.com/twentyhq/twenty/issues) oder [Support-Kanäle](https://discord.gg/cx5n4Jzs57) für Unterstützung.
diff --git a/packages/twenty-docs/l/de/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/de/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..08b1adffe6
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Upgrade-Anleitung
+---
+
+## Allgemeine Richtlinien
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Wenn Sie Docker Compose verwendet haben, befolgen Sie diese Schritte:
+
+1. Schalten Sie Twenty in einem Terminal auf dem Host, auf dem Twenty läuft, mit `docker compose down` aus.
+
+2. Aktualisieren Sie die Version, indem Sie den `TAG`-Wert in der .env-Datei in der Nähe Ihrer docker-compose ändern. (Wir empfehlen die Verwendung der Version `major.minor`, wie z.B. `v0.53`)
+
+3. Schalten Sie Twenty mit `docker compose up -d` wieder ein.
+
+Wenn Sie Ihre Instanz um einige Versionen aktualisieren möchten, z. B. von v0.33.0 auf v0.35.0, müssen Sie Ihre Instanz der Reihe nach upgraden, in diesem Beispiel von v0.33.0 auf v0.34.0 und dann von v0.34.0 auf v0.35.0.
+
+**Stellen Sie sicher, dass Sie nach jeder aktualisierten Version ein nicht-korrumpiertes Backup haben.**
+
+## Versionsspezifische Upgrade-Schritte
+
+## v1.0
+
+Hallo Twenty v1.0! 🎉
+
+## v0.60
+
+### Leistungsverbesserungen
+
+Alle Interaktionen mit der Metadata-API wurden für eine bessere Leistung optimiert, insbesondere für die Manipulation von Objektmetadaten und die Erstellung von Arbeitsbereichen.
+
+Wir haben unsere Caching-Strategie umstrukturiert, um Cache-Treffer gegenüber Datenbankabfragen zu priorisieren, was die Leistung von Metadata-API-Operationen erheblich verbessert.
+
+Wenn Sie nach dem Upgrade auf Laufzeitprobleme stoßen, müssen Sie möglicherweise Ihren Cache leeren, um sicherzustellen, dass er mit den neuesten Änderungen synchronisiert ist. Führen Sie diesen Befehl in Ihrem Twenty-Server-Container aus:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.55-Image zu verwenden.
+
+Sie müssen keinen Befehl mehr ausführen, das neue Image kümmert sich automatisch um alle erforderlichen Migrationen.
+
+### Fehler: `Benutzer hat keine Berechtigung`
+
+Wenn Sie nach dem Upgrade bei den meisten Anfragen auf Autorisierungsfehler stoßen, müssen Sie möglicherweise Ihren Cache leeren, um die neuesten Berechtigungen neu zu berechnen.
+
+Führen Sie dies in Ihrem `twenty-server`-Container aus:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Dieses Problem ist spezifisch für diese Twenty-Version und sollte bei zukünftigen Upgrades nicht erforderlich sein.
+
+### v0.54
+
+Seit Version `0.53` sind keine manuellen Aktionen mehr erforderlich.
+
+#### Veraltung des Metadatenschemas
+
+Wir haben das `metadata`-Schema in das `core`-Schema integriert, um die Datenwiederherstellung aus `TypeORM` zu vereinfachen.
+Wir haben den `migrate`-Befehlschritt in den `upgrade`-Befehl integriert. Wir empfehlen nicht, `migrate` manuell in einem Ihrer Server-/Arbeitsprozess-Container auszuführen.
+
+### Ab v0.53
+
+Ab Version `0.53` wird das Upgrade programmgesteuert innerhalb des `DockerFile` durchgeführt, was bedeutet, dass Sie von nun an keinen Befehl mehr manuell ausführen müssen.
+
+Stellen Sie sicher, dass Sie Ihre Instanz weiterhin schrittweise aktualisieren, ohne eine Hauptversion zu überspringen (z. B. ist `0.43.3` auf `0.44.0` erlaubt, aber `0.43.1` auf `0.45.0` nicht), sonst könnte dies zu einer Desynchronisation der Arbeitsbereichsversion führen, die zu Laufzeitfehlern und fehlenden Funktionalitäten führen könnte.
+
+Um zu überprüfen, ob ein Arbeitsbereich korrekt migriert wurde, können Sie seine Version in der Datenbank in der Tabelle `core.workspace` überprüfen.
+
+Es sollte immer im Bereich Ihrer aktuellen Twenty-Instanz `major.minor`-Version liegen, Sie können Ihre Instanzversion im Admin-Panel (unter `/settings/admin-panel`, zugänglich, wenn Ihr Benutzer die Eigenschaft `canAccessFullAdminPanel` in der Datenbank auf true gesetzt hat) oder durch Ausführen von `echo $APP_VERSION` in Ihrem `twenty-server`-Container anzeigen.
+
+Um eine desynchronisierte Arbeitsbereichsversion zu korrigieren, müssen Sie von der entsprechenden Twenty-Version aus aktualisieren, indem Sie die zugehörige Upgrade-Anleitung der Reihe nach befolgen, bis Sie die gewünschte Version erreichen.
+
+#### Entfernung des `auditLog`
+
+Wir haben das standardmäßige auditLog-Objekt entfernt, was bedeutet, dass sich die Größe Ihres Backups nach dieser Migration möglicherweise erheblich reduziert.
+
+### v0.51 auf v0.52
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.52-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Ich habe einen Arbeitsbereich, der in der Version zwischen `0.52.0` und `0.52.6` blockiert ist.
+
+Leider wurden `0.52.0` und `0.52.6` vollständig von dockerHub entfernt.
+Sie müssen Ihre Arbeitsbereichsversion manuell auf `0.51.0` in der Datenbank aktualisieren und mit der Twenty-Version `0.52.11` gemäß der obigen Upgrade-Anleitung aktualisieren.
+
+### v0.50 bis v0.51
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.51-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 bis v0.50.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.50.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Docker-compose.yml Verlagerung
+
+Diese Version enthält eine Mutation von `docker-compose.yml`, um dem `worker`-Dienst Zugriff auf das `server-local-data`-Volume zu geben.
+Bitte aktualisieren Sie Ihre lokale `docker-compose.yml` mit der [docker-compose.yml v0.50.0](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 bis v0.44.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.44.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 bis v0.43.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.43.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+In dieser Version haben wir auch auf das postgres:16-Image in docker-compose.yml umgestellt.
+
+#### (Option 1) Datenbankmigration
+
+Es ist in Ordnung, das vorhandene postgres-spilo-Image zu behalten, aber Sie müssen die Version in Ihrer docker-compose.yml auf 0.43.0 einfrieren.
+
+#### (Option 2) Datenbankmigration
+
+Wenn Sie Ihre Datenbank auf das neue postgres:16-Image migrieren möchten, befolgen Sie bitte diese Schritte:
+
+1. Dumpen Sie Ihre Datenbank aus dem alten postgres-spilo-Container
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Stellen Sie sicher, dass Ihre Dump-Datei nicht leer ist.
+
+2. Aktualisieren Sie Ihre docker-compose.yml, um das postgres:16-Image gemäß der [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) zu verwenden.
+
+3. Stellen Sie die Datenbank in den neuen postgres:16-Container wieder her.
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {IHR_POSTGRES_USER} -d {IHR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 bis v0.42.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.42.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Umgebungsvariablen**
+
+* Entfernt: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Hinzugefügt: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 bis v0.41.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.41.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Umgebungsvariablen**
+
+* Entfernt: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 bis v0.40.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.40.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Umgebungsvariablen**
+
+* Hinzugefügt: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 bis v0.35.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.35.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.35` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+**Umgebungsvariablen**
+
+* Wir haben `ENABLE_DB_MIGRATIONS` durch `DISABLE_DB_MIGRATIONS` ersetzt (Standardwert ist jetzt `false`, Sie müssen wahrscheinlich nichts einstellen)
+
+### v0.33.0 bis v0.34.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.34.0-Image zu verwenden.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.34` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+**Umgebungsvariablen**
+
+* Entfernt: `FRONT_BASE_URL`
+* Hinzugefügt: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Wir haben die Handhabung der Frontend-URL aktualisiert.
+Sie können nun die Frontend-URL mit den Variablen `FRONT_DOMAIN`, `FRONT_PROTOCOL` und `FRONT_PORT` festlegen.
+Wenn FRONT_DOMAIN nicht gesetzt ist, wird die Frontend-URL auf `SERVER_URL` zurückfallen.
+
+### v0.32.0 bis v0.33.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.33.0-Image zu verwenden.
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+Der `yarn command:prod cache:flush`-Befehl leert den Redis-Cache.
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.33` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+Ab dieser Version wurde das twenty-postgres-Image für DB veraltet und es wird stattdessen twenty-postgres-spilo verwendet.
+Wenn Sie weiterhin das twenty-postgres-Image verwenden möchten, ersetzen Sie einfach `twentycrm/twenty-postgres:${TAG}` durch `twentycrm/twenty-postgres` in docker-compose.yml.
+
+### v0.31.0 bis v0.32.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.32.0-Image zu verwenden.
+
+**Schema- und Datenmigration**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.32` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+**Umgebungsvariablen**
+
+Wir haben die Handhabung der Redis-Verbindung aktualisiert.
+
+* Entfernt: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Hinzugefügt: `REDIS_URL`
+
+Aktualisieren Sie Ihre `.env`-Datei, um die neue `REDIS_URL`-Variable anstelle der einzelnen Redis-Verbindungsparameter zu verwenden.
+
+Wir haben auch die Handhabung der JWT-Token vereinfacht.
+
+* Entfernt: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Hinzugefügt: `APP_SECRET`
+
+Aktualisieren Sie Ihre `.env`-Datei, um die neue `APP_SECRET`-Variable anstelle der einzelnen Token-Geheimnisse zu verwenden (Sie können das gleiche Geheimnis wie zuvor verwenden oder einen neuen zufälligen String generieren).
+
+**Verbundenes Konto**
+
+Wenn Sie ein verbundenes Konto verwenden, um Ihre Google-E-Mails und -Kalender zu synchronisieren, müssen Sie die [People API](https://developers.google.com/people) in Ihrer Google Admin-Konsole aktivieren.
+
+### v0.30.0 bis v0.31.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.31.0-Image zu verwenden.
+
+**Schema- und Datenmigration**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.31` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+### v0.24.0 bis v0.30.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.30.0-Image zu verwenden.
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Wir haben unser [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) aktualisiert, um dies zu reflektieren.
+Stellen Sie sicher, dass Sie Ihre Konfiguration aktualisieren und Ihre Umgebungsvariablen entsprechend anpassen:
+
+```
+REDIS_HOST={ihr-redis-host}
+REDIS_PORT={ihr-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Schema- und Datenmigration**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.30` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+### v0.23.0 bis v0.24.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.24.0-Image zu verwenden.
+
+Führen Sie die folgenden Befehle aus:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbankstruktur (Kern- und Metadatenschemata) an
+Die `yarn command:prod upgrade-0.24` kümmert sich um die Datenmigration aller Arbeitsbereiche.
+
+### v0.22.0 bis v0.23.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.23.0-Image zu verwenden.
+
+Führen Sie die folgenden Befehle aus:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbank an.
+Die `yarn command:prod upgrade-0.23` kümmert sich um die Datenmigration, einschließlich der Übertragung von Aktivitäten auf Aufgaben/Notizen.
+
+### v0.21.0 bis v0.22.0
+
+Aktualisieren Sie Ihre Twenty-Instanz, um das v0.22.0-Image zu verwenden.
+
+Führen Sie die folgenden Befehle aus:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+Der `yarn database:migrate:prod`-Befehl wendet die Migrationen auf die Datenbank an.
+Der Befehl `yarn command:prod workspace:sync-metadata -f` synchronisiert die Definitionen der Standardobjekte mit den Metadaten-Tabellen und wendet erforderliche Migrationen auf bestehende Arbeitsbereiche an.
+Der Befehl `yarn command:prod upgrade-0.22` führt spezifische Datenumwandlungen durch, um sich an die neuen Objekt-Standardanfrage-Instrumentierungsoptionen anzupassen.
diff --git a/packages/twenty-docs/l/de/developers/self-host/self-host.mdx b/packages/twenty-docs/l/de/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..cc09971c88
--- /dev/null
+++ b/packages/twenty-docs/l/de/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Überblick
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Erste Schritte
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/de/navigation.json b/packages/twenty-docs/l/de/navigation.json
index bffc3d1c7f..671cb60a9b 100644
--- a/packages/twenty-docs/l/de/navigation.json
+++ b/packages/twenty-docs/l/de/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Benutzerhandbuch",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Erste Schritte"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Datenmodell"
+ "label": "Datenmodell",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "CRM-Grundlagen"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Ansichten"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Workflows"
+ "label": "Workflows",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Brauchen Sie mehr Hilfe"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Zusammenarbeit"
+ "ai": {
+ "label": "KI",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integrationen & API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Berichterstattung"
+ "dashboards": {
+ "label": "Dashboards",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Abrechnung",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Einstellungen"
- },
- "pricing": {
- "label": "Preisgestaltung"
- },
- "resources": {
- "label": "Ressourcen"
+ "label": "Einstellungen",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Entwickler"
},
- "devGettingStarted": {
- "label": "Erste Schritte",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Selbst-Hosting"
- },
- "apiAndWebhooks": {
- "label": "API und Webhooks"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Mitwirken",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Frontend-Entwicklung",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Frontend-Entwicklung",
"groups": {
- "display": {
- "label": "Anzeige"
- },
- "feedback": {
- "label": "Feedback"
- },
- "input": {
- "label": "Input"
- },
- "navigation": {
- "label": "Navigation"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Anzeigen"
+ },
+ "feedback": {
+ "label": "Rückmeldung"
+ },
+ "input": {
+ "label": "Eingabe"
+ },
+ "navigation": {
+ "label": "Navigation"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Backend-Entwicklung"
}
}
- },
- "backendDevelopment": {
- "label": "Backend-Entwicklung"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/de/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..280352cefc
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: App-Tooltip
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Eine kurze Nachricht, die zusätzliche Informationen anzeigt, wenn ein Benutzer mit einem Element interagiert.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Customer Insights
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | ---------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionale CSS-Klasse für zusätzliche Stilgebung |
+ | anchorSelect | CSS-Selektor | Selektor für den Tooltip-Anker (das Element, das den Tooltip triggert) |
+ | Inhalt | string | Der Inhalt, den Sie im Tooltip anzeigen möchten |
+ | delayHide | nummer | Die Verzögerung in Sekunden, bis der Tooltip nach dem Verlassen des Ankers ausgeblendet wird |
+ | offset | nummer | Der Versatz in Pixeln zur Positionierung des Tooltips |
+ | noArrow | boolesch | Wenn `wahr`, wird der Pfeil am Tooltip ausgeblendet |
+ | isOpen | boolesch | Wenn `wahr`, ist der Tooltip standardmäßig geöffnet |
+ | place | `PlacesType` Zeichenkette von `react-tooltip` | Gibt die Platzierung des Tooltips an. Werte umfassen `unten`, `links`, `rechts`, `oben`, `oben-start`, `oben-end`, `rechts-start`, `rechts-end`, `unten-start`, `unten-end`, `links-start`, und `links-end` |
+ | positionStrategy | `PositionStrategy` Zeichenkette von `react-tooltip` | Positionsstrategie für den Tooltip. Hat zwei Werte: `absolut` und `fest` |
+
+
+
+## Überlaufender Text mit Tooltip
+
+Behandelt überlaufenden Text und zeigt einen Tooltip an, wenn der Text überläuft.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | ----------------------------------------------------------------- |
+ | text | Zeichenkette | Der Inhalt, den Sie im überlaufenden Textbereich anzeigen möchten |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/de/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..4a0f8cfafd
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Häkchen
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Stellt eine erfolgreiche oder abgeschlossene Aktion dar.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Erweitert `React.ComponentPropsWithoutRef<'div'>` und akzeptiert alle Eigenschaften eines regulären `div`-Elements.
+
+
+
+## Animiertes Häkchen
+
+Stellt ein Häkchen-Symbol mit der zusätzlichen Funktion der Animation dar.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ------------- | ------------ | ------------------------------------- | ------------ |
+ | isAnimating | boolesch | Steuert, ob das Häkchen animiert wird | falsch |
+ | farbe | Zeichenkette | Farbe des Häkchens | |
+ | Dauer | nummer | Die Dauer der Animation in Sekunden | 0,5 Sekunden |
+ | größe | nummer | Die Größe des Häkchens | 28 Pixel |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/de/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..ca31563496
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Chip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Ein visuelles Element, das Sie als klickbaren oder nicht klickbaren Container mit einem Etikett, optionalen linken und rechten Komponenten und verschiedenen Stiloptionen verwenden können, um Etiketten und Tags anzuzeigen.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------------------- | ------------------------------------------------------------------------------------------------------ |
+ | linkToEntity | Zeichenkette | Der Link zur Entität |
+ | entityId | Zeichenkette | Der eindeutige Identifikator für die Entität |
+ | name | string | Der Name der Entität |
+ | pictureUrl | Zeichenkette | s picture", |
+ | avatarType | Avatar-Typ | Der Typ des Avatars, den Sie anzeigen möchten. Hat zwei Optionen: `abgerundet` und `quadratisch` |
+ | Variante | `EntityChipVariante` enum | Variante des Entity-Chips, die Sie anzeigen möchten. Hat zwei Optionen: `regelmäßig` und `transparent` |
+ | LeftIcon | Icon-Komponente | Eine React-Komponente, die ein Symbol darstellt. Wird auf der linken Seite des Chips angezeigt |
+
+
+
+## Beispiele
+
+### Transparenter deaktivierter Chip
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Deaktivierter Chip mit Tooltip
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Entity-Chip
+
+Ein Chip-ähnliches Element, um Informationen über eine Entität anzuzeigen.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------------------- | ------------------------------------------------------------------------------------------------------ |
+ | linkToEntity | string | Der Link zur Entität |
+ | entityId | string | Der eindeutige Identifikator für die Entität |
+ | name | string | Der Name der Entität |
+ | pictureUrl | Zeichenfolge | s picture", |
+ | avatarType | Avatar-Typ | Der Typ des Avatars, den Sie anzeigen möchten. Hat zwei Optionen: `abgerundet` und `quadratisch` |
+ | Variante | `EntityChipVariante` enum | Variante des Entity-Chips, die Sie anzeigen möchten. Hat zwei Optionen: `regelmäßig` und `transparent` |
+ | LeftIcon | Icon-Komponente | Eine React-Komponente, die ein Symbol darstellt. Wird auf der linken Seite des Chips angezeigt |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/de/twenty-ui/display/icons.mdx
index 549337486a..7fa421fd98 100644
--- a/packages/twenty-docs/l/de/twenty-ui/display/icons.mdx
+++ b/packages/twenty-docs/l/de/twenty-ui/display/icons.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/objects/objects.png
---
-
+
Eine Liste von Symbolen, die in unserer App verwendet werden.
@@ -14,39 +14,35 @@ Eine Liste von Symbolen, die in unserer App verwendet werden.
Wir verwenden Tabler-Symbole für React in der gesamten App.
+
+
-
+ ```
+ yarn add @tabler/icons-react
+ ```
+
-```
-yarn add @tabler/icons-react
-```
+
+ Sie können jedes Symbol als Komponente importieren. Hier ist ein Beispiel:
-
+
-
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
-Sie können jedes Symbol als Komponente importieren. Here's an example:
-
-```jsx
-import { IconArrowLeft } from "@tabler/icons-react";
-
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-
-| Props | Typ | Beschreibung | Standard |
-| ------ | ------------ | ----------------------------------------- | ------------ |
-| größe | nummer | Die Höhe und Breite des Symbols in Pixeln | 24 |
-| farbe | Zeichenkette | Die Farbe der Symbole | currentColor |
-| Strich | nummer | Die Strichbreite des Symbols in Pixeln | 2 |
-
-
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+ | Props | Typ | Beschreibung | Standard |
+ | ------ | ------------ | ----------------------------------------- | ------------ |
+ | größe | nummer | Die Höhe und Breite des Symbols in Pixeln | 24 |
+ | farbe | Zeichenkette | Die Farbe der Symbole | currentColor |
+ | Strich | nummer | Die Strichbreite des Symbols in Pixeln | 2 |
+
## Benutzerdefinierte Symbole
@@ -58,26 +54,20 @@ Zusätzlich zu den Tabler-Symbolen verwendet die App auch einige benutzerdefinie
Zeigt ein Adressbuchsymbol an.
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
-
-
-```jsx
-import { IconAddressBook } from 'twenty-ui/display';
-
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-
-| Props | Typ | Beschreibung | Standard |
-| ------ | ------ | ----------------------------------------- | -------- |
-| größe | nummer | Die Höhe und Breite des Symbols in Pixeln | 24 |
-| Strich | nummer | Die Strichbreite des Symbols in Pixeln | 2 |
-
-
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ------------- | ------ | ----------------------------------------- | -------- |
+ | größe | nummer | Die Höhe und Breite des Symbols in Pixeln | 24 |
+ | Strich | nummer | Die Strichbreite des Symbols in Pixeln | 2 |
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/de/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..a4d3bc5dc2
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Ein kleines Abzeichen oder "Pille", um anzuzeigen, dass etwas bald kommt.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/de/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/de/twenty-ui/display/tag.mdx
new file mode 100644
index 0000000000..bb996ae63f
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/display/tag.mdx
@@ -0,0 +1,38 @@
+---
+title: '"Tag"'
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+Komponente zur visuellen Kategorisierung oder Kennzeichnung von Inhalten.
+
+
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliche Gestaltung |
+ | farbe | Zeichenkette | Farbe des Tags. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` |
+ | text | string | Der Inhalt des Tags |
+ | onClick | Funktion | Optionale Funktion, die aufgerufen wird, wenn ein Benutzer auf das Tag klickt |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx
new file mode 100644
index 0000000000..d5d0aafe21
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx
@@ -0,0 +1,31 @@
+---
+title: Block Editor
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Verwendet einen blockbasierten Rich-Text-Editor von [BlockNote](https://www.blocknotejs.org/), um Benutzern das Bearbeiten und Anzeigen von Inhaltsblöcken zu ermöglichen.
+
+
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
+
+ return ;
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ----------------- | ------------------------------------------- |
+ | Editor | `BlockNoteEditor` | Instanz oder Konfiguration des Blockeditors |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/de/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..97870f1a0e
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Buttons
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+A list of buttons and button groups used throughout the app.
+
+## Button
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | className | Zeichenkette | Optionaler Klassenname für zusätzliche Stilierung |
+ | Symbol | `React.ComponentType` | Eine optionale Symbolkomponente, die innerhalb der Schaltfläche angezeigt wird |
+ | titel | Zeichenkette | Der Textinhalt der Schaltfläche |
+ | volle Breite | boolesch | Definiert, ob die Schaltfläche die gesamte Breite ihres Containers einnehmen soll |
+ | Variante | Zeichenkette | The visual style variant of the button. Optionen umfassen `primär`, `sekundär` und `tertiär` |
+ | größe | Zeichenkette | Die Größe der Schaltfläche. Hat zwei Optionen: `klein` und `mittel` |
+ | position | Zeichenkette | Die Position des Knopfes in Bezug auf seine Geschwister. Optionen umfassen: `einzeln`, `links`, `rechts` und `mitte` |
+ | Akzent | Zeichenkette | Die Akzentfarbe der Schaltfläche. Optionen umfassen: `Standard`, `blau` und `Gefahr` |
+ | bald | boolesch | Gibt an, ob die Schaltfläche als "bald" markiert ist (z.B. für kommende Features) |
+ | deaktiviert | boolesch | Specifies whether the button is disabled or not |
+ | Fokus | boolesch | Determines if the button has focus |
+ | beiKlick | Funktion | Eine Rückruffunktion, die ausgelöst wird, wenn der Benutzer auf die Schaltfläche klickt |
+
+
+
+## Button Group
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | -------------------------------------------------------------------------------------------------------------- |
+ | Variante | Zeichenkette | The visual style variant of the buttons within the group. Optionen umfassen `primär`, `sekundär` und `tertiär` |
+ | größe | Zeichenkette | The size of the buttons within the group. Hat zwei Optionen: `mittel` und `klein` |
+ | Akzent | Zeichenkette | The accent color of the buttons within the group. Optionen umfassen: `Standard`, `blau` und `Gefahr` |
+ | Klassenname | Zeichenkette | Optionaler Klassenname für zusätzliche Stilierung |
+ | Kinder | ReactNode | An array of React elements representing the individual buttons within the group |
+
+
+
+## Floating Button
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ---------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliche Stilierung |
+ | Symbol | `React.ComponentType` | Eine optionale Symbolkomponente, die innerhalb der Schaltfläche angezeigt wird |
+ | titel | Zeichenfolge | Der Textinhalt der Schaltfläche |
+ | größe | Zeichenfolge | Die Größe der Schaltfläche. Hat zwei Optionen: `klein` und `mittel` |
+ | position | Zeichenkette | Die Position des Knopfes in Bezug auf seine Geschwister. Optionen umfassen: `einzeln`, `links`, `mitte`, `rechts` |
+ | SchattenAnwenden | boolesch | Determines whether to apply shadow to a button |
+ | applyBlur | boolesch | Determines whether to apply a blur effect to the button |
+ | deaktiviert | boolesch | Bestimmt, ob die Schaltfläche deaktiviert ist |
+ | Fokus | boolesch | Gibt an, ob die Schaltfläche den Fokus hat |
+
+
+
+## Floating Button Group
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ------------- | --------- | ------------------------------------------------------------------------------- | -------- |
+ | größe | string | Die Größe der Schaltfläche. Hat zwei Optionen: `klein` und `mittel` | klein |
+ | Kinder | ReactNode | An array of React elements representing the individual buttons within the group | |
+
+
+
+## Floating Icon Button
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ---------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | string | Optionaler Name für zusätzliche Stilierung |
+ | Symbol | `React.ComponentType` | Eine optionale Symbolkomponente, die innerhalb des Knopfes angezeigt wird. |
+ | größe | string | Die Größe des Knopfes. Hat zwei Optionen: `klein` und `mittel` |
+ | position | Zeichenfolge | Die Position des Knopfes in Bezug auf seine Geschwister. Optionen umfassen: `einzeln`, `links`, `rechts` und `mitte` |
+ | SchattenAnwenden | boolesch | Determines whether to apply shadow to a button |
+ | applyBlur | boolesch | Determines whether to apply a blur effect to the button |
+ | deaktiviert | boolesch | Bestimmt, ob der Knopf deaktiviert ist |
+ | Fokus | boolesch | Gibt an, ob der Knopf im Fokus steht |
+ | onClick | Funktion | Eine Callback-Funktion, die ausgelöst wird, wenn der Benutzer auf den Knopf klickt. |
+ | isActive | boolesch | Bestimmt, ob der Knopf in einem aktiven Zustand ist |
+
+
+
+## Floating Icon Button Group
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliche Stilierung |
+ | größe | Zeichenfolge | Die Größe des Knopfes. Hat zwei Optionen: `klein` und `mittel` |
+ | Symbolknöpfe | Array | Ein Array von Objekten, die jeweils einen Symbolknopf in der Gruppe darstellen. Jedes Objekt sollte die Symbolkomponente enthalten, die Sie im Knopf anzeigen möchten, die Funktion, die aufgerufen werden soll, wenn ein Benutzer auf den Knopf klickt, und ob der Knopf aktiv sein soll oder nicht. |
+
+
+
+## Leichter Knopf
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Einstellungen | Typ | Beschreibung |
+ | ------------- | ----------------- | ----------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliche Stilierung |
+ | symbol | `React.ReactNode` | Das Symbol, das Sie im Knopf anzeigen möchten. |
+ | titel | Zeichenkette | Der Textinhalt des Knopfes |
+ | Akzent | Zeichenfolge | Die Akzentfarbe des Knopfes. Optionen umfassen: `sekundär` und `tertiär` |
+ | aktiv | boolesch | Bestimmt, ob der Knopf in einem aktiven Zustand ist |
+ | deaktiviert | boolesch | Bestimmt, ob der Knopf deaktiviert ist |
+ | Fokus | boolesch | Gibt an, ob der Knopf im Fokus steht |
+ | beiKlick | Funktion | Eine Callback-Funktion, die ausgelöst wird, wenn der Benutzer auf den Knopf klickt. |
+
+
+
+## Light Icon Button
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Props | Typ | Beschreibung |
+ | ----------- | --------------------- | --------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliche Gestaltung |
+ | TestId | Zeichenkette | Testidentifikator für die Schaltfläche |
+ | Symbol | `React.ComponentType` | Eine optionale Symbolkomponente, die innerhalb der Schaltfläche angezeigt wird |
+ | titel | Zeichenfolge | Der Textinhalt der Schaltfläche |
+ | größe | Zeichenfolge | Die Größe der Schaltfläche. Hat zwei Optionen: `klein` und `mittel` |
+ | Akzent | Zeichenfolge | Die Akzentfarbe der Schaltfläche. Optionen beinhalten: `sekundär` und `tertiär` |
+ | aktiv | boolesch | Bestimmt, ob die Schaltfläche im aktiven Zustand ist |
+ | deaktiviert | boolesch | Bestimmt, ob die Schaltfläche deaktiviert ist |
+ | Fokus | boolesch | Gibt an, ob die Schaltfläche den Fokus hat |
+ | beiKlick | Funktion | Eine Rückruffunktion, die ausgelöst wird, wenn der Benutzer auf die Schaltfläche klickt |
+
+
+
+## Main Button
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------------- | -------------------------------- | ----------------------------------------------------------------------------------- |
+ | titel | Zeichenkette | Der Textinhalt der Schaltfläche |
+ | volle Breite | boolesch | Definiert, ob die Schaltfläche die gesamte Breite ihres Containers einnehmen soll |
+ | Variante | Zeichenkette | The visual style variant of the button. Optionen beinhalten `primär` und `sekundär` |
+ | bald | boolesch | Gibt an, ob die Schaltfläche als "bald" markiert ist (z.B. für kommende Features) |
+ | Symbol | `React.ComponentType` | Eine optionale Symbolkomponente, die innerhalb der Schaltfläche angezeigt wird |
+ | React `button` props | `React.ComponentProps<'button'>` | Alle Standard-HTML-Schaltflächeneigenschaften werden unterstützt |
+
+
+
+## Abgerundete Symbolschaltfläche
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------------- | ----------------------------------------------- | ------------ |
+ | Symbol | `React.ComponentType` | |
+ | React `button` props | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/de/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..dda811c14e
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: Kontrollkästchen
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Wird verwendet, wenn ein Benutzer mehrere Werte aus mehreren Optionen auswählen muss.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange function fired")}
+ onCheckedChange={() => console.log("onCheckedChange function fired")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | ---------------------- | ------------ | ------------------------------------------------------------------------------------------------------------- |
+ | markiert | boolesch | Gibt an, ob das Kontrollkästchen markiert ist |
+ | unbestimmt | boolesch | Gibt an, ob sich das Kontrollkästchen in einem unbestimmten Zustand befindet (weder markiert noch unmarkiert) |
+ | beiÄnderung | Funktion | Die Rückruffunktion, die ausgelöst werden soll, wenn sich der Zustand des Kontrollkästchens ändert |
+ | beiMarkierungsÄnderung | Funktion | Die Rückruffunktion, die ausgelöst werden soll, wenn sich der `markiert` Zustand ändert |
+ | Variante | Zeichenkette | Der visuelle Stil der Box. Optionen umfassen: `primary`, `secondary` und `tertiary` |
+ | größe | Zeichenkette | Die Größe des Kontrollkästchens. Has two options: `small` and `large` |
+ | Form | Zeichenkette | Die Form des Kontrollkästchens. Hat zwei Optionen: `squared` und `rounded` |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/de/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..1e9194bb11
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Farbschema
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Farbschema Karte
+
+Repräsentiert verschiedene Farbschemata und ist speziell für helle und dunkle Themen abgestimmt.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ---------------- | --------------------------------------- | --------------------------------------------------------------------------------- | -------- |
+ | Variante | Zeichenkette | Die Variante des Farbschemas. Optionen umfassen `Dunkel`, `Hell` und `System` | hell |
+ | ausgewählt | boolesch | Wenn `true`, wird ein Häkchen angezeigt, um das ausgewählte Farbschema anzuzeigen | |
+ | additional props | `React.ComponentPropsWithoutRef<'div'>` | Standard HTML `div` Elementeigenschaften | |
+
+
+
+## Farbschema-Auswahl
+
+Ermöglicht es den Benutzern, zwischen verschiedenen Farbschemata zu wählen.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | ------------------------------------------------------------------------------ |
+ | wert | `Farbschema` | Das aktuell ausgewählte Farbschema |
+ | onChange | Funktion | Die Rückruffunktion, die Sie beim Auswählen eines Farbschemas auslösen möchten |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..be505d335f
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: Symbolauswahl
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+A dropdown-based icon picker that allows users to select an icon from a list.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Gewähltes Symbol:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
+ | deaktiviert | boolesch | Disables the icon picker if set to `true` |
+ | beiÄnderung | function | Die Rückruffunktion wird ausgelöst, wenn der Benutzer ein Symbol auswählt. Es erhält ein Objekt mit `iconKey` und `Icon` Eigenschaften |
+ | selectedIconKey | string | Der Schlüssel des ursprünglich ausgewählten Symbols |
+ | onClickOutside | Funktion | Rückruffunktion wird ausgelöst, wenn der Benutzer außerhalb des Dropdowns klickt |
+ | onClose | Funktion | Rückruffunktion wird ausgelöst, wenn das Dropdown geschlossen wird |
+ | onOpen | Funktion | Rückruffunktion wird ausgelöst, wenn das Dropdown geöffnet wird |
+ | Variante | Zeichenkette | Die visuelle Stilvariante des klickbaren Symbols. Optionen umfassen: `primary`, `secondary` und `tertiary` |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/de/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..8e2bbf1035
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Image Input
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Ermöglicht Benutzern das Hochladen und Entfernen eines Bildes.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------ | -------------------------------------------------------------------------------------------------------------- |
+ | bild | Zeichenkette | Die Bildquellen-URL |
+ | onUpload | Funktion | The function called when a user uploads a new image. Es erhält das `Datei` Objekt als Parameter |
+ | onRemove | Funktion | Die Funktion wird aufgerufen, wenn der Benutzer auf die Entfernen-Schaltfläche klickt. |
+ | onAbort | Funktion | Die Funktion wird aufgerufen, wenn der Benutzer während des Bilduploads auf die Abbrechen-Schaltfläche klickt. |
+ | isUploading | boolesch | Gibt an, ob ein Bild derzeit hochgeladen wird |
+ | Fehlermeldung | Zeichenkette | Eine optionale Fehlermeldung, die unterhalb des Bildeingangs angezeigt wird. |
+ | deaktiviert | boolesch | If `true`, the entire input is disabled, and the buttons are not clickable |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/de/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..4a3f3510d0
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Radio
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Verwendet, wenn Benutzer nur eine Option aus einer Reihe von Optionen auswählen können.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | ---------------------- | ------------------------- | --------------------------------------------------------------------------------------------------- |
+ | Stil | `React.CSS` Eigenschaften | Zusätzliche Inline-Stile für die Komponente |
+ | Klassenname | Zeichenkette | Optionale CSS-Klasse für zusätzliche Stilgebung |
+ | markiert | boolesch | Indicates whether the radio button is checked |
+ | wert | Zeichenkette | The label or text associated with the radio button |
+ | onChange | Funktion | The function called when the selected radio button is changed |
+ | beiMarkierungsÄnderung | Funktion | The function called when the `checked` state of the radio button changes |
+ | größe | Zeichenkette | Die Größe des Radiobuttons. Optionen umfassen: `groß` und `klein` |
+ | deaktiviert | boolesch | Wenn `true`, ist der Radiobutton deaktiviert und nicht anklickbar |
+ | labelPosition | Zeichenkette | Die Position des Labeltextes im Verhältnis zum Radiobutton. Hat zwei Optionen: `links` und `rechts` |
+
+
+
+## Radio Group
+
+Groups together related radio buttons.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | --------------- | ----------------- | ----------------------------------------------------------------------------------------------- |
+ | wert | Zeichenkette | The value of the currently selected radio button |
+ | onChange | Funktion | The callback function triggered when the radio button is changed |
+ | beiWertÄnderung | Funktion | Die Callback-Funktion, die ausgelöst wird, wenn sich der ausgewählte Wert in der Gruppe ändert. |
+ | Kinder | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/select.mdx b/packages/twenty-docs/l/de/twenty-ui/input/select.mdx
index 0a2ea4c827..32a88d7e04 100644
--- a/packages/twenty-docs/l/de/twenty-ui/input/select.mdx
+++ b/packages/twenty-docs/l/de/twenty-ui/input/select.mdx
@@ -4,51 +4,48 @@ image: /images/user-guide/what-is-twenty/20.png
---
-
+
Ermöglicht es Benutzern, einen Wert aus einer Liste vordefinierter Optionen auszuwählen.
-
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
-```jsx
-import { RecoilRoot } from 'recoil';
-import { IconTwentyStar } from 'twenty-ui/display';
+ import { Select } from '@/ui/input/components/Select';
-import { Select } from '@/ui/input/components/Select';
+ export const MyComponent = () => {
-export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
- return (
-
-
-
- );
-};
+ ```
+
-```
-
-
-
-
-| Props | Typ | Beschreibung |
-| ------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Klassenname | Zeichenkette | Optionale CSS-Klasse für zusätzliche Stilgebung |
-| deaktiviert | boolesch | Wenn auf `true` gesetzt, wird die Benutzerinteraktion mit der Komponente deaktiviert |
-| Beschriftung | Zeichenkette | Die Beschriftung, um den Zweck der `Select`-Komponente zu beschreiben |
-| onChange | function | Die Funktion, die aufgerufen wird, wenn sich die ausgewählten Werte ändern |
-| optionen | array | Repräsentiert die verfügbaren Optionen für die `Select`-Komponente. Es ist ein Array von Objekten, bei dem jedes Objekt ein `value` (die eindeutige Kennung), `label` (die eindeutige Kennung) und ein optionales `Icon` hat |
-| wert | Zeichenkette | Repräsentiert den aktuell ausgewählten Wert. Es sollte mit einem der `value`-Eigenschaften im `options`-Array übereinstimmen |
-
-
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionale CSS-Klasse für zusätzliche Stilgebung |
+ | deaktiviert | boolesch | Wenn auf `true` gesetzt, wird die Benutzerinteraktion mit der Komponente deaktiviert |
+ | Beschriftung | string | Die Beschriftung, um den Zweck der `Select`-Komponente zu beschreiben |
+ | onChange | Funktion | Die Funktion, die aufgerufen wird, wenn sich die ausgewählten Werte ändern |
+ | optionen | Array | Repräsentiert die verfügbaren Optionen für die `Select`-Komponente. Es ist ein Array von Objekten, bei dem jedes Objekt ein `value` (die eindeutige Kennung), `label` (die eindeutige Kennung) und ein optionales `Icon` hat |
+ | wert | Zeichenkette | Repräsentiert den aktuell ausgewählten Wert. Es sollte mit einem der `value`-Eigenschaften im `options`-Array übereinstimmen |
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/text.mdx b/packages/twenty-docs/l/de/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..1c60278090
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Text
+image: /images/user-guide/notes/notes_header.png
+---
+
+
+
+
+
+## Texteingabe
+
+Ermöglicht es den Benutzern, Text einzugeben und zu bearbeiten.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | Zeichenkette | Optionaler Name für zusätzliche Stile |
+ | Beschriftung | Zeichenkette | Stellt die Beschriftung für das Eingabefeld dar |
+ | onChange | function | Die Funktion, die aufgerufen wird, wenn sich der Eingabewert ändert |
+ | volle Breite | boolesch | Gibt an, ob die Eingabe 100 % der Breite einnehmen soll |
+ | disableHotkeys | boolesch | Gibt an, ob Hotkeys für die Eingabe aktiviert sind |
+ | fehler | Zeichenkette | Stellt die Fehlermeldung dar, die angezeigt werden soll. Wenn vorhanden, wird auch ein Fehler-Icon auf der rechten Seite des Eingabefelds angezeigt |
+ | onKeyDown | Funktion | Wird aufgerufen, wenn eine Taste gedrückt gehalten wird, während das Eingabefeld fokussiert ist. Erhält ein `React.KeyboardEvent` als Argument |
+ | RightIcon | Icon-Komponente | Eine optionale Ikonenkomponente, die auf der rechten Seite des Eingabefelds angezeigt wird |
+
+ Die Komponente akzeptiert auch andere HTML-Eingabeelement-Eigenschaften.
+
+
+
+## Autosize Text Input
+
+Textkomponente, die ihre Höhe automatisch anhand des Inhalts anpasst.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | ---------------------------------------------------------------------------------------- |
+ | onValidate | Funktion | Die Callback-Funktion, die Sie auslösen möchten, wenn der Benutzer die Eingabe validiert |
+ | minRows | nummer | Die minimale Anzahl von Zeilen für den Textbereich |
+ | Platzhalter | Zeichenkette | Der Platzhaltertext, den Sie anzeigen möchten, wenn der Textbereich leer ist |
+ | onFocus | Funktion | Die Callback-Funktion, die Sie auslösen möchten, wenn der Textbereich den Fokus erlangt |
+ | Variante | Zeichenkette | Die Variante der Eingabe. Optionen umfassen: `Standard`, `Ikone` und `Schaltfläche` |
+ | buttonTitle | Zeichenkette | Der Titel für die Schaltfläche (nur für die Schaltflächenvariante anwendbar) |
+ | wert | Zeichenkette | Der Initialwert für den Textbereich |
+
+
+
+## Textbereich
+
+Ermöglicht es Ihnen, mehrzeilige Texteingaben zu erstellen.
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ------------ | ---------------------------------------------------------------------------- |
+ | deaktiviert | boolesch | Gibt an, ob der Textbereich deaktiviert ist |
+ | minRows | nummer | Minimale Anzahl sichtbarer Zeilen für den Textbereich. |
+ | onChange | Funktion | Rückruffunktion wird ausgelöst, wenn sich der Inhalt des Textbereichs ändert |
+ | Platzhalter | Zeichenkette | Platzhaltertext, der angezeigt wird, wenn der Textbereich leer ist |
+ | wert | Zeichenkette | Der aktuelle Wert des Textbereichs |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/de/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..822e40cb6b
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Umschalten
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ------------- | ------------ | -------------------------------------------------------------------------------------------------------- | ------------ |
+ | wert | boolesch | Der aktuelle Zustand des Umschalters | `falsch` |
+ | onChange | Funktion | Callback-Funktion, die ausgelöst wird, wenn sich der Umschaltzustand ändert | |
+ | farbe | Zeichenkette | Farbe des Umschalters, wenn er | s blue color |
+ | ToggleSize | Zeichenkette | Größe des Umschalters, beeinflusst sowohl Höhe als auch Gewicht. Hat zwei Optionen: `klein` und `mittel` | mittel |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/introduction.mdx b/packages/twenty-docs/l/de/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..6c981c42ed
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Übersicht
+description: Komponentenbibliothek für Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Komponenten
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..0c542e787d
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Breadcrumb
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Erstellt eine Navigationsleiste mit Brotkrumen.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "Startseite", href: "/" },
+ { children: "Kategorie", href: "/category" },
+ { children: "Unterkategorie", href: "/category/subcategory" },
+ { children: "Aktuelle Seite" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | --------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | Klassenname | Zeichenkette | Optionaler Klassenname für zusätzliche Stilierung |
+ | Links | array | An array of objects, each representing a breadcrumb link. Jedes Objekt hat eine `children`-Eigenschaft (den textlichen Inhalt des Links) und eine optionale `href`-Eigenschaft (die URL, zu der navigiert wird, wenn der Link angeklickt wird) |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx
new file mode 100644
index 0000000000..359760d9a9
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx
@@ -0,0 +1,154 @@
+---
+title: Links
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+## Kontaktlink
+
+A stylized link component for displaying contact information.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+
+ import { ContactLink } from 'twenty-ui/navigation';
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log('Kontaktlink geklickt!', event);
+ };
+
+ return (
+
+
+ example@example.com
+
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ----------------- | --------------------------------------------------------------- |
+ | className | Zeichenkette | Optionaler Name für zusätzliche Stile |
+ | href | Zeichenkette | Die Ziel-URL oder der Pfad für den Link |
+ | onClick | function | Callback-Funktion, die beim Klicken auf den Link ausgelöst wird |
+ | children | `React.ReactNode` | Der Inhalt, der innerhalb des Links angezeigt wird |
+
+
+
+## Rohlink
+
+A stylized link component for displaying links.
+
+
+
+ ```jsx
+ import { RawLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Kontaktlink geklickt!", event);
+ };
+
+ return (
+
+
+ Kontaktieren Sie uns
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ----------------- | --------------------------------------------------------------- |
+ | className | string | Optionaler Name für zusätzliche Stile |
+ | href | string | Die Ziel-URL oder der Pfad für den Link |
+ | onClick | function | Callback-Funktion, die beim Klicken auf den Link ausgelöst wird |
+ | children | `React.ReactNode` | Der Inhalt, der innerhalb des Links angezeigt wird |
+
+
+
+## Rundlink
+
+A rounded-styled link with a Chip component for links.
+
+
+
+ ```jsx
+ import { RoundedLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Kontaktlink geklickt!", event);
+ };
+
+ return (
+
+
+ Kontaktieren Sie uns
+
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ----------------- | --------------------------------------------------------------- |
+ | href | string | Die Ziel-URL oder der Pfad für den Link |
+ | Kinder | `React.ReactNode` | Der Inhalt, der innerhalb des Links angezeigt wird |
+ | onClick | Funktion | Callback-Funktion, die beim Klicken auf den Link ausgelöst wird |
+
+
+
+## Sozialer Link
+
+Stilisierte soziale Links mit Unterstützung für verschiedene soziale Linktypen wie URLs, LinkedIn und X (oder Twitter).
+
+
+
+ ```jsx
+ import { SocialLink } from "twenty-ui/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ----------------- | -------------------------------------------------------------------------- |
+ | href | string | Die Ziel-URL oder der Pfad für den Link |
+ | children | `React.ReactNode` | Der Inhalt, der innerhalb des Links angezeigt wird |
+ | typ | string | Die Art der sozialen Links. Optionen sind: `url`, `LinkedIn` und `Twitter` |
+ | onClick | function | Callback-Funktion, die beim Klicken auf den Link ausgelöst wird |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..c92f61992e
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: Menüpunkt
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Ein vielseitiger Menüpunkt, der in einem Menü oder einer Navigationsliste verwendet werden kann.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menüpunkt angeklickt!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Symbolschaltfläche angeklickt!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung |
+ | ------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüpunkt angezeigt wird. |
+ | Akzent | Zeichenkette | Gibt die Akzentfarbe des Menüelements an. Optionen umfassen: `default`, `danger` und `placeholder` |
+ | text | string | Der Textinhalt des Menüelements |
+ | Symbolschaltflächen | Array | Ein Array von Objekten, das zusätzliche Symbolschaltflächen beschreibt, die dem Menüelement zugeordnet sind |
+ | isTooltipOpen | boolesch | Steuert die Sichtbarkeit des mit dem Menüpunkt verbundenen Tooltips |
+ | testId | Zeichenkette | Das Attribut „data-testid“ für Testzwecke |
+ | beiKlick | Funktion | Rückruffunktion, die ausgelöst wird, wenn auf den Menüpunkt geklickt wird |
+ | Klassenname | Zeichenkette | Optionaler Name für zusätzliches Styling |
+
+
+
+## Varianten
+
+Die verschiedenen Varianten der Menükomponente umfassen Folgendes:
+
+### Befehl
+
+Ein befehlsartiger Menüpunkt innerhalb eines Menüs zur Anzeige von Tastaturkürzeln.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Befehl geklickt!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ---------------- | ----------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | firstHotKey | Zeichenfolge | Die erste Tastenkombination, die dem Befehl zugeordnet ist |
+ | secondHotKey | Zeichenfolge | Die zweite Tastenkombination, die dem Befehl zugeordnet ist |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt oder hervorgehoben ist |
+ | bei Klick | Funktion | Rückruffunktion, die ausgelöst wird, wenn das Menüelement angeklickt wird |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Styling |
+
+
+
+### Ziehen
+
+Ein verschiebbares Menüelement, das in einem Menü oder einer Liste verwendet werden soll, bei denen Elemente gezogen werden können und zusätzliche Aktionen über Symbolschaltflächen durchgeführt werden können.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menüelement geklickt!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ----------------- | ---------------- | -------------------------------------------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | Akzent | Zeichenfolge | Die Akzentfarbe des Menüelements. Es kann entweder sein `standard`, `platzhalter` und `gefahr` |
+ | Symbolknöpfe | Array | Ein Array von Objekten, die zusätzliche Symbolschaltflächen darstellen, die mit dem Menüelement verknüpft sind |
+ | isTooltipOpen | boolesch | Steuert die Sichtbarkeit des Tooltips, der mit dem Menüelement verknüpft ist |
+ | bei Klick | Funktion | Rückruffunktion, die ausgelöst wird, wenn der Link geklickt wird |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | ZiehenDeaktiviert | boolesch | Gibt an, ob das Ziehen deaktiviert ist |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Styling |
+
+
+
+### Mehrfachauswahl
+
+Bietet eine Möglichkeit, eine Mehrfachauswahl-Funktionalität mit einem zugehörigen Kontrollkästchen zu implementieren.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------- | ---------------- | ---------------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt (angehakt) ist |
+ | onSelectChange | Funktion | Rückruffunktion, die ausgelöst wird, wenn der Kontrollkästchenstatus geändert wird |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Styling |
+
+
+
+### Mehrfachauswahl Avatar
+
+Ein Mehrfachauswahl-Menüelement mit einem Avatar, einem Kontrollkästchen zur Auswahl und einem Textinhalt.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="Erste Option"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------- | ------------ | ------------------------------------------------------------------------------------------- |
+ | Avatar | `ReactNode` | Der Avatar oder das Symbol, das auf der linken Seite des Menüelements angezeigt werden soll |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt (angehakt) ist |
+ | onSelectChange | Funktion | Rückruffunktion, die ausgelöst wird, wenn der Kontrollkästchenstatus geändert wird |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Styling |
+
+
+
+### Navigieren
+
+Ein Menüelement mit einem optionalen linken Symbol, Textinhalt und einem nach rechts zeigenden Chevron-Symbol.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Zu einer anderen Seite navigieren");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ---------------- | ----------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | bei Klick | Funktion | Rückruffunktion, die ausgelöst wird, wenn das Menüelement angeklickt wird |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Styling |
+
+
+
+### Auswahl
+
+Ein auswählbares Menüelement mit optionalem linken Inhalt (Symbol und Text) und einer Anzeige (Kontrollsymbol), die den ausgewählten Zustand anzeigt.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Menüelement ausgewählt");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ---------------- | ----------------------------------------------------------------------------- |
+ | Linkes Symbol | Symbolkomponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | text | Zeichenfolge | Der Textinhalt des Menüelements |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt (angehakt) ist |
+ | deaktiviert | boolesch | Gibt an, ob das Menüelement deaktiviert ist |
+ | hovered | boolesch | Gibt an, ob das Menüelement momentan überflogen wird |
+ | onClick | Funktion | Rückruffunktion, die ausgelöst wird, wenn das Menüelement angeklickt wird |
+ | Klassenname | Zeichenfolge | Optionaler Name für zusätzliche Stilierung |
+
+
+
+### Avatar auswählen
+
+A selectable menu item with an avatar, featuring optional left content (avatar and text) and an indicator (check icon) for the selected state.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Menüpunkt ausgewählt");
+ };
+
+ return (
+ }
+ text="Erste Option"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | ----------- | -------------------------------------------------------------------------------------------- |
+ | Avatar | `ReactNode` | Der Avatar oder das Symbol, das auf der linken Seite des Menüelements angezeigt werden soll. |
+ | text | string | Der Textinhalt des Menüelements |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt (aktiviert) ist. |
+ | deaktiviert | boolesch | Gibt an, ob das Menüelement deaktiviert ist. |
+ | hovered | boolesch | Gibt an, ob sich der Mauszeiger derzeit über dem Menüelement befindet. |
+ | TestId | string | Das data-testid-Attribut für Testzwecke |
+ | onClick | Funktion | Rückruffunktion, die ausgelöst wird, wenn das Menüelement angeklickt wird. |
+ | Klassenname | string | Optionaler Name für zusätzliche Stile |
+
+
+
+### Farbe auswählen
+
+Ein wählbares Menüelement mit Farbbeispiel für Situationen, in denen Benutzer eine Farbe aus einem Menü auswählen sollen.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Menüpunkt ausgewählt");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | farbe | string | Die Themenfarbe, die als Muster im Menüelement angezeigt wird. Optionen umfassen: `grün`, `türkis`, `himmel`, `blau`, `lila`, `rosa`, `rot`, `orange`, `gelb` und `grau`. |
+ | ausgewählt | boolesch | Gibt an, ob das Menüelement ausgewählt (aktiviert) ist. |
+ | deaktiviert | boolesch | Gibt an, ob das Menüelement deaktiviert ist. |
+ | hovered | boolesch | Gibt an, ob sich der Mauszeiger derzeit über dem Menüelement befindet. |
+ | Variante | string | Die Variante des Farbmusters. It can either be `default` or `pipeline` |
+ | onClick | funktion | Rückruffunktion, die ausgelöst wird, wenn das Menüelement angeklickt wird. |
+ | className | string | Optionaler Name für zusätzliche Stile |
+
+
+
+### Umschalten
+
+Ein Menüelement mit einem zugehörigen Umschalter, mit dem Benutzer eine bestimmte Funktion aktivieren oder deaktivieren können.
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung |
+ | -------------- | --------------- | ---------------------------------------------------------------------------------- |
+ | LeftIcon | Icon-Komponente | Ein optionales linkes Symbol, das vor dem Text im Menüelement angezeigt wird. |
+ | text | string | Der Textinhalt des Menüelements |
+ | umgeschaltet | boolesch | Gibt an, ob der Umschalter im Zustand "ein" oder "aus" ist. |
+ | onToggleChange | funktion | Rückruffunktion, die ausgelöst wird, wenn sich der Zustand des Umschalters ändert. |
+ | ToggleSize | String | Die Größe des Kippschalters. It can be either \ |
+ | ClassName | String | Optionaler Name für zusätzliche Stile |
+
+
diff --git a/packages/twenty-docs/l/de/twenty-ui/progress-bar.mdx b/packages/twenty-docs/l/de/twenty-ui/progress-bar.mdx
new file mode 100644
index 0000000000..bcc6849963
--- /dev/null
+++ b/packages/twenty-docs/l/de/twenty-ui/progress-bar.mdx
@@ -0,0 +1,66 @@
+---
+title: Rückmeldung
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+Zeigt den Fortschritt oder Countdown an und bewegt sich von rechts nach links.
+
+
+
+ ```jsx
+ import { ProgressBar } from "twenty-ui/feedback";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | "Eigenschaften" | Typ | Beschreibung | Standard |
+ | --------------- | ------------ | ------------------------------------------------------------------------------------ | --------- |
+ | Dauer | nummer | Die Gesamtdauer der Fortschrittsbalken-Animation in Millisekunden | 3 |
+ | Verzögerung | nummer | Die Verzögerung beim Starten der Fortschrittsbalken-Animation in Millisekunden | 0 |
+ | Easing | string | Easing-Funktion für die Fortschrittsbalken-Animation | easeInOut |
+ | Balkenhöhe | nummer | The height of the bar in pixels | 24 |
+ | Balkenfarbe | Zeichenkette | The color of the bar | gray80 |
+ | AutoStart | boolesch | If `true`, the progress bar animation starts automatically when the component mounts | `wahr` |
+
+
+
+## Zirkularer Fortschrittsbalken
+
+Zeigt den Fortschritt einer Aufgabe an, wird häufig auf Ladebildschirmen oder in Bereichen verwendet, in denen Sie laufende Prozesse an den Benutzer kommunizieren möchten.
+
+
+
+ ```jsx
+ import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Eigenschaften | Typ | Beschreibung | Standard |
+ | ------------- | ------------ | -------------------------------------------- | ------------ |
+ | größe | nummer | Die Größe des zirkularen Fortschrittsbalkens | 50 |
+ | Balkenbreite | nummer | Die Breite der Fortschrittsbalkenlinie | 5 |
+ | Balkenfarbe | Zeichenkette | The color of the progress bar | currentColor |
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..329e452c64
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Überblick
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Beschreibung |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/de/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/de/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..029b969d1c
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Überblick
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Beschreibung |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..9df712a10a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: Berechtigungen & Zugriffskontrolle},{
+description: Steuern Sie, auf welche Daten KI-Agenten in Ihrem Arbeitsbereich zugreifen und was sie dort ändern können.
+---
+
+## Übersicht
+
+KI-Agenten respektieren Ihre bestehende Berechtigungsstruktur. Dies ist besonders wichtig für Teams, die genau steuern möchten, worauf automatisierte KI-Prozesse in ihrem Arbeitsbereich zugreifen oder was sie dort ändern können.
+
+## Weisen Sie einem KI-Agenten eine Rolle zu
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Klicken Sie auf die Rolle, die Sie zuweisen möchten
+3. Öffnen Sie den Tab **Zuweisungen**
+4. Unter **KI-Agenten** klicken Sie auf **+ KI-Agent zuweisen**
+5. Wählen Sie den KI-Agenten aus der Liste aus
+6. Bestätigen Sie die Zuweisung
+
+## Warum Rollen an KI-Agenten zuweisen?
+
+| Vorteil | Beschreibung |
+| ---------------------- | ------------------------------------------------------------------------------------ |
+| **Sicherheit** | Beschränken Sie, auf welche Daten KI-Agenten zugreifen oder welche sie ändern können |
+| **Compliance** | Stellen Sie sicher, dass die KI nur die Daten verarbeitet, die sie benötigt |
+| **Kontrolle** | Verhindern Sie unbeabsichtigte Aktionen durch KI-Automatisierungen |
+| **Revisionsfähigkeit** | Verfolgen Sie nach, welche Aktionen von welchem Agenten ausgeführt wurden |
+
+
+ Für KI-Agenten, die innerhalb von Workflows ausgeführt werden, stellt die Rollenzuweisung sicher, dass der Agent nicht auf Daten außerhalb seines vorgesehenen Umfangs zugreifen oder diese ändern kann — selbst wenn der Workflow weitergehende Berechtigungen hat.
+
+
+## Verwandte Inhalte
+
+* [Berechtigungen](/l/de/user-guide/permissions-access/capabilities/permissions) — ausführliche Informationen zum Erstellen und Verwalten von Rollen
+* [KI-Agenten](/l/de/user-guide/ai/capabilities/ai-agents) — KI-Funktionen in Workflows
diff --git a/packages/twenty-docs/l/de/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/de/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/ai/overview.mdx b/packages/twenty-docs/l/de/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..abbb3e7cd4
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: KI
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## What's Coming
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Anwendungsfälle:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Bleiben Sie auf dem Laufenden
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/de/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/de/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..07dfb2fb2a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: Preispläne
+description: Erfahren Sie mehr über die Preispläne von Twenty und wie Sie zwischen ihnen wechseln können.
+---
+
+## Übersicht
+
+Twenty bietet flexible Preise, die zu Teams jeder Größe passen – egal, ob Sie Cloud-Hosting oder Selbsthosting bevorzugen.
+
+## Cloud-Pläne
+
+### Pro (Cloud)
+
+Für Teams, die bereit sind zu skalieren:
+
+* Alle CRM-Kernfunktionen
+* E-Mail- und Kalendersynchronisierung
+* Workflows und Automatisierungen
+* Standard-Support
+
+
+ Premiumfunktionen (SSO und Berechtigungen auf Zeilenebene) sind im Pro-Plan nicht enthalten.
+
+
+### Organisation (Cloud)
+
+Für größere Teams mit erweiterten Anforderungen:
+
+* Alles aus Pro
+* **Premiumfunktionen**: SSO-Integration und Berechtigungen auf Zeilenebene
+* Vorrangiger Support
+
+## Selbstgehostete Pläne
+
+### Kostenlos (Selbstgehostet)
+
+Hosten Sie Twenty auf Ihrer eigenen Infrastruktur kostenlos:
+
+* Alle Pro-Funktionen enthalten
+* Community-Support über Discord
+* Volle Kontrolle über Ihre Daten
+
+### Organisation (Selbstgehostet)
+
+Für Teams, die beim Selbsthosting Premiumfunktionen benötigen:
+
+* Alle Pro-Funktionen
+* **Premiumfunktionen**: SSO-Integration und Berechtigungen auf Zeilenebene
+* Support durch das Twenty-Team
+* Keine Verpflichtung, benutzerdefinierten Code vor der Weitergabe als Open Source zu veröffentlichen
+
+## Premiumfunktionen
+
+Premiumfunktionen sind nur in den Organisation-Plänen (Cloud oder Selbstgehostet) verfügbar:
+
+* **SSO-Integration**: Single Sign-On mit Ihrem Identitätsanbieter
+* **Berechtigungen auf Zeilenebene**: Feingranulare Zugriffskontrolle auf Datensatzebene
+
+## Pläne wechseln
+
+### Upgrade auf Organisation
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. Klicken Sie auf **Zu Organisation wechseln**
+3. Bestätigen Sie Ihr Upgrade
+
+### Downgrade auf Pro
+
+Wenden Sie sich an den Support, um Ihren Plan herabzustufen.
+
+### Zur jährlichen Abrechnung wechseln
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. Klicken Sie auf **Zu jährlich wechseln**
+3. Mit jährlicher Abrechnung sparen
+
+### Zur monatlichen Abrechnung wechseln
+
+Wenden Sie sich an den Support, um wieder zur monatlichen Abrechnung zu wechseln.
diff --git a/packages/twenty-docs/l/de/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/de/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..119863bb62
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Workflow-Guthaben
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Übersicht
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Monatlich | 5 million/month |
+| Jährlich | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Guthabenverbrauch |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI prompts** (coming soon) | Variable based on usage |
+
+Credits werden in Echtzeit abgezogen, wenn Workflows ausgeführt werden.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Zusätzliche Guthaben kaufen
+
+Need more credits?
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/de/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/de/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..2553e3a458
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Preisgestaltung
+
+
+
+ Ja, Sie können Twenty kostenlos beim Selbsthosting nutzen. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Support ist über unsere Discord-Community zugänglich.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ Wir bieten keine kostenlosen Plätze an. Die Preisgestaltung erfolgt pro Benutzer, und jeder Benutzer benötigt eine Lizenz, um auf Twenty zuzugreifen.
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun. Klicken Sie dann auf `Auf Organisation umstellen`.
+
+
+
+ Bitte wenden Sie sich direkt an unser Team über den Support, es gibt derzeit keine einfache Möglichkeit, dies über die Benutzeroberfläche zu tun.
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun. Klicken Sie dann auf `Auf jährlich umstellen`.
+
+
+
+ Bitte wenden Sie sich direkt an unser Team über den Support, es gibt derzeit keine einfache Möglichkeit, dies über die Benutzeroberfläche zu tun.
+
+
+
+ Das finden Sie unter `Einstellungen → Rechnungsstellung`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Jede Workflow-Aktion verbraucht Credits basierend auf ihrer Komplexität:
+
+ * **Grundlegende interne Operationen** (wie Suche, Aktualisierung, Datensatz erstellen) verbrauchen sehr wenige Credits
+ * **Komplexere Operationen** wie Code-Knoten und Anfragen an externe Dienste verbrauchen mehr Credits
+ * **AI-Eingabeaufforderungen** (demnächst verfügbar) werden ebenfalls mehr Credits basierend auf der Nutzung verbrauchen
+
+ Credits werden in Echtzeit abgezogen, wenn Workflows ausgeführt werden. Sie können Ihren Verbrauch in **Einstellungen → Rechnungsstellung** überwachen, um den Verbrauch und die verbleibenden Credits zu verfolgen.
+
+
+
+ Sie können zusätzliche Credits unter `Einstellungen → Rechnungsstellung` kaufen.
+
+
+
+## Abrechnung
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun.
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun. Klicken Sie dann auf `Rechnungsdetails anzeigen`. Dort können Sie eine neue Zahlungsmethode hinzufügen.
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun. Klicken Sie dann auf `Rechnungsdetails anzeigen`. Dort können Sie die Rechnungsinformationen bearbeiten.
+
+
+
+ Dies können Sie unter `Einstellungen → Rechnungsstellung` tun. Klicken Sie dann auf `Rechnungsdetails anzeigen`. Sie sehen alle Ihre Rechnungen unten auf dem Bildschirm.
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/billing/overview.mdx b/packages/twenty-docs/l/de/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..ee12587e41
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Abrechnung
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Plan | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/de/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..a84a2165cb
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Kalender
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/de/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Kalender-Reiter
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Personen**: Alle mit einem bestimmten Kontakt geplanten Meetings anzeigen
+* **Unternehmen**: Alle Meetings im Zusammenhang mit einem Unternehmen und seinen Mitarbeitern anzeigen
+* **Opportunities**: Access meeting history related to the company linked to this opportunity
+
+### Meeting-Historie anzeigen
+
+1. **Zu einem Datensatz gehen**: Gehen Sie zu einem beliebigen Personen-, Firmen- oder Chancen-Datensatz
+2. **Wählen Sie den Kalender-Reiter**: Klicken Sie auf den "Kalender"-Reiter neben dem E-Mails-Reiter
+3. **Durchsuchen Sie die Meeting-Historie**: Alle geplanten Meetings und deren Details anzeigen
+4. **Auf Meeting-Kontext zugreifen**: Teilnehmer, Zeiten und verwandte Informationen einsehen
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Was synchronisiert wird
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Was nicht synchronisiert wird
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..2cd5115f3a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Hinweis**: Um Ihre E-Mail-Konten zu verbinden und die Synchronisierungseinstellungen zu konfigurieren, besuchen Sie [E-Mail- & Kalendereinrichtung](/l/de/user-guide/calendar-emails/overview).
+
+## Wie die E-Mail-Integration funktioniert
+
+Twenty verknüpft E-Mails automatisch aus Ihren verknüpften Postfächern mit den relevanten CRM-Datensätzen, um den gesamten Kommunikationsverlauf an einem Ort zu halten.
+
+### Objects Where Emails Can Be Found
+
+E-Mail-Konversationen erscheinen in drei Hauptobjekten:
+
+* **Personen**: Alle E-Mails mit einem bestimmten Kontakt anzeigen
+* **Unternehmen**: Alle E-Mails zu einem Unternehmen und seinen Mitarbeitern anzeigen
+* **Chancen**: E-Mail-Threads anzeigen, die mit dem Unternehmen verbunden sind, das zu dieser Gelegenheit gehört. E-Mail-Threads von einzelnen Personen innerhalb der Gelegenheit werden noch nicht angezeigt.
+
+### E-Mail-Threads anzeigen
+
+1. **Zu einem Datensatz gehen**: Gehen Sie zu einem beliebigen Personen-, Firmen- oder Chancen-Datensatz
+2. **Wählen Sie den Tab "E-Mails"**: Klicken Sie auf den Reiter "E-Mails", um die synchronisierten E-Mails anzuzeigen
+3. **Öffnen Sie einen E-Mail-Thread**: Klicken Sie auf eine beliebige E-Mail, um die vollständige Konversation zu öffnen und zu lesen
+4. **Durchsuchen Sie den Verlauf**: Blättern Sie durch den vollständigen E-Mail-Verlauf mit diesem Kontakt
+
+
+
+## Was Sie sehen werden
+
+### E-Mail-Thread-Ansicht
+
+Wenn Sie einen E-Mail-Thread öffnen, können Sie:
+
+* **Vollständige Gespräche lesen**: Den kompletten E-Mail-Austausch ansehen
+* **Teilnehmer anzeigen**: Alle Personen im E-Mail-Thread sehen
+* **Zeitstempel prüfen**: Genau wissen, wann jede E-Mail gesendet wurde
+* **Zugang zum Kontext**: Den gesamten Kommunikationsverlauf verstehen
+
+### E-Mail-Sichtbarkeit
+
+Je nach den Einstellungen Ihres Postfachs können Sie sehen:
+
+* **Vollständiger Inhalt**: Vollständiger E-Mail-Text und Details
+* **Betreff + Metadaten**: Betreffzeile, Absender, Empfänger und Zeitstempel
+* **Nur Metadaten**: Grundlegende Informationen ohne E-Mail-Inhalt
+
+## E-Mail-Synchronisierungsverhalten
+
+### Was synchronisiert wird
+
+* **Externe E-Mails**: Alle E-Mails mit Kontakten außerhalb Ihrer Organisation
+* **Automatische Verknüpfung**: E-Mails werden mit bestehenden Personen- und Firmendatensätzen verbunden
+* **Mehrfache Adressen**: E-Mails von jeder Adresse werden mit dem gleichen Kontaktdatensatz verbunden
+* **Aktualisierungen**: Neue E-Mails erscheinen innerhalb von 5 Minuten
+
+### Was nicht synchronisiert wird
+
+* **Interne E-Mails**: E-Mails zwischen Kollegen (gleiche Domain) bleiben privat
+* **Gruppen-E-Mails**: Verteilerlisten und Gruppen-E-Mails sind ausgeschlossen
+* **Ausgeschlossene Ordner**: Ordner, die Sie nicht synchronisieren möchten (konfiguriert unter Einstellungen → Konten → E-Mail)
+
+### Selektive Ordnersynchronisierung (Lab-Funktion)
+
+Bestimmen Sie, welche E-Mail-Ordner mit Twenty synchronisiert werden:
+
+1. Aktivieren Sie "Nachrichtenordner" unter Einstellungen → Releases → Lab
+2. Konfigurieren Sie Ordner unter Einstellungen → Konten → E-Mail
+3. Wählen Sie spezifische Ordner zum Einschließen oder Ausschließen (Posteingang, Gesendet, Archiv, benutzerdefinierte Ordner)
+
+## Fehlerbehebung bei der E-Mail-Synchronisierung
+
+### Häufige Synchronisierungsprobleme
+
+* **Synchronisierungsverzögerungen**: E-Mails erscheinen innerhalb von 5 Minuten, aber der erste Import dauert länger
+* **Fehlende E-Mails**: Prüfen Sie, ob:
+ * Ordner in den Einstellungen für Nachrichtenordner ausgeschlossen sind
+ * Die automatische Erstellung von Kontakten deaktiviert ist (E-Mails benötigen vorhandene Twenty-Datensätze)
+ * E-Mails von Kollegen (gleiche Domain) oder Gruppenlisten stammen
+ * Die Mailbox die erste Synchronisierung noch abschließt
+
+### E-Mail-Beschränkungen
+
+* **Systemordner**: Einige E-Mail-Ordner sind möglicherweise nicht zur Synchronisierung verfügbar
+* **Aliase**: Nur echte Postfächer können verbunden werden (nicht E-Mail-Aliase)
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..fce02f9c90
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/de/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/de/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..d16b9e76a7
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Objekt | What You See |
+| ----------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Companies** | All emails with anyone from that company (based on email domain) |
+| **Opportunities** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Benutzerdefinierte Objekte
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..e533889ea6
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Übersicht
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Gehen Sie zu **Einstellungen → Konten**
+2. Klicken Sie auf **Konto hinzufügen**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..d96513dfcf
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: Importierte E-Mails begrenzen
+description: Steuern Sie, welche E-Mails in Twenty importiert werden.
+---
+
+## Übersicht
+
+Standardmäßig synchronisiert Twenty alle externen E-Mails aus Ihrem verbundenen Postfach. Sie können den Import mithilfe der **Ordnerauswahl** und der **Sichtbarkeitseinstellungen** begrenzen.
+
+## Methode 1: Ordnerauswahl (Empfohlen)
+
+Bestimmen Sie, welche E-Mail-Ordner mit Twenty synchronisiert werden:
+
+1. Gehen Sie zu **Einstellungen → Veröffentlichungen → Lab**
+2. Aktivieren Sie **Nachrichtenordner**
+3. Zurück zu **Einstellungen → Konten**
+4. Wählen Sie Ihr verbundenes E-Mail-Konto aus
+5. Wählen Sie, welche Ordner synchronisiert werden sollen:
+
+| Ordner | Beschreibung |
+| ----------------------------- | ------------------------------------------ |
+| **Posteingang** | Primäre eingehende E-Mails |
+| **Gesendet** | Ausgehende E-Mails, die Sie gesendet haben |
+| **Archiv** | Archivierte Nachrichten |
+| **Benutzerdefinierte Ordner** | Beliebige spezifische Ordner Ihrer Wahl |
+
+6. Schließen Sie Ordner aus, die Sie nicht synchronisieren möchten (Spam, Papierkorb, persönliche Ordner)
+
+Damit haben Sie genaue Kontrolle darüber, welche E-Mails in Ihrem CRM erscheinen, ohne alles zu synchronisieren.
+
+## Methode 2: Einstellungen zur automatischen Kontakterstellung
+
+Steuern Sie, wann aus E-Mails Kontakte erstellt werden:
+
+1. Gehen Sie zu **Einstellungen → Konten**
+2. Wählen Sie Ihr verbundenes Postfach aus
+3. Wählen Sie eine Option:
+ * **Deaktiviert**: Es werden keine Kontakte erstellt, E-Mails werden jedoch weiterhin mit bestehenden Kontakten synchronisiert
+ * **Gesendet & Empfangen**: Erstellt Kontakte aus allen externen E-Mails
+ * **Nur Gesendet**: Erstellt Kontakte nur aus E-Mails, die Sie senden
+
+## Was stets ausgeschlossen ist
+
+Diese E-Mails werden unabhängig von den Einstellungen nie synchronisiert:
+
+* **Interne E-Mails**: Nachrichten zwischen Kollegen (gleiche Domain)
+* **Gruppen-E-Mails**: Verteilerlisten und Gruppennachrichten
+* **Spam/Papierkorb**: Systemordner sind in der Regel ausgeschlossen
+
+## Wichtiger Hinweis
+
+Wir stellen keine CC-E-Mail-Adresse für selektives Synchronisieren bereit. Verwenden Sie die oben genannte Ordnerauswahl, um das gleiche Maß an Kontrolle zu erreichen.
diff --git a/packages/twenty-docs/l/de/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/de/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..6703bc2721
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Connection Options
+
+### Google-Konto (Gmail & Google Kalender)
+
+1. Gehen Sie zu **Einstellungen → Konten**
+2. Klicken Sie auf **Konto hinzufügen**
+3. Wählen Sie **Mit Google fortfahren**
+4. Authorize Twenty to access your Gmail and Google Calendar
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Ihre E-Mails und Kalendereinträge werden automatisch synchronisiert
+
+### Microsoft Konto (Outlook & Microsoft Kalender)
+
+1. Gehen Sie zu **Einstellungen → Konten**
+2. Klicken Sie auf **Konto hinzufügen**
+3. Wählen Sie **Mit Microsoft fortfahren**
+4. Authorize Twenty to access your Outlook and Microsoft Calendar
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Ihre E-Mails und Kalendereinträge werden automatisch synchronisiert
+
+### SMTP/CalDAV Setup (Other Providers)
+
+Für andere E-Mail- und Kalenderanbieter:
+
+1. Gehen Sie zu **Einstellungen → Releases → Lab**, um die Funktion zu aktivieren
+2. Zurück zu **Einstellungen → Konten**
+3. SMTP-Einstellungen für E-Mail konfigurieren
+4. CalDAV-Einstellungen für Kalender konfigurieren
+5. Die Verbindung testen
+
+### Mehrere Postfächer
+
+* **Unbegrenzte Konten**: Verbinden Sie mehrere E-Mail-Konten pro Benutzer
+* **Kontenverwaltung**: Zwischen verschiedenen Postfächern wechseln
+* **Sync-Einstellungen**: Verschiedene Einstellungen pro Postfach konfigurieren
+
+
+ Es können nur echte Postfächer verbunden werden (z.B. support@domain.com mit eigenem Posteingang). E-Mail-Aliase, die zu einem anderen Postfach weiterleiten, können nicht mit Twenty verbunden werden.
+
+
+## E-Mail-Konfiguration
+
+### Nachrichtensichtbarkeit
+
+Wählen Sie verschiedene Sichtbarkeitsstufen für Ihre E-Mails:
+
+* **Nur Metadaten**: Teilen Sie nur grundlegende Informationen (Absender, Empfänger, Datum, Uhrzeit)
+* **Betreff und Metadaten**: Teilen Sie die Betreffzeile zusammen mit den Metadaten
+* **Gesamter E-Mail-Inhalt**: Teilen Sie den gesamten E-Mail-Inhalt einschließlich Anhängen
+
+### Automatische Kontakt-Erstellung
+
+* **Deaktiviert**: Keine automatische Kontakt-Erstellung
+* **Für gesendete & empfangene Nachrichten**: Kontakte für alle externen E-Mail-Interaktionen erstellen
+* **Nur für gesendete Nachrichten**: Kontakte nur für gesendete E-Mails erstellen
+* **Hinweis**: Interne E-Mails (gleiche Domain) werden nie synchronisiert, um die Privatsphäre zu wahren
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Control which emails get sync with Message Folder Selection (Lab Feature)
+
+Bestimmen Sie, welche E-Mail-Ordner mit Twenty synchronisiert werden:
+
+1. Gehen Sie zu **Einstellungen → Releases → Lab** und aktivieren Sie **Nachrichtenordner**
+2. Zurück zu **Einstellungen → Konten** und wählen Sie Ihr verbundenes E-Mail-Konto
+3. Wählen Sie, welche Ordner synchronisiert werden sollen:
+ * **Posteingang**: Primäre eingehende E-Mails
+ * **Gesendet**: Ausgehende E-Mails, die Sie gesendet haben
+ * **Benutzerdefinierte Ordner**: Jegliche spezifischen Ordner, die Sie einbeziehen möchten
+ * **Ordner ausschließen**: Ordner wie Spam, Papierkorb oder persönliche Ordner überspringen
+
+Damit haben Sie genaue Kontrolle darüber, welche E-Mails in Ihrem CRM erscheinen, ohne alles zu synchronisieren.
+
+**Was synchronisiert wird:**
+
+* **Externe E-Mails**: Alle E-Mails mit externen Kontakten aus gewählten Ordnern
+* **Interne E-Mails**: Nicht synchronisiert (gleiche Domain-E-Mails bleiben privat)
+* **Anhänge**: Kommt im H1 2026
+
+**Hinweis**: Wir bieten keine CC-E-Mail-Adresse für selektives Synchronisieren an. Verwenden Sie stattdessen die oben genannte Nachrichtenordner-Funktion, um dieselbe Kontrolle darüber zu erhalten, welche E-Mails mit Twenty synchronisiert werden.
+
+## Kalenderkonfiguration
+
+### Ereignissichtbarkeit
+
+Wählen Sie aus, was für andere Benutzer in Ihrem Arbeitsbereich sichtbar wird:
+
+* **Alles**: Die gesamten Veranstaltungsdetails werden mit Ihrem Team geteilt
+* **Metadaten**: Nur Datum & Teilnehmer werden mit Ihrem Team geteilt
+
+### Automatische Kontakt-Erstellung für Meetings
+
+* **Ja**: Kontakte für Besprechungsteilnehmer, die nicht in Ihrem CRM sind, automatisch erstellen
+* **Nein**: Treffen Sie Verbindungen nur zu vorhandenen Kontakten
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Steuern Sie, welche Ereignisse synchronisiert werden
+
+* **Meeting-Import**: Kalenderereignisse automatisch importieren
+* **Kontaktverlinkung**: Treffen mit Personen- und Unternehmensdaten verknüpfen
+
+**Was synchronisiert wird:**
+
+* **Meetings**: Kalenderereignisse mit externen Teilnehmern
+* **Kontaktverlinkung**: Ereignisse automatisch mit CRM-Aufzeichnungen verknüpft
+* **Team-Veranstaltungen**: Gemeinsame Kalenderansicht
+
+## Synchronisationsfrequenz
+
+**Aktualisierungen alle 5 Minuten**: Sowohl E-Mail- als auch Kalenderdaten werden automatisch alle 5 Minuten nach dem ersten Import synchronisiert.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Nächste Schritte
+
+* [Mailbox capabilities](/l/de/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/de/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..e9d8202793
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Dashboards
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Übersicht
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Beste Praktiken
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Favoriten
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..fc12e61339
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widgets
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Styling
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..4f50185c4a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Noch nicht. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/de/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..b367470c69
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Dashboards
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Dashboards
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Registerkarten
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widgets
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Erste Schritte
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Speichern
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Beste Praktiken
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Nächste Schritte
+
+* [Widgets and visualizations](/l/de/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/de/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..7a17162287
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Wie es funktioniert
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/de/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/de/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..487a955154
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Relationsfelder
+
+Please see our dedicated article: [Import Relations Between Objects](/l/de/user-guide/data-migration/capabilities/import-relations)
+
+### Auswahlfelder
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..53bc98c081
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Unterstützte Dateiformate
+description: Unterstützte Dateiformate für den Datenimport in Twenty.
+---
+
+## Unterstützte Formate
+
+Twenty unterstützt drei Dateiformate für den Import:
+
+| Format | Erweiterung | Notizen |
+| ------------------ | ----------- | ---------------------------- |
+| **CSV** | .csv | Empfohlen, am kompatibelsten |
+| **Excel** | .xlsx | Modernes Excel-Format |
+| **Excel (Legacy)** | .xls | Älteres Excel-Format |
+
+## Datei-Anforderungen
+
+| Anforderung | Wert |
+| -------------------- | --------------------------------------------------- |
+| **Zeichenkodierung** | UTF-8 empfohlen |
+| **Datensatzlimit** | 10.000 Datensätze pro Datei |
+| **Struktur** | Die erste Zeile muss Spaltenüberschriften enthalten |
+| **Inhalt** | Ein Objekttyp pro Datei |
+
+## CSV: Beste Praktiken
+
+* **Trennzeichen**: Verwenden Sie Komma (`,`) oder Semikolon (`;`)
+* **Textbegrenzer**: Verwenden Sie doppelte Anführungszeichen (`\"`) für Text, der Kommas enthält
+* **Zeilenenden**: Sowohl Windows (CRLF) als auch Unix (LF) werden unterstützt
+* **Leere Werte**: Zellen leer lassen, nicht "NULL" oder "N/A" verwenden
+
+## Excel: Beste Praktiken
+
+Beim Export aus Excel:
+
+* Formeln entfernen (nur Werte exportieren)
+* Leere Zeilen am Ende löschen
+* Sicherstellen, dass keine zusammengeführten Zellen vorhanden sind
+* Nur das erste Tabellenblatt verwenden
+
+## Große Datensätze
+
+Für Datenmengen mit mehr als 10.000 Datensätzen:
+
+* In mehrere Dateien aufteilen
+* Oder den [API-Import](/l/de/user-guide/data-migration/how-tos/import-data-via-api) für unbegrenzte Datensätze verwenden
+
+Für sehr große Migrationen (über 100.000 Datensätze) ist die API deutlich schneller und zuverlässiger als CSV-Importe.
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..c41e6c2038
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Übersicht
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Objekt | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Companies** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Arbeitsbereichsmitglieder** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..ab4255b41c
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Überblick
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Objekt | Unique Fields |
+| ------------------------------ | ---------------------- |
+| **People** | `id`, `email` |
+| **Companies** | `id`, `domain` |
+| **Benutzerdefinierte Objekte** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Beste Praktiken
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..12fcec44fb
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Überblick
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Anwendungsfälle:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/de/developers/extend/capabilities/apis).
+
+### Berechtigungen
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Relationsfelder
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/de/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Nächste Schritte
+
+* [How to Update Existing Records](/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/de/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/de/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..9b93f27926
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Übersicht
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Fehlermeldung | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Was Sie sehen werden
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Was Sie sehen werden
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### E-Mail
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Domäne
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Datum
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Telefon
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Beispiel |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Boolesch
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Währung
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Beispiel |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Nummer
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/de/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Was Sie sehen werden
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Was Sie sehen werden
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/de/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Was Sie sehen werden
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/de/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Beziehungen
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Datenmodell
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/de/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/de/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/de/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..f1c67ff152
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Übersicht
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Bevor Sie beginnen
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/de/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Feld | Required? | Format | Notizen |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Text | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Nummer | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Fehler | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Ja! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Fehlerbehebung
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/de/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..d17afd7302
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Übersicht
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Bevor Sie beginnen
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Feld | Required? | Format | Notizen |
+| ----------------- | ----------- | ----------------- | ------------------------- |
+| **E-Mail** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Text | |
+| **Last Name** | Recommended | Text | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Text | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Beispiel |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Format | Beispiel |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Notizen |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| E-Mail | **E-Mail** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Telefon | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Fehler | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Ja! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Fehlerbehebung
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/de/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..459f8f3864
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Übersicht
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | Wert |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Erste Schritte
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Dokumentation |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/de/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/de/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Beste Praktiken
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/de/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Professionelle Dienstleistungen
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/de/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Ja! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/de/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..0a0c07c37d
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Übersicht
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Beziehung | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Unternehmen | Personen |
+| Companies → Opportunities | Unternehmen | Opportunities |
+| People → Tasks | Person | Aufgaben |
+| People → Notes | Person | Notizen |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| ------------------------------ | --------------------------------------------------------------- |
+| **Companies** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Arbeitsbereichsmitglieder** | `id` (UUID), `email` (not name) |
+| **Benutzerdefinierte Objekte** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Kennung | Format | Beispiel |
+| ------- | -------------- | -------------------------------------- |
+| Domäne | URL format | `https://acme.com` |
+| E-Mail | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Ja! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Sie können entweder:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Fehlerbehebung
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/de/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..2e57315401
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Migration von anderen CRMs
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Übersicht
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Gehen Sie zu **Einstellungen → Mitglieder**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Benutzerdefinierte Objekte
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ----------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **E-Mail** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/de/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/de/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Workflows neu erstellen
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/de/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Häufige Probleme und Lösungen
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Checkliste nach der Migration
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Konfiguration
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Need Help?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/de/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..b7da106e63
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Migration von Selbstgehostet zu Cloud
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Übersicht
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Unternehmen
+2. Personen
+3. Opportunities
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+Vor:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+Nach:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Ansichten
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Workflows
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Integrationen
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Checkliste nach der Migration
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Need Help?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/de/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..8f0c3825e2
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: Bereiten Sie Ihre CSV-Dateien vor},{
+description: Vollständige Schritt-für-Schritt-Anleitung zum Formatieren deiner Daten für den Import in Twenty.
+---
+
+## Übersicht
+
+Diese Anleitung führt dich durch die Vorbereitung deiner CSV-Datei für einen erfolgreichen Import. Befolge diese Schritte, um Fehler zu vermeiden.
+
+## Schritt 1: Dateianforderungen prüfen
+
+Bevor du beginnst, stelle sicher, dass deine Datei diese Anforderungen erfüllt:
+
+| Anforderung | Details |
+| ---------------------- | --------------------------- |
+| **Format** | CSV, XLSX oder XLS |
+| **Größenbeschränkung** | 10.000 Datensätze pro Datei |
+| **Zeichenkodierung** | UTF-8 empfohlen |
+| **Struktur** | Ein Objekttyp pro Datei |
+
+Für Datenmengen mit mehr als 10.000 Datensätzen teile die Daten in mehrere Dateien auf oder verwende den [API-Import](/l/de/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Schritt 2: Beispieldatei herunterladen
+
+**Dies ist der wichtigste Schritt.** Die Beispieldatei zeigt dir die exakten Spaltennamen und das Format, das Twenty erwartet.
+
+1. Wechsle zur Objektansicht (Personen, Unternehmen usw.)
+2. Klicke auf **⋮** → **Datensätze importieren**
+3. Klicke auf **Beispieldatei herunterladen**
+4. Verwende diese Datei als Vorlage
+
+**Profi-Tipp:** Exportiere stattdessen einige vorhandene Datensätze. So erhältst du reale Beispiele dafür, wie Daten formatiert sein sollten, und die Spaltennamen werden beim Import automatisch zugeordnet.
+
+## Schritt 3: Doppelte Werte entfernen
+
+Twenty erzwingt die Eindeutigkeit bestimmter Felder. Duplikate führen zu Importfehlern.
+
+| Objekt | Eindeutige Felder |
+| ------------------------------ | --------------------------------------------------------- |
+| **Personen** | `id`, `email` |
+| **Unternehmen** | `id`, `domain` |
+| **Benutzerdefinierte Objekte** | `id`, plus jedes Feld, das du als eindeutig markiert hast |
+
+**Vor dem Import:**
+
+1. Sortiere deine Tabelle nach dem eindeutigen Feld (E-Mail oder Domain)
+2. Entferne oder führe doppelte Zeilen zusammen
+3. Prüfe auf Duplikate, die in Twenty bereits existieren
+
+**Softgelöschte Datensätze zählen für die Eindeutigkeit.** Datensätze unter Befehlsmenü → Gelöschte Datensätze anzeigen führen zu Duplikatfehlern. Lösche sie dauerhaft oder stelle sie wieder her und aktualisiere sie.
+
+## Schritt 4: Jeden Feldtyp korrekt formatieren
+
+Verschiedene Feldtypen erfordern spezifische Formate. Hier ist die vollständige Übersicht:
+
+### Textfelder
+
+* Keine spezielle Formatierung erforderlich
+* Führende und nachgestellte Leerzeichen werden automatisch entfernt
+
+### E-Mail-Felder
+
+* Muss ein gültiges E-Mail-Format haben: `name@domain.com`
+* Muss eindeutig sein (keine Duplikate in der Datei oder in Twenty)
+* Für zusätzliche E-Mails verwende dieses Format in der Spalte **Emails / Additional Emails**:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Domain-Felder
+
+* **Empfohlenes Format**: `https://domain.com`
+* Dies entspricht dem Format der Postfach-/Kalendersynchronisierung (verhindert Duplikate)
+* Beide Spalten ausfüllen:
+ * **Domain / Domain Label**: `domain.com`
+ * **Domain / Domain URL**: `https://domain.com`
+* Muss innerhalb deiner Datei und in Twenty eindeutig sein
+
+### Telefonfelder
+
+Telefon ist ein **verschachteltes Feld**, das mehrere Spalten benötigt:
+
+| Spalte | Beispiel |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Beispiel |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Auswahlfelder
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Nächste Schritte
+
+Your file is ready! Now:
+
+* [Import Companies](/l/de/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..bb94ad5e0a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Übersicht
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Anwendungsfälle:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Wie es funktioniert
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Objekt | Recommended | Alternative | Notizen |
+| ------------------------------ | ---------------- | ----------- | ---------------------------- |
+| **People** | `e-Mail` | `id` | Email is human-readable |
+| **Companies** | `domäne` | `id` | Domain is human-readable |
+| **Benutzerdefinierte Objekte** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Ergebnis |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Ergebnis | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Ja! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Beste Praktiken
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Fehlerbehebung
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/de/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/de/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/de/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/de/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/de/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..c90929b603
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: Datenmigration
+description: Importieren und exportieren Sie Ihre CRM-Daten über CSV-Dateien oder die API.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Importmethoden
+
+Twenty unterstützt zwei Hauptmethoden zum Importieren von Daten:
+
+| Methode | Am besten geeignet | Volumenlimit |
+| -------------- | ------------------------------------------------- | --------------------------- |
+| **CSV-Import** | Standardmigrationen, regelmäßige Aktualisierungen | 10.000 Datensätze pro Datei |
+| **API-Import** | Groß angelegte Migrationen, Automatisierung | Unbegrenzt |
+
+Für sehr große Datensätze (Hunderttausende von Datensätzen) verwenden Sie die API. Unsere [Implementierungspartner](/l/de/user-guide/getting-started/capabilities/implementation-services) können bei Bedarf diese Skripte ausführen.
+
+## Grundlagen des CSV-Imports
+
+Sie können Daten für jedes Objekt mit CSV-, XLSX- oder XLS-Dateien importieren. Jede Datei sollte **nur einen Objekttyp** enthalten (z. B. nur Personen-Datensätze).
+
+**Felder müssen vor dem Import existieren.** Das Hochladen einer CSV erstellt Datensätze, erstellt jedoch keine Felder. Wenn Sie benutzerdefinierte Felder benötigen, erstellen Sie diese zuerst unter **Einstellungen → Datenmodell**.
+
+### Schritte
+
+1. Navigieren Sie zu dem Objekt, in das Sie Daten importieren möchten
+2. Klicken Sie oben rechts auf das Symbol **⋮** (dies ist das Befehlsmenü) und klicken Sie auf **Datensätze importieren**
+3. Laden Sie die Vorlagendatei herunter, um sicherzustellen, dass Ihre Daten im erwarteten Format vorliegen
+4. Laden Sie Ihre formatierte CSV-Datei hoch
+5. Ordnen Sie Ihre Spalten den Twenty-Feldern zu
+6. Überprüfen Sie Fehler (gelb hervorgehoben) und beheben Sie sie, indem Sie sie direkt in der Benutzeroberfläche bearbeiten
+7. Bestätigen Sie den Import
+
+### Beziehungen zwischen Objekten importieren
+
+Sie können Beziehungen zwischen Objekte n mithilfe der CSV-Importfunktion importieren. Sie müssen auf das verknüpfte Objekt über ein eindeutiges Feld dieses Objekts verweisen: die `id`, die `email` für Personen und Workspace-Mitglieder, die `domain` für Unternehmen, jedes andere im Datenmodell als eindeutig festgelegte Feld für andere Objekte.
+
+**Gelöschte Datensätze zählen zur Eindeutigkeit.** Softgelöschte Datensätze (sichtbar unter Befehlsmenü → Gelöschte Datensätze anzeigen) werden in die Eindeutigkeitsprüfungen einbezogen. Wenn Sie einen Datensatz mit demselben eindeutigen Wert wie ein gelöschter Datensatz importieren, wird der gelöschte Datensatz wiederhergestellt.
+
+
+ **Die Importreihenfolge ist wichtig!**
+
+ Beim Import verknüpfter Objekte laden Sie die Dateien in dieser Reihenfolge hoch:
+
+ 1. **Unternehmen** zuerst (die „one“-Seite der Beziehungen)
+ 2. **Personen** an zweiter Stelle (über companyId mit Unternehmen verknüpft)
+ 3. **Verkaufschancen** an dritter Stelle (mit Unternehmen/Personen verknüpft)
+ 4. **Benutzerdefinierte Objekte** mit Beziehungen zuletzt
+
+ Warum? Die „one“-Seite einer Eins-zu-viele-Beziehung muss existieren, bevor Sie darauf verweisen können. Beispielsweise muss der Unternehmensdatensatz existieren, bevor Sie eine Person mit der ID dieses Unternehmens importieren.
+
+
+Weitere Informationen finden Sie in [diesem Artikel](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) mit einer Schritt-für-Schritt-Anleitung zum Vorgehen.
+
+## Daten exportieren
+
+Exportieren Sie die Daten Ihres Arbeitsbereichs für Backups, Berichte oder Migrationen.
+
+### Schritte
+
+1. Navigieren Sie zu dem Objekt, das Sie exportieren möchten
+2. Konfigurieren Sie die Ansicht mit den benötigten Spalten
+3. Klicken Sie auf **⋮** → **Ansicht exportieren**
+4. Speichern Sie die CSV-Datei
+
+**Nur sichtbare Spalten werden exportiert.** Die CSV-Datei enthält nur die Spalten, die in Ihrer aktuellen Ansicht angezeigt werden. Fügen Sie vor dem Export Spalten hinzu oder blenden Sie sie aus, um zu steuern, welche Daten enthalten sind.
+
+**Exportgrenzen**: Bis zu 20.000 Datensätze pro Export.
+
+## Berechtigungen
+
+Datenimport und -export erfordern bestimmte Berechtigungen:
+
+* **Import**: Erfordert die Berechtigung "Import CSV"
+* **Export**: Erfordert die Berechtigung "Export CSV"
+
+Wenden Sie sich an Ihren Arbeitsbereichsadministrator, wenn Sie diese Berechtigungen nicht haben.
+
+## Nächste Schritte
+
+* [Bereiten Sie Ihre CSV-Dateien vor](/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [Beziehungen zwischen Objekten importieren](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Über die API für große Datensätze importieren](/l/de/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..42f1c6757d
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Felder
+description: Verstehen Sie die Rolle von Feldern und wie Sie sie verwalten.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Über Felder
+
+Felder sind wie Spalten in einer Tabelle. Sie speichern verschiedene Datentypen wie Text, Zahlen oder Daten. Felder können standardmäßig (eingebaut) oder benutzerdefiniert (selbst erstellt) sein.
+
+### Standardfelder
+
+Standardfelder sind in Twenty integriert, um gängige geschäftliche Anforderungen abzudecken.
+
+Zum Beispiel sind `Vorname` und `Nachname` Standardfelder im `Personen` Objekt. Sie speichern Textdaten für individuelle Namen.
+
+Sie können Standardfelder nicht löschen, aber deaktivieren, wenn Sie sie nicht benötigen.
+
+Sie können auch die Optionen der standardmäßigen Felder vom Typ `SELECT` anpassen, zum Beispiel die Optionen für die `Stage` bei Deals.
+
+
+
+### Benutzerdefinierte Felder
+
+Benutzerdefinierte Felder können zu jedem Objekt hinzugefügt werden. Sie können Text, Zahlen, Daten, Dropdown-Auswahlen und mehr speichern. Verwenden Sie benutzerdefinierte Felder, um Informationen zu verfolgen, die für Ihr Unternehmen spezifisch sind.
+
+Ein benutzerdefiniertes Feld für SpaceX könnte zum Beispiel `Rakete Aktivstatus` sein, das anzeigt, ob eine Rakete in Betrieb ist.
+
+
+
+## Feldtypen
+
+Twenty unterstützt verschiedene Feldtypen:
+
+| Typ | Beschreibung | Beispiel |
+| ----------------- | ----------------------------------------------------------------------- | ---------------------------- |
+| Adresse | Strukturierte Adresse mit Straße, Stadt, Bundesland, Land, Postleitzahl | Büroadresse |
+| Array | Liste von Textwerten | Tags |
+| Boolesch | Ankreuzfeld für Wahr/Falsch | Aktiv |
+| Währung | Geldbetrag mit Währungscode | Deal-Betrag (USD) |
+| Datum | Datumswerte | Abschlussdatum |
+| Datum und Uhrzeit | Datum mit Uhrzeit | Besprechungszeit |
+| Domäne | Website-Domain (für Unternehmen verwendet) | acme.com |
+| E-Mail | E-Mail-Adressen (mit primärer und zusätzlichen) | E-Mail des Kontakts |
+| JSON | Strukturierte JSON-Daten | Benutzerdefinierte Metadaten |
+| Links | URLs mit Bezeichnungen (primär + sekundär) | Website, LinkedIn |
+| Langer Text | Mehrzeiliger Text | Beschreibung, Notizen |
+| Mehrfachauswahl | Mehrere Optionen aus einer vordefinierten Liste | Tags, Kategorien |
+| Nummer | Numerische Werte (Ganzzahlen oder Dezimalzahlen) | Menge, Punktzahl |
+| Telefon | Telefonnummern mit Ländervorwahl | Geschäftstelefon |
+| Bewertung | Sternebewertung (1–5) | Priorität, Punktzahl |
+| Beziehung | Verknüpfungen zu Datensätzen in anderen Objekten | Unternehmen → Personen |
+| Auswahl | Einzelauswahl aus einer vordefinierten Liste | Phase, Status |
+| Text | Einzeiliger Text | Name, Titel |
+
+## Ein benutzerdefiniertes Feld erstellen
+
+Um ein benutzerdefiniertes Feld zu einem Objekt hinzuzufügen, folgen Sie diesen Schritten:
+
+1. Gehen Sie zu `Einstellungen` in der linken Seitenleiste.
+2. Gehen Sie zu `Datenmodell`, und wählen Sie das Objekt, das Sie anpassen möchten.
+3. Fahren Sie fort, indem Sie auf `Feld hinzufügen` klicken.
+4. Wählen Sie einen Feldnamen und -typ, der Ihren Anforderungen entspricht. Erwägen Sie, eine Feldbeschreibung hinzuzufügen, um ein besseres Verständnis zu erzielen.
+
+Ihr neu erstelltes Feld ist jetzt in den Feldern der Applikation verfügbar. Um es in einer bestimmten Ansicht anzuzeigen, klicken Sie auf das Optionsmenü und wählen Sie dann `Felder`.
+
+
+
+**Schnellweg:** Klicken Sie auf den **+**-Button oben rechts in einer Objekttabelle und wählen Sie dann `Felder anpassen`. Dies führt Sie direkt zu den Einstellungen des Datenmodells.
+
+
+
+## Ein Feld deaktivieren
+
+Sie können ein Feld deaktivieren, um es in der App zu verbergen, ohne Ihre Daten zu verlieren. Denken Sie an ein Verstecken des Feldes, anstatt es zu löschen.
+
+So können Sie es tun:
+
+1. Suchen Sie das Feld, das Sie in Ihren Objekteinstellungen deaktivieren möchten.
+
+2. Klicken Sie auf die drei Punkte `⋮` neben dem Feld, um das Menü zu öffnen.
+
+3. Wählen Sie `Deaktivieren` im Dropdown-Menü aus.
+
+
+
+Was passiert, wenn Sie ein Feld deaktivieren?
+
+1. **In der App:** Das Feld verschwindet und Sie können ihm keine neuen Werte hinzufügen.
+
+2. **Bestehende Beziehungen:** Wenn es ein Relationsfeld ist, bleiben bestehende Verbindungen bestehen, aber Sie können keine neuen anlegen.
+
+3. **API-Zugriff:** Sie können weiterhin über die API auf das Feld und seine Daten zugreifen.
+
+Sie können Standard- und benutzerdefinierte Felder reaktivieren oder sie dauerhaft löschen.
+
+## Felder einzigartig machen
+
+Machen Sie ein Feld einzigartig, um sicherzustellen, dass sich keine verschiedenen Datensätze mit demselben Wert befinden. sind E-Mail-Adressen für jede Person einzigartig.
+
+Wenn beim Einstellen der Einzigartigkeit ein Fehler auftritt, überprüfen Sie auf doppelte Werte in Ihren Daten (einschließlich gelöschter Datensätze).
+
+## Beste Praktiken zur Feldkonfiguration
+
+### Benennungskonventionen und Einschränkungen
+
+* **Singular und Pluralnamen müssen unterschiedlich sein**: Unser GraphQL API benötigt unterschiedliche Namen für Mutationen
+* **Geschützte Feldnamen**: Einige Namen sind für die Systemnutzung reserviert (z. B. `Type`, `Application`)
+
+### Währungs- und Telefonfelder
+
+* **Standardwährung**: kann über das Datenmodell konfiguriert werden
+* **Standardlandesvorwahlen**: können für Telefonfelder über das Datenmodell konfiguriert werden
+
+### Auswahlfelder
+
+* **Eine Standardoption kann ausgewählt werden** für jedes Auswahlfeld
+
+### Feld für Aufzeichnungstext
+
+* **Jedes Objekt hat ein Hauptanzeigefeld**: Dieses Feld erscheint in der ganz linken Spalte und stellt den Datensatz dar, wenn er mit anderen Objekten verknüpft ist. Es muss ein Textfeld sein. Zum Beispiel verwendet `Personen` `Name` als Hauptfeld, so dass Sie, wenn Sie eine Person mit einem Unternehmen verknüpfen, deren Namen in der Unternehmensansicht sehen.
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..e2a77afae3
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Objekte
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standard Objects
+
+Standardobjekte sind vordefinierte Entitäten in Ihrem Arbeitsbereich, um Ihnen den Einstieg zu erleichtern. Sie sind Teil eines gemeinsamen Datenmodells, das allen Nutzern von Twenty zugänglich ist. Sie können sie so verwenden, wie sie sind, anpassen oder deaktivieren.
+
+
+
+### Personen
+
+Das `Personen`-Objekt speichert Ihre Kontakte. Es umfasst Kontaktdaten und Interaktionshistorie, sodass Sie alle Ihre Kundeninteraktionen an einem Ort sehen können.
+
+### Unternehmen
+
+Das `Unternehmen`-Objekt speichert Ihre Geschäftskonten. Es umfasst Details wie Branche, Größe und Standort. Companies connect to both `People` and `Opportunities` objects.
+
+### Opportunities
+
+The `Opportunities` object stores deal-related data. Es verfolgt den Fortschritt potenzieller Verkäufe, vom Interessenten bis zum Abschluss, und zeichnet Phasen, Deal-Größen, zugehörige Konten und erwartetes Abschlussdatum auf. Sie können Ihre Verkaufspipeline in einem Kanban-Layout anzeigen.
+
+### Notizen
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Aufgaben
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Benutzerdefinierte Objekte
+
+Benutzerdefinierte Objekte lassen Sie Informationen speichern, die einzigartig für Ihre Organisation sind und die Standardobjekte nicht verarbeiten können. Wenn Sie zum Beispiel SpaceX sind, möchten Sie vielleicht ein benutzerdefiniertes Objekt für Raketen und Starts erstellen.
+
+
+
+### Creating a New Custom Object
+
+Um ein neues benutzerdefiniertes Objekt zu erstellen:
+
+1. Gehen Sie zu Einstellungen in der Seitenleiste auf der linken Seite.
+2. Gehen Sie unter Arbeitsbereich zu Datenmodell. Hier können Sie einen Überblick über alle Ihre bestehenden Standard- und benutzerdefinierten Objekte (sowohl aktive als auch deaktivierte) sehen.
+
+
+
+3. Klicken Sie oben auf `+ Neues Objekt`. Geben Sie den Namen (sowohl im Singular als auch im Plural) ein, wählen Sie ein Symbol aus und fügen Sie eine Beschreibung für Ihr benutzerdefiniertes Objekt hinzu und drücken Sie Speichern (oben rechts). Als Beispiel für ein benutzerdefiniertes Objekt wäre der Singular "Eintrag" und der Plural "Einträge" zusammen mit einer Beschreibung wie "Einträge, die Gastgeber erstellt haben, um ihre Immobilie zu präsentieren."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Beste Praktiken
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..f5e525f9fe
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Relationsfelder
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Klicken Sie auf **Speichern**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ------------- | ----------- | ------------- |
+| Personen | Unternehmen | Many-to-One |
+| Opportunities | Unternehmen | Many-to-One |
+| Opportunities | Personen | Many-to-One |
+
+## Beste Praktiken
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..66efe277e5
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/de/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Klicken Sie auf **Speichern**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/de/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/de/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/de/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..c9e2a3759f
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/de/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Klicken Sie auf **Speichern**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/de/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/de/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/de/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/de/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..2e136e5bce
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Bevor Sie beginnen
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/de/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Klicken Sie auf **Speichern**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/de/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..12f006356c
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: Passen Sie Ihr Datenmodell an
+description: Übersicht über die Anpassungsoptionen des Datenmodells.
+---
+
+Das Datenmodell von Twenty ist vollständig anpassbar. Erstellen Sie Objekte, Felder und Relationen, die zu Ihrem Unternehmen passen.
+
+## Schnellzugriffe
+
+| Ich möchte ... | Leitfaden |
+| ------------------------------ | --------------------------------------------------------------------------------------------------- |
+| Ein neues Objekt erstellen | [So erstellen Sie benutzerdefinierte Objekte](/l/de/user-guide/data-model/how-tos/create-custom-objects) |
+| Einem Objekt Felder hinzufügen | [So erstellen Sie benutzerdefinierte Felder](/l/de/user-guide/data-model/how-tos/create-custom-fields) |
+| Objekte miteinander verbinden | [So erstellen Sie Relationsfelder](/l/de/user-guide/data-model/how-tos/create-relation-fields) |
+
+## Mehr erfahren
+
+* [Ihr Datenmodell verstehen](/l/de/user-guide/data-model/overview) — zentrale Konzepte und Planungstipps
+* [Objekte](/l/de/user-guide/data-model/capabilities/objects) — Standard vs. benutzerdefinierte Objekte
+* [Felder](/l/de/user-guide/data-model/capabilities/fields) — alle Feldtypen
+* [Relationsfelder](/l/de/user-guide/data-model/capabilities/relation-fields) — Objekte verbinden
+* [FAQ zum Datenmodell](/l/de/user-guide/data-model/how-tos/data-model-faq) — häufige Fragen
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..0392b13025
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Datenmodell-FAQ
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Objektverwaltung
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Noch nicht. Die Reihenfolge der Objekte in der Navigation ist derzeit festgelegt, aber diese Funktion ist für eine zukünftige Veröffentlichung geplant.
+
+
+
+ Alle aktiven Objekte erscheinen in der Navigation. Sie können Objekte, die Sie nicht benötigen, unter **Einstellungen → Datenmodell** deaktivieren.
+
+
+
+## Feldmöglichkeiten
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ Unsere GraphQL-API verwendet beide Formen für verschiedene Operationen:
+
+ * `createPerson` (Singular) für Einzelaktionen
+ * `createPeople` (Plural) für Massenoperationen
+
+ Dies schafft Einschränkungen, wenn Singular- und Pluralformen gleich sind, verbessert jedoch die Entwicklererfahrung.
+
+
+
+ Bestimmte Feldnamen wie `Typ` oder `Applikation` sind für Systemnutzung reserviert. Wählen Sie stattdessen alternative Namen wie `Kategorie` oder `Klassifikation`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Formelfelder kommen im **1. Quartal 2026**. In der Zwischenzeit können Sie Workflows verwenden, um Feldwerte automatisch zu berechnen und zu aktualisieren.
+
+
+
+ Verschachtelte Felder kommen im **1. Quartal 2026**. Aktuell können Sie Workflows verwenden, um Felderwerte von verwandten Objekten einzuholen. Zum Beispiel: Um die Branche eines Unternehmens in einem Personen-Datensatz anzuzeigen, erstellen Sie ein benutzerdefiniertes Feld für Personen und verwenden Sie einen Workflow, um den Wert zu synchronisieren.
+
+
+
+ Feld-Umsortierung wird mit benutzerdefinierten Layouts im **4. Quartal 2025** verfügbar sein. Currently, fields appear in alphabetical order.
+
+
+
+## Beziehungen
+
+
+
+ Ja! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/de/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Zugriff und Berechtigungen
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Wenden Sie sich an Ihren Arbeitsbereichs-Administrator. Der Zugriff auf das Datenmodell ist in der Regel nur für Administratoren eingeschränkt.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Brauchen Sie mehr Hilfe?
+
+Check our [Implementation Services](/l/de/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/de/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/de/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..070a26e6d5
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Datenmodell
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Ein Datenmodell ist die Struktur, die definiert, wie Informationen in Ihrem CRM organisiert sind. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Objekte
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Felder
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Name
+* E-Mail
+* Telefon
+* Berufsbezeichnung
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Datensätze
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Zum Beispiel:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Felder** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Jedes Unternehmen arbeitet anders. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Dies geht über ein einzelnes Feld hinaus, da sie ihre eigenen Daten und Beziehungen haben.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Fragen Sie sich:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Nächste Schritte
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/de/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/de/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/de/user-guide/data-model/how-tos/create-relation-fields)
+
+## Need Help?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/de/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..a2e38c339a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glossar
+description: Machen Sie sich mit grundlegenden Begriffen vertraut, die in Twenty verwendet werden.
+---
+
+## API
+
+API (Application Programming Interface) ermöglicht es Ihnen, Twenty mit anderen Softwaresystemen zu verbinden und benutzerdefinierte Integrationen zu erstellen.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Befehlsmenü
+
+Das Befehlsmenü ist eine Schnellzugriffsoberfläche (geöffnet mit `Cmd + K` auf dem Mac und `Strg + K` unter Windows), mit der Sie Aktionen ausführen, Datensätze erstellen und effizient in Ihrem Arbeitsbereich navigieren können.
+
+## Company & People
+
+Das CRM verfügt über zwei grundlegende Arten von Datensätzen:
+
+* A `Company` represents a business or organization.
+* `People` represent your company's current and prospective customers or clients.
+
+## Benutzerdefinierte Felder
+
+Benutzerdefinierte Felder sind Datenfelder, die Sie erstellen, um Informationen zu erfassen, die speziell auf die Bedürfnisse und Prozesse Ihres Unternehmens zugeschnitten sind.
+
+## Datenmodell
+
+Ein Datenmodell ist die Struktur, die definiert, wie Informationen in Ihrem CRM organisiert sind, einschließlich der vorhandenen Objekte, deren Eigenschaften (Felder) und wie sie zueinander in Beziehung stehen.
+
+## Favoriten
+
+Favoriten sind Datensätze, die Sie für den Schnellzugriff markiert haben und die in Ihrer Seitenleiste erscheinen, um einen schnellen Zugriff auf wichtige Daten zu ermöglichen.
+
+## Feld
+
+Ein Feld bezeichnet einen bestimmten Bereich, in dem bestimmte Daten für eine Entität gespeichert werden.
+
+## Integration
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Iterator
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+Ein `Kanban` ist eine visuelle Möglichkeit, Ihre Geschäftsprozesse mit Karten und Spalten zu verfolgen. Jede Spalte stellt eine Phase in Ihrem Prozess dar (zum Beispiel: neu, laufend, gewonnen, verloren), und Sie verschieben Datensätze durch diese Phasen, während sie fortschreiten.
+
+## Objekt
+
+An Object is a data structure that represents a specific type of entity in your CRM (like People, Companies, or Opportunities). Objekte können standardmäßig (eingebaut) oder benutzerdefiniert (von Ihnen erstellt) sein.
+
+## Opportunities
+
+Opportunities in Twenty CRM are potential deals or sales with accounts or contacts.
+
+## Datensatz
+
+Ein Datensatz zeigt eine Instanz eines Objekts an, wie ein bestimmtes Konto oder einen bestimmten Kontakt.
+
+## Relationsfelder
+
+Relationsfelder stellen Verbindungen zwischen verschiedenen Objekten her und ermöglichen es Ihnen, Datensätze miteinander zu verknüpfen (zum Beispiel die Verbindung einer Person mit einem Unternehmen).
+
+## Standardfelder
+
+Standardfelder sind vorgefertigte Datenfelder, die standardmäßig mit Objekten geliefert werden und in allen Arbeitsbereichen gebräuchliche Funktionen bieten.
+
+## Aufgaben
+
+Tasks in Twenty CRM are assigned activities relating to contacts, accounts, or opportunities.
+
+## Auslöser
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Ansichten
+
+Sie können die Anzeige Ihrer Datensätze mit Ansichten anpassen, indem Sie verschiedene Filter, Layouts und Sortierungsoptionen für jede Ansicht festlegen.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhooks
+
+Webhooks sind automatisierte Nachrichten, die von Twenty an andere Anwendungen gesendet werden, wenn bestimmte Ereignisse eintreten, und ermöglichen die Synchronisierung von Daten in Echtzeit.
+
+## Workflows
+
+Workflows sind automatisierte Prozesse, die basierend auf bestimmten Bedingungen Aktionen auslösen und Ihnen helfen, sich wiederholende Aufgaben und Geschäftsprozesse zu automatisieren.
+
+## Arbeitsbereich
+
+Ein `Arbeitsbereich` repräsentiert typischerweise ein Unternehmen, das Twenty verwendet. Er enthält alle Datensätze und Daten, die Sie und Ihre Teammitglieder zu Twenty hinzufügen.
+Er hat einen einzigen Domainnamen, der typischerweise der Domainname ist, den Ihr Unternehmen für Mitarbeiter-E-Mail-Adressen verwendet.
+
+## Arbeitsbereichsmitglieder
+
+Arbeitsbereichsmitglieder sind die Twenty-Benutzer aus Ihrem Team, die Zugriff auf Ihren Arbeitsbereich haben. Sie können als Eigentümer oder Beauftragte für Datensätze zugewiesen werden.
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..599c7446cd
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Implementierungsdienste
+description: Egal, ob Sie Hilfe beim Einstieg oder der Erstellung erweiterter Anpassungen benötigen, wir haben eine Lösung.
+---
+
+## Einführungspakete
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Datenmodell-Design**: Entwerfen und erstellen Sie Ihr benutzerdefiniertes Datenmodell mit Objekten, Feldern und Beziehungen
+* **Datenmigration**: Migrieren Sie Ihre vorhandenen Daten von Ihrem aktuellen CRM zu Twenty
+* **Workflow-Erstellung**: Erstellen Sie benutzerdefinierte Workflows zur Unterstützung Ihrer Geschäftsprozesse
+
+## Implementierungspartner
+
+Arbeiten Sie mit zertifizierten Twenty-Partnern für erweiterte Anpassungen und Integrationen zusammen. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..5cac1316e2
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Was ist Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Vision
+
+Ein gutes CRM zu schaffen ist schwierig, weil es ein Balanceakt ist.
+Für jedes Unternehmen scheinen die Anforderungen klar, doch jeder hat unterschiedliche Bedürfnisse.
+Das Ergebnis ist ein CRM, das entweder zu einfach ist oder versucht, ein Alleskönner zu sein, aber in nichts wirklich spezialisiert ist.
+
+Zunächst sieht Twenty aus wie die meisten CRMs, die Sie bereits kennen: Sie können Geschäfte verfolgen, Kontakte organisieren, Aufgaben und Notizen verwalten.
+**Aber was es auszeichnet, ist unser Ansatz für Erweiterbarkeit. Wir bauen eine offene Plattform, die die Bausteine bereitstellt, um Ihre einzigartigen geschäftlichen Probleme zu lösen.**
+
+Wir priorisieren universelle Prinzipien und gemeinsame Muster über Funktionslisten.
+Wir versuchen nicht, alle Antworten zu haben, sondern befähigen die Benutzer, das zu finden, was für sie am besten funktioniert.
+Open-Source ist das Fundament unseres Ansatzes, das sicherstellt, dass Twenty sich mit seiner Gemeinschaft und für seine Gemeinschaft weiterentwickelt.
+
+## Vorteile
+
+**Anpassbar:** Entworfen, um Ihren geschäftlichen Anforderungen gerecht zu werden.
+
+**Gemeinschaftsgeführt:** Entwickelt und gepflegt von einer großen Open-Source-Gemeinschaft.
+
+**Kosteneffizient:** Sie werden niemals von einem Anbieter abhängig sein, da Sie die Software immer selbst hosten können.
+
+## Hauptmerkmale
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Mehr erfahren](/l/de/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/de/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Erste Schritte](/l/de/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/de/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/de/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/de/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/de/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/de/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Integration starten](/l/de/developers/extend/capabilities/apis).
+
+## Jetzt beitreten
+
+[Hier registrieren](https://app.twenty.com) oder [werden Sie ein Beitragender auf GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..ec9601733d
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Jedes Unternehmen arbeitet anders. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Dies bietet Ihnen sofortigen Mehrwert und hilft Ihrem Team, Twenty mit echten Daten in Aktion zu sehen. You can do so under Settings → Accounts.
+
+## 1. Passen Sie Ihr Datenmodell an
+
+Twenty bietet die Flexibilität, die Sie benötigen, um das Datenmodell zu gestalten, das Ihre täglichen Abläufe am besten unterstützt.
+Erstellen Sie Objekte und Felder jeder Art, einschließlich Beziehungen zwischen Ihren verschiedenen Objekten. Dies können Sie unter Einstellungen → Datenmodell tun.
+Hier sind ein paar Tipps:
+
+* **Es gibt keine Begrenzung für die Anzahl benutzerdefinierter Felder oder benutzerdefinierter Objekte**. Das Hinzufügen benutzerdefinierter Objekte und Felder führt nicht zu einer Änderung Ihres Plans.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Wir empfehlen, diese so oft wie möglich zu verwenden und bei Bedarf Feldern hinzuzufügen, um Ihre Einträge zu kategorisieren. Hier ist ein Beispiel:
+ * Es ist am besten, das Personen-Objekt für Ihre Interessenten und Partner zu verwenden, indem Sie ein Feld im Personen-Objekt mit dem Namen `Personentyp` erstellen, anstatt ein benutzerdefiniertes Partnerobjekt zu erstellen. Da Sie nicht in der Lage wären, auf die mit dieser Person ausgetauschten E-Mails aus den Partnerakten zuzugreifen.
+ * Erstellen Sie unter Personen verschiedene Ansichten, eine zur Anzeige von Partnern und eine zur Anzeige von Interessenten.
+* Zwei Personen können nicht die gleiche E-Mail-Adresse haben. Zwei Unternehmen können nicht die gleiche Domain haben.
+* Sie können Standardfelder und -objekte, die Sie nicht verwenden möchten, deaktivieren.
+* Sie können Felder aus Ansichten ausblenden: Scheuen Sie sich nicht, Felder zu erstellen; Sie müssen nicht alle anzeigen.
+
+Lesen [Sie diesen Artikel](/l/de/user-guide/data-model/overview), um zu erfahren, wie Sie Ihr Datenmodell entwerfen.
+
+## 2. Importieren Sie Ihre Daten
+
+Durch das Einbringen Ihrer vorhandenen Daten in Twenty erhält Ihr Team von Anfang an Kontext.
+
+### Verbinden Sie Ihr Postfach
+
+Falls Sie dies beim Erstellen Ihres Arbeitsbereichs nicht getan haben, verbinden Sie Ihr **Google oder Microsoft-Konto** unter Einstellungen → Konten. Dies erlaubt Twenty:
+
+* Ihre Nachrichten und Besprechungen importieren
+* Kontakte basierend auf Interaktionen automatisch erstellen (optional)
+* Den Kommunikationsverlauf für Ihr Team sichtbar halten
+
+**Verwenden Sie einen anderen Anbieter?**
+Sie können ein weiteres Postfach über SMTP oder einen weiteren Kalender über CalDAV hinzufügen. Sie müssen die Funktion unter Einstellungen → Versionen → Lab aktivieren und dann zum Tab Einstellungen → Konten zurückkehren.
+
+### Daten über CSV importieren
+
+Verwenden Sie das Befehlsmenü (`Cmd + K` oder `Ctrl + K`), um Personen, Unternehmen, Gelegenheiten oder benutzerdefinierte Objekte über CSV zu importieren.
+
+**Wichtige Richtlinien**:
+
+* Laden Sie die Beispieldatei herunter, um das erwartete Format zu verstehen
+* Begrenzen Sie jede Datei auf 10.000 Einträge
+* Entfernen Sie doppelte E-Mails für Personen oder doppelte Domains für Unternehmen
+* Überprüfen und korrigieren Sie Fehler (gelb hervorgehoben) vor dem Import
+
+Lesen [Sie diesen Artikel](/l/de/user-guide/data-migration/overview), um mehr über den Datenimport zu erfahren.
+
+## 3. Erstellen Sie Ihre erste Ansicht
+
+Das Erstellen verschiedener Ansichten ist der Schlüssel, um die Daten für Ihr Team nutzbar zu machen.
+Hier erfahren Sie, wie Sie vorgehen:
+
+* **Spalten hinzufügen oder ausblenden**
+ Verwalten Sie die in einer bestimmten Ansicht sichtbaren Felder, indem Sie auf Optionen → Felder (oben rechts) klicken. Sie können von dort aus Felder anzeigen/verbergen.
+
+* **Felder neu anordnen**
+ Ordnen Sie die Felder in einer bestimmten Ansicht neu an, indem Sie auf Optionen → Felder (oben rechts) klicken. Ziehen Sie die Felder per Drag & Drop, um sie neu anzuordnen.
+
+* **Ansicht filtern**
+ Begrenzen Sie die angezeigten Einträge mit den Filtern oben rechts.
+
+* **Einträge sortieren**
+ Sortieren Sie die angezeigten Einträge mit der Sortierfunktion oben rechts oder indem Sie direkt auf den Spaltennamen klicken.
+
+* **Layout wählen**
+ Sie können zu einem **Kanban-Layout** oder einem **Gruppieren-nach-Layout** wechseln, solange das Objekt ein `Phase`- oder ähnliches Auswahlfeld hat.
+
+* **Speichern Sie Ihre Ansicht als Favoriten**
+ Dies kann über das Dropdown-Menü erfolgen, das die verschiedenen Ansichten anzeigt.
+
+## Was kommt als Nächstes?
+
+Beginnen Sie mit der Erstellung von Automatisierungen mit [Workflows](/l/de/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..d903f91021
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Einen Arbeitsbereich erstellen
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Schritt 1: Registrierung
+
+1. Gehen Sie zu [Twenty Sign Up](https://app.twenty.com).
+2. Wählen Sie Ihre bevorzugte Anmeldemethode:
+ * **Weiter mit Google** für die Registrierung mit einem Google-Konto.
+ * **Weiter mit Microsoft** für die Registrierung mit einem Microsoft-Konto.
+ * Oder **Weiter mit E-Mail** für die Registrierung per E-Mail.
+
+
+
+## Schritt 2: Auswahl einer Testphase
+
+Wählen Sie zwischen zwei Testzeiträumen:
+
+### 30 Tage
+
+Mit Kreditkarte
+
+### 7 Tage
+
+Ohne Kreditkarte
+
+Beide Testphasen umfassen:
+
+* Vollzugriff
+* Unbegrenzte Kontakte
+* E-Mail-Integration
+* Benutzerdefinierte Objekte
+* API & Webhooks
+
+Sie können auf „Plan ändern“ klicken, um einen anderen Plan oder Abrechnungszeitraum auszuwählen.
+
+
+
+## Schritt 3: Zahlungsbestätigung & Kontoerstellung
+
+Nach der Zahlungsgenehmigung über Stripe werden Sie zur Erstellung Ihres Arbeitsbereichs und Benutzerprofils weitergeleitet. Denken Sie daran, dass Sie Ihr Abonnement jederzeit kündigen können.
+
+## Support
+
+Bei Fragen oder Hilfe kontaktieren Sie das dedizierte Support-Team unter [contact@twenty.com](mailto:contact@twenty.com) oder senden Sie eine Nachricht auf [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..fa47b52782
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Erhalten Sie einen schnellen Überblick darüber, wie Sie durch die Plattform navigieren und wo Sie verschiedene Aktionen durchführen können.
+---
+
+## Das Hauptlayout
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. Hier findet die tägliche Arbeit statt.
+Sie können dort **Datensätze anzeigen, bearbeiten, löschen** sowie **neue Ansichten erstellen**.
+
+
+
+## Die Navigationsleiste
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Zwischen Ihren Arbeitsbereichen mithilfe des Dropdown-Menüs wechseln oder einen neuen Arbeitsbereich erstellen
+* Die **Suchleiste** verwenden (drücken Sie `/`, um direkt darauf zuzugreifen)
+* Den Bereich **Einstellungen** öffnen
+* Direkten Zugriff auf Ihre **Favoritenansichten**. Favoriten sind für jeden Benutzer einzigartig.
+* Zwischen verschiedenen Objekten wechseln
+* **Automatisierungen erstellen** mithilfe von Workflows
+* Support kontaktieren und unser Benutzerhandbuch öffnen.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. Sie können es auf zwei Weisen aufrufen:
+
+* **Tastenkombination**: Drücken Sie `Cmd + K` (Mac) oder `Strg + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Neue Datensätze erstellen
+* **Daten über CSV importieren und exportieren**
+* Neue Ansichten erstellen
+* Auf gelöschte Datensätze zugreifen (Twenty unterstützt weiches und hartes Löschen)
+* See the keyboard shortcuts to quickly access objects in your workspace
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Ansichten
+
+Jedes Objekt (wie Chancen oder Personen) unterstützt mehrere Ansichten. Es gibt keine Begrenzung der Anzahl von Ansichten pro Objekt.
+
+Verwenden Sie das Dropdown-Menü oben links im Hauptlayout, um zwischen den verschiedenen Ansichten zu wechseln. Zum Beispiel:
+
+* Verwenden Sie eine Kanban-Ansicht, um Chancen nach Phase zu verfolgen
+* Verwenden Sie die Group-By-Ansicht, um Abschnitte zu erstellen und die Effizienz zu verbessern
+* Verwenden Sie Filter, um sich auf bestimmte Datensätze zu konzentrieren (z.B. letzte Woche erstellte Leads)
+* Save filtered views to reuse them later
+* Favoritenansichten für schnellen Zugriff
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/de/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Einstellungen
+
+Öffnen Sie Ihre Einstellungen oben links, um:
+
+* **Verbinden Sie Ihre Mailbox und Kalenderkonten** für nahtlose E-Mail- und Kalendersynchronisierung
+* Passen Sie Ihr **Datenmodell** an: Erstellen Sie benutzerdefinierte Objekte, Felder und Beziehungen
+* **Greifen Sie auf den API-Spielplatz zu und konfigurieren Sie Webhooks**
+* **Benutzerberechtigungen verwalten** und Arbeitsbereichs-Zugangskontrollen einstellen
+* Teammitglieder einladen und Benutzerrollen verwalten
+* Bearbeiten Sie Ihr Profil und Ihre Arbeitsbereicheinstellungen
+* Abrechnung konfigurieren und die Nutzung von Workflow-Guthaben überwachen
+* Entdecken Sie die neuesten Versionen und kommenden Funktionen (unter Freigaben → Reiter 'Lab')
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/de/user-guide/introduction.mdx b/packages/twenty-docs/l/de/user-guide/introduction.mdx
new file mode 100644
index 0000000000..a00222f8cb
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..ac51f03481
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Berechtigungen
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Das Berechtigungssystem von Twenty ermöglicht es Ihnen, den Zugriff auf drei Hauptbereiche zu steuern:
+
+* **Objekte und Felder**: Kontrollieren Sie, wer Datensätze und einzelne Felder anzeigen, bearbeiten oder löschen kann.
+* **Einstellungen**: Verwalten Sie den Zugriff auf die Konfiguration des Arbeitsbereichs und administrative Funktionen.
+* **Aktionen**: Steuern Sie allgemeine Arbeitsbereichsaktionen wie das Importieren von Daten oder das Versenden von E-Mails.
+
+## Erstellen Sie eine Rolle
+
+Um eine neue Rolle zu erstellen:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Unter **Alle Rollen** klicken Sie auf **+ Rolle erstellen**
+3. Geben Sie einen Rollennamen ein
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Klicken Sie auf **Speichern**, um den Vorgang abzuschließen
+
+## Löschen Sie eine Rolle
+
+Um eine Rolle zu löschen:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Klicken Sie auf die Rolle, die Sie entfernen möchten
+3. Öffnen Sie den Tab **Einstellungen** und klicken Sie auf **Rolle löschen**
+4. Klicken Sie im Modal auf **Bestätigen**
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Alle außer der **Admin**-Rolle können gelöscht werden. Es muss immer mindestens ein Mitglied der **Admin**-Rolle zugewiesen sein.
+
+
+## Rollen an Mitglieder zuweisen
+
+### Aktuelle Zuweisungen anzeigen
+
+* Gehen Sie zu **Einstellungen → Rollen**
+* Sehen Sie alle Rollen und wie viele Mitglieder jeweils zugewiesen sind
+* Anzeigen, welche Mitglieder welche Rollen haben
+
+### Weisen Sie einem Mitglied eine Rolle zu
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Klicken Sie auf die Rolle, die Sie zuweisen möchten
+3. Öffnen Sie den Tab **Zuweisungen**
+4. Klicken Sie auf **+ Mitglied zuweisen**
+5. Wählen Sie das Mitglied des Arbeitsbereichs aus der Liste aus
+6. Bestätigen Sie die Zuweisung
+
+### Standardrolle festlegen
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Suchen Sie im Abschnitt **Optionen** nach **Standardrolle**
+3. Wählen Sie aus, welche Rolle neue Mitglieder automatisch erhalten sollen
+4. Neue Arbeitsbereichsmitglieder werden beim Beitritt dieser Rolle zugewiesen
+
+
+ You can only assign roles to existing workspace members. Um neue Mitglieder einzuladen, verwenden Sie die [Mitgliederverwaltung](/l/de/user-guide/settings/capabilities/member-management).
+
+
+## Berechtigungen anpassen
+
+Berechtigungen bestimmen, auf was jede Rolle innerhalb Ihres Arbeitsbereichs zugreifen oder was sie ändern kann, einschließlich Arbeitsbereich-Objekte, Datensätze, Einstellungen und Aktionen.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Beschreibung |
+| -------------------------------------------- | -------------------------------------- |
+| **Datensätze auf allen Objekten anzeigen** | View records in lists and detail pages |
+| **Datensätze auf allen Objekten bearbeiten** | Modify existing records |
+| **Datensätze auf allen Objekten löschen** | Soft-delete records (can be restored) |
+| **Datensätze auf allen Objekten zerstören** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Beschreibung |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Verwaltung von Berechtigungsüberschreibungen
+
+To override inherited permissions:
+
+1. Klicken Sie auf **X**, um die vererbte Regel zu entfernen
+2. Select the specific permissions you want
+3. Klicken Sie auf das orange **Rückgängig**-Symbol (kreisförmiger Pfeil), um Änderungen rückgängig zu machen
+
+Wenn Sie fertig sind, klicken Sie auf **Beenden**, und dann auf **Speichern**, sobald Sie zur Rollenseite weitergeleitet werden.
+
+### Workspace Settings Permissions
+
+Steuern Sie den Zugriff auf die Einstellungen des Arbeitsbereichs auf zwei Arten:
+
+* Schalten Sie **Einstellungen Alles Zugriff** ein, um vollen Zugriff zu gewähren
+* Oder aktivieren Sie bestimmte Berechtigungen (z.B. API-Schlüsselgenerierung, Arbeitsbereich-Präferenzen, Rollenzuweisung, Datenmodellkonfiguration, Sicherheitseinstellungen und Workflow-Management)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Arbeitsbereichs-Aktionsberechtigungen
+
+Steuern Sie den Zugriff auf allgemeine Arbeitsbereichsaktionen:
+
+* Schalten Sie **Anwendung Alles Zugriff** ein, um volle Berechtigungen zu gewähren
+* Oder aktivieren Sie individuelle Aktionen wie **E-Mail senden**, **CSV importieren** und **CSV exportieren**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Klicken Sie auf die Rolle, die Sie zuweisen möchten
+3. Öffnen Sie den Tab **Zuweisungen**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Bestätigen Sie die Zuweisung
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Klicken Sie auf die Rolle, die Sie zuweisen möchten
+3. Öffnen Sie den Tab **Zuweisungen**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Bestätigen Sie die Zuweisung
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..269cd98d49
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Voraussetzungen
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Gehen Sie zu **Einstellungen → Mitglieder**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Beste Praktiken
+
+### Sicherheit
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Fehlerbehebung
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Hilfe erhalten
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/de/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/de/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..b053e6437e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Rollen
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Berechtigungen
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Gehen Sie zu **Einstellungen → Rollen**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## SSO
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/de/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..8c95b92354
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: Berechtigungen & Zugriff
+description: Verwalten Sie Rollen, Berechtigungen und die Zugriffskontrolle in Ihrem Arbeitsbereich.
+---
+
+
+
+
+
+Das Berechtigungssystem von Twenty ermöglicht es Ihnen, zu steuern, wer in Ihrem Arbeitsbereich auf Daten zugreifen und diese ändern darf. Erstellen Sie Rollen, weisen Sie Berechtigungen zu und konfigurieren Sie SSO für sicheren Zugriff.
+
+## Was Sie in diesem Abschnitt finden
+
+
+
+ Erstellen Sie Rollen und konfigurieren Sie Objekt-, Feld- und Einstellungsberechtigungen.
+
+
+
+ Richten Sie Single Sign-On mit Ihrem Identitätsanbieter ein.
+
+
+
+ Häufige Fragen zu Rollen, Berechtigungen und SSO.
+
+
+
+## Hauptfunktionen
+
+* **Rollenbasierter Zugriff**: Erstellen Sie benutzerdefinierte Rollen mit spezifischen Berechtigungen
+* **Objektberechtigungen**: Kontrollieren Sie, wer Datensätze anzeigen, bearbeiten oder löschen kann
+* **Feldberechtigungen**: Beschränken Sie den Zugriff auf sensible Felder
+* **Einstellungsberechtigungen**: Steuern Sie den Zugriff auf die Konfiguration des Arbeitsbereichs
+* **SSO-Integration**: Konfigurieren Sie Single Sign-On für Unternehmenssicherheit (Organization-Plan)
+
+## Schnellzugriffe
+
+* [Rolle erstellen](/l/de/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [SSO konfigurieren](/l/de/user-guide/permissions-access/capabilities/sso-configuration)
+* [Teammitglieder verwalten](/l/de/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/de/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/de/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..8debcddab0
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Arbeitsbereichsdomäne
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Domäne anpassen
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Genehmigte Domänen
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Genehmigte Zugriffsdomäne hinzufügen
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Speichern
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Öffentliche Domains
+
+Stellen Sie eine vollständige und sichere Hosting-Umgebung auf diesen Domains bereit.
+
+### Öffentliche Domäne hinzufügen
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/de/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/de/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..211652835e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Mitgliederverwaltung
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Neue Mitglieder einladen
+
+### Using Email Invitation
+
+1. Gehen Sie zu **Einstellungen → Mitglieder**
+2. Click **+ Invite**
+3. Geben Sie die E-Mail-Adresse der Person ein
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Gehen Sie zu **Einstellungen → Mitglieder**
+2. Kopieren Sie den Einladungslink für den Arbeitsbereich
+3. Teilen Sie den Link mit neuen Teammitgliedern
+4. Sie erhalten Zugriff, sobald sie sich anmelden
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/de/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Approved Access Domains
+
+Allow team members to join automatically based on their email domain:
+
+1. Gehen Sie zu **Einstellungen → Domänen**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/de/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/de/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/de/user-guide/settings/capabilities/profile-settings.mdx b/packages/twenty-docs/l/de/user-guide/settings/capabilities/profile-settings.mdx
new file mode 100644
index 0000000000..47dd705f6b
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/capabilities/profile-settings.mdx
@@ -0,0 +1,43 @@
+---
+title: Profileinstellungen
+description: Verwalten Sie Ihr persönliches Profil und Ihre Sicherheitseinstellungen.
+---
+
+## Persönliche Informationen
+
+### Name und E-Mail
+
+* **Anzeigename**: Aktualisieren Sie, wie Ihr Name anderen Mitgliedern des Arbeitsbereichs angezeigt wird
+* **E-Mail-Adresse**: Ändern Sie Ihre Login-E-Mail (erfordert Bestätigung)
+* **Profilbild**: Laden Sie einen benutzerdefinierten Avatar hoch oder verwenden Sie Ihre Initialen
+
+## Sicherheitseinstellungen
+
+### Zwei-Faktor-Authentifizierung (2FA)
+
+Aktivieren Sie 2FA, um Ihrem Konto eine zusätzliche Sicherheitsebene hinzuzufügen:
+
+1. Gehe zu **Einstellungen → Profileinstellungen**
+2. Klicken Sie auf **2FA aktivieren**
+3. Scannen Sie den QR-Code mit Ihrer Authentifizierungs-App
+4. Geben Sie den Bestätigungscode ein, um zu bestätigen
+
+### Passwortverwaltung
+
+* **Passwort ändern**: Aktualisieren Sie Ihr aktuelles Passwort
+* **Passwortanforderungen**: Muss mindestens 8 Zeichen lang sein
+
+## Profilverwaltung
+
+### Konto löschen
+
+
+ Wenn Sie Ihr Konto löschen, wird Ihr Zugriff auf alle Arbeitsbereiche dauerhaft entfernt. Sie verlieren den Zugriff auf alle Arbeitsbereiche, in denen Sie Mitglied sind, und Sie sollten erwägen, sich stattdessen aus einzelnen Arbeitsbereichen zu entfernen, wenn Sie nur bestimmte Teams verlassen möchten.
+
+
+Um Ihr Konto zu löschen:
+
+1. Gehe zu **Einstellungen → Profileinstellungen**
+2. Scrollen Sie zu **Gefahrenbereich**
+3. Klicken Sie auf **Konto löschen**
+4. Bestätigen Sie, indem Sie Ihre E-Mail-Adresse eingeben
diff --git a/packages/twenty-docs/l/de/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/de/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..3761545592
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Veröffentlichungseinstellungen
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Laborfunktionen
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Gehen Sie zu **Einstellungen → Veröffentlichungen**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/de/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/de/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..c59618e081
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Workspace Settings
+description: Passen Sie den Namen und das Branding Ihres Arbeitsbereichs an.
+---
+
+Those are accessible under **Settings → General**.
+
+## Workspace Picture
+
+* **Logo hochladen**: Ein benutzerdefiniertes Arbeitsbereichs-Logo hinzufügen
+* **Unterstützte Formate**: PNG-, JPEG- und GIF-Dateien unter 10 MB
+* **Entfernen**: Das aktuelle Arbeitsbereichs-Logo löschen
+
+## Arbeitsbereichsname
+
+* **Name**: Anzeigenamen Ihres Arbeitsbereichs ändern
+* Dieser Name erscheint für alle Mitglieder des Arbeitsbereichs
+
+## Danger Zone
+
+
+ Das Löschen Ihres Arbeitsbereichs entfernt alle Daten dauerhaft und kann nicht rückgängig gemacht werden. Alle Arbeitsbereichsdaten werden für immer verloren gehen, alle Mitglieder verlieren sofort den Zugang, und diese Aktion kann nicht rückgängig gemacht werden.
+
+
+Um Ihren Arbeitsbereich zu löschen:
+
+1. Klicken Sie auf die Schaltfläche **Arbeitsbereich löschen**
+2. Bestätigen Sie die Löschung, wenn Sie dazu aufgefordert werden
+
+**Hinweis**: Nur Arbeitsbereich-Administratoren können Arbeitsbereiche löschen.
diff --git a/packages/twenty-docs/l/de/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/de/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..5acdb11759
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Einstellungen FAQ
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Workspace Settings
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Profile Settings
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Klicken Sie auf **2FA aktivieren**
+ 4. Scannen Sie den QR-Code mit Ihrer Authentifizierungs-App
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Klicken Sie auf **Konto löschen**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Erfahrung - Einstellungen
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Gehen Sie zu **Einstellungen → Konten**
+ 2. Klicken Sie auf **Konto hinzufügen**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Gehen Sie zu **Einstellungen → Konten**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Domänen
+
+
+
+ Ja! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Laborfunktionen
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/settings/overview.mdx b/packages/twenty-docs/l/de/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..974e65618e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Einstellungen
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Gehen Sie zu **Einstellungen → Konten**
+2. Klicken Sie auf **Konto hinzufügen**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/de/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Gehen Sie zu **Einstellungen → Mitglieder**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Nächste Schritte
+
+* [Workspace settings](/l/de/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/de/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/de/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..8dcf34f00f
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Kalenderansicht
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/de/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..da5508dde7
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Tabellenansichten
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Kanban-Ansichten
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Beste Praktiken
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/de/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/de/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..7cd29d3b00
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ---------------- | -------------------------------------------------- |
+| Text | Equals, Contains, Starts with, Ends with, Is empty |
+| Nummer | Equals, Greater than, Less than, Between, Is empty |
+| Datum | Equals, Before, After, Between, Is empty |
+| Auswahl | Equals, Is any of, Is empty |
+| Kontrollkästchen | Is true, Is false |
+| Beziehung | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/de/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/de/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..68a22c1ced
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Über Kanban-Ansichten
+
+Kanban-Ansichten visualisieren Prozessabläufe, wobei jede Spalte eine eigene Phase darstellt und jede Karte einen Eintrag repräsentiert.
+
+## Karten zwischen Phasen verschieben
+
+Sie können jede Karte zwischen den Phasen in Ihrem Workflow durch Ziehen und Loslassen verschieben. Um fortzufahren, halten Sie einen Mausklick auf einer Karte und verschieben Sie sie zur nächsten Phase.
+
+
+
+## Add and Delete Stages
+
+Sie können Ihren Workflow anpassen, indem Sie Phasen verwenden, die einen Wert in einem Auswahlfeld darstellen:
+
+### Phasen hinzufügen
+
+Um eine Phase hinzuzufügen, greifen Sie auf die Einstellungen des Auswahlfelds zu, indem Sie zu Einstellungen > Datenmodell navigieren, Ihr Objekt auswählen und dann das Feld, auf dem Ihr Kanban-Board basiert.
+
+
+
+### Phasen entfernen
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Sie können Ihr Kanban-Board so konfigurieren, dass einige Felder angezeigt und andere ausgeblendet werden. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Sie können auch die Reihenfolge der Felder ändern, indem Sie den Feldnamen festhalten und dorthin ziehen, wo Sie ihn haben möchten.
+
+
+
+## Kompaktansicht
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Beschreibung |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Beste Praktiken
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..7607319988
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Tabellenansichten
+description: Display your data in a spreadsheet-like list format.
+---
+
+## Über Tabellenansichten
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Anwendungsfälle:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/de/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..095a9b3b28
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## View Visibility
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Favoriten
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/de/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..fa00dbe65e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Voraussetzungen
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Klicken Sie auf **Speichern**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Objekt | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Opportunities | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/de/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..caac167ea8
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Voraussetzungen
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Klicken Sie auf **Speichern**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Abgeschlossen |
+
+## Related
+
+* [Kanban Views](/l/de/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/de/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..ef0e486ea4
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Klicken Sie auf **Speichern**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Option | Beschreibung |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Speichern
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/de/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..b6e2fd94ad
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Zugriff auf Ihre Ansicht beschränken},{
+description: Steuern Sie, wer Ihre benutzerdefinierten Ansichten sehen kann.
+---
+
+Jede Ansicht (mit Ausnahme der Standardansichten "Alle [Objektname]") verfügt über eine eigene Sichtbarkeitseinstellung.
+
+## Schritte
+
+1. Öffnen Sie die Ansicht, die Sie einschränken möchten
+2. Klicken Sie oben rechts auf **Optionen**
+3. Klicken Sie auf **Sichtbarkeit**
+4. Wählen Sie **Nicht gelistet** aus
+
+Ihre Ansicht ist nun nur für Sie sichtbar.
+
+## Sichtbarkeitsoptionen
+
+| Einstellung | Wer kann sie sehen |
+| ------------------ | ----------------------------------- |
+| **Arbeitsbereich** | Alle Mitglieder des Arbeitsbereichs |
+| **Nicht gelistet** | Nur Sie |
+
+## Notizen
+
+* Die Standardansichten "Alle [Objektname]" können nicht auf "Nicht gelistet" gesetzt werden
+* Nicht gelistete Ansichten erscheinen nicht in den Ansichts-Dropdowns anderer Benutzer
+* Sie können die Sichtbarkeit jederzeit wieder auf "Arbeitsbereich" ändern
+
+## Verwandt
+
+* [Ansichtseinstellungen](/l/de/user-guide/views-pipelines/capabilities/view-settings) — alle Konfigurationsoptionen für Ansichten
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..45c725e37e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Phase | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Beste Praktiken
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/de/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..a3e56b818f
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Erwarteten Betrag in Ihrer Pipeline anzeigen},{
+description: Gewichtete Deal‑Werte basierend auf der Phasenwahrscheinlichkeit berechnen und anzeigen.
+---
+
+Der erwartete Betrag ist ein berechneter Wert: **Amount × Probability**. So können Sie den Umsatz prognostizieren, indem Sie Deals nach ihrer Abschlusswahrscheinlichkeit gewichten.
+
+
+ Dies ist ein Beispiel für das Erstellen von [Formelfeldern](/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields) mit Workflows.
+
+
+Diese Anleitung führt Sie durch das Einrichten der benutzerdefinierten Felder und Workflows, die erforderlich sind, um erwartete Beträge in Ihrer Pipeline zu berechnen und anzuzeigen.
+
+## Schritt 1: Benutzerdefinierte Felder erstellen
+
+Sie benötigen zwei benutzerdefinierte Felder am Objekt „Opportunities“.
+
+### Feld „Probability“ erstellen
+
+1. Gehen Sie zu **Settings → Data Model → Opportunities**
+2. Klicken Sie auf **+ Feld hinzufügen**
+3. Konfigurieren:
+ * **Name**: Probability
+ * **Typ**: Number
+ * **Beschreibung**: Phasenbasierte Wahrscheinlichkeit (0–100 %)
+4. Klicken Sie auf **Speichern**
+
+### Feld „Expected Amount“ erstellen
+
+1. Klicken Sie auf **+ Feld hinzufügen**
+2. Konfigurieren:
+ * **Name**: Expected Amount
+ * **Typ**: Currency
+ * **Beschreibung**: Berechnet: Amount × Probability
+3. Klicken Sie auf **Speichern**
+
+### Optional: Felder für Benutzer schreibgeschützt machen
+
+Wenn Benutzer diese berechneten Felder nicht manuell bearbeiten sollen:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Wählen Sie die zu konfigurierende Rolle aus
+3. Suchen Sie das Objekt „Opportunities“
+4. Setzen Sie die Felder **Probability** und **Expected Amount** auf schreibgeschützt
+
+Dadurch können nur die Workflows diese Werte aktualisieren.
+
+## Schritt 2: Workflow #1 erstellen — Probability bei Phasenwechsel aktualisieren
+
+Dieser Workflow setzt die Probability automatisch, wenn eine Opportunity in eine neue Phase wechselt.
+
+### Neuen Workflow erstellen
+
+1. Gehen Sie zu **Workflows**
+2. Klicken Sie auf **+ New Workflow**
+3. Benennen Sie ihn „Update Probability on Stage Change“
+
+### Trigger konfigurieren
+
+1. Fügen Sie einen **Record Created or Updated**-Trigger hinzu
+2. Wählen Sie **Opportunities** als Objekt
+3. Filtern nach: **Stage**-Feld wird aktualisiert
+
+### Für jede Phase Verzweigungen hinzufügen
+
+Erstellen Sie für jede Phase eine Verzweigung mit der entsprechenden Wahrscheinlichkeit:
+
+| Phase | Wahrscheinlichkeit |
+| ------------ | ------------------ |
+| Neu | 10 % |
+| Qualifiziert | 25 % |
+| Meeting | 40 % |
+| Proposal | 60 % |
+| Negotiation | 80 % |
+| Closed Won | 100 % |
+| Closed Lost | 0% |
+
+
+ Um eine neue Verzweigung zu erstellen, klicken Sie mit der rechten Maustaste auf den Workflow-Canvas und klicken Sie auf **New action**. Verknüpfen Sie diese Aktion anschließend mit dem vorherigen Knoten, indem Sie den Pfeil vom vorherigen Knoten zu dieser neuen Aktion ziehen.
+
+
+Für jede Phase:
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Stage = [Phasenname]
+2. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Feld: Probability
+ * Wert: [Wahrscheinlichkeit für diese Phase]
+
+### Erwarteten Betrag berechnen
+
+Nachdem die Verzweigungen wieder zusammengeführt wurden:
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Amount ist nicht leer
+2. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Feld: Expected Amount
+ * Wert: Amount × Probability
+
+## Schritt 3: Workflow #2 erstellen — Bei Änderung von Amount neu berechnen
+
+Dieser Workflow aktualisiert den Expected Amount, wenn sich der Amount des Deals ändert.
+
+### Neuen Workflow erstellen
+
+1. Gehen Sie zu **Workflows**
+2. Klicken Sie auf **+ New Workflow**
+3. Benennen Sie ihn „Recalculate Expected Amount on Amount Change“
+
+### Trigger konfigurieren
+
+1. Fügen Sie einen **Record Created or Updated**-Trigger hinzu
+2. Wählen Sie **Opportunities** als Objekt
+3. Filtern nach: **Amount**-Feld wird aktualisiert
+
+### Logik hinzufügen
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Amount ist nicht leer
+2. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Feld: Expected Amount
+ * Wert: Amount × Probability
+
+## Schritt 4: In Ihrer Pipeline anzeigen
+
+Zeigen Sie nun die Summen des Expected Amount in Ihrer Kanban-Ansicht an:
+
+1. Öffnen Sie Ihre Kanban-Ansicht **Sales Pipeline**
+2. Klicken Sie auf die **Zahl** neben einem Phasennamen oben in einer Spalte
+3. Wählen Sie **Summe**
+4. Wählen Sie **Expected Amount**
+
+Jede Spalte zeigt nun den insgesamt gewichteten Pipeline‑Wert für diese Phase.
+
+## Zusammenfassung
+
+| Komponente | Zweck |
+| -------------------------- | ----------------------------------------------------------------------------------------- |
+| **Feld „Probability“** | Speichert die phasenbasierte Gewinnwahrscheinlichkeit |
+| **Feld „Expected Amount“** | Speichert Amount × Probability |
+| **Workflow #1** | Aktualisiert Probability bei Phasenwechsel und berechnet anschließend Expected Amount neu |
+| **Workflow #2** | Berechnet Expected Amount neu, wenn sich Amount ändert |
+| **Aggregation** | Zeigt die Summe des Expected Amount pro Phase an |
+
+## Verwandt
+
+* [Formelfelder](/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields) — berechnete Felder mit Workflows erstellen
+* [Kanban-Ansichten](/l/de/user-guide/views-pipelines/capabilities/kanban-views) — Spaltenaggregationen
+* [Benutzerdefinierte Felder erstellen](/l/de/user-guide/data-model/how-tos/create-custom-fields) — Feldkonfiguration
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..3fffd1fd3b
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: Verfolgen Sie, wie lange Opportunities in jeder Phase bleiben
+description: Überwachen Sie die Deal-Geschwindigkeit, indem Sie nachverfolgen, wann Opportunities jede Phase betreten.
+---
+
+
+ Dies ist ein Beispiel dafür, wie man mit Workflows [Formelfelder](/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields) erstellt – konkret Datumsberechnungen.
+
+
+Das Nachverfolgen, wann Opportunities eine Phase betreten, hilft, Engpässe zu erkennen und die Deal-Geschwindigkeit zu messen.
+
+Diese Anleitung führt Sie durch das Einrichten benutzerdefinierter Felder und eines Workflows, um automatisch zu erfassen, wann eine Opportunity in eine Phase wechselt, und zu berechnen, wie viele Tage sie in der vorherigen Phase verbracht hat.
+
+## Schritt 1: Benutzerdefinierte Felder erstellen
+
+Für jede Phase benötigen Sie zwei Feldtypen:
+
+* **Datums- und Uhrzeitfelder**: Erfassen, wann die Opportunity die jeweilige Phase betreten hat
+* **Zahlenfelder**: Speichern, wie viele Tage die Opportunity in jeder Phase verbracht hat
+
+### Erstellen Sie die Felder "Last Entered"
+
+1. Gehen Sie zu **Settings → Data Model → Opportunities**
+2. Klicken Sie für jede Phase auf **+ Add Field** und konfigurieren Sie:
+ * **Name**: Last Entered [Phasenname] (z. B. "Last Entered New", "Last Entered Qualified")
+ * **Type**: Date & Time
+ * **Description**: Zeitstempel, wann die Opportunity diese Phase betreten hat
+3. Klicken Sie auf **Speichern**
+
+Erstellen Sie diese Felder:
+
+* Last Entered New
+* Last Entered Qualified
+* Last Entered Meeting
+* Last Entered Proposal
+* Last Entered Negotiation
+* Last Entered Closed Won
+* Last Entered Closed Lost
+
+### Erstellen Sie die Felder "Days in Stage"
+
+1. Klicken Sie für jede Phase auf **+ Add Field** und konfigurieren Sie:
+ * **Name**: Days in [Phasenname] (z. B. "Days in New", "Days in Qualified")
+ * **Type**: Number
+ * **Description**: Anzahl der in dieser Phase verbrachten Tage
+2. Klicken Sie auf **Speichern**
+
+Erstellen Sie diese Felder:
+
+* Days in New
+* Days in Qualified
+* Days in Meeting
+* Days in Proposal
+* Days in Negotiation
+
+
+ Sie benötigen keine "Days in"-Felder für Closed Won und Closed Lost, da dies finale Phasen sind.
+
+
+### Optional: Felder schreibgeschützt machen
+
+Wenn Benutzer diese berechneten Felder nicht manuell bearbeiten sollen:
+
+1. Gehen Sie zu **Einstellungen → Rollen**
+2. Rolle zum Konfigurieren auswählen
+3. Suchen Sie das Objekt Opportunities
+4. Setzen Sie die Felder "Last Entered" und "Days in" auf schreibgeschützt
+
+## Schritt 2: Workflow erstellen
+
+Dieser einzelne Workflow übernimmt beide Aufgaben:
+
+* Erfasst den Zeitstempel beim Eintritt in eine neue Phase
+* Berechnet die in der vorherigen Phase verbrachten Tage
+
+### Workflow erstellen
+
+1. Gehen Sie zu **Workflows**
+2. Klicken Sie auf **+ New Workflow**
+3. Nennen Sie ihn "Track Stage Time"
+
+### Trigger konfigurieren
+
+1. Fügen Sie einen **Record Updated**-Trigger hinzu
+2. Wählen Sie **Opportunities** als Objekt aus
+3. Filtern nach: **Stage**-Feld wird aktualisiert
+
+### Verzweigungen für jede Phase hinzufügen
+
+
+ Um eine neue Verzweigung zu erstellen, klicken Sie mit der rechten Maustaste auf den Workflow-Canvas und klicken Sie auf **New action**. Verknüpfen Sie anschließend diese Aktion mit dem vorherigen Knoten, indem Sie den Pfeil vom vorherigen Knoten zu dieser neuen Aktion ziehen.
+
+
+---
+
+**Branch 1: Stage = New (erste Phase)**
+
+Da dies die erste Phase ist, erfassen wir nur den Eintrittszeitstempel – es gibt keine vorherige Phase zu berechnen.
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Stage = New
+2. Fügen Sie eine **Code**-Aktion hinzu:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Feld: Last Entered New
+ * Wert: `now` aus dem Code-Knoten
+
+---
+
+**Branch 2: Stage = Qualified**
+
+Beim Wechsel zu Qualified den Eintrittszeitpunkt erfassen UND die in New verbrachten Tage berechnen.
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Stage = Qualified
+2. Fügen Sie eine **Code**-Aktion hinzu:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Konfigurieren Sie die Eingabe des Code-Knotens: Ordnen Sie `lastEnteredPreviousStage` dem Feld **Last Entered New** zu
+4. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Zu aktualisierende Felder:
+ * Last Entered Qualified = `now`
+ * Days in New = `daysInPreviousStage`
+
+---
+
+**Branch 3: Stage = Meeting**
+
+Beim Wechsel zu Meeting den Eintrittszeitpunkt erfassen UND die in Qualified verbrachten Tage berechnen.
+
+1. Fügen Sie einen **Filter**-Knoten hinzu: Stage = Meeting
+2. Fügen Sie eine **Code**-Aktion hinzu:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Konfigurieren Sie die Eingabe des Code-Knotens: Ordnen Sie `lastEnteredPreviousStage` dem Feld **Last Entered Qualified** zu
+4. Fügen Sie eine **Update Record**-Aktion hinzu:
+ * Datensatz: Die auslösende Opportunity
+ * Zu aktualisierende Felder:
+ * Last Entered Meeting = `now`
+ * Days in Qualified = `daysInPreviousStage`
+
+---
+
+**Für die verbleibenden Phasen fortfahren:**
+
+| Phase | Datensätze | Berechnet |
+| ----------- | ------------------------ | ------------------- |
+| Proposal | Last Entered Proposal | Days in Meeting |
+| Negotiation | Last Entered Negotiation | Days in Proposal |
+| Closed Won | Last Entered Closed Won | Days in Negotiation |
+| Closed Lost | Last Entered Closed Lost | Days in Negotiation |
+
+Die Verzweigungen müssen nicht wieder zusammengeführt werden – jede läuft unabhängig, wenn ihre Phasenbedingung erfüllt ist.
+
+## Schritt 3: Zeit in der Phase analysieren
+
+Mit erfassten Zeitstempeln und Tageszahlen können Sie nun die Deal-Geschwindigkeit analysieren.
+
+### Eine Ansicht "Slow Deals" erstellen
+
+1. Erstellen Sie eine Tabellenansicht der Opportunities
+2. Spalten hinzufügen: Name, Phase, Tage in [vorheriger Phase], Betrag
+3. Nach dem Feld "Days in" sortieren (absteigend)
+4. Nach Phase filtern, um sich jeweils auf eine Phase zu konzentrieren
+
+Deals oben haben die meiste Zeit in der vorherigen Phase verbracht.
+
+### Aggregationen verwenden
+
+In Ihrer Pipeline-Kanban-Ansicht:
+
+1. Klicken Sie auf die Zahl neben einem Phasennamen
+2. Wählen Sie **Average** aus
+3. Wählen Sie ein "Days in"-Feld
+
+Dies zeigt die durchschnittliche Zeit, die Deals in jeder Phase verbringen.
+
+## Zusammenfassung
+
+| Komponente | Zweck |
+| ----------------------------- | ----------------------------------------------------------------- |
+| **Last Entered-Felder** | Speichern, wann die Opportunity jede Phase betreten hat |
+| **Days in-Felder** | Speichern, wie viele Tage in jeder Phase verbracht wurden |
+| **Workflow** | Erfasst den Zeitstempel UND berechnet die Tage in einem Durchlauf |
+| **Ansichten & Aggregationen** | Deal-Geschwindigkeit analysieren und Engpässe identifizieren |
+
+## Verwandt
+
+* [Workflows](/l/de/user-guide/workflows/overview) — Grundlagen der Automatisierung
+* [So erstellen Sie benutzerdefinierte Felder](/l/de/user-guide/data-model/how-tos/create-custom-fields) — Feldkonfiguration
+* [Kanban-Ansichten](/l/de/user-guide/views-pipelines/capabilities/kanban-views) — Aggregationen
diff --git a/packages/twenty-docs/l/de/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/de/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..9c07a16d52
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Ansichten & Pipelines
+description: Erfahren Sie, wie Sie in Twenty Ansichten erstellen und verwalten.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Ansichten verstehen
+
+Ansichten sind gespeicherte Konfigurationen, die festlegen, wie Ihre Daten angezeigt werden. Jede Ansicht kann Folgendes haben:
+
+* **Layout**: Tabelle, Kanban oder Kalender
+* **Filter**: Welche Datensätze angezeigt werden
+* **Sortierung**: Wie Datensätze angeordnet werden
+* **Felder**: Welche Spalten sichtbar sind
+
+## Ansichtstypen
+
+### Tabellenansicht
+
+Die standardmäßige tabellenähnliche Ansicht, die Datensätze in Zeilen mit anpassbaren Spalten anzeigt.
+
+### Kanban-Ansicht
+
+Eine visuelle Board-Ansicht, in der Datensätze als Karten nach Phasen organisiert erscheinen. Ideal für:
+
+* Vertriebspipelines
+* Projektverfolgung
+* Jeder Workflow mit definierten Phasen
+
+### Kalenderansicht
+
+Zeigen Sie Datensätze mit Datumsfeldern in einem Kalender an. Perfekt für:
+
+* Besprechungen und Veranstaltungen
+* Fristen und Fälligkeitstermine
+* Zeitbasierte Planung
+
+## Eine Ansicht erstellen
+
+Es gibt zwei Möglichkeiten, eine neue Ansicht zu erstellen.
+
+### Das Ansichts-Dropdown-Menü verwenden
+
+1. Navigieren Sie zu einem beliebigen Objekt (Personen, Unternehmen usw.)
+2. Klicken Sie oben links auf den Namen der Ansicht (zeigt die aktuelle Ansicht mit einem Dropdown-Pfeil)
+3. Klicken Sie auf **+ Ansicht hinzufügen**
+4. Benennen Sie Ihre Ansicht und klicken Sie auf **Erstellen**
+5. Wählen Sie unter **Optionen** ein Layout (Tabelle, Kanban oder Kalender)
+6. Fügen Sie bei Bedarf Filter und Sortierung hinzu
+7. Wählen Sie aus, welche Felder angezeigt werden sollen, und ordnen Sie sie neu an
+8. Klicken Sie auf **Speichern**
+
+
+
+### Beginnen Sie damit, eine vorhandene Ansicht zu bearbeiten
+
+1. Navigieren Sie zu einem beliebigen Objekt (Personen, Unternehmen usw.)
+2. Wählen Sie unter **Optionen** ein Layout (Tabelle, Kanban oder Kalender) oder fügen Sie bei Bedarf Filter und Sortierung hinzu
+3. Klicken Sie auf **Als neue Ansicht speichern**
+4. Benennen Sie Ihre Ansicht und klicken Sie auf **Erstellen**
+5. Bearbeiten Sie Ihre neue Ansicht weiter
+6. Klicken Sie auf **Ansicht aktualisieren**, um Ihre zusätzlichen Konfigurationen zu speichern
+
+
+
+## Ansichten verwalten
+
+### Ansicht bearbeiten
+
+1. Wählen Sie die Ansicht im Dropdown-Menü aus
+2. Nehmen Sie Ihre Änderungen vor (Filter, Sortierung, Spalten)
+3. Klicken Sie auf **Speichern**, um die Ansicht zu aktualisieren
+
+### Eine Ansicht umbenennen oder ihr Symbol ändern
+
+1. Öffnen Sie das Ansichts-Dropdown-Menü
+2. Klicken Sie auf das **⋮**-Menü neben dem Ansichtsnamen
+3. Wählen Sie **Bearbeiten** aus
+4. Ändern Sie den Namen oder das Symbol
+5. Klicken Sie auf **Speichern**
+
+### Ansichten neu anordnen
+
+1. Öffnen Sie das Ansichts-Dropdown-Menü
+2. Klicken und ziehen Sie eine Ansicht an ihrem Ziehpunkt
+3. Lassen Sie sie an der gewünschten Position los
+4. Die neue Reihenfolge wird automatisch gespeichert
+
+### Zu Favoriten hinzufügen
+
+Häufig verwendete Ansichten für den Schnellzugriff anheften:
+
+1. Öffnen Sie das Ansichts-Dropdown-Menü
+2. Klicken Sie auf das **⋮**-Menü neben einer Ansicht
+3. Wählen Sie **Zu Favoriten hinzufügen** aus
+4. Die Ansicht erscheint im Bereich Favoriten
+
+### Ansicht löschen
+
+1. Wählen Sie die zu löschende Ansicht aus
+2. Klicken Sie auf das Ansichts-Dropdown-Menü
+3. Klicken Sie auf das **⋮**-Menü neben der Ansicht
+4. Wählen Sie **Löschen** aus
+5. Löschen bestätigen
+
+
+ Gelöschte Ansichten können nicht wiederhergestellt werden. Stellen Sie vor der Bestätigung sicher, dass Sie sie entfernen möchten.
+
+
+## Sichtbarkeit von Ansichten
+
+Jede Ansicht (außer den Standardansichten "Alle [Objektname]") hat ihre eigene Sichtbarkeitseinstellung.
+
+So ändern Sie die Sichtbarkeit:
+
+1. Öffnen Sie die Ansicht
+2. Klicken Sie auf **Optionen → Sichtbarkeit**
+3. Wählen Sie:
+ * **Arbeitsbereich**: Für alle Mitglieder des Arbeitsbereichs sichtbar
+ * **Nicht gelistet**: Nur für Sie sichtbar
+
+
+ Bei den Standardansichten "Alle [Objektname]" kann die Sichtbarkeit nicht geändert werden.
+
+
+## Nächste Schritte
+
+* [Tabellenansichten](/l/de/user-guide/views-pipelines/capabilities/table-views)
+* [Kanban-Ansichten](/l/de/user-guide/views-pipelines/capabilities/kanban-views)
+* [Filter und Sortierung](/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Ansichtseinstellungen](/l/de/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..58f8efc137
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Voraussetzungen
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Einrichtung**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Feld | Wert |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Willkommen bei {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Auslöser-Typ | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Einrichtung**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Einrichtung**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Einrichtung**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Beste Praktiken
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Fehlerbehebung
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..3c180a7985
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Beste Praktiken
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..66e6cee44a
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Beispiel |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Ergebnis
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Beschreibung |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Fehlerbehebung
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Beste Praktiken
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/de/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..af5a79ddd0
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Workflow-Aktionen
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Aktionen definieren, was nach dem Auslösen passiert. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Einen Datensatz erstellen
+
+Fügt einem ausgewählten Objekt einen neuen Datensatz hinzu.
+
+**Konfiguration**:
+
+* Wählen Sie das Zielobjekt aus
+* Füllen Sie die erforderlichen und optionalen Felder aus
+* Use data from previous steps or input values manually to populate fields
+
+**Ausgabe**: Die neu erstellten Datensatzdaten stehen in nachfolgenden Schritten zur Verfügung.
+
+### Datensatz aktualisieren
+
+Ändert einen bestehenden Datensatz in einem ausgewählten Objekt.
+
+
+
+**Konfiguration**:
+
+* Wählen Sie das Zielobjekt aus
+* Wählen Sie den spezifischen Datensatz zum Aktualisieren aus.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Wählen Sie zu ändernde Felder aus und geben Sie neue Werte ein
+
+**Ausgabe**: Die aktualisierten Datensatzdaten stehen in nachfolgenden Schritten zur Verfügung.
+
+### Datensatz löschen
+
+Entfernt einen Datensatz aus einem ausgewählten Objekt.
+
+**Konfiguration**:
+
+* Wählen Sie das Zielobjekt aus
+* Wählen Sie den spezifischen Datensatz zum Löschen aus
+
+**Ausgabe**: Die gelöschten Datensatzdaten stehen in nachfolgenden Schritten zur Verfügung.
+
+### Datensätze durchsuchen
+
+Findet Datensätze innerhalb eines ausgewählten Objekts mittels Filterkonditionen.
+
+**Konfiguration**:
+
+* Wählen Sie das Objekt aus, das Sie durchsuchen möchten.
+* Legen Sie Filterkriterien fest, um Ergebnisse einzugrenzen.
+* Konfigurieren Sie Sortierung und Begrenzungen.
+
+**Ausgabe**: Gibt passende Datensätze zurück, die in nachfolgenden Schritten verwendet werden können.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/de/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Konfiguration**:
+
+* Wählen Sie das Zielobjekt aus
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Verwenden Sie Daten aus vorherigen Schritten, um Felder zu füllen
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Iterator
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Konfiguration**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Definieren Sie die Aktionen, die für jeden Datensatz in der Schleife ausgeführt werden sollen.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filter
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Konfiguration**:
+
+* Select the record to filter
+* Definieren Sie Filterbedingungen und Kriterien
+* Konfigurieren Sie, welche Datensätze in nachfolgende Schritte übergehen sollen
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Typ | Beschreibung |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Anwendungsfälle**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### E-Mail senden
+
+Sendet eine E-Mail aus Ihrem Workflow. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Konfiguration**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* E-Mail-Adresse des Empfängers eingeben.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Betreffzeile festlegen.
+* Nachrichtentext verfassen. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Formular
+
+Fordert während der Workflow-Ausführung ein Formular an, um Benutzereingaben zu sammeln. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Bei Workflows mit anderen Triggern (Datensatz erstellt, aktualisiert, etc.) sind Formulare nur über die Workflow-Ausführungsoberfläche zugänglich, was nicht das erwartete Benutzererlebnis ist. Ein Benachrichtigungszentrum wird im Jahr 2026 eingeführt, um die Unterstützung von Formularen in automatisierten Workflows zu verbessern.
+
+
+**Konfiguration**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Ausgabe**: Formularantworten sind für nachfolgende Schritte verfügbar.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Code
+
+Führt benutzerdefiniertes JavaScript in Ihrem Workflow aus.
+
+**Konfiguration**:
+
+* Greifen Sie auf Variablen aus vorherigen Schritten zu. You can edit the variables names dynamically.
+
+
+
+* Schreiben Sie JavaScript-Code im Editor
+* Variablen zurückgeben, um sie in nachfolgenden Schritten zu verwenden
+* Code direkt im Schritt testen
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### HTTP-Anfrage
+
+Sendet eine Anfrage an eine externe API als Teil Ihres Workflows.
+
+
+
+**Konfiguration**:
+
+* Geben Sie die API-Endpunkt-URL ein. Using parameters from previous steps is possible.
+* Wählen Sie die HTTP-Methode aus (GET, POST, PUT, PATCH, DELETE)
+* Erforderliche Header und Werte hinzufügen
+* Beispielantwort zur Strukturvorschau bereitstellen
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Konfiguration**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/de/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/de/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..11ed672d5c
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: Workflow-Verzweigungen
+description: Erstellen Sie parallele Pfade und bedingte Logik in Ihren Workflows.
+---
+
+Verzweigungen ermöglichen es Ihnen, Ihren Workflow in mehrere Pfade aufzuteilen, die abhängig von Ihren Daten gleichzeitig oder bedingt ausgeführt werden können.
+
+
+
+## So funktionieren Verzweigungen
+
+Wenn Sie von einem einzelnen Knoten mehrere Verbindungen erstellen, wird jeder Pfad zu einer Verzweigung. Standardmäßig werden **alle Verzweigungen parallel ausgeführt**—sie warten nicht aufeinander.
+
+## Verzweigungen erstellen
+
+### Neue Verzweigung hinzufügen
+
+1. **Klicken Sie mit der rechten Maustaste auf die Hauptfläche** des Workflows (nicht auf einen vorhandenen Knoten)
+2. Klicken Sie auf **Knoten hinzufügen**
+3. Wählen Sie den Knotentyp für Ihre neue Verzweigung
+4. Ziehen Sie einen Pfeil vom unteren Rand des vorherigen Schritts zum oberen Rand dieser neuen Aktion
+5. Wiederholen Sie dies, um weitere Verzweigungen vom selben Knoten hinzuzufügen
+
+
+ Jede Verzweigung ist unabhängig. Das Hinzufügen einer Verzweigung wirkt sich nicht auf andere bestehende Pfade von diesem Knoten aus.
+
+
+### Visuelles Layout
+
+Verzweigungen erscheinen als parallele Pfade im Workflow-Editor. Sie können Knoten ziehen, um das visuelle Layout neu anzuordnen, ohne die Ausführung zu beeinflussen.
+
+## Bedingte Verzweigungen
+
+Da standardmäßig alle Verzweigungen ausgeführt werden, verwenden Sie **Filter**-Knoten, um zu steuern, welche Pfade tatsächlich ausgeführt werden:
+
+| Verzweigung | Filterbedingung | Aktion |
+| ----------- | --------------------- | -------------------------------- |
+| A | Phase = "Gewonnen" | Glückwunsch-E-Mail senden |
+| B | Phase = "Verloren" | Nachverfolgungsaufgabe erstellen |
+| C | Phase = "Verhandlung" | Manager benachrichtigen |
+
+1. Erstellen Sie Verzweigungen von Ihrem Trigger oder Ihrer Aktion aus
+2. Fügen Sie einen **Filter**-Knoten als ersten Schritt jeder Verzweigung hinzu
+3. Konfigurieren Sie jeden Filter mit sich gegenseitig ausschließenden Bedingungen
+4. Fügen Sie Ihre Aktionen nach jedem Filter hinzu
+
+Nur die Verzweigungen, bei denen die Filterbedingung erfüllt ist, werden weiter ausgeführt.
+
+## Verzweigungen zusammenführen
+
+**Verzweigungen werden nicht automatisch zusammengeführt.** Jede Verzweigung wird unabhängig ausgeführt, bis sie endet. Sie haben volle Flexibilität, wie Sie dies handhaben:
+
+* **Option 1: Verzweigungen getrennt halten**
+ Jede Verzweigung verarbeitet ihre eigenen Nachverfolgungsaktionen unabhängig. Dies ist der einfachste Ansatz, wenn Verzweigungen nicht zusammengeführt werden müssen.
+
+* **Option 2: Verzweigungen manuell zusammenführen**
+ Beim Erstellen Ihres Workflows können Sie mehrere Verzweigungen manuell mit derselben nachgelagerten Aktion verbinden. Ziehen Sie einfach Pfeile vom Ende jeder Verzweigung zu einem gemeinsamen Knoten.
+
+
+ Obwohl Sie einen [Delay](/l/de/user-guide/workflows/capabilities/workflow-actions#delay)-Knoten verwenden können, um die Ausführung zu pausieren, lässt er sich derzeit nicht so konfigurieren, dass er wartet, "bis eine andere Verzweigung endet".
+
+
+## Verwandte Inhalte
+
+* [So verwenden Sie Verzweigungen in Workflows](/l/de/user-guide/workflows/capabilities/use-branches-in-workflows) - Schritt-für-Schritt-Anleitung
+* [Workflow-Aktionen](/l/de/user-guide/workflows/capabilities/workflow-actions) - Verfügbare Aktionen einschließlich Filter
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..2e1c9cf5a1
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Workflow-Guthaben
+description: Understand workflow credit consumption and management.
+---
+
+Workflow-Guthaben treiben Ihre Automatisierungen in Twenty an. Das Verständnis ihrer Funktionsweise hilft Ihnen, die Kosten zu optimieren und Ihr Automatisierungsbudget effektiv zu verwalten.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Wie der Verbrauch von Guthaben funktioniert
+
+Credits are consumed when workflows execute, not when you create them. Jede Workflow-Aktion verbraucht Credits basierend auf ihrer Komplexität:
+
+### Guthabenverbrauch nach Aktionstyp
+
+* **Einfache interne Vorgänge**: Sehr niedriger Guthabenverbrauch
+ * Datensätze durchsuchen
+ * Create Record
+ * Datensatz aktualisieren
+ * Datensatz löschen
+ * Formularaktionen
+
+* **Komplexe Vorgänge**: Höherer Guthabenverbrauch
+ * Code-Aktionen (JavaScript-Ausführung)
+ * HTTP-Anfragen an externe Dienste
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Echtzeitabzug
+
+Guthaben werden in Echtzeit abgezogen, sobald Workflows ausgeführt werden. Das bedeutet:
+
+* Draft workflows don't consume credits
+* Nur aktive, laufende Workflows nutzen Ihre Guthabenzuteilung
+* Fehlgeschlagene Workflows verbrauchen dennoch Guthaben für abgeschlossene Schritte
+
+## Guthabenverwaltung
+
+### Guthabenverbrauch prüfen
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. Sehen Sie sich Ihren aktuellen Guthabenverbrauch und verbleibenden Saldo an
+3. Beobachten Sie Nutzungsmuster, um Ihre Workflows zu optimieren
+
+### Zusätzliche Guthaben kaufen
+
+Wenn Sie mehr Guthaben über Ihre Plan-Zuteilung hinaus benötigen:
+
+1. Gehen Sie zu **Einstellungen → Abrechnung**
+2. Klicken Sie auf die Option, um zusätzliche Guthaben zu kaufen. Pakete unterschiedlicher Größen sind verfügbar.
+3. Guthaben werden Ihrem aktuellen Saldo hinzugefügt
+
+## Beste Praktiken
+
+* **Stapelverarbeitung**: Verwenden Sie Massenoperationen und Iterator-Aktionen effizient
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Optimieren Sie Code-Aktionen für Effizienz
+* Batch operations to reduce individual action calls
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..61d1572a06
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Workflow-Läufe
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Status | Beschreibung |
+| ------------------- | ------------------------------------------------------------------------ |
+| **Wird ausgeführt** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Ungültiges Datenformat
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..c264983359
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,135 @@
+---
+title: Workflow Triggers
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Workflows always start with a single trigger that defines when the automation should run.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Arbeitsbereichsmitglieder
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Datensatz wird erstellt
+
+Startet den Workflow, wenn ein neuer Datensatz in einem ausgewählten Objekt (Personen, Unternehmen, Gelegenheiten oder ein benutzerdefiniertes Objekt) erstellt wird.
+
+**Konfiguration**: Wählen Sie den Objekttyp aus, der auf neue Datensätze überwacht werden soll.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Datensatz wird aktualisiert
+
+Startet den Workflow, wenn Änderungen an einem bestehenden Datensatz vorgenommen werden.
+
+**Konfiguration**:
+
+* Wählen Sie den Objekttyp aus
+* Optional angeben, welche Felder auf Änderungen überwacht werden sollen
+
+## Datensatz wird aktualisiert oder erstellt
+
+Startet den Workflow, wenn ein Datensatz in einem ausgewählten Objekt entweder erstellt oder aktualisiert wird.
+
+**Warum das wichtig ist**: Dieser Auslöser ist besonders hilfreich, da auf verschiedene Arten erstellte Datensätze sich unterschiedlich verhalten:
+
+* **API-/CSV-Importe**: Datensätze werden sofort mit allen Feldern befüllt erstellt
+* **Manuelle Erstellung**: Datensätze werden zuerst erstellt, dann werden Felder in nachfolgenden Aktualisierungen hinzugefügt
+
+**Konfiguration**:
+
+* Wählen Sie den Objekttyp aus, der überwacht werden soll
+* Optional angeben, welche Felder auf Änderungen überwacht werden sollen
+* Der Workflow wird sowohl bei der ersten Erstellung als auch bei nachfolgenden Aktualisierungen ausgelöst
+
+## Datensatz wird gelöscht
+
+Startet den Workflow, wenn ein Datensatz aus einem Objekt entfernt wird.
+
+**Konfiguration**: Wählen Sie den Objekttyp aus, der auf Löschungen überwacht werden soll.
+
+## Manual Trigger
+
+Startet den Workflow, wenn er durch eine Benutzeraktion ausgelöst wird. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Verfügbarkeitskonfiguration**: Wählen Sie aus, wie der Workflow die Datensatzauswahl handhaben soll:
+
+* **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Einzeln**: Die ausgewählten Datensätze werden an Ihren Workflow übergeben. Dies ist für ein bestimmtes Objekt konfiguriert. Es können mehrere Datensätze ausgewählt werden, bevor der Workflow ausgelöst wird. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Bulk**: Die ausgewählten Datensätze werden an Ihren Workflow übergeben. Dies ist für ein bestimmtes Objekt konfiguriert. Es können mehrere Datensätze ausgewählt werden, bevor der Workflow ausgelöst wird. Der Workflow wird einmal ausgeführt, wobei die gesamte Liste der Datensätze als Eingabe verwendet wird. This means the workflow needs to contain an [Iterator action](/l/de/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Zusätzliche Konfiguration**:
+
+* Wählen Sie das Zielobjekt aus (für Einzel- und Bulk-Verfügbarkeit)
+* Wählen Sie ein Befehls-Symbol für den Workflow-Trigger
+* Platzierung in der Navigationsleiste konfigurieren (angeheftet oder nicht angeheftet)
+
+**Zugriffsmethoden**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Benutzerdefinierte Schaltfläche in der oberen Navigationsleiste (falls konfiguriert)
+
+## Time-Based Trigger: On a Schedule
+
+Startet den Workflow auf regelmäßiger Basis, die Sie definieren.
+
+**Konfiguration**:
+
+* Zeiteinheit auswählen (Minuten, Stunden, Tage)
+* Geben Sie einen Wert ein oder verwenden Sie benutzerdefinierte Cron-Ausdrücke für erweitertes Scheduling
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Startet den Workflow, wenn eine GET- oder POST-Anfrage von einem externen Dienst empfangen wird.
+
+
+
+**Konfiguration**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ----------------------------------------- |
+| New leads need processing | Datensatz wird erstellt |
+| Data changes need sync | Datensatz wird aktualisiert |
+| Import/manual data handling | Datensatz wird aktualisiert oder erstellt |
+| Cleanup after deletion | Datensatz wird gelöscht |
+| User-initiated action | Manuell auslösen |
+| Recurring reports | Nach Zeitplan |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..a4f0f56ced
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: Workflow-Versionen
+description: Workflow-Versionen und -Entwürfe verwalten.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## Über Versionen
+
+Jedes Mal, wenn Sie einen Workflow aktivieren, wird eine neue Version erstellt. So können Sie Änderungen im Laufe der Zeit nachverfolgen und bei Bedarf zu früheren Konfigurationen zurückkehren.
+
+## Versionsstatus
+
+| Status | Beschreibung |
+| --------------- | ------------------------------------------------- |
+| **Entwurf** | Wird bearbeitet, noch nicht veröffentlicht |
+| **Aktiv** | Live-Version, die auf Trigger reagiert |
+| **Deaktiviert** | Zuvor aktiv, aber manuell gestoppt |
+| **Archiviert** | Vergangene Versionen für die Historie beibehalten |
+
+## Mit Entwürfen arbeiten
+
+Wenn Sie einen aktiven Workflow bearbeiten, werden Ihre Änderungen als **Entwurf** gespeichert. Die aktive Version läuft weiter, während Sie an Aktualisierungen arbeiten.
+
+Wenn Sie mit der Bearbeitung fertig sind, können Sie:
+
+* **Aktivieren**: Den Entwurf als neue aktive Version veröffentlichen (die vorherige Version wird archiviert)
+* **Verwerfen**: Den Entwurf löschen und die aktuelle aktive Version beibehalten
+
+## Versionsverlauf
+
+### Frühere Versionen anzeigen
+
+1. Öffnen Sie den Workflow
+2. Klicken Sie auf die Registerkarte **Versionen**
+3. Alle früheren Versionen mit Zeitstempeln anzeigen
+
+### Eine Version wiederherstellen
+
+1. Suchen Sie die Version, die Sie wiederherstellen möchten
+2. Klicken Sie auf **Als Entwurf verwenden**
+3. Die Version wird in einen neuen Entwurf kopiert
+4. Nehmen Sie alle erforderlichen Aktualisierungen vor
+5. Aktivieren Sie, wenn alles bereit ist
+
+## Beste Praktiken
+
+### Versionsverwaltung
+
+* Aktivieren Sie nur, wenn alles für den Produktivbetrieb bereit ist
+* Achten Sie auf aussagekräftige Änderungen zwischen Versionen
+* Dokumentieren Sie größere Änderungen in Workflow-Namen oder -Beschreibungen
+* Testen Sie im Entwurfsmodus, bevor Sie aktivieren
+
+### Änderungen rückgängig machen
+
+* Wenn eine neue Version Probleme verursacht, stellen Sie die vorherige Version wieder her
+* Verwenden Sie den Versionsverlauf, um nachzuvollziehen, was sich geändert hat
+* Testen Sie wiederhergestellte Versionen immer, bevor Sie sie aktivieren
+
+## Häufige Workflows
+
+### Schnellbearbeitung
+
+1. Kleine Änderungen an einem aktiven Workflow vornehmen
+2. Im Entwurfsmodus testen
+3. Die neue Version aktivieren
+
+### Umfassende Überarbeitung
+
+1. Verwenden Sie die vorherige Version als Ausgangspunkt
+2. Nehmen Sie umfangreiche Änderungen im Entwurf vor
+3. Testen Sie alle Szenarien gründlich
+4. Aktivieren Sie, wenn Sie sicher sind
+
+### Rollback
+
+1. Identifizieren Sie das Problem mit der aktuellen Version
+2. Suchen Sie im Verlauf die letzte funktionierende Version
+3. Klicken Sie auf **Als Entwurf verwenden**
+4. Aktivieren Sie, um das alte Verhalten wiederherzustellen
+
+## Verwandte Themen
+
+* [Erste Schritte mit Workflows](/l/de/user-guide/workflows/overview)
+* [Workflow-Ausführungen](/l/de/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..dfcbe0aecc
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Code |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Wert |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Quelle | Daten |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..dcf57e2d46
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Speichern
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Feld | Wert |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Personen |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..accc72cf67
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Wert |
+| ------------- | --------------------------------- |
+| **Field** | Phase |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Wert |
+| ------------ | ---------------------------------------- |
+| **Object** | Unternehmen |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Wert |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Aktion | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filter | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Code | Format data for invoicing API |
+| 5 | HTTP-Anfrage | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..6b4bdbc908
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Beispiel |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Feld | Wert |
+| ----------- | ---------------------------------------------------- |
+| Vorname | `{{trigger.body.firstName}}` |
+| Nachname | `{{trigger.body.lastName}}` |
+| E-Mail | `{{trigger.body.email}}` |
+| Unternehmen | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..6fb19d6b51
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Konfigurieren:
+
+| Feld | Wert |
+| ------------------- | ------------------------------- |
+| **Object** | Unternehmen |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Typ** | Kunde |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Kontoinhaber** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Konfigurieren:
+
+| Feld | Wert |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Aufgaben |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Konfigurieren:
+
+| Feld | Wert |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Konfigurieren:
+
+| Feld | Wert |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Verifizieren:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Auslöser
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Aktionen
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/de/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..9cec7db84e
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Konfigurieren:
+
+| Feld | Wert |
+| ---------- | ----------------------------------------------- |
+| **Object** | Opportunities |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Feld | Wert |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/de/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..cbfce0e5c8
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Übersicht
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Voraussetzungen
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/de/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/de/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..31944cc001
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Häufige Anwendungsfälle
+
+| Quelle | Destination | Fields to Copy |
+| ----------- | ----------- | ------------------------------- |
+| Unternehmen | Opportunity | Industry, Company Size, ARR |
+| Person | Opportunity | Email, Phone, Title |
+| Opportunity | Unternehmen | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Einrichtung
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/de/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Beste Praktiken
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..bd2ba6c166
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Häufige Anwendungsfälle
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Einrichtung
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Beste Praktiken
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Tests
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..444acb4cdc
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Übersicht
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configure:
+
+| Feld | Wert |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/de/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..3e9ad2be4b
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Professionelle Dienstleistungen
+description: Holen Sie sich professionelle Hilfe beim Aufbau komplexer Workflows und Automatisierungen vom Team und den zertifizierten Partnern von Twenty.
+---
+
+## Wann benötigen Sie professionelle Hilfe?
+
+Erwägen Sie professionelle Dienstleistungen für:
+
+* Komplexe Multi-System-Integrationen
+* Erweiterte Geschäftslogik und Automatisierungsregeln
+* Datenverarbeitungs-Workflows im großen Maßstab
+* Entwicklung benutzerdefinierter APIs
+* Schulung des Teams und Optimierung der Workflows
+* Wenn Ihnen interne Ressourcen fehlen
+
+## Dienstleistungsoptionen
+
+### Einführungspakete
+
+Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages):
+
+* **Workflow-Erstellung**: Erstellen Sie benutzerdefinierte Workflows für Ihre Geschäftsprozesse
+* **Datenmodell-Design**: Optimieren Sie Ihre Datenstruktur für Workflow-Automatisierung
+* **Datenmigration**: Bestehende Daten mit ordnungsgemäßer Workflow-Integration importieren
+
+### Implementierungspartner
+
+Arbeiten Sie mit zertifizierten Partnern für erweiterte Anpassungen. Kontaktieren Sie uns unter contact@twenty.com, um mit unseren [Implementierungspartnern](https://twenty.com/partners) in Verbindung zu treten.
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..73498dfced
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Workflow-Fehlerbehebung
+description: Common workflow issues and how to resolve them.
+---
+
+## Häufige Probleme und Lösungen
+
+### Workflow wird nicht ausgelöst
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Lösungen**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Lösungen**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Lösungen**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Lösungen**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Lösungen**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..f472f30b43
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Typ | Records Required | Workflow-Läufe |
+ | --- | ---------------- | -------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/de/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Beispiele**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/de/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Lösungen**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | Wert | Behavior |
+ | ----- | ---- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/de/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/de/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..3a8f19e9fb
--- /dev/null
+++ b/packages/twenty-docs/l/de/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Workflows
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## Warum Workflows wichtig sind
+
+Twenty wurde entwickelt, um den Nutzern maximale Flexibilität zu bieten. Rather than forcing you to adapt your business processes to rigid, pre-built features, workflows enable you to build automations that create the CRM that best supports your unique business use cases.
+
+Workflows are Twenty's in-app feature for building these automations. Sie bieten Ihnen die Bausteine, um genau das zu schaffen, was Ihr Unternehmen braucht, wann es das braucht.
+
+## Was kann ich mit Workflows machen?
+
+Wir empfehlen, Automatisierungen für zwei Hauptzwecke zu entwickeln:
+
+1. **Interne Automatisierungen, um den Alltag Ihres Teams zu erleichtern**: Reduzieren Sie die Menge manueller Eingaben und sich wiederholender Aufgaben, die Ihr Team verlangsamen.
+2. **Daten in und aus Twenty bringen**: Verbinden Sie Twenty über API-Aufrufe und Webhooks mit Ihrer Datenbank und anderen Werkzeugen.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Workflow Best Practices
+
+* **Schrittbezeichnungen bearbeiten**: Benennen Sie Ihre Workflow-Schritte um, um klar zu beschreiben, was jeder Schritt tut. Dies erleichtert die Wartung und die Übergabe an Kollegen
+* **Vorherige Schritt-Daten nutzen**: Sie können Felder aus Datensätzen verwenden, die von einem vorherigen Schritt in Ihrem Workflow zurückgegeben wurden.
+* **Einfach anfangen**: Beginnen Sie mit einfachen Workflows und erhöhen Sie die Komplexität im Laufe der Zeit, wenn Sie mit dem System vertrauter werden.
+* **Planen, bevor Sie loslegen**: Skizzieren Sie die Logik Ihres Workflows, bevor Sie beginnen, um zu vermeiden, dass Sie auf halbem Weg stecken bleiben.
+
+## Nächste Schritte
+
+* [Workflow Triggers](/l/de/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/de/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..94da2aedd2
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+Feature flags are used to hide experimental features. Para Twenty, se configuran a nivel de espacio de trabajo y no a nivel de usuario.
+
+## Adding a new feature flag
+
+In `FeatureFlagKey.ts` add the feature flag:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+También agrégalo al enum en `feature-flag.entity.ts`:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+To apply a feature flag on a **backend** feature use:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+To apply a feature flag on a **frontend** feature use:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## Configure feature flags for the deployment
+
+Cambie el registro correspondiente en la Tabla `core.featureFlag`:
+
+| iD | clave | workspaceId | valor |
+| --------- | ------------------------ | ------------------------- | ----------- |
+| Aleatorio | `IS_FEATURENAME_ENABLED` | ID del espacio de trabajo | `verdadero` |
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..027471a869
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Arquitectura de Carpetas
+info: Una mirada detallada a la arquitectura de carpetas de nuestro servidor
+---
+
+La estructura del directorio backend es la siguiente:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Ability
+
+Define permisos e incluye gestores para cada entidad.
+
+## Decoradores
+
+Define decoradores personalizados en NestJS para funcionalidad adicional.
+
+Ver [decoradores personalizados](https://docs.nestjs.com/custom-decorators) para más detalles.
+
+## Filtros
+
+Incluye filtros de excepciones para manejar excepciones que puedan ocurrir en endpoints de GraphQL.
+
+## Guardias
+
+Ver [guardias](https://docs.nestjs.com/guards) para más detalles.
+
+## Health
+
+Incluye una API REST públicamente disponible (healthz) que devuelve un JSON para confirmar si la base de datos está funcionando como se esperaba.
+
+## Metadatos
+
+Define objetos personalizados y hace disponible una API de GraphQL (graphql/metadata).
+
+## Espacio de trabajo
+
+Genera y sirve un esquema GraphQL personalizado basado en los metadatos.
+
+### Estructura del Directorio de Espacio de Trabajo
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+La raíz del directorio de espacio de trabajo incluye el `espacio.trabajo.factory.ts`, un archivo que contiene la función `createGraphQLSchema`. Esta función genera un esquema específico para el espacio de trabajo utilizando los metadatos para adaptar un esquema para espacios de trabajo individuales. By separating the schema and resolver construction, we use the `makeExecutableSchema` function, which combines these discrete elements.
+
+Esta estrategia no solo se trata de organización, sino que también ayuda con la optimización, como el almacenamiento en caché de definiciones de tipos generados para mejorar el rendimiento y la escalabilidad.
+
+### Constructor de Esquema de Espacio de Trabajo
+
+Genera el esquema GraphQL, e incluye:
+
+#### Fábricas:
+
+Constructores especializados para generar constructos relacionados con GraphQL.
+
+* La fábrica de tipos traduce los metadatos de los campos en tipos GraphQL utilizando `TypeMapperService`.
+* La fábrica de definiciones de tipos crea objetos de entrada o salida de GraphQL derivados de `objectMetadata`.
+
+#### Tipos GraphQL
+
+Incluye enumeraciones, entradas, objetos y escalares, y sirve como bloques de construcción para la construcción del esquema.
+
+#### Interfaces y Definiciones de Objetos
+
+Contiene los planos para entidades GraphQL, e incluye tanto tipos predefinidos como personalizados como `MONEY` o `URL`.
+
+#### Servicios
+
+Contiene el servicio responsable de asociar FieldMetadataType con su escalar de GraphQL apropiado o modificadores de consulta.
+
+#### Almacenamiento
+
+Incluye la clase `TypeDefinitionsStorage` que contiene definiciones de tipos reutilizables, previniendo duplicación de tipos GraphQL.
+
+### Constructor de Resolver de Espacio de Trabajo
+
+Crea funciones de resolutor para consultar y modificar el esquema GraphQL.
+
+Cada fábrica en este directorio es responsable de producir un tipo de resolutor distinto, como el `FindManyResolverFactory`, diseñado para aplicación adaptable a través de varias tablas.
+
+### Ejecutor de Consultas de Espacio de Trabajo
+
+Ejecuta las consultas generadas en la base de datos y analiza el resultado.
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..8ff23cd86e
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,100 @@
+---
+title: Comandos de Backend
+---
+
+## Comandos útiles
+
+Estos comandos deben ejecutarse desde la carpeta packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### Configuración inicial
+
+```
+npx nx database:reset twenty-server # configurar la base de datos con semillas de desarrollo
+```
+
+### Iniciando el servidor
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # pasar --fix para corregir errores de lint
+```
+
+### Prueba
+
+```
+npx nx run twenty-server:test:unit # ejecutar pruebas unitarias
+npx nx run twenty-server:test:integration # ejecutar pruebas de integración
+```
+
+Nota: puedes ejecutar `npx nx run twenty-server:test:integration:with-db-reset` en caso de que necesites restablecer la base de datos antes de ejecutar las pruebas de integración.
+
+### Restablecer la base de datos
+
+Si deseas restablecer y sembrar la base de datos, puedes ejecutar el siguiente comando:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migraciones
+
+#### Para objetos en esquemas Core/Metadata (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Para objetos de Workspace
+
+No hay archivos de migraciones, las migraciones se generan automáticamente para cada espacio de trabajo, se almacenan en la base de datos y se aplican con este comando
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ Esto eliminará la base de datos y volverá a ejecutar las migraciones y semillas.
+
+ Asegúrate de respaldar cualquier dato que desees conservar antes de ejecutar este comando.
+
+
+## Stack Tecnológico
+
+Twenty utiliza principalmente NestJS para el backend.
+
+Prisma fue el primer ORM que usamos. Pero para permitir a los usuarios crear campos y objetos personalizados, un nivel más bajo tenía más sentido ya que necesitamos tener un control detallado. El proyecto ahora usa TypeORM.
+
+Así es como se ve la pila tecnológica ahora.
+
+**Core**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Base de datos**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Integraciones de terceros**
+
+* [Sentry](https://sentry.io/welcome/) para rastrear errores
+
+**Pruebas**
+
+* [Jest](https://jestjs.io/)
+
+**Herramientas**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Desarrollo**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx
new file mode 100644
index 0000000000..e48563c818
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx
@@ -0,0 +1,81 @@
+---
+title: Aplicación Zapier
+---
+
+Sincroniza sin esfuerzo Twenty con más de 3000 aplicaciones usando [Zapier](https://zapier.com/). ¡Automatiza tareas, mejora la productividad y potencia tus relaciones con los clientes!
+
+## Acerca de Zapier
+
+Zapier is a tool that allows you to automate workflows by connecting the apps that your team uses every day. El concepto fundamental de Zapier son los flujos de trabajo automatizados, llamados Zaps, que incluyen desencadenantes y acciones.
+
+Puedes aprender más sobre cómo funciona Zapier [aquí](https://zapier.com/how-it-works).
+
+## Configuración
+
+### Paso 1: Instalar paquetes de Zapier
+
+```bash
+cd packages/twenty-zapier\n\nyarn
+```
+
+### Paso 2: Iniciar sesión con la CLI
+
+Utiliza tus credenciales de Zapier para iniciar sesión usando la CLI:
+
+```bash
+zapier login
+```
+
+### Paso 3: Configurar variables de entorno
+
+Desde la carpeta `packages/twenty-zapier`, ejecuta:
+
+```bash
+cp .env.example .env
+```
+
+Ejecuta la aplicación localmente, ve a [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks) y genera una clave API.
+
+Reemplaza el valor de **YOUR_API_KEY** en el archivo `.env` con la clave API que acabas de generar.
+
+## Desarrollo
+
+
+ Asegúrate de ejecutar `yarn build` antes de cualquier comando `zapier`.
+
+
+### Prueba
+
+```bash
+yarn test
+```
+
+### Lint
+
+```bash
+yarn format
+```
+
+### Observa y compila mientras editas el código
+
+```bash
+yarn watch
+```
+
+### Valida tu aplicación Zapier
+
+```bash
+yarn validate
+```
+
+### Despliega tu aplicación Zapier
+
+```bash
+yarn deploy
+```
+
+### Lista todos los comandos de Zapier CLI
+
+```bash
+zapier
+```
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..89beb92596
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Reportar errores
+
+Para reportar un error, por favor [crea un problema en GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+También puedes pedir ayuda en [Discord](https://discord.gg/cx5n4Jzs57).
+
+## Solicitudes de funciones
+
+Si no estás seguro de si es un error y sientes que está más cerca de una solicitud de función, entonces probablemente deberías [abrir una discusión en su lugar](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Antes de empezar
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..04ca6f0237
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,325 @@
+---
+title: Mejores prácticas
+---
+
+Este documento describe las mejores prácticas que debes seguir al trabajar en el frontend.
+
+## Gestión de estado
+
+React y Recoil manejan la gestión de estado en la base de código.
+
+### Usa `useRecoilState` para almacenar el estado
+
+Es buena práctica crear tantos átomos como necesites para almacenar tu estado.
+
+
+ Es mejor usar átomos adicionales que intentar ser demasiado concisos con la perforación de props.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default value',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### No uses `useRef` para almacenar el estado
+
+Evita usar `useRef` para almacenar el estado.
+
+Si deseas almacenar el estado, deberías usar `useState` o `useRecoilState`.
+
+Consulta [cómo gestionar las re-renderizaciones](#managing-re-renders) si sientes que necesitas `useRef` para evitar algunas re-renderizaciones.
+
+## Gestión de las re-renderizaciones
+
+Las re-renderizaciones pueden ser difíciles de gestionar en React.
+
+Aquí hay algunas reglas a seguir para evitar re-renderizaciones innecesarias.
+
+Ten en cuenta que siempre puedes evitar re-renderizaciones comprendiendo su causa.
+
+### Trabaja a nivel de raíz
+
+Ahora es fácil evitar re-renderizaciones en nuevas funciones eliminándolas a nivel de raíz.
+
+El componente acompañante `PageChangeEffect` contiene solo un `useEffect` que alberga toda la lógica para ejecutar en un cambio de página.
+
+De esa manera, sabes que solo hay un lugar que puede desencadenar una re-renderización.
+
+### Siempre piensa dos veces antes de añadir `useEffect` en tu base de código.
+
+Las re-renderizaciones son a menudo causadas por `useEffect` innecesarios.
+
+Deberías pensar si necesitas `useEffect`, o si puedes mover la lógica a una función manejadora de eventos.
+
+Por lo general, encontrarás fácil mover la lógica a una función `handleClick` o `handleChange`.
+
+También puedes encontrarlas en bibliotecas como Apollo: `onCompleted`, `onError`, etc.
+
+### Usa un componente hermano para extraer `useEffect` o lógica de obtención de datos
+
+Si sientes que necesitas añadir un `useEffect` en tu componente raíz, deberías considerar extraerlo en un componente acompañante.
+
+Puedes aplicar lo mismo para la lógica de obtención de datos, con hooks de Apollo.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Usa estados de familia de recoil y selectores de familia de recoil
+
+Los estados y selectores de familia de recoil son una gran manera de evitar re-renderizaciones.
+
+Son útiles cuando necesitas almacenar una lista de elementos.
+
+### No deberías usar `React.memo(MyComponent)`
+
+Evita usar `React.memo()` porque no resuelve la causa de la re-renderización, sino que rompe la cadena de re-renderización, lo que puede llevar a un comportamiento inesperado y hacer que el código sea muy difícil de refactorizar.
+
+### Limita el uso de `useCallback` o `useMemo`
+
+A menudo no son necesarios y harán que el código sea más difícil de leer y mantener para una ganancia de rendimiento que es imperceptible.
+
+## Console.logs
+
+Las declaraciones `console.log` son valiosas durante el desarrollo, ofreciendo información en tiempo real sobre los valores de las variables y el flujo de código. Pero, dejarlas en el código de producción puede llevar a varios problemas:
+
+1. **Rendimiento**: El registro excesivo puede afectar el rendimiento en tiempo de ejecución, especialmente en aplicaciones del lado del cliente.
+
+2. **Seguridad**: Registrar datos sensibles puede exponer información crítica a cualquier persona que inspeccione la consola del navegador.
+
+3. **Limpieza**: Llenar la consola con registros puede oscurecer advertencias o errores importantes que los desarrolladores o herramientas necesitan ver.
+
+4. **Profesionalismo**: Los usuarios finales o clientes que revisen la consola y vean una miríada de declaraciones de registros podrían cuestionar la calidad y el acabado del código.
+
+Asegúrate de eliminar todos los `console.logs` antes de enviar el código a producción.
+
+## Nomenclatura
+
+### Nombres de variables
+
+Los nombres de variables deben describir con precisión el propósito o función de la variable.
+
+#### El problema con los nombres genéricos
+
+Los nombres genéricos en programación no son ideales porque carecen de especificidad, lo que lleva a la ambigüedad y reduce la legibilidad del código. Tales nombres no transmiten el propósito de la variable o función, lo que dificulta a los desarrolladores entender la intención del código sin una investigación más profunda. Esto puede resultar en un aumento del tiempo de depuración, una mayor susceptibilidad a errores y dificultades en el mantenimiento y colaboración. Mientras tanto, la nomenclatura descriptiva hace que el código sea autoexplicativo y más fácil de navegar, mejorando la calidad del código y la productividad del desarrollador.
+
+```tsx
+// ❌ Bad, uses a generic name that doesn't communicate its
+// purpose or content clearly
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Good, uses a descriptive name
+const [email, setEmail] = useState('');
+```
+
+#### Algunas palabras a evitar en los nombres de variables
+
+* dummy
+
+### Manejadores de eventos
+
+Los nombres de manejadores de eventos deben comenzar con `handle`, mientras que `on` es un prefijo usado para nombrar eventos en las props de los componentes.
+
+```tsx
+// ❌ Bad
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Good
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Props opcionales
+
+Evita pasar el valor predeterminado para una prop opcional.
+
+**EJEMPLO**
+
+Toma el componente `EmailField` definido a continuación:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Uso**
+
+```tsx
+// ❌ Bad, passing in the same value as the default value adds no value
+const Form = () => ;
+```
+
+```tsx
+// ✅ Good, assumes the default value
+const Form = () => ;
+```
+
+## Componente como props
+
+Intenta tanto como sea posible pasar componentes no instanciados como propiedades, para que los hijos puedan decidir por sí mismos qué propiedades necesitan pasar.
+
+El ejemplo más común de esto son los componentes de icono:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Para que React entienda que el componente es un componente, necesitas usar PascalCase, para luego instanciarlo con ``
+
+## Prop Drilling: Mantenlo Minimalista
+
+El prop drilling, en el contexto de React, se refiere a la práctica de pasar variables de estado y sus setters a través de muchas capas de componentes, incluso si los componentes intermedios no los usan. Aunque a veces es necesario, el exceso de prop drilling puede llevar a:
+
+1. **Readabilidad Reducida**: Rastrear de dónde proviene una propiedad o dónde se utiliza puede volverse complicado en una estructura de componentes muy anidada.
+
+2. **Desafíos de Mantenimiento**: Los cambios en la estructura de propiedades de un componente podrían requerir ajustes en varios componentes, incluso si no utilizan directamente la propiedad.
+
+3. **Reducción de la Reusabilidad del Componente**: Un componente que recibe muchas propiedades solo para pasarlas se vuelve menos general y más difícil de reutilizar en diferentes contextos.
+
+Si sientes que estás usando en exceso el prop drilling, consulta [mejores prácticas de gestión de estado](#state-management).
+
+## Importar
+
+Al importar, opta por los alias designados en lugar de especificar rutas completas o relativas.
+
+**Alias del identificador**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Uso**
+
+```tsx
+// ❌ Bad, specifies the entire relative path
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Good, utilises the designated aliases
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Validación de Esquema
+
+[Zod](https://github.com/colinhacks/zod) es el validador de esquemas para objetos no tipados:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email must be a valid email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Cambios Cruciales
+
+Siempre ejecuta pruebas manuales exhaustivas antes de proceder para garantizar que las modificaciones no hayan causado interrupciones en otras partes, dado que las pruebas aún no se han integrado extensivamente.
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..ae0c15a604
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Arquitectura de Carpetas
+info: A detailed look into our folder architecture
+---
+
+En esta guía, explorarás los detalles de la estructura del directorio del proyecto y cómo contribuye a la organización y mantenibilidad de Twenty.
+
+Siguiendo esta convención de arquitectura de carpetas, es más fácil encontrar los archivos relacionados con funciones específicas y asegurar que la aplicación sea escalable y mantenible.
+
+```
+front
+└───modules
+│ └───module1
+│ │ └───submodule1
+│ └───module2
+│ └───ui
+│ │ └───display
+│ │ └───inputs
+│ │ │ └───buttons
+│ │ └───...
+└───pages
+└───...
+```
+
+## Páginas
+
+Incluye los componentes de alto nivel definidos por las rutas de la aplicación. Importan más componentes de bajo nivel de la carpeta de módulos (más detalles abajo).
+
+## Módulos
+
+Cada módulo representa una función o un grupo de funciones, comprendiendo sus componentes específicos, estados y lógica operativa.
+Todos deberían seguir la estructura siguiente. Puedes anidar módulos dentro de módulos (denominados submódulos) y se aplicarán las mismas reglas.
+
+```
+module1
+ └───components
+ │ └───component1
+ │ └───component2
+ └───constants
+ └───contexts
+ └───graphql
+ │ └───fragments
+ │ └───queries
+ │ └───mutations
+ └───hooks
+ │ └───internal
+ └───states
+ │ └───selectors
+ └───types
+ └───utils
+```
+
+### Contextos
+
+Un contexto es una manera de pasar datos a través del árbol de componentes sin tener que pasar propiedades manualmente en cada nivel.
+
+Ver [React Context](https://react.dev/reference/react#context-hooks) para más detalles.
+
+### GraphQL
+
+Incluye fragmentos, consultas y mutaciones.
+
+Ver [GraphQL](https://graphql.org/learn/) para más detalles.
+
+* Fragmentos
+
+Un fragmento es una parte reutilizable de una consulta, que puedes usar en diferentes lugares. Usando fragmentos, es más fácil evitar la duplicación de código.
+
+Ver [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) para más detalles.
+
+* Consultas
+
+Ver [GraphQL Queries](https://graphql.org/learn/queries/) para más detalles.
+
+* Mutaciones
+
+Ver [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) para más detalles.
+
+### Hooks
+
+Ver [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) para más detalles.
+
+### Estados
+
+Contiene la lógica de gestión de estado. [RecoilJS](https://recoiljs.org) maneja esto.
+
+* Selectores: Ver [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) para más detalles.
+
+La gestión de estado incorporada de React todavía maneja el estado dentro de un componente.
+
+### Utilidades
+
+Debería contener solo funciones puras reutilizables. De lo contrario, crea hooks personalizados en la carpeta `hooks`.
+
+## Interfaz de usuario
+
+Contiene todos los componentes de interfaz de usuario reutilizables utilizados en la aplicación.
+
+Esta carpeta puede contener subcarpetas, como `datos`, `visualización`, `retroalimentación` y `entrada` para tipos específicos de componentes. Cada componente debe ser autónomo y reutilizable, para que puedas usarlo en diferentes partes de la aplicación.
+
+Al separar los componentes de la interfaz de usuario de otros componentes en la carpeta `modules`, es más fácil mantener un diseño consistente y realizar cambios en la interfaz de usuario sin afectar otras partes (lógica de negocio) del código base.
+
+## Interfaz y dependencias
+
+Puedes importar otro código de módulo desde cualquier módulo excepto desde la carpeta `ui`. Esto mantendrá su código fácil de probar.
+
+### Interno
+
+Cada parte (hooks, estados, ...) de un módulo puede tener una carpeta `internal`, que contiene partes que se usan solo dentro del módulo.
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
new file mode 100644
index 0000000000..aa7771dbcc
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
@@ -0,0 +1,90 @@
+---
+title: Comandos del Frontend
+---
+
+## Comandos útiles
+
+### Iniciando la aplicación
+
+```bash
+npx nx start twenty-front
+```
+
+### Regenerar el esquema de graphql basado en el esquema API graphql
+
+```bash
+npx nx run twenty-front:graphql:generate --configuration=metadata
+```
+
+O
+
+```bash
+npx nx run twenty-front:graphql:generate
+```
+
+### Lint
+
+```bash
+npx nx run twenty-front:lint # pass --fix to fix lint errors
+```
+
+## Traducciones
+
+```bash
+npx nx run twenty-front:lingui:extract
+npx nx run twenty-front:lingui:compile
+```
+
+### Prueba
+
+```bash
+npx nx run twenty-front:test # run jest tests
+npx nx run twenty-front:storybook:serve:dev # run storybook
+npx nx run twenty-front:storybook:test # run tests # (needs yarn storybook:serve:dev to be running)
+npx nx run twenty-front:storybook:coverage # (needs yarn storybook:serve:dev to be running)
+```
+
+## Stack Tecnológico
+
+The project has a clean and simple stack, with minimal boilerplate code.
+
+**Aplicación**
+
+* [React](https://react.dev/)
+* [Apollo](https://www.apollographql.com/docs/)
+* [GraphQL Codegen](https://the-guild.dev/graphql/codegen)
+* [Recoil](https://recoiljs.org/docs/introduction/core-concepts)
+* [TypeScript](https://www.typescriptlang.org/)
+
+**Pruebas**
+
+* [Jest](https://jestjs.io/)
+* [Storybook](https://storybook.js.org/)
+
+**Herramientas**
+
+* [Yarn](https://yarnpkg.com/)
+* [Craco](https://craco.js.org/docs/)
+* [ESLint](https://eslint.org/)
+
+## Arquitectura
+
+### Enrutamiento
+
+[React Router](https://reactrouter.com/) maneja el enrutamiento.
+
+Para evitar [re-renderizados](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) innecesarios toda la lógica de enrutamiento está en un `useEffect` en `PageChangeEffect`.
+
+### Gestión del Estado
+
+[Recoil](https://recoiljs.org/docs/introduction/core-concepts) maneja la gestión del estado.
+
+Ver [mejores prácticas](/l/es/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) para más información sobre la gestión del estado.
+
+## Pruebas
+
+[Jest](https://jestjs.io/) sirve como la herramienta para pruebas unitarias mientras [Storybook](https://storybook.js.org/) es para pruebas de componentes.
+
+Jest es principalmente para probar funciones utilitarias, y no los componentes en sí mismos.
+
+Storybook es para probar el comportamiento de componentes aislados, así como mostrar el sistema de diseño.
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..cdfe35a132
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: Guía de Estilo
+---
+
+Este documento incluye las reglas a seguir al escribir código.
+
+El objetivo aquí es tener una base de código coherente, que sea fácil de leer y de mantener.
+
+Para esto, es mejor ser un poco más detallado que ser demasiado conciso.
+
+Ten siempre en cuenta que la gente lee código más a menudo de lo que lo escribe, especialmente en un proyecto de código abierto, donde cualquiera puede contribuir.
+
+Hay muchas reglas que no están definidas aquí, pero que son verificadas automáticamente por linters.
+
+## React
+
+### Usar componentes funcionales
+
+Siempre usa componentes funcionales TSX.
+
+Do not use default `import` with `const`, because it's harder to read and harder to import with code completion.
+
+```tsx
+// ❌ Malo, más difícil de leer, más difícil de importar con autocompletación de código
+const MyComponent = () => {
+ return Hola Mundo
;
+};
+
+export default MyComponent;
+
+// ✅ Bueno, fácil de leer, fácil de importar con autocompletación de código
+export function MyComponent() {
+ return Hola Mundo
;
+};
+```
+
+### "Props"
+
+Crea el tipo de las props y llámalo `(NombreDelComponente)Props` si no hay necesidad de exportarlo.
+
+Usa la desestructuración de props.
+
+```tsx
+// ❌ Malo, sin tipo
+export const MyComponent = (props) => Hola {props.name}
;
+
+// ✅ Bueno, con tipo
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Hola {name}
;
+```
+
+#### Evita usar `React.FC` o `React.FunctionComponent` para definir tipos de props
+
+```tsx
+/* ❌ - Malo, define las anotaciones de tipo de componente con `FC`
+ * - Con `React.FC`, el componente acepta implícitamente una prop `children`
+ * incluso si no está definida en el tipo de prop. Esto podría no ser siempre
+ * deseable, especialmente si el componente no tiene la intención de renderizar
+ * children.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### Sin Propagación de una sola variable de Props en Elementos JSX
+
+Evita usar la propagación de una sola variable de props en elementos JSX, como `{...props}`. Esta práctica a menudo resulta en un código que es menos legible y más difícil de mantener porque no está claro qué props está recibiendo el componente.
+
+```tsx
+/* ❌ - Malo, propaga una sola variable de prop en el componente subyacente
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Razonamiento:
+
+* A simple vista, es más claro qué props se está pasando, lo que hace que sea más fácil de entender y mantener.
+* Ayuda a prevenir el acoplamiento estricto entre componentes mediante sus props.
+* Las herramientas de linting facilitan la identificación de props mal escritas o sin uso al listar props explícitamente.
+
+## JavaScript
+
+### Usar el operador de fusión nula `??`
+
+```tsx
+// ❌ Malo, puede devolver "default" incluso si el valor es 0 o ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Bueno, devolverá "default" sólo si el valor es null o undefined
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Usar encadenamiento opcional `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Usar `type` en lugar de `interface`
+
+Siempre usa `type` en lugar de `interface`, porque casi siempre se superponen y `type` es más flexible.
+
+```tsx
+// ❌ Malo
+interface MyInterface {
+ name: string;
+}
+
+// ✅ Bueno
+type MyType = {
+ name: string;
+};
+```
+
+### Usar literales de cadena en lugar de enums
+
+[Los literales de cadena](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) son la manera preferida para manejar valores tipo enum en TypeScript. Son más fáciles de extender con Pick y Omit, y ofrecen una mejor experiencia de desarrollo, especialmente con la autocompletación de código.
+
+Puedes ver por qué TypeScript recomienda evitar enums [aquí](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Malo, utiliza un enum
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ Bueno, utiliza un literal de cadena
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL y bibliotecas internas
+
+Deberías usar enums que genera el codegen de GraphQL.
+
+También es mejor usar un enum al usar una biblioteca interna, para que la biblioteca interna no tenga que exponer un tipo de literal de cadena que no está relacionado con la API interna.
+
+Ejemplo:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Estilo
+
+### Usar StyledComponents
+
+Estiliza los componentes con [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Malo
+Hola Mundo
+```
+
+```tsx
+// ✅ Bueno
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Prefija los componentes estilizados con "Styled" para diferenciarlos de los componentes "reales".
+
+```tsx
+// ❌ Malo
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Bueno
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Tematización
+
+Utilizar el tema para la mayor parte de la estilización de los componentes es el enfoque preferido.
+
+#### Unidades de medida
+
+Evita usar valores `px` o `rem` directamente dentro de los componentes estilizados. Los valores necesarios suelen estar ya definidos en el tema, por lo que se recomienda usar el tema para estos fines.
+
+#### Colores
+
+Abstente de introducir nuevos colores; en su lugar, utiliza la paleta existente del tema. Si hay una situación en la que la paleta no se ajusta, deja un comentario para que el equipo pueda corregirlo.
+
+```tsx
+// ❌ Malo, especifica directamente los valores de estilo sin utilizar el tema
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Bueno, utiliza el tema
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Aplicando No-Type Imports
+
+Evita las importaciones de tipo. Para reforzar este estándar, una regla de ESLint verifica y reporta cualquier importación de tipo. Esto ayuda a mantener la consistencia y la legibilidad en el código TypeScript.
+
+```tsx
+// ❌ Malo
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Malo
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Bueno
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Por qué No-Type Imports
+
+* **Consistencia**: Al evitar las importaciones de tipo y usar un solo enfoque tanto para las importaciones de tipo como de valor, la base de código se mantiene consistente en su estilo de importación de módulos.
+
+* **Legibilidad**: Las no-importaciones de tipo mejoran la legibilidad del código al dejar claro cuándo se están importando valores o tipos. Esto reduce la ambigüedad y hace más fácil entender el propósito de los símbolos importados.
+
+* **Mantenibilidad**: Mejora la mantenibilidad de la base de código porque los desarrolladores pueden identificar y localizar importaciones solo de tipo al revisar o modificar el código.
+
+### Regla de ESLint
+
+An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. Esta regla generará errores o advertencias sobre cualquier violación de importación de tipo.
+
+Por favor, ten en cuenta que esta regla específicamente aborda extraños casos límite donde ocurren importaciones de tipo no intencionadas. TypeScript en sí mismo desaconseja esta práctica, como se menciona en las [notas de lanzamiento de TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). En la mayoría de situaciones, no deberías necesitar usar importaciones solo de tipo.
+
+Para asegurarte de que tu código cumpla con esta regla, asegúrate de ejecutar ESLint como parte de tu flujo de trabajo de desarrollo.
diff --git a/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..bdcd6f6b97
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: Configuración Local
+description: La guía para los colaboradores (o desarrolladores curiosos) que quieren ejecutar Twenty localmente.
+---
+
+## Prerrequisitos
+
+
+
+ Antes de que puedas instalar y usar Twenty, asegúrate de instalar lo siguiente en tu computadora:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` no funcionará, deberías usar `yarn` en su lugar. Yarn ahora se envía con Node.js, por lo que no necesitas instalarlo por separado.
+ Solo tienes que ejecutar `corepack enable` para habilitar Yarn si aún no lo has hecho.
+
+
+
+
+ 1. Instalar WSL
+ Abre PowerShell como Administrador y ejecuta:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Ahora deberías ver un aviso para reiniciar tu computadora. Si no, reiníciala manualmente.
+
+ Al reiniciar, se abrirá una ventana de PowerShell e instalará Ubuntu. Esto puede tomar algo de tiempo.
+ Verás un aviso para crear un nombre de usuario y contraseña para tu instalación de Ubuntu.
+
+ 2. Instalar y configurar git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Tu Nombre"
+
+ git config --global user.email "tuemail@dominio.com"
+ ```
+
+ 3. Instalar nvm, node.js y yarn
+
+
+ Usa `nvm` para instalar la versión correcta de `node`. El `.nvmrc` asegura que todos los colaboradores usen la misma versión.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Cierra y vuelve a abrir tu terminal para usar nvm. Luego ejecuta los siguientes comandos.
+
+ ```bash
+
+ nvm install # instala la versión recomendada de node
+
+ nvm use # usa la versión recomendada de node
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Paso 1: Clonar con Git
+
+En tu terminal, ejecuta el siguiente comando.
+
+
+
+ Si aún no has configurado claves SSH, puedes aprender cómo hacerlo [aquí](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Paso 2: Ubícate en la raíz
+
+```bash
+cd twenty
+```
+
+Debes ejecutar todos los comandos de los siguientes pasos desde la raíz del proyecto.
+
+## Paso 3: Configurar una Base de Datos PostgreSQL
+
+
+
+ **Opción 1 (preferido):** Para aprovisionar tu base de datos localmente:
+ Usa el siguiente enlace para instalar PostgreSQL en tu máquina Linux: [Instalación de PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Nota: Puede que necesites agregar `sudo -u postgres` antes del comando `psql` para evitar errores de permisos.
+
+ **Opción 2:** Si tienes Docker instalado:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Opción 1 (preferido):** Para aprovisionar tu base de datos localmente con `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Puedes verificar si el servidor PostgreSQL está corriendo ejecutando:
+
+ ```bash
+ brew services list
+ ```
+
+ El instalador puede que no cree el usuario `postgres` por defecto al instalar
+ vía Homebrew en macOS. En cambio, crea un rol de PostgreSQL que coincide con tu
+ nombre de usuario de macOS (por ejemplo, "john").
+ Para comprobar y crear el usuario `postgres` si es necesario, sigue estos pasos:
+
+ ```bash
+ # Conectar a PostgreSQL
+ psql postgres
+ o
+ psql -U $(whoami) -d postgres
+ ```
+
+ Una vez en el comando psql (postgres=#), ejecuta:
+
+ ```bash
+ # Lista los roles de PostgreSQL existentes
+ \du
+ ```
+
+ Verás una salida similar a:
+
+ ```bash
+ Nombre del rol | Atributos | Miembro de
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Si no ves un rol `postgres` listado, procede al siguiente paso.
+ Crea el rol `postgres` manualmente:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Esto crea un rol de superusuario llamado `postgres` con acceso de inicio de sesión.
+
+ **Opción 2:** Si tienes Docker instalado:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Todos los siguientes pasos deben ejecutarse en la terminal de WSL (dentro de tu máquina virtual)
+
+ **Opción 1:** Para aprovisionar tu PostgreSQL localmente:
+ Usa el siguiente enlace para instalar PostgreSQL en tu máquina virtual Linux: [Instalación de PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Nota: Puede que necesites agregar `sudo -u postgres` antes del comando `psql` para evitar errores de permisos.
+
+ **Opción 2:** Si tienes Docker instalado:
+ Ejecutar Docker en WSL agrega una capa extra de complejidad.
+ Solo usa esta opción si estás cómodo con los pasos extras involucrados, incluyendo activar [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Ahora puedes acceder a la base de datos en [localhost:5432](localhost:5432), con usuario `postgres` y contraseña `postgres`.
+
+## Paso 4: Configurar una Base de Datos Redis (cache)
+
+Twenty requiere un caché de redis para proporcionar el mejor rendimiento
+
+
+
+ **Opción 1:** Para aprovisionar tu Redis localmente:
+ Usa el siguiente enlace para instalar Redis en tu máquina Linux: [Instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opción 2:** Si tienes Docker instalado:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opción 1 (preferido):** Para aprovisionar tu Redis localmente con `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Inicia tu servidor redis:
+ `brew services start redis`
+
+ **Opción 2:** Si tienes Docker instalado:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opción 1:** Para aprovisionar tu Redis localmente:
+ Usa el siguiente enlace para instalar Redis en tu máquina virtual Linux: [Instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opción 2:** Si tienes Docker instalado:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+If you need a Client GUI, we recommend [redis insight](https://redis.io/insight/) (free version available)
+
+## Paso 5: Configurar las variables de entorno
+
+Usa variables de entorno o archivos `.env` para configurar tu proyecto. Más información [aquí](/l/es/developers/self-host/capabilities/setup)
+
+Copia los archivos `.env.example` en `/front` y `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/es/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Paso 6: Instalación de dependencias
+
+Para compilar el servidor de Twenty e ingresar algunos datos en tu base de datos, ejecuta el siguiente comando:
+
+```bash
+yarn
+```
+
+Ten en cuenta que `npm` o `pnpm` no funcionarán
+
+## Paso 7: Ejecutar el proyecto
+
+
+
+ Dependiendo de tu distribución de Linux, el servidor Redis podría iniciarse automáticamente.
+ Si no, revisa la [guía de instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) para tu distribución.
+
+
+
+ Redis ya debería estar funcionando. Si no, ejecuta:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ Dependiendo de tu distribución de Linux, el servidor Redis podría iniciarse automáticamente.
+ Si no es así, consulte la [guía de instalación de Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) para su distribución.
+
+
+
+Configure su base de datos con el siguiente comando:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Inicie el servidor, el trabajador y los servicios frontend:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+Alternativamente, puede iniciar todos los servicios a la vez:
+
+```bash
+npx nx start
+```
+
+## Paso 8: Use Twenty
+
+**Frontend**
+
+El frontend de Twenty estará ejecutándose en [http://localhost:3001](http://localhost:3001).
+Puede iniciar sesión usando la cuenta demo por defecto: `tim@apple.dev` (contraseña: `tim@apple.dev`)
+
+**Backend**
+
+* El servidor de Twenty estará operativo en [http://localhost:3000](http://localhost:3000)
+* La API GraphQL puede ser accedida en [http://localhost:3000/graphql](http://localhost:3000/graphql)
+* La API REST puede ser alcanzada en [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## Solución de Problemas
+
+Si encuentras algún problema, consulta [Solución de Problemas](/l/es/developers/self-host/capabilities/troubleshooting) para ver soluciones.
diff --git a/packages/twenty-docs/l/es/developers/contribute/contribute.mdx b/packages/twenty-docs/l/es/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..b488f76c4a
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Resumen
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..880aeed794
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: APIs
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty fue creado para ser amigable con los desarrolladores, ofreciendo APIs potentes que se adaptan a tu modelo de datos personalizado. Proveemos cuatro tipos de API distintos para satisfacer diferentes necesidades de integración.
+
+## Enfoque centrado en el desarrollador
+
+Twenty generates APIs specifically for your data model:
+
+* **No se requieren IDs largos**: Usa los nombres de tus objetos y campos directamente en los endpoints.
+* **Objetos estándar y personalizados tratados por igual**: Tus objetos personalizados reciben el mismo tratamiento de API que los incorporados.
+* **Endpoints dedicados**: Cada objeto y campo recibe su propio endpoint de API.
+* **Documentación personalizada**: Generada específicamente para el modelo de datos de tu espacio de trabajo.
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### API Principal
+
+Accesible en `/rest/` o `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Gestionar relaciones de registros
+
+### API de Metadatos
+
+Accesible en `/rest/metadata/` o `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Crear, modificar o eliminar objetos y campos
+* Configurar ajustes del espacio de trabajo
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Formato | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## Puntos de Acceso de API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Autenticación
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Crear una Clave de API
+
+1. Ve a **Configuración → APIs y Webhooks**
+2. Click **+ Create key**
+3. Configurar:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Haga clic en **Guardar**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Go to **Settings → Roles**
+2. Click on the role to assign
+3. Abre la pestaña **Asignación**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/es/user-guide/permissions-access/capabilities/permissions) for details.
+
+### Gestionar Claves de API
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Ve a **Configuración → APIs y Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Operaciones por Lotes
+
+Both REST and GraphQL support batch operations:
+
+* **Tamaño del lote**: Hasta 60 registros por solicitud
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Límite | Valor |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..e8b200e225
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Prerrequisitos
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+Desde aquí usted puede:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Autenticación
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Ejemplos:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Solución de problemas
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..094b66f320
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooks
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Crear un Webhook
+
+1. Ve a **Configuración → APIs y Webhooks → Webhooks**
+2. Haga clic en **+ Crear webhook**
+3. Enter your webhook URL (must be publicly accessible)
+4. Haga clic en **Guardar**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Gestionar Webhooks
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Eventos
+
+Twenty sends webhooks for these event types:
+
+| Evento | Ejemplo |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Campo | Descripción |
+| ----------------- | ------------------------------------------------ |
+| `evento` | What happened (e.g., `person.created`) |
+| `datos` | The full record that was created/updated/deleted |
+| `marca de tiempo` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Validación de Webhook
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Encabezado | Descripción |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Método | Dirección | Use Case |
+| ---------------------------- | --------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/es/developers/extend/extend.mdx b/packages/twenty-docs/l/es/developers/extend/extend.mdx
new file mode 100644
index 0000000000..362e14f89c
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Resumen
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/es/developers/introduction.mdx b/packages/twenty-docs/l/es/developers/introduction.mdx
new file mode 100644
index 0000000000..ccefba6268
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..51726da414
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Otros métodos
+---
+
+
+ Este documento es mantenido por la comunidad. Podría contener problemas.
+
+
+## Kubernetes vía Terraform y Manifests
+
+Documentación comunitaria para la implementación de Kubernetes está disponible [aquí](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+Despliega Twenty en servidores usando Coolify. (la imagen oficial en Coolify estará disponible pronto)
+
+[Documentación de Coolify](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Despliega Twenty en EasyPanel con la plantilla mantenida por la comunidad a continuación.
+
+[Desplegar en EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Despliega Twenty en servidores con Elest.io utilizando el enlace a continuación.
+
+[Desplegar en Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty en Railway
+
+Despliega Twenty en Railway con la plantilla mantenida por la comunidad a continuación.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty en Sealos
+
+Despliega Twenty en Sealos con la plantilla mantenida por la comunidad a continuación.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Otros
+
+Please feel free to Open a PR to add more Cloud Provider options.
diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..5d5e66e1cb
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Clic con Docker Compose
+---
+
+
+ Los contenedores de Docker son para alojamiento en producción o autoalojamiento, para la contribución por favor revise la [Configuración Local](/l/es/developers/contribute/capabilities/local-setup).
+
+
+## Resumen
+
+Esta guía proporciona instrucciones paso a paso para instalar y configurar la aplicación Twenty utilizando Docker Compose. El objetivo es simplificar el proceso y prevenir errores comunes que podrían arruinar tu configuración.
+
+**Importante:** Solo modifica configuraciones explícitamente mencionadas en esta guía. Alterar otras configuraciones puede causar problemas.
+
+Consulta los documentos [Configurar Variables de Entorno](/l/es/developers/self-host/capabilities/setup) para configuraciones avanzadas. Todas las variables de entorno deben ser declaradas en el archivo docker-compose.yml en el nivel del servidor y/o trabajador dependiendo de la variable.
+
+## Requisitos del sistema
+
+* RAM: Asegúrate de que tu entorno tenga al menos 2GB de RAM. La memoria insuficiente puede causar que los procesos se bloqueen.
+* Docker & Docker Compose: Asegúrate de que ambos estén instalados y actualizados.
+
+## Opción 1: Script de una línea
+
+Instala la última versión estable de Twenty con un solo comando:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Para instalar una versión o rama específica:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Reemplace x.y.z con el número de versión deseado.
+* Reemplace branch-name con el nombre de la rama que desea instalar.
+
+## Opción 2: Pasos manuales
+
+Sigue estos pasos para una configuración manual.
+
+### Paso 1: Configurar el archivo de entorno
+
+1. **Create the .env File**
+
+ Copia el archivo de entorno de ejemplo a tu directorio de trabajo a un nuevo archivo .env:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Generar tokens secretos**
+
+ Ejecuta el siguiente comando para generar una cadena única aleatoria:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Importante:** Mantén este valor en secreto / no lo compartas.
+
+3. **Actualiza el `.env`**
+
+ Reemplaza el valor de marcador de posición en tu archivo .env con el token generado:
+
+ ```ini
+ APP_SECRET=primera_cadena_aleatoria
+ ```
+
+4. **Establecer la contraseña de Postgres**
+
+ Actualiza el valor de `PG_DATABASE_PASSWORD` en el archivo .env con una contraseña fuerte sin caracteres especiales.
+
+ ```ini
+ PG_DATABASE_PASSWORD=mi_contraseña_fuerte
+ ```
+
+### Paso 2: Obtener el archivo Docker Compose
+
+Descarga el archivo `docker-compose.yml` en tu directorio de trabajo:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Paso 3: Lanza la aplicación
+
+Inicia los contenedores Docker:
+
+```bash
+docker compose up -d
+```
+
+### Paso 4: Acceder a la aplicación
+
+Si alojas twentyCRM en tu propia computadora, abre tu navegador y navega a [http://localhost:3000](http://localhost:3000).
+
+Si lo alojas en un servidor, verifica que el servidor esté en funcionamiento y que todo esté bien con
+
+```bash
+curl http://localhost:3000
+```
+
+## Configuración
+
+### Exponer Twenty para acceso externo
+
+Por defecto, Twenty se ejecuta en `localhost` en el puerto `3000`. Para acceder a él mediante un dominio externo o dirección IP, necesitas configurar `SERVER_URL` en tu archivo `.env`.
+
+#### Entendiendo `SERVER_URL`
+
+* **Protocolo:** Usa `http` o `https` dependiendo de tu configuración.
+ * Usa `http` si no has configurado SSL.
+ * Usa `https` si tienes SSL configurado.
+* **Dominio/IP:** Este es el nombre de dominio o dirección IP donde tu aplicación es accesible.
+* **Puerto:** Incluye el número de puerto si no estás usando los puertos predeterminados (`80` para `http`, `443` para `https`).
+
+### Requisitos de SSL
+
+SSL (HTTPS) es requerido para que ciertas características del navegador funcionen correctamente. Aunque estas características podrían funcionar durante el desarrollo local (ya que los navegadores tratan localhost de manera diferente), se requiere una configuración SSL adecuada al alojar Twenty en un dominio regular.
+
+Por ejemplo, es posible que la API del portapapeles requiera un contexto seguro: algunas características como los botones de copia en toda la aplicación pueden no funcionar sin HTTPS habilitado.
+
+Recomendamos encarecidamente configurar Twenty detrás de un proxy inverso con terminación SSL para una seguridad y funcionalidad óptimas.
+
+#### Configurando `SERVER_URL`
+
+1. **Determine su URL de acceso**
+ * **Sin proxy inverso (Acceso directo):**
+
+ Si estás accediendo a la aplicación directamente sin un proxy inverso:
+
+ ```ini
+ SERVER_URL=http://tu-dominio-o-ip:3000
+ ```
+
+ * **Con proxy inverso (Puertos estándar):**
+
+ Si estás usando un proxy inverso como Nginx o Traefik y tienes SSL configurado:
+
+ ```ini
+ SERVER_URL=https://tu-dominio-o-ip
+ ```
+
+ * **Con proxy inverso (Puertos personalizados):**
+
+ Si estás usando puertos no estándar:
+
+ ```ini
+ SERVER_URL=https://tu-dominio-o-ip:puerto-personalizado
+ ```
+
+2. **Actualiza el archivo `.env`**
+
+ Abre tu archivo `.env` y actualiza el `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://tu-dominio-o-ip:tu-puerto
+ ```
+
+ **Ejemplos:**
+
+ * Acceso directo sin SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Acceso vía dominio con SSL:
+ ```ini
+ SERVER_URL=https://miappdetwenty.com
+ ```
+
+3. **Reiniciar la aplicación**
+
+ Para que los cambios surtan efecto, reinicia los contenedores Docker:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Consideraciones
+
+* **Configuración del Proxy Inverso:**
+
+ Asegúrese de que su proxy inverso envíe las solicitudes al puerto interno correcto (`3000` por defecto). Configure la terminación SSL y cualquier cabecera necesaria.
+
+* **Configuración del Cortafuegos:**
+
+ Abra los puertos necesarios en su cortafuegos para permitir el acceso externo.
+
+* **Consistencia:**
+
+ La `SERVER_URL` debe coincidir con cómo los usuarios acceden a su aplicación en sus navegadores.
+
+#### Persistencia
+
+* **Volúmenes de Datos:**
+
+ La configuración de Docker Compose utiliza volúmenes para persistir datos para la base de datos y el almacenamiento del servidor.
+
+* **Entornos Sin Estado:**
+
+ Si se despliega en un entorno sin estado (por ejemplo, ciertos servicios en la nube), configure un almacenamiento externo para persistir los datos.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Solución de Problemas
+
+Si encuentras algún problema, consulta [Solución de Problemas](/l/es/developers/self-host/capabilities/troubleshooting) para ver soluciones.
diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..127d8f8003
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: Configuración
+---
+
+# Gestión de Configuración
+
+
+ **¿Instalando por primera vez?** Siga la [guía de instalación de Docker Compose](/l/es/developers/self-host/capabilities/docker-compose) para ejecutar Twenty, luego regrese aquí para la configuración.
+
+
+Twenty ofrece **dos modos de configuración** para adaptarse a diferentes necesidades de implementación:
+
+**Acceso al panel de administración:** Solo los usuarios con privilegios de administrador (`canAccessFullAdminPanel: true`) pueden acceder a la interfaz de configuración.
+
+## 1. Configuración del Panel de Administración (Predeterminado)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # predeterminado
+```
+
+**La mayoría de las configuraciones se realizan a través de la interfaz** después de la instalación:
+
+1. Acceda a su instancia de Twenty (normalmente `http://localhost:3000`)
+2. Vaya a **Configuración / Panel de Administración / Variables de Configuración**
+3. Configure integraciones, correo electrónico, almacenamiento y más
+4. Los cambios se aplican inmediatamente (dentro de 15 segundos para implementaciones multicontenedor)
+
+
+ **Implementaciones Multicontenedor:** Al usar la configuración de base de datos (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), tanto los contenedores del servidor como los de trabajo leen de la misma base de datos. Los cambios en el panel de administración afectan a ambos automáticamente, eliminando la necesidad de duplicar las variables de entorno entre contenedores (excepto para las variables de infraestructura).
+
+
+**Qué se puede configurar a través del panel de administración:**
+
+* **Autenticación** - OAuth de Google/Microsoft, configuración de contraseñas
+* **Correo Electrónico** - Configuración de SMTP, plantillas, verificación
+* **Almacenamiento** - Configuración S3, rutas de almacenamiento local
+* **Integraciones** - Gmail, Google Calendar, servicios de Microsoft
+* **Flujo de Trabajo y Limitación de Tasas** - Límites de ejecución, restricción de API
+* **Y mucho más...**
+
+
+
+
+ Cada variable está documentada con descripciones en su panel de administración en **Configuración → Panel de Administración → Variables de Configuración**.
+ Algunas configuraciones de infraestructura como las conexiones de base de datos (`PG_DATABASE_URL`), URLs del servidor (`SERVER_URL`), y secretos de la aplicación (`APP_SECRET`) solo se pueden configurar a través del archivo `.env`.
+
+ [Referencia técnica completa →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Configuración Solo de Entorno
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Toda la configuración se gestiona a través de archivos `.env`:**
+
+1. Establezca `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` en su archivo `.env`
+2. Agregue todas las variables de configuración a su archivo `.env`
+3. Reinicie los contenedores para que los cambios tengan efecto
+4. El panel de administración mostrará los valores actuales pero no podrá modificarlos
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Integración con Gmail y Google Calendar
+
+### Crear Proyecto en Google Cloud
+
+1. Vaya a [Google Cloud Console](https://console.cloud.google.com/)
+2. Cree un nuevo proyecto o seleccione uno existente
+3. Habilite estas APIs:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### Configurar OAuth
+
+1. Vaya a [Credenciales](https://console.cloud.google.com/apis/credentials)
+2. Cree un ID de Cliente OAuth 2.0
+3. Agregue estas URIs de redirección:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Configurar en Twenty
+
+1. Vaya a **Configuración → Panel de Administración → Variables de Configuración**
+2. Encuentre la sección **Google Auth**
+3. Establezca estas variables:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar.
+
+
+**Ámbitos requeridos** (configurados automáticamente):
+[Ver código fuente relevante](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Si su aplicación está en modo de prueba
+
+Si su aplicación está en modo de prueba, deberá agregar usuarios de prueba a su proyecto.
+
+En [Pantalla de consentimiento OAuth](https://console.cloud.google.com/apis/credentials/consent), agregue sus usuarios de prueba en la sección "Usuarios de prueba".
+
+## Integración con Microsoft 365
+
+
+ Los usuarios deben tener una [licencia de Microsoft 365](https://admin.microsoft.com/Adminportal/Home) para poder usar la API de Calendar y Messaging. No podrán sincronizar su cuenta en Twenty sin una.
+
+
+### Cree un proyecto en Microsoft Azure
+
+Necesitará crear un proyecto en [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) y obtener las credenciales.
+
+### Habilitar APIs
+
+En la Consola de Microsoft Azure habilite las siguientes APIs en "Permisos":
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profile
+* Microsoft Graph: offline_access
+
+Nota: "Mail.ReadWrite" y "Mail.Send" solo son obligatorios si desea enviar correos electrónicos usando nuestras acciones de flujo de trabajo. Puede usar "Mail.Read" en su lugar si solo desea recibir correos electrónicos.
+
+### URIs de redirección autorizadas
+
+Necesita agregar las siguientes URIs de redirección a su proyecto:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Configurar en Twenty
+
+1. Vaya a **Configuración → Panel de Administración → Variables de Configuración**
+2. Encuentre la sección **Microsoft Auth**
+3. Establezca estas variables:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar.
+
+
+### Configurar ámbitos
+
+[Ver código fuente relevante](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'correo Electrónico'
+* 'perfil'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Si su aplicación está en modo de prueba
+
+Si su aplicación está en modo de prueba, deberá agregar usuarios de prueba a su proyecto.
+
+Agregue sus usuarios de prueba a la sección "Usuarios y grupos".
+
+## Trabajos en segundo plano para Calendarios y Mensajes
+
+Después de configurar las integraciones de Gmail, Google Calendar, o Microsoft 365, necesita iniciar los trabajos en segundo plano que sincronizan los datos.
+
+Registre los siguientes trabajos recurrentes en su contenedor de trabajo:
+
+```bash
+# desde su contenedor de trabajo
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## Configuración de Correo Electrónico
+
+1. Vaya a **Configuración → Panel de Administración → Variables de Configuración**
+2. Encuentre la sección **Correo Electrónico**
+3. Configure su configuración SMTP:
+
+
+
+ Necesitará proporcionar una [Contraseña de Aplicación](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ Tenga en cuenta que si tiene la autenticación de dos factores habilitada, necesitará proporcionar una [Contraseña de Aplicación](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** es un servidor de correo SMTP falso para desarrollo y pruebas.
+
+ * Ejecute la imagen de smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Acceda a la interfaz de smtp4dev aquí: [http://localhost:8090](http://localhost:8090)
+ * Establezca las siguientes variables:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Modo solo de entorno:** Si establece `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, agregue estas variables a su archivo `.env` en su lugar.
+
diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..759c9b0f18
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,226 @@
+---
+title: Solución de problemas
+---
+
+## Solución de Problemas
+
+Si encuentra algún problema al configurar el entorno para el desarrollo, al actualizar su instancia o al autoalojar, aquí hay algunas soluciones para problemas comunes.
+
+### Self-hosting
+
+#### La primera instalación resulta en `fallo de autenticación de contraseña para el usuario "postgres"`
+
+🚨 **IMPORTANTE: Esta solución es SOLO para instalaciones nuevas** 🚨
+Si tiene una instancia de Twenty existente con datos de producción, **NO** siga estos pasos ya que borrarán permanentemente su base de datos.
+
+Al instalar Twenty por primera vez, es posible que desee cambiar la contraseña predeterminada de la base de datos.
+La contraseña que establezca durante la primera instalación se almacena permanentemente en el volumen de base de datos. Si más tarde intenta cambiar esta contraseña en su configuración sin eliminar el volumen anterior, obtendrá errores de autenticación porque la base de datos todavía está usando la contraseña original.
+
+⚠️ ADVERTENCIA: ¡Seguir los pasos borrará PERMANENTEMENTE todos los datos de la base de datos! ⚠️
+Prosiga solo si se trata de una instalación nueva sin datos importantes.
+
+Para actualizar el `PG_DATABASE_PASSWORD` necesita:
+
+```sh
+# Actualizar el PG_DATABASE_PASSWORD en .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### Rupturas de línea de CR encontradas [Windows]
+
+This is due to the line break characters of Windows and the git configuration. Try running:
+
+```
+git config --global core.autocrlf false
+```
+
+Luego elimine el repositorio y clónelo de nuevo.
+
+#### Esquema de metadatos faltante
+
+Durante la instalación de Twenty, debe aprovisionar su base de datos postgres con los esquemas, extensiones y usuarios correctos.
+Si ha ejecutado con éxito este aprovisionamiento, debería tener esquemas `default` y `metadata` en su base de datos.
+Si no los tiene, asegúrese de no tener más de una instancia de postgres ejecutándose en su computadora.
+
+#### No se puede encontrar el módulo 'twenty-emails' o sus declaraciones de tipo correspondientes.
+
+Tienes que construir el paquete `twenty-emails` antes de ejecutar la inicialización de la base de datos con `npx nx run twenty-emails:build`
+
+#### Missing twenty-x package
+
+Asegúrese de ejecutar yarn en el directorio raíz y luego ejecute `npx nx server:dev twenty-server`. Si esto aún no funciona, intente construir el paquete faltante manualmente.
+
+#### Lint on Save no funciona
+
+This should work out of the box with the eslint extension installed. Si esto no funciona, intente agregar esto a su configuración de vscode (en el ámbito del contenedor de desarrollo):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### While running `npx nx start` or `npx nx start twenty-front`, Out of memory error is thrown
+
+En `packages/twenty-front/.env` descomente `VITE_DISABLE_TYPESCRIPT_CHECKER=true` y `VITE_DISABLE_ESLINT_CHECKER=true` para deshabilitar las comprobaciones en segundo plano y así reducir la cantidad de RAM necesaria.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Por ejemplo, si trabaja en el servidor, ejecute solo `npx nx worker twenty-server`
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`ERROR FATAL: Las marcas compactas ineficaces cercanas al límite del montón Falló la asignación - JavaScript heap out of memory`
+
+La solución es ejecutar el siguiente comando en el terminal o agregarlo en el perfil .bashrc para configurarlo automáticamente:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+La bandera --max-old-space-size=8192 establece un límite superior de 8GB para el montón de Node.js; su uso escala con la demanda de la aplicación.
+Referencia: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. En Twenty, notamos que algunas extensiones de VScode estaban ocupando mucha RAM, por lo que las desactivamos temporalmente.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### Mientras ejecuta `npx nx start` hay [0] y [1] extraños en los registros
+
+Es esperado, ya que el comando `npx nx start` está ejecutando más comandos detrás de escena.
+
+#### No se envían correos electrónicos
+
+La mayoría de las veces, se debe a que el `worker` no se está ejecutando en segundo plano. Intente ejecutar
+
+```
+npx nx worker twenty-server
+```
+
+#### No se puede conectar mi cuenta de Microsoft 365
+
+La mayoría de las veces, se debe a que su administrador no ha habilitado la licencia de Microsoft 365 para su cuenta. Verifique [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Si tiene un código de error `AADSTS50020`, probablemente significa que está usando una cuenta de Microsoft personal. Esto aún no es compatible. Más información [aquí](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### Mientras ejecuta `yarn` aparecen advertencias en la consola
+
+Las advertencias informan sobre la carga de dependencias adicionales que no están explicitadas en `package.json`, así que mientras no aparezca un error crítico, todo debería funcionar como se espera.
+
+#### Cuando el usuario accede a la página de inicio de sesión, aparece un error sobre un usuario no autorizado que intenta acceder al espacio de trabajo en los registros
+
+Es esperado ya que el usuario no está autorizado cuando cierra sesión porque su identidad no está verificada.
+
+#### ¿Cómo comprobar si su worker está funcionando?
+
+* Vaya a [webhook-test.com](https://webhook-test.com/) y copie **Su URL de Webhook Única**.
+
+
+
+
+
+* Abra la aplicación Twenty, navegue a `/settings` y active el interruptor **Avanzado** en la parte inferior izquierda de la pantalla.
+* Cree un nuevo webhook.
+* Pegue **Su URL de Webhook Única** en el campo **Url de EndPoint** en Twenty. Establezca los **Filtros** en `Companies` y `Created`.
+
+
+
+
+
+* Vaya a `/objects/companies` y cree un nuevo registro de empresa.
+* Regrese a [webhook-test.com](https://webhook-test.com/) y verifique si se ha recibido una nueva **solicitud POST**.
+
+
+
+
+
+* Si se recibe una **solicitud POST**, su worker está funcionando con éxito. De lo contrario, debe solucionar problemas de su worker.
+
+#### El front-end no comienza y devuelve el error TS5042: La opción 'project' no se puede mezclar con archivos fuente en una línea de comando
+
+Comente el plugin checker en `packages/twenty-ui/vite-config.ts` como en el ejemplo a continuación
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Panel de administración no accesible
+
+Ejecute `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` en el contenedor de la base de datos para obtener acceso al panel de administración.
+
+### 1-click Docker compose
+
+#### No se puede iniciar sesión
+
+Si no puedes iniciar sesión después de la configuración:
+
+1. Ejecución de los siguientes comandos:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Reinicie los contenedores de Docker:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Tenga en cuenta que el comando database:reset borrará toda su base de datos y la recreará desde cero.
+
+#### Problemas de conexión detrás de un Proxy Reverso
+
+Si está ejecutando Twenty detrás de un proxy inverso y experimenta problemas de conexión:
+
+1. **Verifique SERVER_URL:**
+
+ Asegúrese de que `SERVER_URL` en su archivo `.env` coincida con su URL de acceso externa, incluyendo `https` si SSL está habilitado.
+
+2. **Verifique la configuración del Proxy Reverso:**
+
+ * Confirme que su proxy reverso está reenviando correctamente las solicitudes al servidor de Twenty.
+ * Asegúrese de que los encabezados como `X-Forwarded-For` y `X-Forwarded-Proto` estén configurados correctamente.
+
+3. **Reinicie los Servicios:**
+
+ Después de hacer cambios, reinicie tanto el proxy inverso como los contenedores de Twenty.
+
+#### Error al cargar una imagen - permiso denegado
+
+Cambiar la propiedad de la carpeta de datos en el host de raíz a otro usuario y grupo resuelve este problema.
+
+## Obtención de Ayuda
+
+Si enfrenta problemas no cubiertos en esta guía:
+
+* Verifique los Registros:
+
+ Vea los registros del contenedor por mensajes de error:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Soporte Comunitario:
+
+ Póngase en contacto con la [comunidad de Twenty](https://github.com/twentyhq/twenty/issues) o [los canales de soporte](https://discord.gg/cx5n4Jzs57) para obtener asistencia.
diff --git a/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..df79483163
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Guía de actualización
+---
+
+## Guías generales
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Si usó Docker Compose, siga estos pasos:
+
+1. En una terminal, en el host donde Twenty está funcionando, apague Twenty: `docker compose down`
+
+2. Actualice la versión cambiando el valor de `TAG` en el archivo .env cerca de su docker-compose. ( Recomendamos consumir la versión `major.minor` como `v0.53` )
+
+3. Vuelva a conectar Twenty con `docker compose up -d`
+
+Si desea actualizar su instancia por algunas versiones, por ejemplo de v0.33.0 a v0.35.0, debe actualizar su instancia secuencialmente, en este ejemplo de v0.33.0 a v0.34.0, luego de v0.34.0 a v0.35.0.
+
+**Asegúrese de que después de cada versión actualizada tenga una copia de respaldo no corrupta.**
+
+## Pasos de actualización específicos por versión
+
+## v1.0
+
+¡Hola Twenty v1.0! 🎉
+
+## v0.60
+
+### Mejoras de rendimiento
+
+Todas las interacciones con la API de metadatos han sido optimizadas para un mejor rendimiento, particularmente para la manipulación de metadatos de objetos y operaciones de creación de espacios de trabajo.
+
+Hemos reestructurado nuestra estrategia de almacenamiento en caché para priorizar los aciertos de caché sobre las consultas de base de datos cuando sea posible, mejorando significativamente el rendimiento de las operaciones de la API de metadatos.
+
+Si encuentra problemas de ejecución después de actualizar, es posible que deba vaciar su caché para asegurar que esté sincronizado con los cambios más recientes. Ejecute este comando en su contenedor del servidor de twenty:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Actualice su instancia de Twenty para usar la imagen v0.55
+
+Ya no necesita ejecutar ningún comando, la nueva imagen se encargará automáticamente de ejecutar todas las migraciones necesarias.
+
+### Error: `El usuario no tiene permiso`
+
+Si encuentra errores de autorización en la mayoría de solicitudes después de actualizar, es posible que deba vaciar su caché para recalcular los permisos más recientes.
+
+En su contenedor `twenty-server`, ejecute:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Este problema es específico de esta versión de Twenty y no debería ser necesario para futuras actualizaciones.
+
+### v0.54
+
+Desde la versión `0.53`, no se necesitan acciones manuales.
+
+#### Desaparición del esquema de metadatos
+
+Hemos fusionado el esquema `metadata` en el esquema `core` para simplificar la recuperación de datos desde `TypeORM`.
+Hemos fusionado el paso del comando `migrate` dentro del comando `upgrade`. No recomendamos ejecutar `migrate` manualmente dentro de ninguno de sus contenedores de servidor/trabajador.
+
+### Desde v0.53
+
+A partir de `0.53`, la actualización se realiza de forma programática dentro del `DockerFile`, esto significa que de ahora en adelante, no debería necesitar ejecutar ningún comando manualmente.
+
+Asegúrese de seguir actualizando su instancia secuencialmente, sin omitir ninguna versión principal (por ejemplo, de `0.43.3` a `0.44.0` está permitido, pero de `0.43.1` a `0.45.0` no lo está), de lo contrario, podría provocar un desincronización de la versión del espacio de trabajo que podría resultar en errores de ejecución y funciones faltantes.
+
+Para verificar si un espacio de trabajo se ha migrado correctamente, puede revisar su versión en la base de datos en la tabla `core.workspace`.
+
+Siempre debería estar dentro del rango de la versión `major.minor` actual de su instancia de Twenty; puede ver la versión de su instancia en el panel de administración (en `/settings/admin-panel`, accesible si su usuario tiene la propiedad `canAccessFullAdminPanel` establecida en verdadero en la base de datos) o ejecutando `echo $APP_VERSION` en su contenedor `twenty-server`.
+
+Para corregir una versión de espacio de trabajo desincronizada, tendrá que actualizar desde la correspondiente versión de twenty siguiendo la guía de actualización relacionada secuencialmente, y así sucesivamente hasta alcanzar la versión deseada.
+
+#### Eliminación de `auditLog`
+
+Hemos eliminado el objeto estándar auditLog, lo que significa que el tamaño de su copia de seguridad podría reducirse significativamente después de esta migración.
+
+### v0.51 a v0.52
+
+Actualice su instancia de Twenty para usar la imagen v0.52
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Tengo un espacio de trabajo bloqueado en la versión entre `0.52.0` y `0.52.6`
+
+Desafortunadamente, `0.52.0` y `0.52.6` se han eliminado completamente de dockerHub.
+Tendrá que actualizar manualmente la versión de su espacio de trabajo a `0.51.0` en la base de datos y actualizar usando la versión twenty `0.52.11` siguiendo su guía de actualización justo arriba.
+
+### v0.50 a v0.51
+
+Actualice su instancia de Twenty para usar la imagen v0.51
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 a v0.50.0
+
+Actualice su instancia de Twenty para usar la imagen v0.50.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Mutación del docker-compose.yml
+
+Esta versión incluye una mutación del `docker-compose.yml` para dar acceso al servicio `worker` al volumen `server-local-data`.
+Actualice su `docker-compose.yml` local con el [docker-compose.yml de v0.50.0](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 a v0.44.0
+
+Actualice su instancia de Twenty para usar la imagen v0.44.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 a v0.43.0
+
+Actualice su instancia de Twenty para usar la imagen v0.43.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+En esta versión, también hemos cambiado a la imagen de postgres:16 en docker-compose.yml.
+
+#### (Opción 1) Migración de base de datos
+
+Mantener la imagen postgres-spilo existente está bien, pero tendrá que congelar la versión en su docker-compose.yml a 0.43.0.
+
+#### (Opción 2) Migración de base de datos
+
+Si desea migrar su base de datos a la nueva imagen de postgres:16, siga estos pasos:
+
+1. Descargue su base de datos del contenedor antiguo de postgres-spilo
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Asegúrese de que su archivo de respaldo no esté vacío.
+
+2. Actualice su docker-compose.yml para usar la imagen de postgres:16 como en el archivo [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml).
+
+3. Restaure la base de datos al nuevo contenedor postgres:16
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 a v0.42.0
+
+Actualice su instancia de Twenty para usar la imagen v0.42.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Variables del entorno**
+
+* Removidos: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Agregados: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 a v0.41.0
+
+Actualice su instancia de Twenty para usar la imagen v0.41.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Variables del entorno**
+
+* Removido: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 a v0.40.0
+
+Actualice su instancia de Twenty para usar la imagen v0.40.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Variables del entorno**
+
+* Agregados: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 a v0.35.0
+
+Actualice su instancia de Twenty para usar la imagen v0.35.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.35` se encarga de la migración de datos de todos los espacios de trabajo.
+
+**Variables del entorno**
+
+* Reemplazamos `ENABLE_DB_MIGRATIONS` por `DISABLE_DB_MIGRATIONS` (valor predeterminado ahora es `false`, probablemente no tenga que establecer nada)
+
+### v0.33.0 a v0.34.0
+
+Actualice su instancia de Twenty para usar la imagen v0.34.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.34` se encarga de la migración de datos de todos los espacios de trabajo.
+
+**Variables del entorno**
+
+* Removido: `FRONT_BASE_URL`
+* Agregados: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Hemos actualizado la forma en que manejamos la URL del frontend.
+Ahora puede configurar la URL del frontend usando las variables `FRONT_DOMAIN`, `FRONT_PROTOCOL` y `FRONT_PORT`.
+Si FRONT_DOMAIN no está configurado, la URL del frontend volverá a `SERVER_URL`.
+
+### v0.32.0 a v0.33.0
+
+Actualice su instancia de Twenty para usar la imagen v0.33.0
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+El comando `yarn command:prod cache:flush` eliminará la caché de Redis.
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.33` se encarga de la migración de datos de todos los espacios de trabajo.
+
+A partir de esta versión, la imagen twenty-postgres para DB quedó obsoleta y ahora se usa twenty-postgres-spilo.
+Si desea seguir usando la imagen twenty-postgres, simplemente reemplace `twentycrm/twenty-postgres:${TAG}` con `twentycrm/twenty-postgres` en docker-compose.yml.
+
+### v0.31.0 a v0.32.0
+
+Actualice su instancia de Twenty para usar la imagen v0.32.0
+
+**Migración de esquemas y datos**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.32` se encarga de la migración de datos de todos los espacios de trabajo.
+
+**Variables del entorno**
+
+Hemos actualizado la forma en que manejamos la conexión Redis.
+
+* Removidos: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Agregado: `REDIS_URL`
+
+Actualice su archivo `.env` para usar la nueva variable `REDIS_URL` en lugar de los parámetros de conexión individuales de Redis.
+
+También hemos simplificado la forma en que manejamos los tokens JWT.
+
+* Removidos: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Agregado: `APP_SECRET`
+
+Actualice su archivo `.env` para usar la nueva variable `APP_SECRET` en lugar de los secretos de tokens individuales (puede usar el mismo secreto que antes o generar una nueva cadena aleatoria)
+
+**Cuenta conectada**
+
+Si está utilizando cuentas conectadas para sincronizar sus correos electrónicos y calendarios de Google, deberá activar la [API de People](https://developers.google.com/people) en su consola de administración de Google.
+
+### v0.30.0 a v0.31.0
+
+Actualice su instancia de Twenty para usar la imagen v0.31.0
+
+**Migración de esquemas y datos:**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.31` se encarga de la migración de datos de todos los espacios de trabajo.
+
+### v0.24.0 a v0.30.0
+
+Actualice su instancia de Twenty para usar la imagen v0.30.0
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Hemos actualizado nuestro [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) para reflejar esto.
+Asegúrese de actualizar su configuración y sus variables de entorno en consecuencia:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Migración de esquemas y datos:**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.30` se encarga de la migración de datos de todos los espacios de trabajo.
+
+### v0.23.0 a v0.24.0
+
+Actualice su instancia de Twenty para usar la imagen v0.24.0
+
+Ejecución de los siguientes comandos:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la estructura de la base de datos (esquemas core y metadata)
+El `yarn command:prod upgrade-0.24` se encarga de la migración de datos de todos los espacios de trabajo.
+
+### v0.22.0 a v0.23.0
+
+Actualice su instancia de Twenty para usar la imagen v0.23.0
+
+Ejecución de los siguientes comandos:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la base de datos.
+El `yarn command:prod upgrade-0.23` se encarga de la migración de datos, incluyendo la transferencia de actividades a tareas/notas.
+
+### v0.21.0 a v0.22.0
+
+Actualice su instancia de Twenty para usar la imagen v0.22.0
+
+Ejecución de los siguientes comandos:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+El comando `yarn database:migrate:prod` aplicará las migraciones a la base de datos.
+El comando `yarn command:prod workspace:sync-metadata -f` sincronizará la definición de objetos estándar a las tablas de metadatos y aplicará las migraciones requeridas a los espacios de trabajo existentes.
+El comando `yarn command:prod upgrade-0.22` aplicará transformaciones de datos específicas para adaptarse a las nuevas opciones predeterminadas de instrumentación de solicitud de objetos.
diff --git a/packages/twenty-docs/l/es/developers/self-host/self-host.mdx b/packages/twenty-docs/l/es/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..1c754825d1
--- /dev/null
+++ b/packages/twenty-docs/l/es/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Resumen
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/es/navigation.json b/packages/twenty-docs/l/es/navigation.json
index 5bfa7cb7ea..f1eaf39da7 100644
--- a/packages/twenty-docs/l/es/navigation.json
+++ b/packages/twenty-docs/l/es/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Guía de usuario",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Comenzando"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Modelo de datos"
+ "label": "Modelo de datos",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "Esenciales de CRM"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Vistas"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Workflows"
+ "label": "Flujos de trabajo",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Need More Help"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Colaboración"
+ "ai": {
+ "label": "IA",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integraciones y API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Informes"
+ "dashboards": {
+ "label": "Tableros",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Facturación",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Configuración"
- },
- "pricing": {
- "label": "Precios"
- },
- "resources": {
- "label": "Recursos"
+ "label": "Configuración",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Desarrolladores"
},
- "devGettingStarted": {
- "label": "Comenzando",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Autoalojamiento"
- },
- "apiAndWebhooks": {
- "label": "API y Webhooks"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Contribuciones",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Desarrollo Frontend",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Desarrollo Frontend",
"groups": {
- "display": {
- "label": "Mostrar"
- },
- "feedback": {
- "label": "Retroalimentación"
- },
- "input": {
- "label": "Entrada"
- },
- "navigation": {
- "label": "Navegación"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Mostrar"
+ },
+ "feedback": {
+ "label": "Retroalimentación"
+ },
+ "input": {
+ "label": "Entrada"
+ },
+ "navigation": {
+ "label": "Navegación"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Desarrollo Backend"
}
}
- },
- "backendDevelopment": {
- "label": "Desarrollo de backend"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..ced09dc767
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: Consejo de la aplicación
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Un breve mensaje que muestra información adicional cuando un usuario interactúa con un elemento.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Customer Insights
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | nombreDeClase | cadena | Clase CSS opcional para estilo adicional |
+ | anchorSelect | Selector CSS | Selector para el ancla del consejo (el elemento que activa el consejo) |
+ | contenido | cadena | El contenido que desea mostrar dentro del consejo |
+ | delayHide | número | The delay in seconds before hiding the tooltip after the cursor leaves the anchor |
+ | desplazamiento | número | El desplazamiento en píxeles para posicionar el consejo |
+ | sinFlecha | booleano | Si es `true`, oculta la flecha en el consejo |
+ | estáAbierto | booleano | Si es `true`, el consejo está abierto por defecto |
+ | lugar | Cadena `PlacesType` de `react-tooltip` | Especifica la colocación del consejo. Los valores incluyen `inferior`, `izquierda`, `derecha`, `superior`, `superior-inicio`, `superior-fin`, `derecha-inicio`, `derecha-fin`, `inferior-inicio`, `inferior-fin`, `izquierda-inicio` y `izquierda-fin` |
+ | estrategiaPosicion | Cadena `PositionStrategy` de `react-tooltip` | Estrategia de posición para el consejo. Tiene dos valores: `absoluto` y `fijo` |
+
+
+
+## Texto Desbordante con Consejo
+
+Maneja texto desbordante y muestra un consejo cuando el texto se desborda.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ----- | ------ | -------------------------------------------------------------- |
+ | texto | cadena | El contenido que desea mostrar en el área de texto desbordante |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..7726dabf92
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Marca de verificación
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Representa una acción exitosa o completada.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Extiende `React.ComponentPropsWithoutRef<'div'>` y acepta todas las propiedades de un elemento `div` regular.
+
+
+
+## Marca de verificación animada
+
+Representa un ícono de marca de verificación con la característica adicional de animación.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción | Predeterminado |
+ | ----------- | -------- | -------------------------------------------------- | -------------- |
+ | isAnimating | booleano | Controla si la marca de verificación está animando | falso |
+ | color | cadena | Color de la marca de verificación | |
+ | duración | número | La duración de la animación en segundos | 0.5 segundos |
+ | tamaño | número | El tamaño de la marca de verificación | 28 píxeles |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..7fccdec997
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Chip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+A visual element that you can use as a clickable or non-clickable container with a label, optional left and right components, and various styling options to display labels and tags.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ |
+ | linkToEntity | cadena | El enlace a la entidad |
+ | entityId | cadena | El identificador único de la entidad |
+ | nombre | cadena | El nombre de la entidad |
+ | pictureUrl | cadena | s picture", |
+ | avatarType | Tipo de Avatar | El tipo de avatar que quieres mostrar. Tiene dos opciones: `redondeado` y `cuadrado` |
+ | variante | `EntityChipVariant` enum | Variante del chip de entidad que quieres mostrar. Tiene dos opciones: `regular` y `transparente` |
+ | LeftIcon | IconComponent | Un componente de React que representa un ícono. Mostrado en el lado izquierdo del chip |
+
+
+
+## Ejemplos
+
+### Chip Transparente Deshabilitado
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Chip Deshabilitado con Tooltip
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Chip de Entidad
+
+Un elemento tipo Chip para mostrar información sobre una entidad.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ |
+ | linkToEntity | cadena | El enlace a la entidad |
+ | entityId | cadena | El identificador único de la entidad |
+ | nombre | cadena | El nombre de la entidad |
+ | pictureUrl | cadena | s picture", |
+ | avatarType | Tipo de Avatar | El tipo de avatar que quieres mostrar. Tiene dos opciones: `redondeado` y `cuadrado` |
+ | variante | `EntityChipVariant` enum | Variante del chip de entidad que quieres mostrar. Tiene dos opciones: `regular` y `transparente` |
+ | LeftIcon | IconComponent | Un componente de React que representa un ícono. Mostrado en el lado izquierdo del chip |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx
index 4cfe3c0df4..9e7646d32e 100644
--- a/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx
+++ b/packages/twenty-docs/l/es/twenty-ui/display/icons.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/objects/objects.png
---
-
+
Una lista de iconos utilizados en toda nuestra aplicación.
@@ -14,39 +14,35 @@ Una lista de iconos utilizados en toda nuestra aplicación.
Usamos iconos Tabler para React en toda la aplicación.
+
+
-
+ ```
+ yarn add @tabler/icons-react
+ ```
+
-```
-yarn add @tabler/icons-react
-```
+
+ Puede importar cada icono como un componente. Aquí hay un ejemplo:
-
+
-
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
-Puede importar cada icono como un componente. Here's an example:
-
-```jsx
-import { IconArrowLeft } from "@tabler/icons-react";
-
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-
-| "Props" | Tipo | Descripción | Predeterminado |
-| ------- | -------- | ----------------------------------------- | -------------- |
-| tamaño | número | La altura y el ancho del icono en píxeles | 24 |
-| color | "cadena" | El color de los iconos | currentColor |
-| trazo | número | El ancho del trazo del icono en píxeles | 2 |
-
-
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+ | Propiedades | Tipo | Descripción | Predeterminado |
+ | ----------- | ------ | ----------------------------------------- | -------------- |
+ | tamaño | número | La altura y el ancho del icono en píxeles | 24 |
+ | color | cadena | El color de los iconos | currentColor |
+ | trazo | número | El ancho del trazo del icono en píxeles | 2 |
+
## Iconos Personalizados
@@ -58,26 +54,20 @@ Además de los iconos Tabler, la aplicación también utiliza algunos iconos per
Muestra un icono de libreta de direcciones.
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
-
-
-```jsx
-import { IconAddressBook } from 'twenty-ui/display';
-
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-
-| "Props" | Tipo | Descripción | Predeterminado |
-| ------- | ------ | ----------------------------------------- | -------------- |
-| tamaño | número | La altura y el ancho del icono en píxeles | 24 |
-| trazo | número | El ancho del trazo del icono en píxeles | 2 |
-
-
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+ | "Props" | Tipo | Descripción | Predeterminado |
+ | ------- | ------ | ----------------------------------------- | -------------- |
+ | tamaño | número | La altura y el ancho del icono en píxeles | 24 |
+ | trazo | número | El ancho del trazo del icono en píxeles | 2 |
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..5c23b5b7e0
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+A small badge or "pill" to indicate something is coming soon.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx
index 6fa2e396a4..421e926bf9 100644
--- a/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx
+++ b/packages/twenty-docs/l/es/twenty-ui/display/tag.mdx
@@ -4,41 +4,35 @@ image: /images/user-guide/table-views/table.png
---
-
+
Componente para categorizar o etiquetar contenido visualmente.
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
-
-
-```jsx
-import { Tag } from "@/ui/display/tag/components/Tag";
-
-export const MyComponent = () => {
- return (
- console.log("click")}
- />
- );
-};
-```
-
-
-
-
-
-| "Props" | Tipo | Descripción |
-| ----------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| "className" | cadena | "Nombre opcional para estilización adicional" |
-| color | cadena | Color de la etiqueta. Las opciones incluyen: `verde`, `turquesa`, `cielo`, `azul`, `púrpura`, `rosa`, `rojo`, `naranja`, `amarillo`, `gris` |
-| texto | "cadena" | El contenido de la etiqueta |
-| alHacerClic | "función" | Función opcional llamada cuando un usuario hace clic en la etiqueta |
-
-
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+ | Props | Tipo | Descripción |
+ | ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+ | color | cadena | Color de la etiqueta. Las opciones incluyen: `verde`, `turquesa`, `cielo`, `azul`, `púrpura`, `rosa`, `rojo`, `naranja`, `amarillo`, `gris` |
+ | texto | cadena | El contenido de la etiqueta |
+ | enClic | función | Función opcional llamada cuando un usuario hace clic en la etiqueta |
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx
index 172050024a..2934ad9fac 100644
--- a/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/es/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
Usa un editor de texto enriquecido basado en bloques de [BlockNote](https://www.blocknotejs.org/) para permitir a los usuarios editar y ver bloques de contenido.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| "Props" | Tipo | Descripción |
-| ------- | ----------------- | -------------------------------------------------- |
-| editor | `BlockNoteEditor` | La instancia o configuración del editor de bloques |
-
-
+
+ | Props | Tipo | Descripción |
+ | ------ | ----------------- | -------------------------------------------------- |
+ | editor | `BlockNoteEditor` | La instancia o configuración del editor de bloques |
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..f56538997d
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Botones
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+Una lista de botones y grupos de botones utilizados en toda la aplicación.
+
+## Botón
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | ------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+ | "className" | string | Nombre de clase opcional para estilos adicionales |
+ | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón |
+ | título | cadena | El contenido de texto del botón |
+ | "fullWidth" | booleano | Define si el botón debe ocupar todo el ancho de su contenedor |
+ | variante | cadena | La variante de estilo visual del botón. Las opciones incluyen `primario`, `secundario` y `terciario` |
+ | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` |
+ | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `derecha` y `central` |
+ | acento | cadena | El color de acento del botón. Las opciones incluyen: `predeterminado`, `azul` y `peligro` |
+ | próximamente | booleano | Indica si el botón está marcado como "pronto" (como para funciones próximas) |
+ | deshabilitado | booleano | Especifica si el botón está deshabilitado o no |
+ | enfoque | booleano | Determina si el botón tiene foco |
+ | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón |
+
+
+
+## Grupo de Botones
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | --------- | --------- | -------------------------------------------------------------------------------------------------------------------------- |
+ | variante | cadena | La variante de estilo visual de los botones dentro del grupo. Las opciones incluyen `primario`, `secundario` y `terciario` |
+ | tamaño | cadena | El tamaño de los botones dentro del grupo. Tiene dos opciones: `mediano` y `pequeño` |
+ | acento | cadena | El color de acento de los botones dentro del grupo. Las opciones incluyen `predeterminado`, `azul` y `peligro` |
+ | className | cadena | Nombre de clase opcional para estilos adicionales |
+ | hijos | ReactNode | Una matriz de elementos React que representan los botones individuales dentro del grupo |
+
+
+
+## Botón Flotante
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ----------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+ | className | cadena | Nombre opcional para estilos adicionales |
+ | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón |
+ | título | cadena | El contenido de texto del botón |
+ | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` |
+ | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `central`, `derecha` |
+ | aplicarSombra | booleano | Determina si se aplica sombra a un botón |
+ | aplicarDesenfoque | booleano | Determina si se aplica un efecto de desenfoque al botón |
+ | deshabilitado | booleano | Determina si el botón está deshabilitado |
+ | enfoque | booleano | Indica si el botón tiene foco |
+
+
+
+## Grupo de Botones Flotantes
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción | Predeterminado |
+ | ------- | --------- | --------------------------------------------------------------------------------------- | -------------- |
+ | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` | pequeño |
+ | hijos | ReactNode | Una matriz de elementos React que representan los botones individuales dentro del grupo | |
+
+
+
+## Botón de Ícono Flotante
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ----------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+ | className | cadena | "Nombre opcional para estilización adicional" |
+ | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón |
+ | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` |
+ | posición | cadena | La posición del botón en relación con sus compañeros. Las opciones incluyen: `independiente`, `izquierda`, `derecha` y `central` |
+ | aplicarSombra | booleano | Determina si se aplica sombra a un botón |
+ | aplicarDesenfoque | booleano | Determina si se aplica un efecto de desenfoque al botón |
+ | deshabilitado | booleano | Determina si el botón está deshabilitado |
+ | enfoque | booleano | Indica si el botón tiene foco |
+ | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón |
+ | esActivo | booleano | Determina si el botón está en estado activo |
+
+
+
+## Grupo de Botones de Ícono Flotante
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | className | cadena | "Nombre opcional para estilización adicional" |
+ | tamaño | cadena | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` |
+ | iconButtons | array | An array of objects, each representing an icon button in the group. Cada objeto debe incluir el componente de ícono que desea mostrar en el botón, la función que desea llamar cuando un usuario hace clic en el botón y si el botón debe estar activo o no. |
+
+
+
+## Botón Claro
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------- | ----------------- | ------------------------------------------------------------------------------- |
+ | className | cadena | "Nombre opcional para estilización adicional" |
+ | ícono | `React.ReactNode` | El ícono que desea mostrar en el botón |
+ | título | cadena | El contenido de texto del botón |
+ | acento | "cadena" | El color de acento del botón. Las opciones incluyen: `secundario` y `terciario` |
+ | activo | booleano | Determina si el botón está en estado activo |
+ | deshabilitado | booleano | Determina si el botón está deshabilitado |
+ | enfoque | booleano | Indica si el botón tiene foco |
+ | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón |
+
+
+
+## Botón de Ícono Claro
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | ------------- | --------------------- | ----------------------------------------------------------------------------- |
+ | "className" | cadena | "Nombre opcional para estilización adicional" |
+ | testId | "cadena" | Identificador de prueba para el botón |
+ | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón |
+ | título | "cadena" | El contenido de texto del botón |
+ | tamaño | "cadena" | El tamaño del botón. Tiene dos opciones: `pequeño` y `mediano` |
+ | acento | "cadena" | El color de acento del botón. Opciones incluyen: `secundario` y `terciario` |
+ | activo | booleano | Determina si el botón está en estado activo |
+ | "desactivado" | booleano | Determina si el botón está deshabilitado |
+ | enfoque | booleano | Indica si el botón tiene foco |
+ | alHacerClic | función | Una función de callback que se activa cuando el usuario hace clic en el botón |
+
+
+
+## Botón Principal
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | -------------------------- | -------------------------------- | --------------------------------------------------------------------------------- |
+ | título | "cadena" | El contenido de texto del botón |
+ | anchoCompleto | booleano | Define si el botón debe abarcar todo el ancho de su contenedor |
+ | variante | "cadena" | La variante de estilo visual del botón. Options include `primary` and `secondary` |
+ | próximamente | booleano | Indica si el botón está marcado como "próximamente" (como para funciones futuras) |
+ | Ícono | `React.ComponentType` | Un componente de ícono opcional que se muestra dentro del botón |
+ | Propiedades React `button` | `React.ComponentProps<'button'>` | Se admiten todas las propiedades estándar del botón HTML |
+
+
+
+## Botón de Icono Redondeado
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | -------------------------- | ----------------------------------------------- | ----------- |
+ | Ícono | `React.ComponentType` | |
+ | Propiedades React `button` | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..daedad71b2
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Esquema de colores
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Tarjeta de Esquema de Color
+
+Representa diferentes esquemas de color y está diseñado especialmente para temas claros y oscuros.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción | Predeterminado |
+ | ----------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------- |
+ | variante | string | La variante del esquema de color. Las opciones incluyen `Oscuro`, `Claro` y `Sistema` | claro |
+ | seleccionado | booleano | Si es `verdadero`, muestra una marca de verificación para indicar el esquema de color seleccionado | |
+ | props adicionales | `React.ComponentPropsWithoutRef<'div'>` | Props del elemento HTML estándar `div` | |
+
+
+
+## Selector de Esquema de Color
+
+Permite a los usuarios elegir entre diferentes esquemas de color.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | ---------- | -------------------- | ---------------------------------------------------------------------------- |
+ | valor | `Esquema de colores` | El esquema de color actualmente seleccionado |
+ | "onChange" | función | The callback function you want to trigger when a user selects a color scheme |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..d006f718e0
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: Selector de Íconos
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Un selector de íconos basado en un menú desplegable que permite a los usuarios seleccionar un ícono de una lista.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Ícono Seleccionado:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | --------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- |
+ | deshabilitado | booleano | Desactiva el selector de íconos si está configurado en `true` |
+ | "onChange" | función | The callback function triggered when the user selects an icon. Recibe un objeto con las propiedades `iconKey` y `Icon` |
+ | selectedIconKey | cadena | La clave del ícono seleccionado inicialmente |
+ | onClickOutside | función | Callback function triggered when the user clicks outside the dropdown |
+ | onClose | función | Callback function triggered when the dropdown is closed |
+ | onOpen | función | Callback function triggered when the dropdown is opened |
+ | variante | cadena | La variante de estilo visual del ícono clicable. Las opciones incluyen: `primario`, `secundario` y `terciario` |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..c06de9c4a0
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Entrada de imagen
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Permite a los usuarios subir y eliminar una imagen.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
+ | foto | cadena | La URL de origen de la imagen |
+ | onUpload | función | La función que se llama cuando un usuario sube una nueva imagen. Recibe el objeto `File` como un parámetro |
+ | onRemove | función | La función que se llama cuando el usuario hace clic en el botón eliminar |
+ | onAbort | función | La función que se llama cuando un usuario hace clic en el botón de abortar durante la subida de imagen |
+ | isUploading | booleano | Indica si una imagen se está cargando actualmente |
+ | errorMessage | cadena | Un mensaje de error opcional para mostrar debajo de la entrada de imagen |
+ | "desactivado" | booleano | Si es `true`, toda la entrada está deshabilitada y los botones no son clicables |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..3574a906aa
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Radio
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Usado cuando los usuarios solo pueden elegir una opción de una serie de opciones.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | --------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+ | estilo | propiedades de `React.CSS` | Estilos en línea adicionales para el componente. |
+ | "className" | cadena | Clase CSS opcional para estilo adicional. |
+ | marcado | booleano | Indicates whether the radio button is checked |
+ | valor | cadena | La etiqueta o texto asociado con el botón de opción. |
+ | "onChange" | función | La función que se llama cuando se cambia el botón de opción seleccionado. |
+ | onCheckedChange | función | La función que se llama cuando el estado de `seleccionado` del botón de opción cambia. |
+ | tamaño | cadena | El tamaño del botón de opción. Las opciones incluyen: `grande` y `pequeño`. |
+ | "desactivado" | booleano | Si es `verdadero`, el botón de opción está deshabilitado y no se puede hacer clic. |
+ | labelPosition | cadena | La posición del texto de la etiqueta en relación con el botón de opción. Tiene dos opciones: `izquierda` y `derecha`. |
+
+
+
+## Grupo de Radio
+
+Agrupa botones de opción relacionados.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | --------------- | ----------------- | ----------------------------------------------------------------------------------------------------- |
+ | valor | cadena | El valor del botón de opción seleccionado actualmente. |
+ | "onChange" | función | La función de devolución de llamada que se activa cuando se cambia el botón de opción. |
+ | alCambioDeValor | función | La función de devolución de llamada que se activa cuando se cambia el valor seleccionado en el grupo. |
+ | hijos | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/select.mdx b/packages/twenty-docs/l/es/twenty-ui/input/select.mdx
new file mode 100644
index 0000000000..541050eaad
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/select.mdx
@@ -0,0 +1,51 @@
+---
+title: Seleccionar
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+Permite a los usuarios seleccionar un valor de una lista de opciones predefinidas.
+
+
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
+
+ import { Select } from '@/ui/input/components/Select';
+
+ export const MyComponent = () => {
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nombreDeClase | cadena | Clase CSS opcional para estilo adicional |
+ | "desactivado" | booleano | Cuando se establece en `true`, desactiva la interacción del usuario con el componente |
+ | etiqueta | cadena | La etiqueta para describir el propósito del componente `Seleccionar` |
+ | "onChange" | función | La función que se llama cuando los valores seleccionados cambian |
+ | opciones | array | Represents the options available for the `Selected` component. Es un arreglo de objetos donde cada objeto tiene un `valor` (el identificador único), `etiqueta` (el identificador único), y un `Icono` opcional |
+ | valor | cadena | Representa el valor actualmente seleccionado. Debe coincidir con una de las propiedades `valor` en el arreglo de `opciones`. |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/text.mdx b/packages/twenty-docs/l/es/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..bf03046bf1
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Texto
+image: '"/images/user-guide/notes/notes_header.png"'
+---
+
+
+
+
+
+## "Entrada de Texto"
+
+"Permite a los usuarios ingresar y editar texto."
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | -------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+ | "className" | string | "Nombre opcional para estilización adicional" |
+ | etiqueta | string | "Representa la etiqueta para la entrada" |
+ | "onChange" | "función" | "La función que se llama cuando el valor de entrada cambia" |
+ | "fullWidth" | booleano | "Indica si la entrada debe ocupar el 100% del ancho" |
+ | disableHotkeys | booleano | "Indica si las teclas rápidas están habilitadas para la entrada" |
+ | error | cadena | "Representa el mensaje de error que se mostrará." "Cuando se proporciona, también se añade un icono de error en el lado derecho de la entrada" |
+ | "onKeyDown" | "función" | "Se llama cuando se presiona una tecla mientras el campo de entrada está enfocado." "Recibe un `React.KeyboardEvent` como argumento" |
+ | RightIcon | "ComponenteIcono" | "Un componente opcional de icono que se muestra en el lado derecho de la entrada" |
+
+ "El componente también acepta otras props de elementos de entrada HTML."
+
+
+
+## "Entrada de Texto que se ajusta automáticamente"
+
+"Componente de entrada de texto que ajusta automáticamente su altura según el contenido."
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción |
+ | -------------------- | --------- | ---------------------------------------------------------------------------------------- |
+ | "onValidate" | "función" | The callback function you want to trigger when the user validates the input |
+ | minRows | número | "El número mínimo de filas para el área de texto" |
+ | marcador de posición | "cadena" | "El texto de marcador de posición que deseas mostrar cuando el área de texto está vacía" |
+ | onFocus | "función" | "La función de retorno que deseas activar cuando el área de texto gana el foco" |
+ | variante | "cadena" | "La variante de la entrada." "Las opciones incluyen: `default`, `icon`, y `button`" |
+ | buttonTitle | "cadena" | "El título para el botón (solo aplicable para la variante de botón)" |
+ | valor | "cadena" | "El valor inicial para el área de texto" |
+
+
+
+## "Área de Texto"
+
+"Te permite crear entradas de texto de varias líneas."
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | "Props" | Tipo | Descripción |
+ | -------------------- | --------- | --------------------------------------------------------------------------- |
+ | "desactivado" | booleano | "Indica si el área de texto está desactivada" |
+ | minRows | número | "Número mínimo de filas visibles para el área de texto." |
+ | "onChange" | "función" | Función de llamada activada cuando cambia el contenido del área de texto. |
+ | marcador de posición | cadena | Texto del marcador de posición mostrado cuando el área de texto está vacía. |
+ | valor | cadena | El valor actual del área de texto. |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..26abf5b35b
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Cambiar
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | "Props" | Tipo | Descripción | Predeterminado |
+ | --------------- | -------- | ----------------------------------------------------------------------------------------------- | -------------- |
+ | valor | booleano | The current state of the toggle | `falso` |
+ | "onChange" | función | Callback function triggered when the toggle state changes | |
+ | color | cadena | Color of the toggle when it\ | s blue color |
+ | tamañoConmutado | cadena | Size of the toggle, affecting both height and weight. Tiene dos opciones: `pequeño` y `mediano` | mediano |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/introduction.mdx b/packages/twenty-docs/l/es/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..26fa6a0704
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Resumen
+description: Biblioteca de componentes para Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Componentes
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..bf908a95df
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Migaja de pan
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Renderiza una barra de navegación de migas de pan.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "Inicio", href: "/" },
+ { children: "Categoría", href: "/category" },
+ { children: "Subcategoría", href: "/category/subcategory" },
+ { children: "Página Actual" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nombreDeClase | cadena | Nombre de clase opcional para estilos adicionales |
+ | enlaces | matriz | An array of objects, each representing a breadcrumb link. Cada objeto tiene una propiedad `children` (el contenido de texto del enlace) y una propiedad `href` opcional (la URL a la que navegar cuando se hace clic en el enlace) |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..a8aafdc7d5
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: Elemento del menú
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Un elemento de menú versátil diseñado para ser utilizado en un menú o lista de navegación.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("¡Elemento de menú clicado!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("¡Botón de icono clicado!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | -------------- | ----------------- | --------------------------------------------------------------------------------------------------------------- |
+ | IconoIzquierdo | "ComponenteIcono" | Un icono izquierdo opcional que se muestra antes del texto en el elemento de menú |
+ | acento | cadena | Especifica el color de acento del elemento de menú. Las opciones incluyen: `default`, `danger`, y `placeholder` |
+ | texto | cadena | El contenido de texto del elemento de menú |
+ | iconButtons | array | An array of objects representing additional icon buttons associated with the menu item |
+ | isToolTipOpen | booleano | Controls the visibility of the tooltip associated with the menu item |
+ | testId | cadena | El atributo data-testid para propósitos de prueba |
+ | alHacerClic | función | Callback function triggered when the menu item is clicked |
+ | nombreDeClase | cadena | Nombre opcional para el estilo adicional |
+
+
+
+## Variantes
+
+Las diferentes variantes del componente de elemento de menú incluyen las siguientes:
+
+### Comando
+
+Un elemento de menú estilo comando en un menú para indicar atajos de teclado.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+ const manejarClicDeComando = () => {
+ console.log("¡Comando clicado!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | -------------- | ------------- | ---------------------------------------------------------------------------------- |
+ | IconoIzquierdo | IconComponent | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú |
+ | texto | "cadena" | El contenido de texto del elemento del menú |
+ | firstHotKey | cadena | El primer atajo de teclado asociado con el comando |
+ | secondHotKey | cadena | El segundo atajo de teclado asociado con el comando |
+ | isSelected | booleano | Indica si el elemento del menú está seleccionado o resaltado |
+ | alHacerClic | función | Callback function triggered when the menu item is clicked |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Draggable
+
+Un componente de elemento de menú arrastrable diseñado para ser utilizado en un menú o lista donde los elementos se pueden arrastrar y se pueden realizar acciones adicionales a través de botones de iconos.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+ const manejarClicDeElementoDeMenú = (event) => {
+ console.log("¡Elemento del menú clicado!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | -------------- | ------------- | --------------------------------------------------------------------------------------- |
+ | IconoIzquierdo | IconComponent | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú |
+ | accent | cadena | El color de acento del elemento del menú. Puede ser `default`, `placeholder` y `danger` |
+ | iconButtons | matriz | An array of objects representing additional icon buttons associated with the menu item |
+ | isTooltipOpen | booleano | Controls the visibility of the tooltip associated with the menu item |
+ | alHacerClic | función | Función de devolución de llamada para activar cuando se haga clic en el enlace |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | isDragDisabled | booleano | Indica si el arrastre está desactivado |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Multi Selección
+
+Proporciona una manera para implementar la funcionalidad de selección múltiple con una casilla de verificación asociada.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | -------------- | ------------- | ----------------------------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) |
+ | onSelectChange | función | Función de devolución de llamada activada cuando el estado de la casilla de verificación cambia |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Multi Selección con Avatar
+
+Un elemento de menú de selección múltiple con un avatar, una casilla para selección y contenido textual.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="Primera Opción"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | -------------- | ----------- | ----------------------------------------------------------------------------------------------- |
+ | avatar | `ReactNode` | El avatar o icono que se mostrará en el lado izquierdo del elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) |
+ | onSelectChange | función | Función de devolución de llamada activada cuando el estado de la casilla de verificación cambia |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Navegar
+
+Un elemento de menú que presenta un icono opcional a la izquierda, contenido textual y un icono de chevron a la derecha.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+ const manejarNavegación = () => {
+ console.log("Navegar a otra página");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | ------------- | ------------- | ---------------------------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | enClic | función | Función de devolución de llamada para ser activada cuando se haga clic en el elemento del menú |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Seleccionar
+
+Un elemento de menú seleccionable, que presenta contenido opcional a la izquierda (icono y texto) y un indicador (icono de verificación) para el estado seleccionado.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MiComponente = () => {
+ const manejarSelección = () => {
+ console.log("Elemento del menú seleccionado");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | ------------- | ------------- | ---------------------------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Un icono opcional a la izquierda mostrado antes del texto en el elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | selected | booleano | Indica si el elemento del menú está seleccionado (marcado) |
+ | disabled | booleano | Indica si el elemento del menú está desactivado |
+ | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado |
+ | enClic | función | Función de devolución de llamada para ser activada cuando se haga clic en el elemento del menú |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Select Avatar
+
+Un elemento de menú seleccionable con un avatar, que presenta contenido opcional a la izquierda (avatar y texto) y un indicador (icono de verificación) para el estado seleccionado.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Elemento de menú seleccionado");
+ };
+
+ return (
+ }
+ text="Primera Opción"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | ------------- | ----------- | ------------------------------------------------------------------------------ |
+ | avatar | `ReactNode` | El avatar o icono que se mostrará en el lado izquierdo del elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | seleccionado | booleano | Indica si el elemento del menú está seleccionado (marcado) |
+ | deshabilitado | booleano | Indica si el elemento del menú está deshabilitado |
+ | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado |
+ | idPrueba | cadena | El atributo data-testid para propósitos de prueba |
+ | enClic | función | Función de retorno que se activará cuando se haga clic en el elemento del menú |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Seleccionar Color
+
+Un elemento de menú seleccionable con una muestra de color para situaciones donde se desea que los usuarios elijan un color del menú.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } desde "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Elemento de menú seleccionado");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | color | cadena | The theme color to be displayed as a sample in the menu item. Las opciones incluyen: `verde`, `turquesa`, `cielo`, `azul`, `púrpura`, `rosa`, `rojo`, `naranja`, `amarillo`, `gris` |
+ | seleccionado | booleano | Indica si el elemento del menú está seleccionado (marcado) |
+ | deshabilitado | booleano | Indica si el elemento del menú está deshabilitado |
+ | hovered | booleano | Indica si el elemento del menú está actualmente siendo sobrevolado |
+ | variante | cadena | La variante de la muestra de color. Puede ser `default` o `pipeline` |
+ | enClic | función | Función de retorno que se activará cuando se haga clic en el elemento del menú |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
+
+### Conmutar
+
+Un elemento de menú con un interruptor de palanca asociado para permitir a los usuarios habilitar o deshabilitar una característica específica
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Propiedades | Tipo | Descripción |
+ | --------------- | --------------- | ----------------------------------------------------------------------------------- |
+ | IconoIzquierdo | ComponenteIcono | Un icono izquierdo opcional que se muestra antes del texto en el elemento del menú |
+ | texto | cadena | El contenido de texto del elemento del menú |
+ | conmutado | booleano | Indica si el interruptor de palanca está en el estado "encendido" o "apagado" |
+ | cambioConmutado | función | Función de retorno que se activa cuando el estado del interruptor de palanca cambia |
+ | tamañoConmutado | cadena | El tamaño del interruptor de palanca. It can be either \ |
+ | nombreDeClase | cadena | Nombre opcional para estilo adicional |
+
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx
index 17a29ee848..191b6504f7 100644
--- a/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx
+++ b/packages/twenty-docs/l/es/twenty-ui/navigation/navigation-bar.mdx
@@ -4,49 +4,46 @@ image: /images/user-guide/table-views/table.png
---
-
+
Renderiza una barra de navegación que contiene varios componentes `NavigationBarItem`.
-
+
+ ```jsx
+ import { IconHome, IconUser, IconSettings } from '@tabler/icons-react';
+ import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar";
-```jsx
-import { IconHome, IconUser, IconSettings } from '@tabler/icons-react';
-import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar";
+ export const MyComponent = () => {
-export const MyComponent = () => {
+ const navigationItems = [
+ {
+ name: "Home",
+ Icon: IconHome,
+ onClick: () => console.log("Home clicked"),
+ },
+ {
+ name: "Profile",
+ Icon: IconUser,
+ onClick: () => console.log("Profile clicked"),
+ },
+ {
+ name: "Settings",
+ Icon: IconSettings,
+ onClick: () => console.log("Settings clicked"),
+ },
+ ];
- const navigationItems = [
- {
- name: "Home",
- Icon: IconHome,
- onClick: () => console.log("Home clicked"),
- },
- {
- name: "Profile",
- Icon: IconUser,
- onClick: () => console.log("Profile clicked"),
- },
- {
- name: "Settings",
- Icon: IconSettings,
- onClick: () => console.log("Settings clicked"),
- },
- ];
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| "Props" | Tipo | Descripción |
-| ----------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| nombreDelElementoActivo | "cadena" | El nombre del elemento de navegación actualmente activo |
-| elementos | array | Una matriz de objetos que representan cada elemento de navegación. Cada objeto contiene el `nombre` del elemento, el componente `Icono` a mostrar y una función `cuandoHagaClick` que se llamará al hacer clic en el elemento |
-
-
+
+ | Props | Tipo | Descripción |
+ | ----------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nombreDelElementoActivo | cadena | El nombre del elemento de navegación actualmente activo |
+ | elementos | matriz | Una matriz de objetos que representan cada elemento de navegación. Cada objeto contiene el `nombre` del elemento, el componente `Icono` a mostrar y una función `cuandoHagaClick` que se llamará al hacer clic en el elemento |
+
diff --git a/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx
new file mode 100644
index 0000000000..80fc8c89e4
--- /dev/null
+++ b/packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx
@@ -0,0 +1,34 @@
+---
+title: Barra de Paso
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Muestra el progreso a través de una secuencia de pasos numerados resaltando el paso activo. Renderiza un contenedor con pasos, cada uno representado por el componente `Step`.
+
+
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+
+ export const MyComponent = () => {
+ return (
+
+ Paso 1
+ Paso 2
+ Paso 3
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descripción |
+ | ---------- | ------ | ------------------------------------------------------------------------------------------ |
+ | activeStep | número | El índice del paso actualmente activo. Esto determina qué paso debe resaltarse visualmente |
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..f624db4b90
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Resumen
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Descripción |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/es/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/es/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..5bac35365f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Resumen
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Descripción |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..d007828250
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: Permisos y control de acceso
+description: Controla a qué pueden acceder y qué pueden modificar los agentes de IA en tu espacio de trabajo.
+---
+
+## Resumen
+
+Los agentes de IA respetan tu estructura de permisos existente. Esto es especialmente importante para los equipos que desean controlar exactamente a qué pueden acceder o qué pueden modificar los procesos de IA automatizados en su espacio de trabajo.
+
+## Asignar un rol a un agente de IA
+
+1. Ir a **Ajustes → Roles**
+2. Haz clic en el rol que deseas asignar
+3. Abre la pestaña **Asignación**
+4. En **Agentes de IA**, haz clic en **+ Asignar a agente de IA**
+5. Selecciona el agente de IA de la lista
+6. Confirma la asignación
+
+## ¿Por qué asignar roles a los agentes de IA?
+
+| Beneficio | Descripción |
+| ----------------- | --------------------------------------------------------------- |
+| **Seguridad** | Limita a qué datos pueden acceder o modificar los agentes de IA |
+| **Cumplimiento** | Garantiza que la IA solo procese los datos que necesita |
+| **Control** | Evita acciones no deseadas de las automatizaciones de IA |
+| **Auditabilidad** | Haz un seguimiento de qué acciones realizó cada agente |
+
+
+ Para los agentes de IA que se ejecutan dentro de flujos de trabajo, la asignación de roles garantiza que el agente no pueda acceder ni modificar datos fuera de su ámbito previsto—incluso si el flujo de trabajo tiene permisos más amplios.
+
+
+## Relacionado
+
+* [Permisos](/l/es/user-guide/permissions-access/capabilities/permissions) — información detallada sobre la creación y gestión de roles
+* [Agentes de IA](/l/es/user-guide/ai/capabilities/ai-agents) — capacidades de IA en flujos de trabajo
diff --git a/packages/twenty-docs/l/es/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/es/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/ai/overview.mdx b/packages/twenty-docs/l/es/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..c1c467099e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: IA
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## Lo que Viene
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Casos de uso:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Go to **Settings → Roles**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Manténgase Actualizado
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..f4691c1ab1
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Créditos de Workflow
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Resumen
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Mensual | 5 million/month |
+| Anual | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Uso de Crédito |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI prompts** (coming soon) | Variable based on usage |
+
+Los créditos se deducen en tiempo real cuando se ejecutan los flujos de trabajo.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Ir a **Ajustes → Facturación**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Adquirir Créditos Adicionales
+
+Need more credits?
+
+1. Ir a **Ajustes → Facturación**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..6024a3db08
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Precios
+
+
+
+ Sí, puedes usar Twenty gratis mientras lo alojas por tu cuenta. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. El soporte está disponible a través de nuestra comunidad en Discord.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ No ofrecemos asientos gratuitos. El precio es por usuario y cada usuario necesita una licencia para acceder a Twenty.
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Cambiar a Organización`.
+
+
+
+ Por favor, comunícate directamente con nuestro equipo a través del Soporte, no hay una forma sencilla de hacer esto utilizando la IU en este momento.
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Cambiar a Anual`.
+
+
+
+ Por favor, comunícate directamente con nuestro equipo a través del Soporte, no hay una forma sencilla de hacer esto utilizando la IU en este momento.
+
+
+
+ Lo encontrarás en `Configuración → Facturación`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Cada acción de flujo de trabajo consume créditos según su complejidad:
+
+ * Las **operaciones internas básicas** (como búsqueda, actualización, creación de registros) consumen muy pocos créditos.
+ * Las **operaciones más complejas** como nodos de código y solicitudes a servicios externos consumen más créditos.
+ * **Consultas de IA** (próximamente) también consumirán más créditos según el uso.
+
+ Los créditos se deducen en tiempo real cuando se ejecutan los flujos de trabajo. Puedes monitorear tu uso en **Configuración → Facturación** para seguir el consumo y los créditos restantes.
+
+
+
+ Puedes comprar créditos adicionales en `Configuración → Facturación`.
+
+
+
+## Facturación
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`.
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Allí podrás agregar un nuevo método de pago.
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Allí podrás editar la información de facturación.
+
+
+
+ Puedes hacerlo en `Configuración → Facturación`. Luego haz clic en `Ver detalles de facturación`. Verás todas tus facturas al final de la pantalla.
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/billing/overview.mdx b/packages/twenty-docs/l/es/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..062d2b3289
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Facturación
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Plan | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/es/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..1176e261ec
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Calendario
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/es/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Pestaña de Calendario
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Personas**: Vea todas las reuniones programadas con un contacto específico
+* **Empresas**: Vea todas las reuniones relacionadas con una empresa y sus empleados
+* **Oportunidades**: Acceda al historial de reuniones relacionadas con la empresa conectada a esta oportunidad
+
+### Visualización del Historial de Reuniones
+
+1. **Navegue hacia un Registro**: Vaya a cualquier registro de Persona, Empresa u Oportunidad
+2. **Seleccione la Pestaña de Calendario**: Haga clic en la pestaña `Calendario` junto a la pestaña de Correos Electrónicos
+3. **Explore el Historial de Reuniones**: Vea todas las reuniones programadas y sus detalles
+4. **Acceda al Contexto de la Reunión**: Vea los participantes, horarios e información relacionada
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Qué Se Sincroniza
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Qué No Se Sincroniza
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..7730c39072
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Nota**: Para conectar sus cuentas de correo electrónico y configurar los ajustes de sincronización, visite [Configuración de Correo Electrónico y Calendario](/l/es/user-guide/calendar-emails/overview).
+
+## Cómo Funciona la Integración del Correo Electrónico
+
+Twenty vincula automáticamente los correos electrónicos de sus buzones conectados a los registros CRM relevantes, manteniendo todo el historial de comunicación en un solo lugar.
+
+### Objects Where Emails Can Be Found
+
+Las conversaciones de correo electrónico aparecen en tres objetos principales:
+
+* **Personas**: Vea todos los correos electrónicos intercambiados con un contacto específico
+* **Empresas**: Vea todos los correos electrónicos relacionados con una empresa y sus empleados
+* **Oportunidades**: Acceda a hilos de correo electrónico relacionados con la empresa vinculada a esta oportunidad. Aún no se muestran los hilos de correo electrónico de personas individuales en la oportunidad.
+
+### Visualización de Conversaciones de Correo Electrónico
+
+1. **Navegue hacia un Registro**: Vaya a cualquier registro de Persona, Empresa u Oportunidad
+2. **Seleccione la Pestaña de Correos Electrónicos**: Haga clic en la pestaña `Correos Electrónicos` para ver los correos sincronizados
+3. **Abra un Hilo de Correo Electrónico**: Haga clic en cualquier correo electrónico para abrir y leer la conversación completa
+4. **Explorar el Historial**: Desplácese por el historial completo de correos electrónicos con ese contacto
+
+
+
+## Lo Que Verás
+
+### Vista de Hilo de Correo Electrónico
+
+Cuando abres un hilo de correo electrónico, puedes:
+
+* **Leer Conversaciones Completas**: Vea el intercambio completo de correos electrónicos
+* **Ver Participantes**: Vea a todas las personas involucradas en el hilo de correo electrónico
+* **Verificar Tiempos**: Sepa exactamente cuándo se envió cada correo electrónico
+* **Acceder al Contexto**: Comprenda todo el historial de comunicación
+
+### Visibilidad del Correo Electrónico
+
+Dependiendo de las configuraciones de su buzón, puede ver:
+
+* **Contenido Completo**: Texto completo del correo electrónico y detalles
+* **Asunto + Metadata**: Línea de asunto, remitente, destinatario y hora
+* **Solo Metadata**: Información básica sin contenido de correo electrónico
+
+## Comportamiento de Sincronización de Correos Electrónicos
+
+### Qué Se Sincroniza
+
+* **Correos Externos**: Todos los correos con contactos fuera de su organización
+* **Vinculación Automática**: Los correos se conectan a los registros de Personas y Empresas existentes
+* **Direcciones Múltiples**: Los correos de cualquier dirección se vinculan al mismo registro de contacto
+* **Actualizaciones**: Los nuevos correos aparecen en 5 minutos
+
+### Qué No Se Sincroniza
+
+* **Correos Internos**: Los correos entre colegas (mismo dominio) permanecen privados
+* **Correos Grupales**: No se incluyen las listas de distribución y correos grupales
+* **Carpetas Excluidas**: Carpetas que ha elegido no sincronizar (configuradas en Configuración → Cuentas → Correo Electrónico)
+
+### Sincronización Selectiva de Carpetas (Función de Laboratorio)
+
+Controle qué carpetas de correo electrónico se sincronizan con Twenty:
+
+1. Habilitar `Carpeta de Mensajes` en Configuración → Lanzamientos → Laboratorio
+2. Configure las carpetas en Configuración → Cuentas → Correo Electrónico
+3. Elija carpetas específicas para incluir o excluir (Bandeja de entrada, Enviados, Archivo, carpetas personalizadas)
+
+## Resolución de Problemas de Sincronización de Correos Electrónicos
+
+### Problemas Comunes de Sincronización
+
+* **Retrasos en la Sincronización**: Los correos aparecen en 5 minutos, pero las importaciones iniciales tardan más
+* **Correos Faltantes**: Compruebe si:
+ * Las carpetas están excluidas en la configuración del Carpeta de Mensajes
+ * La creación automática de contactos está desactivada (los correos necesitan registros existentes de Twenty)
+ * El correo es de colegas (mismo dominio) o listas grupales
+ * El buzón aún está completando la sincronización inicial
+
+### Limitaciones del Correo Electrónico
+
+* **Carpetas del Sistema**: Algunas carpetas de correo no están disponibles para sincronización
+* **Alias**: Solo se pueden conectar buzones verdaderos (no alias de correo electrónico)
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..df35361c2f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/es/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/es/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..bf2da6e184
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Objeto | What You See |
+| ----------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Companies** | All emails with anyone from that company (based on email domain) |
+| **Oportunidades** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Objetos personalizados
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..ed2000c365
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Resumen
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Go to **Settings → Accounts**
+2. Click **Add account**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..46fb847661
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: Limitar los correos electrónicos importados},{
+description: Controla qué correos electrónicos se importan en Twenty.
+---
+
+## Resumen
+
+De forma predeterminada, Twenty sincroniza todos los correos electrónicos externos de tu buzón conectado. Puedes limitar lo que se importa usando la **selección de carpetas** y los **ajustes de visibilidad**.
+
+## Método 1: Selección de carpetas (Recomendado)
+
+Controle qué carpetas de correo electrónico se sincronizan con Twenty:
+
+1. Ir a **Ajustes → Releases → Lab**
+2. Activa **Carpeta de mensajes**
+3. Volver a **Ajustes → Cuentas**
+4. Selecciona tu cuenta de correo conectada
+5. Elige qué carpetas sincronizar:
+
+| Carpeta | Descripción |
+| --------------------------- | ---------------------------------------- |
+| **Bandeja de entrada** | Correos entrantes principales |
+| **Enviados** | Correos salientes que has enviado |
+| **Archivo** | Mensajes archivados |
+| **Carpetas personalizadas** | Cualquier carpeta específica que quieras |
+
+6. Excluye las carpetas que no quieras sincronizar (Spam, Papelera, carpetas personales)
+
+Esto te da un control preciso sobre qué correos aparecen en tu CRM sin sincronizar todo.
+
+## Método 2: Ajustes de creación automática de contactos
+
+Controla cuándo se crean contactos a partir de correos:
+
+1. Ir a **Ajustes → Cuentas**
+2. Selecciona tu buzón conectado
+3. Elige una opción:
+ * **Desactivado**: No se crean contactos, pero los correos siguen sincronizándose con los contactos existentes
+ * **Enviados y recibidos**: Crea contactos a partir de todos los correos externos
+ * **Solo enviados**: Crea contactos únicamente a partir de los correos que envías
+
+## Qué se excluye siempre
+
+Estos correos nunca se sincronizan, independientemente de los ajustes:
+
+* **Correos internos**: Mensajes entre colegas (mismo dominio)
+* **Correos grupales**: Listas de distribución y mensajes de grupo
+* **Spam/Papelera**: Las carpetas del sistema generalmente se excluyen
+
+## Nota importante
+
+No proporcionamos una dirección de correo electrónico en CC para la sincronización selectiva. Usa la función de selección de carpetas anterior para lograr el mismo nivel de control.
diff --git a/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..d0ded1b874
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Opciones de conexión
+
+### Cuenta de Google (Gmail y Calendario de Google)
+
+1. Go to **Settings → Accounts**
+2. Click **Add account**
+3. Seleccionar **Continuar con Google**
+4. Autorizar a Twenty para acceder a tu Gmail y Calendario de Google
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Tus correos y eventos del calendario comenzarán a sincronizarse automáticamente
+
+### Cuenta de Microsoft (Outlook y Calendario de Microsoft)
+
+1. Go to **Settings → Accounts**
+2. Click **Add account**
+3. Seleccionar **Continuar con Microsoft**
+4. Autorizar a Twenty para acceder a tu Outlook y Calendario de Microsoft
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Tus correos y eventos del calendario comenzarán a sincronizarse automáticamente
+
+### Configuración SMTP/CalDAV (Otros Proveedores)
+
+Para otros proveedores de correo y calendario:
+
+1. Ir a **Ajustes → Lanzamientos → Lab** para habilitar la función
+2. Volver a **Ajustes → Cuentas**
+3. Configurar los ajustes SMTP para el correo
+4. Configurar los ajustes CalDAV para el calendario
+5. Probar la conexión
+
+### Múltiples Buzones
+
+* **Cuentas Ilimitadas**: Conecta múltiples cuentas de correo por usuario
+* **Gestión de Cuentas**: Cambiar entre diferentes buzones
+* **Ajustes de Sincronización**: Configura diferentes ajustes por buzón
+
+
+ Solo se pueden conectar verdaderos buzones (por ejemplo, soporte@dominio.com con su propia bandeja de entrada). Email aliases that forward to another mailbox cannot be connected to Twenty.
+
+
+## Configuración de Correo
+
+### Visibilidad del Mensaje
+
+Elige diferentes niveles de visibilidad para tus correos:
+
+* **Solo Metadatos**: Comparte solo información básica (remitente, destinatario, fecha, hora)
+* **Asunto y Metadatos**: Comparte la línea de asunto junto con los metadatos
+* **Todo el Contenido del Correo**: Comparte todo el contenido del correo incluyendo adjuntos
+
+### Creación Automática de Contactos
+
+* **Desactivado**: No se crean contactos automáticamente
+* **Para mensajes enviados y recibidos**: Crea contactos para todas las interacciones externas por correo electrónico
+* **Solo para mensajes enviados**: Crea contactos solo para los correos que envías
+* **Nota**: Los correos internos (mismo dominio) nunca se sincronizan para mantener la privacidad
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controla qué correos se sincronizan con la selección de carpetas de mensajes (Función Lab)
+
+Controle qué carpetas de correo electrónico se sincronizan con Twenty:
+
+1. Ir a **Ajustes → Lanzamientos → Lab** y habilitar la **Carpeta de Mensajes**
+2. Volver a **Ajustes → Cuentas** y seleccionar la cuenta de correo conectada
+3. Elige qué carpetas sincronizar:
+ * **Bandeja de Entrada**: Correos entrantes principales
+ * **Enviados**: Correos salientes que has enviado
+ * **Carpetas Personalizadas**: Cualquier carpeta específica que desees incluir
+ * **Excluir Carpetas**: Omitir carpetas como Spam, Papelera o carpetas personales
+
+Esto te da un control preciso sobre qué correos aparecen en tu CRM sin sincronizar todo.
+
+**Qué se Sincroniza:**
+
+* **Correos Externos**: Todos los correos con contactos externos de carpetas seleccionadas
+* **Correos Internos**: No se sincronizan (los correos del mismo dominio permanecen privados)
+* **Adjuntos**: Se incluyen en la actualización del H1 2026
+
+**Nota**: No proporcionamos una dirección de correo CC para la sincronización selectiva. En su lugar, usa la función de carpeta de mensajes para lograr el mismo nivel de control sobre qué correos sincronizar con Twenty.
+
+## Configuración del Calendario
+
+### Visibilidad del Evento
+
+Elige qué será visible para otros usuarios en tu espacio de trabajo:
+
+* **Todo**: Los detalles completos del evento se compartirán con tu equipo
+* **Metadatos**: Solo se compartirán con tu equipo la fecha y los participantes
+
+### Creación Automática de Contactos para Reuniones
+
+* **Sí**: Crea automáticamente contactos para participantes de reuniones que no están en tu CRM
+* **No**: Solo vincule reuniones a contactos existentes
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controla qué eventos se sincronizan
+
+* **Importación de Reuniones**: Importa automáticamente los eventos del calendario
+* **Enlace de Contactos**: Vincula las reuniones a los registros de Personas y Empresas
+
+**Qué se Sincroniza:**
+
+* **Reuniones**: Eventos de calendario con participantes externos
+* **Enlace de Contactos**: Eventos vinculados automáticamente a los registros del CRM
+* **Eventos de Equipos**: Visibilidad compartida del calendario
+
+## Frecuencia de Sincronización
+
+**Actualizaciones cada 5 minutos**: Tanto el correo como el calendario se sincronizan automáticamente cada 5 minutos después de la importación inicial.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Próximos Pasos
+
+* [Mailbox capabilities](/l/es/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..58fe0e83a5
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Tableros
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Resumen
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Mejores prácticas
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Favoritos
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..5826d77a5a
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widgets
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Estilo
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..2067d298d0
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Aún no. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..1dfc31ae6f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Tableros
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Tableros
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Pestañas
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widgets
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Guardar
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Mejores prácticas
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Próximos Pasos
+
+* [Widgets and visualizations](/l/es/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/es/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..86e2ed15e2
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Cómo Funciona
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/es/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/es/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..edae49b93e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Campos de Relación
+
+Please see our dedicated article: [Import Relations Between Objects](/l/es/user-guide/data-migration/capabilities/import-relations)
+
+### Campos de Selección
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..ad37266af9
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Formatos de archivo compatibles
+description: Formatos de archivo compatibles para la importación de datos en Twenty.
+---
+
+## Formatos compatibles
+
+Twenty admite tres formatos de archivo para la importación:
+
+| Formato | Extensión | Notas |
+| -------------------- | --------- | ------------------------------ |
+| **CSV** | .csv | Recomendado, el más compatible |
+| **Excel** | .xlsx | Formato de Excel moderno |
+| **Excel (heredado)** | .xls | Formato de Excel antiguo |
+
+## Requisitos del archivo
+
+| Requisito | Valor |
+| ----------------------- | -------------------------------------------------------- |
+| **Codificación** | Se recomienda UTF-8 |
+| **Límite de registros** | 10.000 registros por archivo |
+| **Estructura** | La primera fila debe contener los encabezados de columna |
+| **Contenido** | Un tipo de objeto por archivo |
+
+## Mejores prácticas para CSV
+
+* **Delimitador**: Use coma (`,`) o punto y coma (`;`)
+* **Calificador de texto**: Use comillas dobles (`"`) para texto que contenga comas
+* **Finales de línea**: Windows (CRLF) o Unix (LF), ambos compatibles
+* **Valores vacíos**: Deje las celdas vacías; no use "NULL" ni "N/A"
+
+## Mejores prácticas para Excel
+
+Al exportar desde Excel:
+
+* Elimine las fórmulas (exporte solo valores)
+* Elimine las filas vacías al final
+* Asegúrese de que no haya celdas combinadas
+* Use solo la primera hoja
+
+## Conjuntos de datos grandes
+
+Para conjuntos de datos de más de 10.000 registros:
+
+* Divídalos en varios archivos
+* O use la [importación mediante API](/l/es/user-guide/data-migration/how-tos/import-data-via-api) para registros ilimitados
+
+Para migraciones muy grandes (100.000+ registros), la API es significativamente más rápida y más fiable que las importaciones CSV.
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..148b2d2ce1
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Resumen
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Objeto | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Companies** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Miembros del espacio de trabajo** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..b10945dce0
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Resumen
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Objeto | Unique Fields |
+| -------------------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Companies** | `id`, `domain` |
+| **Objetos personalizados** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Mejores prácticas
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..6c2f3dde84
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Resumen
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Casos de uso:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/es/developers/extend/capabilities/apis).
+
+### Permisos
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Campos de Relación
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/es/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Próximos Pasos
+
+* [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/es/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/es/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..a1accce61a
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Resumen
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Mensaje de error | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Lo Que Verás
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Lo Que Verás
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### Correo electrónico
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Dominio
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Fecha
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Teléfono
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Ejemplo |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Booleano
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Moneda
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Ejemplo |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Número
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/es/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Lo Que Verás
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Lo Que Verás
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/es/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Lo Que Verás
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/es/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Relaciones
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Modelo de datos
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/es/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/es/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/es/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..a67c126503
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Resumen
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Antes de empezar
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/es/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Campo | Required? | Formato | Notas |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Texto | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Número | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Error | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ ¡Sí! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Solución de Problemas
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/es/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..7432ddd138
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Resumen
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Antes de empezar
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Campo | Required? | Formato | Notas |
+| ---------------------- | ----------- | ----------------- | ------------------------- |
+| **Correo Electrónico** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Texto | |
+| **Last Name** | Recommended | Texto | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Texto | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Ejemplo |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Formato | Ejemplo |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Notas |
+| ------------------ | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| Correo electrónico | **Correo Electrónico** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Teléfono | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Error | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ ¡Sí! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Solución de Problemas
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/es/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..426081f264
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Resumen
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Límite | Valor |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Documentación |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/es/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/es/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Mejores prácticas
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/es/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Professional Services
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ ¡Sí! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/es/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..e05d11e73e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Resumen
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Relación | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Empresa | Personas |
+| Companies → Opportunities | Empresa | Oportunidades |
+| People → Tasks | Persona | Tareas |
+| People → Notes | Persona | Notas |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| ----------------------------------- | --------------------------------------------------------------- |
+| **Companies** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Miembros del espacio de trabajo** | `id` (UUID), `email` (not name) |
+| **Objetos personalizados** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Identificador | Formato | Ejemplo |
+| ------------------ | -------------- | -------------------------------------- |
+| Dominio | URL format | `https://acme.com` |
+| Correo electrónico | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ ¡Sí! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Puedes hacerlo de las siguientes maneras:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Solución de Problemas
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/es/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..667ce1a133
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Migración desde otros CRM
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Resumen
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Ir a **Ajustes → Miembros**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Objetos personalizados
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ---------------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **Correo Electrónico** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/es/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/es/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Recrear flujos de trabajo
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/es/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Problemas Comunes y Soluciones
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Lista de verificación post-migración
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Configuración
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## ¿Necesitas Ayuda?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..57584facbe
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Migración de autogestionado a la nube
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Resumen
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Empresas
+2. Personas
+3. Oportunidades
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+Antes:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+Después:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Vistas
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Flujos de trabajo
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Integraciones
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Lista de verificación post-migración
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## ¿Necesitas Ayuda?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..a2d96203ce
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: Prepara tus archivos CSV},{
+description: Guía completa paso a paso para dar formato a tus datos para importarlos en Twenty.
+---
+
+## Resumen
+
+Esta guía te explica cómo preparar tu archivo CSV para una importación exitosa. Sigue estos pasos para evitar errores.
+
+## Paso 1: Comprueba los requisitos del archivo
+
+Antes de empezar, asegúrate de que tu archivo cumpla estos requisitos:
+
+| Requisito | Detalles |
+| -------------------- | ----------------------------- |
+| **Formato** | CSV, XLSX o XLS |
+| **Límite de tamaño** | 10.000 registros por archivo |
+| **Codificación** | Se recomienda UTF-8 |
+| **Estructura** | Un tipo de objeto por archivo |
+
+Para conjuntos de datos de más de 10.000 registros, divídelos en varios archivos o usa la [importación por API](/l/es/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Paso 2: Descarga el archivo de ejemplo
+
+**Este es el paso más importante.** El archivo de ejemplo te muestra los nombres de columna y el formato exactos que Twenty espera.
+
+1. Ve a la vista del objeto (Personas, Empresas, etc.)
+2. Haz clic en **⋮** → **Importar registros**
+3. Haz clic en **Descargar archivo de ejemplo**
+4. Utiliza este archivo como plantilla
+
+**Consejo práctico:** En su lugar, exporta algunos registros existentes. Esto te proporciona ejemplos reales de cómo debe darse formato a los datos, y los nombres de las columnas se asignarán automáticamente durante la importación.
+
+## Paso 3: Eliminar valores duplicados
+
+Twenty exige unicidad en determinados campos. Los duplicados provocarán errores de importación.
+
+| Objeto | Campos únicos |
+| -------------------------- | ------------------------------------------------------------ |
+| **Personas** | `id`, `email` |
+| **Empresas** | `id`, `domain` |
+| **Objetos personalizados** | `id`, además de cualquier campo que hayas marcado como único |
+
+**Antes de importar:**
+
+1. Ordena tu hoja de cálculo por el campo único (correo electrónico o dominio)
+2. Elimina o fusiona las filas duplicadas
+3. Comprueba si hay duplicados que ya existan en Twenty
+
+**Los registros eliminados lógicamente cuentan para la unicidad.** Los registros en Menú de comandos → Ver registros eliminados provocarán errores de duplicados. Elimínalos de forma permanente o restáuralos y actualízalos.
+
+## Paso 4: Formatea correctamente cada tipo de campo
+
+Los distintos tipos de campos requieren formatos específicos. Aquí tienes la referencia completa:
+
+### Campos de texto
+
+* No se requiere un formato especial
+* Los espacios iniciales y finales se eliminan automáticamente
+
+### Campos de correo electrónico
+
+* Debe tener un formato de correo electrónico válido: `name@domain.com`
+* Debe ser único (sin duplicados en el archivo ni en Twenty)
+* Para correos electrónicos adicionales, utiliza este formato en la columna **Emails / Additional Emails**:
+
+```
+[\"jane@twenty.com\",\"jane.doe@twenty.com\"]
+```
+
+### Campos de dominio
+
+* **Formato recomendado**: `https://domain.com`
+* Esto coincide con el formato usado por la sincronización del buzón/calendario (evita duplicados)
+* Rellena ambas columnas:
+ * **Domain / Domain Label**: `domain.com`
+ * **Domain / Domain URL**: `https://domain.com`
+* Debe ser único dentro de tu archivo y en Twenty
+
+### Campos de teléfono
+
+El campo de teléfono es un **campo anidado** que requiere varias columnas:
+
+| Columna | Ejemplo |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Ejemplo |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Campos de Selección
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Próximos Pasos
+
+Your file is ready! Now:
+
+* [Import Companies](/l/es/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..3834b6fcf2
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Resumen
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Casos de uso:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Cómo Funciona
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Objeto | Recommended | Alternative | Notas |
+| -------------------------- | -------------------- | ----------- | ---------------------------- |
+| **People** | `correo Electrónico` | `id` | Email is human-readable |
+| **Companies** | `dominio` | `id` | Domain is human-readable |
+| **Objetos personalizados** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Resultado |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Resultado | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ ¡Sí! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Mejores prácticas
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Solución de Problemas
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/es/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/es/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/es/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..0166d8e489
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Campos
+description: Comprenda el papel de los campos y cómo gestionarlos.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Acerca de los Campos
+
+Los campos son como columnas en una hoja de cálculo. Almacenan diferentes tipos de datos como texto, números o fechas. Los campos pueden ser estándar (integrados) o personalizados (los que usted crea).
+
+### Campos Estándar
+
+Los campos estándar vienen integrados con Twenty para cubrir necesidades empresariales comunes.
+
+Por ejemplo, `Nombre` y `Apellido` son campos estándar en el objeto `Personas`. Almacenan datos de texto para nombres individuales.
+
+No puede eliminar campos estándar, pero puede desactivarlos si no los necesita.
+
+También puede personalizar las opciones de los campos estándar de tipo `SELECT`, por ejemplo, las opciones para la `Etapa` en Oportunidades.
+
+
+
+### Campos Personalizados
+
+Se pueden añadir campos personalizados a cualquier objeto. Puede almacenar texto, números, fechas, selecciones desplegables y más. Utilice campos personalizados para rastrear información específica de su negocio.
+
+Por ejemplo, un campo personalizado para SpaceX podría ser `Estado Activo del Cohete`, indicando si un cohete está operativo.
+
+
+
+## Tipos de campo
+
+Twenty admite varios tipos de campo:
+
+| Tipo | Descripción | Ejemplo |
+| ------------------ | --------------------------------------------------------------------- | ------------------------------- |
+| Dirección | Dirección estructurada con calle, ciudad, estado, país, código postal | Dirección de la oficina |
+| Array | Lista de valores de texto | Etiquetas |
+| Booleano | Casilla de verificación verdadero/falso | Activo |
+| Moneda | Valor monetario con código de moneda | Importe del acuerdo (USD) |
+| Fecha | Valores de fecha | Fecha de cierre |
+| Fecha y hora | Fecha con hora | Hora de la reunión |
+| Dominio | Dominio del sitio web (usado para Empresas) | acme.com |
+| Correo electrónico | Direcciones de correo electrónico (con principal + adicionales) | Correo electrónico del contacto |
+| JSON | Datos JSON estructurados | Metadatos personalizados |
+| Enlaces | URLs con etiquetas (principal + secundaria) | Sitio web, LinkedIn |
+| Texto largo | Texto multilínea | Descripción, notas |
+| Selección múltiple | Varias opciones de una lista predefinida | Etiquetas, categorías |
+| Número | Valores numéricos (enteros o decimales) | Cantidad, puntuación |
+| Teléfono | Números de teléfono con código de país | Teléfono del trabajo |
+| Valoración | Valoración por estrellas (1-5) | Prioridad, puntuación |
+| Relación | Enlaces a registros en otros objetos | Empresa → Personas |
+| Selección | Una sola opción de una lista predefinida | Etapa, estado |
+| Texto | Una sola línea de texto | Nombre, título |
+
+## Crear un Campo Personalizado
+
+Para agregar un campo personalizado a cualquier objeto, siga estos pasos:
+
+1. Vaya a `Configuración` en la barra lateral izquierda.
+2. Vaya a `Modelo de Datos`, luego seleccione el objeto que desea personalizar.
+3. Proceda haciendo clic en `Agregar Campo`.
+4. Elija un nombre de campo y tipo que se adapten a sus requisitos. Considere agregar una descripción de campo para una mejor comprensión.
+
+Su nuevo campo creado ahora está disponible dentro de los campos de la aplicación. Para mostrarlo en una vista específica, haga clic en el menú de opciones, luego seleccione `Campos`.
+
+
+
+**Forma rápida:** Haga clic en el botón **+** en la esquina superior derecha de cualquier tabla de objetos, luego seleccione `Personalizar campos`. Esto lo lleva directamente a la configuración del Modelo de Datos.
+
+
+
+## Desactivar un campo
+
+Puede desactivar un campo para ocultarlo de la aplicación sin perder sus datos. Piense en ello como ocultar el campo en lugar de eliminarlo.
+
+Así es como puede hacerlo:
+
+1. Encuentre el campo que desea desactivar en la configuración de su objeto.
+
+2. Haga clic en los tres puntos `⋮` junto al campo para abrir el menú.
+
+3. Seleccione `Desactivar` en el menú desplegable.
+
+
+
+¿Qué ocurre cuando desactiva un campo?
+
+1. **En la aplicación:** El campo desaparece y no puede añadir nuevos valores.
+
+2. **Relaciones existentes:** Si es un campo de relación, las conexiones existentes permanecen, pero no puede crear nuevas.
+
+3. **Acceso API:** Aún puede acceder al campo y sus datos a través de la API.
+
+Puede reactivar los Campos Estándar y Personalizados o tener la opción de eliminarlos permanentemente.
+
+## Hacer Campos Únicos
+
+Haga un campo único para asegurar que registros distintos no puedan tener el mismo valor. Por ejemplo, las direcciones de correo electrónico son únicas para cada persona.
+
+Si recibe un error al establecer la unicidad, verifique los valores duplicados en sus datos (incluso registros eliminados).
+
+## Mejores Prácticas de Configuración de Campos
+
+### Convenciones y Limitaciones de Nombres
+
+* **Los nombres singulares y plurales deben ser distintos**: Nuestra API GraphQL necesita nombres distintos para mutaciones
+* **Nombres de campos protegidos**: algunos nombres están reservados para uso del sistema (p. ej., `Type`, `Application`)
+
+### Campos de Moneda y Teléfono
+
+* **Moneda predeterminada:** se puede configurar a través del modelo de datos
+* **Códigos de país predeterminados:** se pueden configurar para campos de teléfono a través del modelo de datos
+
+### Campos de Selección
+
+* **Se puede seleccionar una opción predeterminada** para cada campo de Selección
+
+### Campos de Texto del Registro
+
+* **Cada objeto tiene un campo principal de visualización**: Este campo aparece en la columna más a la izquierda y representa el registro cuando se vincula a otros objetos. Debe ser un campo de texto. Por ejemplo, las Personas utilizan `Nombre` como el campo principal, por lo que cuando vincula una persona a una empresa, verá su nombre en la vista de la empresa.
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..7259a445ef
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Objetos
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standard Objects
+
+Objetos estándar son entidades predefinidas en tu espacio de trabajo para ayudarte a comenzar. Forman parte de un modelo de datos compartido accesible para todos los usuarios de Twenty. Puedes usarlos tal cual, personalizarlos o desactivarlos.
+
+
+
+### Personas
+
+El objeto `Personas` almacena tus contactos. Incluye detalles de contacto y el historial de interacciones, para que puedas ver todas tus interacciones con clientes en un solo lugar.
+
+### Empresa
+
+El objeto `Empresas` almacena las cuentas de tu negocio. Incluye detalles como industria, tamaño y ubicación. Las empresas se conectan tanto a los objetos `Personas` como `Oportunidades`.
+
+### Oportunidades
+
+El objeto `Oportunidades` almacena datos relacionados con acuerdos. It tracks the progression of potential sales, from prospecting to closure, recording stages, deal sizes, associated account, and expected close date. Puedes ver tu canal de ventas en un diseño kanban.
+
+### Notas
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Tareas
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Objetos personalizados
+
+Los objetos personalizados te permiten almacenar información que es única para tu organización y que los objetos estándar no pueden manejar. Por ejemplo, si eres SpaceX, puedes querer crear un objeto personalizado para Cohetes y Lanzamientos.
+
+
+
+### Creating a New Custom Object
+
+Para crear un nuevo objeto personalizado:
+
+1. Ve a Configuración en la barra lateral a la izquierda.
+2. Under Workspace, go to Data model. Aquí podrás ver una visión general de todos tus objetos Estándar y Personalizados (tanto activos como desactivados).
+
+
+
+3. Haz clic en `+ Nuevo objeto` en la parte superior. Ingresa el nombre (tanto singular como plural), elige un ícono y añade una descripción para tu objeto personalizado y presiona Guardar (en la parte superior derecha). Usando Listado como un ejemplo de objeto personalizado, el singular sería "listado" y el plural sería "listados" junto con una descripción como "Listados que los anfitriones crearon para mostrar sus propiedades."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Mejores prácticas
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..6d68918b34
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Campos de Relación
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Haga clic en **Guardar**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ------------- | --------- | ------------- |
+| Personas | Empresas | Many-to-One |
+| Oportunidades | Empresas | Many-to-One |
+| Oportunidades | Personas | Many-to-One |
+
+## Mejores prácticas
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..be0e5f9a40
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/es/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Haga clic en **Guardar**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/es/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/es/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/es/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..a7cde059e2
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/es/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Haga clic en **Guardar**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/es/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/es/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/es/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..553f883996
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Antes de empezar
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/es/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Haga clic en **Guardar**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/es/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..ef09faddb6
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: Personaliza tu modelo de datos
+description: Descripción general de las opciones de personalización del modelo de datos.
+---
+
+El modelo de datos de Twenty es totalmente personalizable. Crea objetos, campos y relaciones que se ajusten a tu empresa.
+
+## Enlaces rápidos
+
+| Quiero... | Guía |
+| -------------------------- | ----------------------------------------------------------------------------------------- |
+| Crear un nuevo objeto | [Cómo crear objetos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-objects) |
+| Agregar campos a un objeto | [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) |
+| Conectar objetos entre sí | [Cómo crear campos de relación](/l/es/user-guide/data-model/how-tos/create-relation-fields) |
+
+## Más información
+
+* [Comprender tu modelo de datos](/l/es/user-guide/data-model/overview) — conceptos clave y consejos de planificación
+* [Objetos](/l/es/user-guide/data-model/capabilities/objects) — objetos estándar vs personalizados
+* [Campos](/l/es/user-guide/data-model/capabilities/fields) — todos los tipos de campo
+* [Campos de relación](/l/es/user-guide/data-model/capabilities/relation-fields) — conectar objetos
+* [Preguntas frecuentes sobre el modelo de datos](/l/es/user-guide/data-model/how-tos/data-model-faq) — preguntas comunes
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..59b01a0e1f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Preguntas Frecuentes del Modelo de Datos
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Gestión de Objetos
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Aún no. La ordenación de objetos en la navegación está actualmente fijada, pero esta función está prevista para una futura versión.
+
+
+
+ Todos los objetos activos aparecen en la navegación. Puedes desactivar los objetos que no necesites en **Configuración → Modelo de Datos**.
+
+
+
+## Capacidades de Campos
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ Nuestra API de GraphQL usa ambas formas para diferentes operaciones:
+
+ * `createPerson` (singular) para acciones de registro único
+ * `createPeople` (plural) para operaciones en masa
+
+ Esto crea limitaciones cuando las formas singulares y plurales son iguales, pero mejora la experiencia del desarrollador.
+
+
+
+ Ciertos nombres de campo como `Tipo` o `Aplicación` están reservados para uso del sistema. Elige nombres alternativos como `Categoría` o `Clasificación`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Los campos de fórmula llegarán en **Q1 2026**. Mientras tanto, puedes usar flujos de trabajo para calcular y actualizar automáticamente los valores de los campos.
+
+
+
+ Los campos anidados llegarán en **Q1 2026**. Actualmente, puedes usar flujos de trabajo para traer valores de campo de objetos relacionados. Por ejemplo, para mostrar la industria de una empresa en un registro de Persona, crea un campo personalizado en Personas y usa un flujo de trabajo para sincronizar el valor.
+
+
+
+ El reordenamiento de campos estará disponible con diseños personalizados en **Q4 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## Relaciones
+
+
+
+ ¡Sí! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/es/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Acceso y Permisos
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Comunícate con tu administrador de espacio de trabajo. El acceso al modelo de datos suele estar restringido solo a administradores.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## ¿Necesitas más ayuda?
+
+Check our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..7aae118500
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Modelo de datos
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Un modelo de datos es la estructura que define cómo se organiza la información en tu CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Objetos
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Campos
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Nombre
+* Correo electrónico
+* Teléfono
+* Título del puesto
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Registros
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Por ejemplo:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Campos** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Cada empresa funciona de manera diferente. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Estos van más allá de un solo campo porque tienen su propio conjunto de datos y relaciones.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Pregúntate:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Próximos Pasos
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/es/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/es/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/es/user-guide/data-model/how-tos/create-relation-fields)
+
+## ¿Necesitas Ayuda?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/es/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..cab9b4c39f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glosario
+description: Familiarízate con la terminología esencial utilizada en Twenty.
+---
+
+## API
+
+La API (Interfaz de Programación de Aplicaciones) permite conectar Twenty con otros sistemas de software y construir integraciones personalizadas.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Menú de Comandos
+
+El Menú de Comandos es una interfaz de acceso rápido (se abre con `Cmd + K` en Mac y `Ctrl + K` en Windows) que te permite realizar acciones, crear registros y navegar por tu espacio de trabajo de manera eficiente.
+
+## Empresa y Personas
+
+El CRM tiene dos tipos fundamentales de registros:
+
+* Una `Empresa` representa un negocio u organización.
+* `Personas` representan los clientes o prospectos actuales de tu empresa.
+
+## Campos Personalizados
+
+Los Campos Personalizados son campos de datos que creas para capturar información específica según las necesidades y procesos de tu negocio.
+
+## Modelo de datos
+
+Un Modelo de Datos es la estructura que define cómo se organiza la información en tu CRM, incluyendo qué objetos existen, sus propiedades (campos) y cómo se relacionan entre ellos.
+
+## Favoritos
+
+Los Favoritos son registros que has marcado para acceso rápido, apareciendo en tu barra lateral para una navegación instantánea a datos importantes.
+
+## Campo
+
+Un campo se refiere a un área específica donde se almacenan datos particulares de una entidad.
+
+## Integration
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Iterador
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+Un `Kanban` es una manera visual de rastrear los procesos de tu negocio utilizando tarjetas y columnas. Cada columna representa una etapa en tu proceso (por ejemplo: nuevo, en curso, ganado, perdido), y se mueven los registros a través de estas etapas a medida que progresan.
+
+## Objeto
+
+Un Objeto es una estructura de datos que representa un tipo específico de entidad en tu CRM (como Personas, Empresas u Oportunidades). Los Objetos pueden ser estándar (integrados) o personalizados (creados por ti).
+
+## Oportunidades
+
+Las Oportunidades en el CRM de Twenty son posibles tratos o ventas con cuentas o contactos.
+
+## Registro
+
+Un Registro indica una instancia de un objeto, como una cuenta o contacto específico.
+
+## Campos de Relación
+
+Los Campos de Relación crean conexiones entre diferentes objetos, permitiendo vincular registros (como conectar una Persona a una Empresa).
+
+## Campos Estándar
+
+Los Campos Estándar son campos de datos preconstruidos que vienen con los objetos por defecto y proporcionan funcionalidad común en todos los espacios de trabajo.
+
+## Tareas
+
+Las Tareas en el CRM de Twenty son actividades asignadas relacionadas con contactos, cuentas u oportunidades.
+
+## Disparadores
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Vistas
+
+Puedes personalizar la visualización de tus registros usando vistas, configurando diferentes filtros, diseños y opciones de clasificación para cada vista.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhooks
+
+Los Webhooks son mensajes automatizados que se envían desde Twenty a otras aplicaciones cuando ocurren eventos específicos, habilitando la sincronización de datos en tiempo real.
+
+## Flujos de trabajo
+
+Los Flujos de Trabajo son procesos automatizados que desencadenan acciones basadas en condiciones específicas, ayudándote a automatizar tareas repetitivas y procesos empresariales.
+
+## Espacio de trabajo
+
+Un `Espacio de Trabajo` típicamente representa una empresa que usa Twenty. Contiene todos los registros y datos que tú y los miembros de tu equipo añaden a Twenty.
+Tiene un único nombre de dominio, que generalmente es el nombre de dominio que tu empresa utiliza para las direcciones de correo electrónico de los empleados.
+
+## Miembros del espacio de trabajo
+
+Los Miembros del Espacio de Trabajo son los usuarios de Twenty de tu equipo que tienen acceso a tu espacio de trabajo. Pueden asignarse como propietarios o responsables de registros.
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..c466d96332
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Servicios de Implementación
+description: Ya sea que necesites ayuda para comenzar o crear personalizaciones avanzadas, tenemos una solución.
+---
+
+## Paquetes de Incorporación
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Diseño del Modelo de Datos**: Diseña y crea tu modelo de datos personalizado con objetos, campos y relaciones
+* **Migración de Datos**: Migra tus datos existentes desde tu CRM actual a Twenty
+* **Creación de Flujos de Trabajo**: Crea flujos de trabajo personalizados para apoyar tus procesos de negocio
+
+## Socios de Implementación
+
+Trabaja con socios certificados de Twenty para personalizaciones e integraciones más avanzadas. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..70c1f56ad0
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: ¿Qué es Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Visión
+
+Crear un buen CRM es difícil porque es un acto de equilibrio.
+Para cada negocio, los requisitos parecen sencillos, pero las necesidades de todos son distintas.
+El resultado es un CRM que es demasiado básico, o uno que intenta ser un todoterreno pero termina siendo un maestro de nada.
+
+Al principio, Twenty parece como la mayoría de los CRMs que ya conoces: puedes rastrear ofertas, organizar contactos, gestionar tareas y notas.
+**Pero lo que lo distingue es nuestro enfoque de extensibilidad. Estamos construyendo una plataforma abierta que proporciona los bloques de construcción para que resuelvas los problemas únicos de tu negocio.**
+
+Priorizamos principios universales y patrones comunes sobre las listas de características.
+No intentamos tener todas las respuestas, sino que empoderamos a los usuarios para encontrar lo que mejor les funciona.
+El código abierto es la base de nuestro enfoque, asegurando que Twenty evoluciona con su comunidad, para su comunidad.
+
+## Beneficios
+
+**Personalizable:** Diseñado para adaptarse a las necesidades de tu negocio.
+
+**Impulsado por la comunidad:** Construido y mantenido por una gran comunidad de código abierto.
+
+**Económico:** Nunca estará atado a un proveedor, porque siempre puede autoalojar.
+
+## Características principales
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Más información](/l/es/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/es/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Comienza aquí](/l/es/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/es/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/es/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/es/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/es/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/es/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Comienza a integrar](/l/es/developers/extend/capabilities/apis).
+
+## Únete ahora
+
+[Regístrate aquí](https://app.twenty.com) o [conviértete en un colaborador en GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..5fb2d27fb6
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Cada empresa funciona de manera diferente. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Esto te brinda un valor inmediato y ayuda a tu equipo a ver Twenty en acción con datos reales. You can do so under Settings → Accounts.
+
+## 1. Personaliza tu modelo de datos
+
+Twenty ofrece la flexibilidad que necesitas para moldear el modelo de datos que mejor apoyará tu día a día.
+Crea objetos y campos de cualquier tipo, incluyendo relaciones entre tus diferentes objetos. Puedes hacerlo en Configuración → Modelo de Datos.
+Here are a few tips:
+
+* **No estás limitado en la cantidad de campos personalizados ni en los objetos personalizados**. Agregar objetos y campos personalizados no llevará a la actualización de tu plan.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Recomendamos usarlas tanto como sea posible, añadiendo campos para categorizar tus registros si es necesario. Aquí tienes un ejemplo:
+ * Es mejor usar el objeto Personas para tus prospectos y socios, creando un campo en el objeto Personas llamado `Tipo de Persona`, en lugar de crear un objeto personalizado Socio. Porque no podrías acceder a los correos electrónicos intercambiados con esta persona desde los registros de Socio.
+ * Crea diferentes vistas bajo Personas, una para mostrar socios y otra para mostrar prospectos.
+* Dos personas no pueden tener la misma dirección de correo electrónico. Dos empresas no pueden tener el mismo dominio.
+* Puedes desactivar campos y objetos estándar que no quieras usar.
+* Puedes ocultar campos de las vistas: no dudes en crear campos, no tendrás que mostrarlos todos.
+
+Lee [este artículo](/l/es/user-guide/data-model/overview) para aprender cómo diseñar tu modelo de datos.
+
+## 2. Trae tus datos
+
+Llevar tus datos existentes a Twenty da a tu equipo contexto desde el principio.
+
+### Conecta tu buzón de correo
+
+Si no lo hiciste al crear tu espacio de trabajo, conecta tu **cuenta de Google o Microsoft** en Configuración → Cuentas. Esto permite a Twenty:
+
+* Importar tus mensajes y reuniones
+* Crear automáticamente contactos basados en interacciones (opcional)
+* Mantener el historial de comunicación visible para tu equipo
+
+**¿Usando otro proveedor?**
+Puedes agregar otro buzón de correo a través de SMTP o otro calendario a través de CalDAV. Necesitarás activar la función en Configuración → Lanzamientos → Laboratorio, y luego regresar a la pestaña Configuración → Cuentas.
+
+### Import data via csv
+
+Usa el menú de comandos (`Cmd + K` o `Ctrl + K`) para importar Personas, Empresas, Oportunidades o cualquier objeto personalizado vía CSV.
+
+**Directrices clave**:
+
+* Descarga el archivo de muestra para entender el formato esperado
+* Limita cada archivo a 10,000 registros
+* Elimina correos electrónicos duplicados para Personas o dominios duplicados para Empresas
+* Revisa y corrige errores (resaltados en amarillo) antes de importar
+
+Lee [este artículo](/l/es/user-guide/data-migration/overview) para aprender más sobre la importación de datos.
+
+## 3. Crea tu primera vista
+
+Crear diferentes vistas es clave para que los datos sean accionables para tu equipo.
+Here is how to proceed:
+
+* **Agregar u ocultar columnas**
+ Gestiona los campos visibles en una vista dada haciendo clic en Opciones → Campos (desde la parte superior derecha). Puedes mostrar/ocultar campos desde allí.
+
+* **Reordenar campos**
+ Reordena los campos de una vista dada haciendo clic en Opciones → Campos (desde la parte superior derecha). Arrastra y suelta los campos para reordenarlos.
+
+* **Filtra tu vista**
+ Reduce los registros mostrados usando los Filtros desde la parte superior derecha.
+
+* **Ordena los registros**
+ Reordena los registros mostrados usando la función de Ordenar desde la parte superior derecha, o haciendo clic directamente en el nombre de la columna.
+
+* **Elige el diseño**
+ Puedes cambiar a un diseño de **Kanban** o un diseño de lista **Agrupar por**, siempre que el objeto tenga un campo select type `Etapa` o similar.
+
+* **Guarda tu vista como Favoritos**
+ Esto se puede hacer utilizando el menú desplegable que muestra las diferentes vistas.
+
+## ¿Qué sigue?
+
+Comienza a crear automatizaciones utilizando [flujos de trabajo](/l/es/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..5a235227b0
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Crear un Espacio de Trabajo
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Paso 1: Registro
+
+1. Dirígete a [Twenty Sign Up](https://app.twenty.com).
+2. Selecciona tu método de registro preferido:
+ * **Continuar con Google** para registro con cuenta de Google.
+ * **Continuar con Microsoft** para registro con cuenta de Microsoft.
+ * O, **Continuar con Email** para registro vía correo electrónico.
+
+
+
+## Paso 2: Elección de Período de Prueba
+
+Elija entre dos períodos de prueba:
+
+### 30 días
+
+Con tarjeta de crédito
+
+### 7 días
+
+Sin tarjeta de crédito
+
+Ambas pruebas incluyen:
+
+* Acceso total
+* Contactos ilimitados
+* Integración de correo electrónico
+* Objetos personalizados
+* API y Webhooks
+
+Puedes hacer clic en "Cambiar plan" para elegir un plan diferente o un intervalo de facturación.
+
+
+
+## Paso 3: Confirmación de Pago y Configuración de Cuenta
+
+Después de la aprobación del pago a través de Stripe, se le dirige a crear su espacio de trabajo y perfil de usuario. Recuerda que puedes cancelar tu suscripción en cualquier momento.
+
+## Soporte
+
+Para consultas o ayuda, contacta con el equipo de soporte dedicado en [contact@twenty.com](mailto:contact@twenty.com) o envía un mensaje por [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..01666e86e2
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Obtén una descripción general rápida de cómo navegar por la plataforma y dónde realizar diferentes tipos de acciones.
+---
+
+## El diseño principal
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. Aquí es donde ocurre el trabajo diario.
+Puedes **ver, editar, eliminar registros** desde allí así como **crear nuevas vistas**.
+
+
+
+## Barra de navegación
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Alterna entre tus diferentes espacios de trabajo usando el menú desplegable o crea uno nuevo
+* Usa la barra de búsqueda (presiona `/` para enfocarla al instante)
+* Abre la sección de Configuración
+* Accede directamente a tus vistas favoritas. Las vistas favoritas son únicas para cada usuario.
+* Alterna entre diferentes objetos
+* **Crea automatizaciones** usando flujos de trabajo
+* Contacta con Soporte y abre nuestra guía del usuario.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. Puedes acceder de dos maneras:
+
+* **Atajo de teclado**: Presiona `Cmd + K` (Mac) o `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Crea nuevos registros
+* **Importa y exporta datos en formato CSV**
+* Crea nuevas vistas
+* Accede a los registros eliminados (Twenty admite eliminaciones lógicas y definitivas)
+* Consulta los atajos de teclado para acceder rápidamente a los objetos de tu espacio de trabajo
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Vistas
+
+Cada objeto (como Oportunidades o Personas) admite múltiples vistas. No estás limitado en cuanto al número de vistas por objeto.
+
+Usa el menú desplegable en la parte superior izquierda del diseño principal para alternar entre las diferentes vistas. Por ejemplo:
+
+* Usa una vista Kanban para hacer seguimiento de las oportunidades por etapa
+* Usa la vista Agrupar por para crear secciones y mejorar la eficiencia
+* Usa filtros para centrarte en registros específicos (por ejemplo, clientes potenciales creados la semana pasada)
+* Guarda vistas filtradas para reutilizarlas más tarde
+* Vistas favoritas para un acceso rápido
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/es/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Configuración
+
+Abre la Configuración desde la parte superior izquierda para:
+
+* **Conecta tu buzón y tus cuentas de calendario** para una sincronización perfecta del correo electrónico y el calendario
+* Personaliza tu **modelo de datos**: crea objetos personalizados, campos y relaciones
+* **Accede al área de pruebas de la API y configura webhooks**
+* **Gestiona los permisos de usuario** y los controles de acceso al espacio de trabajo
+* Invita a los miembros del equipo y gestiona los roles de usuario
+* Edita tu perfil y las preferencias del espacio de trabajo
+* Configura la facturación y supervisa el uso de créditos de flujos de trabajo
+* Descubre los últimos lanzamientos y las próximas funciones (en Lanzamientos → pestaña Lab)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/es/user-guide/introduction.mdx b/packages/twenty-docs/l/es/user-guide/introduction.mdx
new file mode 100644
index 0000000000..fd8a63b206
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..d5cf02df39
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Permisos
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+El sistema de permisos de Twenty te permite controlar el acceso a tres áreas principales:
+
+* **Objetos y Campos**: Controla quién puede ver, editar o eliminar registros y campos individuales
+* **Configuraciones**: Gestiona el acceso a la configuración del espacio de trabajo y a las funciones administrativas
+* **Acciones**: Controla acciones generales del espacio de trabajo como importar datos o enviar correos electrónicos
+
+## Create a Role
+
+Para crear un nuevo rol:
+
+1. Go to **Settings → Roles**
+2. En **Todos los Roles**, haz clic en **+ Crear Rol**
+3. Introduce un nombre para el rol
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Haz clic en **Guardar** para finalizar
+
+## Delete a Role
+
+Para eliminar un rol:
+
+1. Go to **Settings → Roles**
+2. Haz clic en el rol que deseas eliminar
+3. Open the **Settings** tab, then click **Delete Role**
+4. Haz clic en **Confirmar** en el modal
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Todos excepto el rol **Admin** pueden eliminarse. Siempre debe haber al menos un miembro asignado al rol **Admin**.
+
+
+## Assign Roles to Members
+
+### Ver Asignaciones Actuales
+
+* Go to **Settings → Roles**
+* Ver todos los roles y cuántos miembros están asignados a cada uno
+* Ver qué miembros tienen qué roles
+
+### Assign a Role to a Member
+
+1. Go to **Settings → Roles**
+2. Haz clic en el rol que deseas asignar
+3. Abre la pestaña **Asignación**
+4. Click **+ Assign to member**
+5. Selecciona al miembro del espacio de trabajo de la lista
+6. Confirma la asignación
+
+### Set Default Role
+
+1. Go to **Settings → Roles**
+2. En la sección **Opciones**, encuentra **Rol Predeterminado**
+3. Selecciona qué rol deberían recibir automáticamente los nuevos miembros
+4. Los nuevos miembros del espacio de trabajo serán asignados a este rol cuando se unan
+
+
+ You can only assign roles to existing workspace members. Para invitar a nuevos miembros, utiliza [Gestión de Miembros](/l/es/user-guide/settings/capabilities/member-management).
+
+
+## Personalizar Permisos
+
+Los permisos determinan qué puede acceder o modificar cada rol dentro de tu espacio de trabajo, incluidos registros de objetos, configuraciones y acciones del espacio de trabajo.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Descripción |
+| ------------------------------------------- | -------------------------------------- |
+| **Ver registros en todos los objetos** | View records in lists and detail pages |
+| **Editar registros en todos los objetos** | Modify existing records |
+| **Eliminar registros en todos los objetos** | Soft-delete records (can be restored) |
+| **Destruir registros en todos los objetos** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Descripción |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Gestión de Excepciones de Permisos
+
+To override inherited permissions:
+
+1. Haz clic en **X** para eliminar la regla heredada
+2. Select the specific permissions you want
+3. Haz clic en el ícono naranja de **Deshacer** (flecha circular) para revertir los cambios
+
+Cuando termines, haz clic en **Finalizar**, luego en **Guardar** una vez que seas redirigido a la página del rol.
+
+### Permisos de Configuraciones del Espacio de Trabajo
+
+Controla el acceso a configuraciones del espacio de trabajo de dos maneras:
+
+* Activa **Acceso Completo a Configuraciones** para otorgar acceso completo
+* Or enable specific permissions (e.g., API key generation, workspace preferences, role assignment, data model configuration, security settings, and workflow management)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Permisos de Acción del Espacio de Trabajo
+
+Controla el acceso a acciones generales del espacio de trabajo:
+
+* Activa **Acceso Completo a la Aplicación** para otorgar permisos completos
+* O habilita acciones individuales como **Enviar Email**, **Importar CSV** y **Exportar CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Go to **Settings → Roles**
+2. Haz clic en el rol que deseas asignar
+3. Abre la pestaña **Asignación**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Confirma la asignación
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Go to **Settings → Roles**
+2. Haz clic en el rol que deseas asignar
+3. Abre la pestaña **Asignación**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Confirma la asignación
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..0508319d14
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Prerrequisitos
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Ir a **Ajustes → Miembros**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Mejores prácticas
+
+### Seguridad
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Solución de Problemas
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Obtención de Ayuda
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..b997c9900c
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Roles
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Permisos
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Go to **Settings → Roles**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## SSO
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..563f47e82b
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Dominio del espacio de trabajo
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Personalizar dominio
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Dominios Aprobados
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Añadir Dominio de Acceso Aprobado
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Guardar
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Dominios Públicos
+
+Provisiona un entorno de alojamiento completo y seguro en estos dominios.
+
+### Agregar Dominio Público
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..5af4f4c7aa
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Gestión de Miembros
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Invitar Nuevos Miembros
+
+### Using Email Invitation
+
+1. Ir a **Ajustes → Miembros**
+2. Click **+ Invite**
+3. Introduce la dirección de correo electrónico de la persona
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Ir a **Ajustes → Miembros**
+2. Copiar el enlace de invitación a la área de trabajo
+3. Compartir el enlace con nuevos miembros del equipo
+4. Obtendrán acceso una vez que se registren
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/es/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Dominios de Acceso Aprobado
+
+Allow team members to join automatically based on their email domain:
+
+1. Ve a **Configuración → Dominios**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/es/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/es/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx
new file mode 100644
index 0000000000..93593df485
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx
@@ -0,0 +1,43 @@
+---
+title: Ajustes del perfil
+description: Gestiona tu perfil personal y los ajustes de seguridad.
+---
+
+## Información personal
+
+### Nombre y correo electrónico
+
+* **Nombre para mostrar**: Actualiza cómo aparece tu nombre a otros miembros del espacio de trabajo
+* **Correo electrónico**: Cambia tu correo de inicio de sesión (requiere verificación)
+* **Foto de perfil**: Carga un avatar personalizado o utiliza tus iniciales
+
+## Configuración de seguridad
+
+### Autenticación de dos factores (2FA)
+
+Habilita 2FA para agregar una capa extra de seguridad a tu cuenta.
+
+1. Ve a **Configuración → Configuración del perfil**
+2. Haz clic en **Habilitar 2FA**
+3. Escanea el código QR con tu aplicación de autenticación
+4. Introduce el código de verificación para confirmar
+
+### Gestión de contraseñas
+
+* **Cambiar contraseña**: Actualiza tu contraseña actual
+* **Requisitos de la contraseña**: Debe tener al menos 8 caracteres
+
+## Gestión del perfil
+
+### Eliminar cuenta
+
+
+ Eliminar tu cuenta eliminará permanentemente tu acceso a todos los espacios de trabajo. Esta acción no se puede deshacer; perderás el acceso a todos los espacios de trabajo de los que eres miembro, y deberías considerar salir de espacios de trabajo individuales si solo quieres salir de equipos específicos.
+
+
+Para eliminar tu cuenta:
+
+1. Ve a **Configuración → Configuración del perfil**
+2. Desplázate hasta **Zona de peligro**
+3. Haz clic en **Eliminar cuenta**
+4. Confirma escribiendo tu dirección de correo electrónico
diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..5e663eab5e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Configuración de Lanzamientos
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Características del Laboratorio
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Go to **Settings → Releases**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..fe5479aa79
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Configuración del Espacio de Trabajo
+description: Personaliza el nombre y la marca de tu espacio de trabajo.
+---
+
+Those are accessible under **Settings → General**.
+
+## Imagen del Espacio de Trabajo
+
+* **Subir Logo**: Añade un logo personalizado para el espacio de trabajo
+* **Formatos admitidos**: Archivos PNG, JPEG y GIF de menos de 10MB
+* **Eliminar**: Elimina el logo actual del espacio de trabajo
+
+## Nombre del espacio de trabajo
+
+* **Nombre**: Cambia el nombre visible de tu espacio de trabajo
+* Este nombre aparece para todos los miembros del espacio de trabajo
+
+## Zona de Peligro
+
+
+ Eliminar tu espacio de trabajo elimina permanentemente todos los datos y no se puede deshacer. Todos los datos del espacio de trabajo se perderán para siempre, todos los miembros perderán el acceso inmediatamente, y esta acción no se puede revertir.
+
+
+Para eliminar tu espacio de trabajo:
+
+1. Haz clic en el botón **Eliminar espacio de trabajo**
+2. Confirma la eliminación cuando se te solicite
+
+**Nota**: Solo los administradores del espacio de trabajo pueden eliminar espacios de trabajo.
diff --git a/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..5861fb7f6e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Preguntas frecuentes sobre configuración
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Configuración del Espacio de Trabajo
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Profile Settings
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Haz clic en **Habilitar 2FA**
+ 4. Escanea el código QR con tu aplicación de autenticación
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Haz clic en **Eliminar cuenta**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Ajustes de experiencia
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Go to **Settings → Accounts**
+ 2. Click **Add account**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Go to **Settings → Accounts**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Dominios
+
+
+
+ ¡Sí! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Características del Laboratorio
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/settings/overview.mdx b/packages/twenty-docs/l/es/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..53965a13ed
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Configuración
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Go to **Settings → Accounts**
+2. Click **Add account**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/es/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Ir a **Ajustes → Miembros**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Próximos Pasos
+
+* [Workspace settings](/l/es/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/es/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/es/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..ebdbb61b16
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Vista del calendario
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/es/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..68455c4499
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Vistas de Tabla
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Vistas Kanban
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Mejores prácticas
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/es/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..76910a3191
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ----------------- | -------------------------------------------------- |
+| Texto | Equals, Contains, Starts with, Ends with, Is empty |
+| Número | Equals, Greater than, Less than, Between, Is empty |
+| Fecha | Equals, Before, After, Between, Is empty |
+| Selección | Equals, Is any of, Is empty |
+| Caja de selección | Is true, Is false |
+| Relación | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/es/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/es/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..3bbd75308b
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Acerca de las vistas Kanban
+
+Las vistas Kanban mapean visualmente los flujos de proceso, donde cada columna representa una etapa distinta y cada tarjeta representa un registro.
+
+## Mover tarjetas entre etapas
+
+Puedes mover cada tarjeta entre etapas a medida que pasa por tu flujo de trabajo arrastrando y soltando. Para continuar, mantén presionado el clic en una tarjeta y muévela a la siguiente etapa.
+
+
+
+## Add and Delete Stages
+
+Puedes adaptar tu flujo de trabajo a tus necesidades usando etapas, que representan un valor en un campo de selección:
+
+### Agregar Etapas
+
+Para agregar una etapa, accede a la configuración del campo de selección navegando a Configuración > Modelo de Datos, seleccionando tu objeto, y luego el campo del que depende tu tablero Kanban.
+
+
+
+### Eliminar Etapas
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Puedes configurar tu tablero Kanban para mostrar algunos campos y ocultar otros. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+También puedes reorganizar el orden de los campos manteniendo presionado el nombre del campo y arrastrándolo a donde desees.
+
+
+
+## Vista compacta
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Descripción |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Mejores prácticas
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..4e4f05c514
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Vistas de Tabla
+description: Display your data in a spreadsheet-like list format.
+---
+
+## Acerca de las Vistas de Tabla
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Casos de uso:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/es/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..b77ed8aaba
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## View Visibility
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Favoritos
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/es/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/es/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..09328d7bac
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Prerrequisitos
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Haga clic en **Guardar**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Objeto | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Oportunidades | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/es/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..1982837f2d
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Prerrequisitos
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Haga clic en **Guardar**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Completado |
+
+## Related
+
+* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..4ae52e77e4
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Haga clic en **Guardar**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Opción | Descripción |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Guardar
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/es/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..b163a1a931
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Etapa | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Mejores prácticas
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..87a253c0c1
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Mostrar el Importe previsto en tu pipeline
+description: Calcula y muestra valores ponderados de las oportunidades según la probabilidad de la etapa.
+---
+
+El Importe previsto es un valor calculado: **Importe × Probabilidad**. Esto te ayuda a pronosticar ingresos ponderando las oportunidades según la probabilidad de que se cierren.
+
+
+ Este es un ejemplo de creación de [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) usando flujos de trabajo.
+
+
+Esta guía te acompaña para configurar los campos personalizados y los flujos de trabajo necesarios para calcular y mostrar importes previstos en tu pipeline.
+
+## Paso 1: Crear campos personalizados
+
+Necesitas dos campos personalizados en el objeto Oportunidades.
+
+### Crear el campo Probabilidad
+
+1. Ve a **Ajustes → Modelo de datos → Oportunidades**
+2. Haz clic en **+ Añadir campo**
+3. Configurar:
+ * **Nombre**: Probabilidad
+ * **Tipo**: Número
+ * **Descripción**: Probabilidad según etapa (0-100%)
+4. Haga clic en **Guardar**
+
+### Crear el campo Importe previsto
+
+1. Haz clic en **+ Añadir campo**
+2. Configurar:
+ * **Nombre**: Importe previsto
+ * **Tipo**: Moneda
+ * **Descripción**: Calculado: Importe × Probabilidad
+3. Haga clic en **Guardar**
+
+### Opcional: Hacer que los campos sean de solo lectura para los usuarios
+
+Si no quieres que los usuarios editen manualmente estos campos calculados:
+
+1. Ve a **Ajustes → Roles**
+2. Selecciona el rol a configurar
+3. Busca el objeto Oportunidades
+4. Establece los campos **Probabilidad** e **Importe previsto** como de solo lectura
+
+Esto garantiza que solo los flujos de trabajo puedan actualizar estos valores.
+
+## Paso 2: Crear el flujo de trabajo #1 — Actualizar la Probabilidad al cambiar de etapa
+
+Este flujo de trabajo establece automáticamente la Probabilidad cuando una oportunidad pasa a una nueva etapa.
+
+### Crear el flujo de trabajo
+
+1. Ve a **Flujos de trabajo**
+2. Haz clic en **+ Nuevo flujo de trabajo**
+3. Ponle el nombre "Actualizar la Probabilidad al cambiar de etapa"
+
+### Configurar el desencadenador
+
+1. Añade un desencadenador **Registro creado o actualizado**
+2. Selecciona **Oportunidades** como objeto
+3. Filtrar en: se actualiza el campo **Etapa**
+
+### Añadir ramas para cada etapa
+
+Crea una rama para cada etapa con su probabilidad:
+
+| Etapa | Probabilidad |
+| --------------- | ------------ |
+| Nuevo | 10% |
+| Calificado | 25% |
+| Reunión | 40% |
+| Propuesta | 60% |
+| Negociación | 80% |
+| Cerrado ganado | 100% |
+| Cerrado perdido | 0% |
+
+
+ Para crear una nueva rama, haz clic derecho en el lienzo del flujo de trabajo y haz clic en **Nueva acción**. Luego, vincula esta acción al nodo anterior arrastrando la flecha desde el nodo anterior hasta esta nueva acción.
+
+
+Para cada etapa:
+
+1. Añade un nodo **Filtro**: Etapa = [nombre de la etapa]
+2. Añade una acción **Actualizar registro**:
+ * Registro: la Oportunidad desencadenante
+ * Campo: Probabilidad
+ * Valor: [probabilidad para esa etapa]
+
+### Calcular el Importe previsto
+
+Después de que las ramas se vuelvan a unir:
+
+1. Añade un nodo **Filtro**: el Importe no está vacío
+2. Añade una acción **Actualizar registro**:
+ * Registro: la Oportunidad desencadenante
+ * Campo: Importe previsto
+ * Valor: Importe × Probabilidad
+
+## Paso 3: Crear el flujo de trabajo #2 — Recalcular al cambiar el Importe
+
+Este flujo de trabajo actualiza el Importe previsto cuando cambia el Importe de la oportunidad.
+
+### Crear el flujo de trabajo
+
+1. Ve a **Flujos de trabajo**
+2. Haz clic en **+ Nuevo flujo de trabajo**
+3. Ponle el nombre "Recalcular el Importe previsto al cambiar el Importe"
+
+### Configurar el desencadenador
+
+1. Añade un desencadenador **Registro creado o actualizado**
+2. Selecciona **Oportunidades** como objeto
+3. Filtrar en: se actualiza el campo **Importe**
+
+### Añadir la lógica
+
+1. Añade un nodo **Filtro**: el Importe no está vacío
+2. Añade una acción **Actualizar registro**:
+ * Registro: la Oportunidad desencadenante
+ * Campo: Importe previsto
+ * Valor: Importe × Probabilidad
+
+## Paso 4: Mostrarlo en tu pipeline
+
+Ahora muestra los totales de Importe previsto en tu vista Kanban:
+
+1. Abre tu vista Kanban de Pipeline de ventas
+2. Haz clic en el número junto al nombre de cualquier etapa en la parte superior de una columna
+3. Selecciona **Suma**
+4. Elige **Importe previsto**
+
+Cada columna ahora muestra el valor total ponderado del pipeline para esa etapa.
+
+## Resumen
+
+| Componente | Propósito |
+| ----------------------------- | -------------------------------------------------------------------------------------- |
+| **Campo de Probabilidad** | Almacena la probabilidad de ganar según la etapa |
+| **Campo de Importe previsto** | Almacena Importe × Probabilidad |
+| **Flujo de trabajo #1** | Actualiza la Probabilidad cuando cambia la Etapa y luego recalcula el Importe previsto |
+| **Flujo de trabajo #2** | Recalcula el Importe previsto cuando cambia el Importe |
+| **Agregación** | Muestra la suma del Importe previsto por etapa |
+
+## Relacionado
+
+* [Campos de fórmula](/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields) — crea campos calculados usando flujos de trabajo
+* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views) — agregaciones por columna
+* [Cómo crear campos personalizados](/l/es/user-guide/data-model/how-tos/create-custom-fields) — configuración de campos
diff --git a/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..6bd2218717
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Vistas y embudos
+description: Aprende a crear y gestionar vistas en Twenty.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Comprender las vistas
+
+Las vistas son configuraciones guardadas que determinan cómo se muestran tus datos. Cada vista puede tener sus propios:
+
+* **Diseño**: Tabla, Kanban o Calendario
+* **Filtros**: Qué registros mostrar
+* **Ordenación**: Cómo se ordenan los registros
+* **Campos**: Qué columnas son visibles
+
+## Tipos de vista
+
+### Vista de tabla
+
+La vista predeterminada tipo hoja de cálculo que muestra los registros en filas con columnas personalizables.
+
+### Vista Kanban
+
+Una vista de tablero visual en la que los registros aparecen como tarjetas organizadas por etapas. Ideal para:
+
+* Embudos de ventas
+* Seguimiento de proyectos
+* Cualquier flujo de trabajo con etapas definidas
+
+### Vista del calendario
+
+Muestra los registros con campos de fecha en un calendario. Perfecto para:
+
+* Reuniones y eventos
+* Fechas límite y vencimientos
+* Planificación basada en el tiempo
+
+## Creación de una Vista
+
+Hay dos maneras de crear una nueva vista.
+
+### Usa el menú desplegable de vistas
+
+1. Ve a cualquier objeto (Personas, Empresas, etc.)
+2. Haz clic en el nombre de la vista en la parte superior izquierda (muestra la vista actual con una flecha desplegable)
+3. Haz clic en **+ Añadir vista**
+4. Asigna un nombre a tu vista y haz clic en **Crear**
+5. Elige un diseño (Tabla, Kanban o Calendario) en **Opciones**
+6. Añade filtros y ordenación según sea necesario
+7. Selecciona qué campos mostrar y reordénalos
+8. Haga clic en **Guardar**
+
+
+
+### Comienza editando una vista existente
+
+1. Ve a cualquier objeto (Personas, Empresas, etc.)
+2. Elige un diseño (Tabla, Kanban o Calendario) en **Opciones** o añade filtros y ordenación según sea necesario
+3. Haz clic en **Guardar como nueva vista**
+4. Asigna un nombre a tu vista y haz clic en **Crear**
+5. Sigue editando tu nueva vista
+6. Haz clic en **Actualizar vista** para guardar tus ajustes adicionales
+
+
+
+## Administrar vistas
+
+### Editar una vista
+
+1. Selecciona la vista en el menú desplegable
+2. Realiza tus cambios (filtros, ordenación, columnas)
+3. Haz clic en **Guardar** para actualizar la vista
+
+### Cambiar el nombre de una vista o su icono
+
+1. Abre el menú desplegable de la vista
+2. Haz clic en el menú **⋮** junto al nombre de la vista
+3. Selecciona **Editar**
+4. Cambia el nombre o el icono
+5. Haga clic en **Guardar**
+
+### Reordenar vistas
+
+1. Abre el menú desplegable de la vista
+2. Haz clic y arrastra una vista por su controlador
+3. Suéltala en la posición deseada
+4. El nuevo orden se guarda automáticamente
+
+### Añadir a favoritos
+
+Fija las vistas que usas con frecuencia para un acceso rápido:
+
+1. Abre el menú desplegable de la vista
+2. Haz clic en el menú **⋮** junto a una vista
+3. Selecciona **Añadir a favoritos**
+4. La vista aparece en tu sección de favoritos
+
+### Eliminar una vista
+
+1. Selecciona la vista que deseas eliminar
+2. Haz clic en el menú desplegable de la vista
+3. Haz clic en el menú **⋮** junto a la vista
+4. Selecciona **Eliminar**
+5. Confirma la eliminación
+
+
+ Las vistas eliminadas no se pueden recuperar. Asegúrate de que deseas eliminarla antes de confirmar.
+
+
+## Visibilidad de la vista
+
+Cada vista (excepto las vistas predeterminadas "All [Object Name]") tiene su propia configuración de visibilidad.
+
+Para cambiar la visibilidad:
+
+1. Abre la vista
+2. Haz clic en **Opciones → Visibilidad**
+3. Elige:
+ * **Espacio de trabajo**: Visible para todos los miembros del espacio de trabajo
+ * **No listado**: Visible solo para ti
+
+
+ No se puede cambiar la visibilidad de las vistas predeterminadas "All [Object Name]".
+
+
+## Próximos Pasos
+
+* [Vistas de tabla](/l/es/user-guide/views-pipelines/capabilities/table-views)
+* [Vistas Kanban](/l/es/user-guide/views-pipelines/capabilities/kanban-views)
+* [Filtros y ordenación](/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Configuración de la vista](/l/es/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..eb4dfe985d
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Prerrequisitos
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Configuración**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Campo | Valor |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Bienvenido a {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Tipo de disparador | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Configuración**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Configuración**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Configuración**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Mejores prácticas
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Solución de Problemas
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..7dfe893a36
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Mejores prácticas
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..17ab5149c6
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Ejemplo |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Resultado
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Descripción |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Solución de Problemas
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Mejores prácticas
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/es/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..aefa4a752a
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Acciones del Flujo de Trabajo
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Las acciones definen lo que ocurre después de que se dispara un activador. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Crear un Registro
+
+Agrega un nuevo registro a un objeto seleccionado.
+
+**Configuración**:
+
+* Seleccione el objeto de destino
+* Complete los campos obligatorios y opcionales
+* Use data from previous steps or input values manually to populate fields
+
+**Salida**: Los datos del registro recién creado están disponibles para su uso en pasos posteriores.
+
+### Actualizar Registro
+
+Modifica un registro existente en un objeto seleccionado.
+
+
+
+**Configuración**:
+
+* Seleccione el objeto de destino
+* Elija el registro específico a actualizar.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Seleccione campos a modificar e ingrese nuevos valores
+
+**Salida**: Los datos del registro actualizado están disponibles para su uso en pasos posteriores.
+
+### Eliminar Registro
+
+Elimina un registro de un objeto seleccionado.
+
+**Configuración**:
+
+* Seleccione el objeto de destino
+* Elija el registro específico a eliminar
+
+**Salida**: Los datos del registro eliminado permanecen disponibles para su uso en pasos posteriores.
+
+### Buscar Registros
+
+Encuentra registros dentro de un objeto seleccionado usando condiciones de filtro.
+
+**Configuración**:
+
+* Seleccione el objeto a buscar
+* Establezca criterios de filtro para restringir resultados
+* Configure la clasificación y los límites
+
+**Salida**: Devuelve registros coincidentes que se pueden usar en pasos posteriores.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/es/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Configuración**:
+
+* Seleccione el objeto de destino
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Utilice datos de pasos anteriores para completar los campos
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Iterador
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Configuración**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Defina las acciones a realizar en cada registro en el bucle.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filtro
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Configuración**:
+
+* Select the record to filter
+* Defina condiciones y criterios de filtro
+* Configure qué registros deben pasar a pasos posteriores
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Tipo | Descripción |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Casos de uso**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### Enviar correo electrónico
+
+Envía un correo electrónico desde su flujo de trabajo. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Configuración**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Ingrese la dirección de correo electrónico del destinatario.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Establezca la línea de asunto.
+* Redacte el cuerpo del mensaje. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Formulario
+
+Solicita un formulario durante la ejecución del flujo de trabajo para recopilar la entrada del usuario. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Para flujos de trabajo con otros disparadores (Registro Creado, Actualizado, etc.), los formularios solo son accesibles a través de la interfaz de ejecución de flujos de trabajo, lo cual no es la experiencia de usuario esperada. Un centro de notificaciones se lanzará en 2026 para soportar adecuadamente los formularios en flujos de trabajo automatizados.
+
+
+**Configuración**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Salida**: Las respuestas del formulario están disponibles para su uso en pasos posteriores.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Código
+
+Ejecuta JavaScript personalizado dentro de su flujo de trabajo.
+
+**Configuración**:
+
+* Acceda a variables de pasos anteriores. You can edit the variables names dynamically.
+
+
+
+* Escriba el código JavaScript en el editor
+* Devuelva variables para su uso en pasos posteriores
+* Pruebe el código directamente en el paso
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### Solicitud HTTP
+
+Envía una solicitud a un API externo como parte de su flujo de trabajo.
+
+
+
+**Configuración**:
+
+* Ingrese la URL del extremo de la API. Using parameters from previous steps is possible.
+* Seleccione el método HTTP (GET, POST, PUT, PATCH, DELETE)
+* Agregue encabezados y valores necesarios
+* Proporcione una respuesta de muestra para vista previa de estructura
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Configuración**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/es/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/es/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..8680e51cbd
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: Ramas del flujo de trabajo},{
+description: Crea rutas paralelas y lógica condicional en tus flujos de trabajo.
+---
+
+Las ramas te permiten dividir tu flujo de trabajo en varias rutas que pueden ejecutarse simultáneamente o de forma condicional según tus datos.
+
+
+
+## Cómo funcionan las ramas
+
+Cuando creas varias conexiones desde un único nodo, cada ruta se convierte en una rama. De forma predeterminada, **todas las ramas se ejecutan en paralelo**—no esperan unas a otras.
+
+## Crear ramas
+
+### Añadir una nueva rama
+
+1. Haz **clic con el botón derecho en el lienzo principal** del flujo de trabajo (no en un nodo existente)
+2. Haz clic en **Añadir nodo**
+3. Elige el tipo de nodo para tu nueva rama
+4. Arrastra una flecha desde la parte inferior del paso anterior hasta la parte superior de esta nueva acción
+5. Repite para añadir más ramas desde el mismo nodo
+
+
+ Cada rama es independiente. Añadir una rama no afecta a otras rutas existentes desde ese nodo.
+
+
+### Diseño visual
+
+Las ramas aparecen como rutas paralelas en el editor de flujos de trabajo. Puedes arrastrar nodos para reorganizar el diseño visual sin afectar la ejecución.
+
+## Ramas condicionales
+
+Dado que todas las ramas se ejecutan de forma predeterminada, usa nodos **Filter** para controlar qué rutas se ejecutan realmente:
+
+| Rama | Condición del filtro | Acción |
+| ---- | --------------------- | ----------------------------- |
+| A | Etapa = "Ganada" | Enviar correo de felicitación |
+| B | Etapa = "Perdida" | Crear tarea de seguimiento |
+| C | Etapa = "Negociación" | Notificar al gerente |
+
+1. Crea ramas desde tu disparador o acción
+2. Añade un nodo **Filter** como el primer paso de cada rama
+3. Configura cada filtro con condiciones mutuamente excluyentes
+4. Añade tus acciones después de cada filtro
+
+Solo continuarán ejecutándose las ramas en las que se cumpla la condición del filtro.
+
+## Combinar ramas
+
+**Las ramas no se combinan automáticamente.** Cada rama se ejecuta de forma independiente hasta que termina. Tienes total flexibilidad para gestionar esto:
+
+* **Opción 1: Mantener las ramas separadas**
+ Cada rama gestiona sus propias acciones de seguimiento de forma independiente. Este es el enfoque más sencillo cuando las ramas no necesitan converger.
+
+* **Opción 2: Combinar ramas manualmente**
+ Al crear tu flujo de trabajo, puedes conectar manualmente varias ramas a la misma acción posterior. Simplemente arrastra flechas desde el final de cada rama hasta un nodo común.
+
+
+ Aunque puedes usar un nodo [Delay](/l/es/user-guide/workflows/capabilities/workflow-actions#delay) para pausar la ejecución, actualmente no se puede configurar para esperar "hasta que otra rama termine".
+
+
+## Relacionado
+
+* [Cómo usar las ramas en flujos de trabajo](/l/es/user-guide/workflows/capabilities/use-branches-in-workflows) - Guía paso a paso
+* [Acciones de flujo de trabajo](/l/es/user-guide/workflows/capabilities/workflow-actions) - Acciones disponibles, incluyendo Filter
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..e8135b57fc
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Créditos de Workflow
+description: Understand workflow credit consumption and management.
+---
+
+Los créditos de workflow potencian tus automatizaciones en Twenty. Comprender cómo funcionan te ayuda a optimizar costos y gestionar de manera efectiva tu presupuesto de automatización.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Cómo Funciona el Consumo de Créditos
+
+Los créditos se consumen cuando se ejecutan los workflows, no cuando los creas. Cada acción de workflow consume créditos en base a su complejidad:
+
+### Consumo de Créditos por Tipo de Acción
+
+* **Operaciones internas básicas**: Consumo de créditos muy bajo
+ * Buscar Registros
+ * Crear Registro
+ * Actualizar Registro
+ * Eliminar Registro
+ * Acciones de formulario
+
+* **Operaciones complejas**: Mayor consumo de créditos
+ * Acciones de código (ejecución de JavaScript)
+ * Solicitudes HTTP a servicios externos
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Deducción en Tiempo Real
+
+Los créditos se deducen en tiempo real a medida que se ejecutan los workflows. Esto significa:
+
+* Los workflows en borrador no consumen créditos
+* Solo los workflows activos y en ejecución utilizan la asignación de créditos
+* Los workflows fallidos aún consumen créditos para los pasos completados
+
+## Gestión de Créditos
+
+### Verificar Uso de Créditos
+
+1. Ir a **Ajustes → Facturación**
+2. Ve tu consumo actual de créditos y saldo restante
+3. Monitorea patrones de uso para optimizar tus workflows
+
+### Adquirir Créditos Adicionales
+
+Si necesitas más créditos adicionales a la asignación de tu plan:
+
+1. Ir a **Ajustes → Facturación**
+2. Haz clic en la opción para adquirir créditos adicionales. Hay paquetes de diferentes tamaños disponibles.
+3. Los créditos se suman a tu saldo actual
+
+## Mejores prácticas
+
+* **Procesamiento en Lote**: Usa operaciones masivas y acciones de Iterador eficientemente
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Optimiza acciones de Código para eficiencia
+* Agrupa operaciones para reducir llamadas individuales de acciones
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..bd49c7d708
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Ejecuciones de flujos de trabajo
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Estado | Descripción |
+| ---------------- | ------------------------------------------------------------------------ |
+| **En ejecución** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Formato de datos no válido
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..1c700e2618
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: Disparadores de Flujos de Trabajo
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Los flujos de trabajo siempre comienzan con un solo disparador que define cuándo debe ejecutarse la automatización.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Miembros del espacio de trabajo
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Se crea un registro
+
+Inicia el flujo de trabajo cuando se crea un nuevo registro en un objeto seleccionado (Personas, Empresas, Oportunidades o cualquier objeto personalizado).
+
+**Configuración**: Selecciona el tipo de objeto para monitorear nuevos registros.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Se actualiza un registro
+
+Inicia el flujo de trabajo cuando se realizan cambios en un registro existente.
+
+**Configuración**:
+
+* Selecciona el tipo de objeto
+* Opcionalmente especifica qué campos monitorear para cambios
+
+## Se actualiza o se crea un registro
+
+Inicia el flujo de trabajo cuando un registro es creado o actualizado en un objeto seleccionado.
+
+**¿Por qué esto es importante?**:
+
+* **Importaciones API/CSV**: Los registros se crean con todos los campos poblados inmediatamente
+* **Creación manual**: Los registros se crean primero, luego los campos se agregan en actualizaciones posteriores
+
+**Configuración**:
+
+* Selecciona el tipo de objeto para monitorear
+* Opcionalmente especifica qué campos monitorear para cambios
+* El flujo de trabajo se activará tanto en la creación inicial como en cualquier actualización posterior
+
+## Se elimina un registro
+
+Inicia el flujo de trabajo cuando un registro es eliminado de un objeto.
+
+**Configuración**: Selecciona el tipo de objeto para monitorear eliminaciones.
+
+## Manual Trigger
+
+Inicia el flujo de trabajo cuando es desencadenado por una acción del usuario. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Configuración de Disponibilidad**:
+Elige cómo debe manejar el flujo de trabajo la selección de registros:
+
+* **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Individual**: El/los registro(s) seleccionado(s) se pasará(n) a tu flujo de trabajo. Esto está configurado para un objeto dado. Se pueden seleccionar varios registros antes de iniciar el flujo de trabajo. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **En masa**: El/los registro(s) seleccionado(s) se pasará(n) a tu flujo de trabajo. Esto está configurado para un objeto dado. Se pueden seleccionar varios registros antes de iniciar el flujo de trabajo. El flujo de trabajo se ejecutará una vez, proporcionando como entrada toda la lista de registros. This means the workflow needs to contain an [Iterator action](/l/es/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Configuración Adicional**:
+
+* Selecciona el objeto de destino (para disponibilidad individual y en masa)
+* Elige un ícono de comando para el disparador del flujo de trabajo
+* Configura la ubicación en la barra de navegación (fijado o no fijado)
+
+**Métodos de Acceso**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Botón personalizado en la barra de navegación superior (si está configurado)
+
+## Time-Based Trigger: On a Schedule
+
+Inicia el flujo de trabajo de forma recurrente según lo defina.
+
+**Configuración**:
+
+* Selecciona la unidad de tiempo (minutos, horas, días)
+* Ingresa un valor o usa expresiones cron personalizadas para una programación avanzada
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Inicia el flujo de trabajo cuando se recibe una solicitud GET o POST de un servicio externo.
+
+
+
+**Configuración**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ---------------------------------- |
+| New leads need processing | Se crea un registro |
+| Data changes need sync | Se actualiza un registro |
+| Import/manual data handling | Se actualiza o se crea un registro |
+| Cleanup after deletion | Se elimina un registro |
+| User-initiated action | Iniciar manualmente |
+| Recurring reports | Según una programación |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..bd93029571
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: Versiones del flujo de trabajo
+description: Gestiona versiones y borradores de flujos de trabajo.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## Acerca de las versiones
+
+Cada vez que activas un flujo de trabajo, se crea una nueva versión. Esto te permite hacer un seguimiento de los cambios a lo largo del tiempo y revertir a configuraciones anteriores si es necesario.
+
+## Estados de la versión
+
+| Estado | Descripción |
+| --------------- | ---------------------------------------------- |
+| **Borrador** | En edición, aún no publicado |
+| **Activo** | Versión en vivo respondiendo a activadores |
+| **Desactivado** | Anteriormente activo pero detenido manualmente |
+| **Archivado** | Versiones pasadas guardadas para historial |
+
+## Trabajar con borradores
+
+Cuando editas un flujo de trabajo activo, tus cambios se guardan como un **borrador**. La versión activa sigue ejecutándose mientras trabajas en las actualizaciones.
+
+Cuando termines de editar, puedes:
+
+* **Activar**: Publica el borrador como la nueva versión activa (la versión anterior se archiva)
+* **Descartar**: Elimina el borrador y conserva la versión activa actual
+
+## Historial de versiones
+
+### Ver versiones anteriores
+
+1. Abre el flujo de trabajo
+2. Haz clic en la pestaña **Versiones**
+3. Consulta todas las versiones anteriores con marcas de tiempo
+
+### Restaurar una versión
+
+1. Encuentra la versión que quieres restaurar
+2. Haz clic en **Usar como borrador**
+3. La versión se copia a un nuevo borrador
+4. Realiza las actualizaciones necesarias
+5. Activa cuando esté lista
+
+## Mejores prácticas
+
+### Gestión de versiones
+
+* Activa solo cuando esté lista para producción
+* Mantén cambios significativos entre versiones
+* Documenta los cambios importantes en los nombres o descripciones de los flujos de trabajo
+* Prueba en modo borrador antes de activar
+
+### Revertir cambios
+
+* Si una nueva versión causa problemas, restaura la versión anterior
+* Usa el historial de versiones para ver qué cambió
+* Siempre prueba las versiones restauradas antes de activar
+
+## Flujos de Trabajo comunes
+
+### Edición rápida
+
+1. Realiza cambios menores en un flujo de trabajo activo
+2. Prueba en modo borrador
+3. Activa la nueva versión
+
+### Revisión importante
+
+1. Usa la versión anterior como punto de partida
+2. Realiza cambios significativos en el borrador
+3. Prueba a fondo todos los escenarios
+4. Activa cuando estés seguro
+
+### Reversión
+
+1. Identifica el problema con la versión actual
+2. Encuentra la última versión funcional en el historial
+3. Haz clic en **Usar como borrador**
+4. Activa para restaurar el comportamiento anterior
+
+## Relacionado
+
+* [Primeros pasos con Flujos de Trabajo](/l/es/user-guide/workflows/overview)
+* [Ejecuciones de flujos de trabajo](/l/es/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..e3b868e629
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Código |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Valor |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Fuente | Datos |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..d6af0911e1
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Guardar
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Campo | Valor |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Personas |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..71be70962e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Valor |
+| ------------- | --------------------------------- |
+| **Field** | Etapa |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Valor |
+| ------------ | ---------------------------------------- |
+| **Object** | Empresa |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Valor |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Acción | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filtro | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Código | Format data for invoicing API |
+| 5 | Solicitud HTTP | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..2d708d6fcb
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Ejemplo |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Campo | Valor |
+| ------------------ | ---------------------------------------------------- |
+| Nombre | `{{trigger.body.firstName}}` |
+| Apellidos | `{{trigger.body.lastName}}` |
+| Correo electrónico | `{{trigger.body.email}}` |
+| Empresa | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..95409cc0d4
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Configurar:
+
+| Campo | Valor |
+| ---------------------------- | ------------------------------- |
+| **Object** | Empresas |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Tipo** | Cliente |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Propietario de la cuenta** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Configurar:
+
+| Campo | Valor |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Tareas |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Configurar:
+
+| Campo | Valor |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Configurar:
+
+| Campo | Valor |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Verificar:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Trigger
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Acciones
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/es/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..ed2f66e8fc
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Configurar:
+
+| Campo | Valor |
+| ---------- | ----------------------------------------------- |
+| **Object** | Oportunidades |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Campo | Valor |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/es/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..88606cf717
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Resumen
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Prerrequisitos
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/es/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/es/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..36a1e32fb2
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Casos de Uso Comunes
+
+| Fuente | Destination | Fields to Copy |
+| ----------- | ----------- | ------------------------------- |
+| Empresa | Oportunidad | Industry, Company Size, ARR |
+| Persona | Oportunidad | Email, Phone, Title |
+| Oportunidad | Empresa | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Configuración
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Configuración
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Configuración
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/es/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Mejores prácticas
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..e467dd76aa
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Casos de Uso Comunes
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Configuración
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Configuración
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Configuración
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Configuración
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Mejores prácticas
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Pruebas
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/es/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..be62b995cf
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Resumen
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configurar:
+
+| Campo | Valor |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/es/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..a386e14ea7
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Professional Services
+description: Obtenga ayuda profesional para construir flujos de trabajo complejos y automatizaciones del equipo de Twenty y socios certificados.
+---
+
+## ¿Cuándo Necesita Ayuda Profesional?
+
+Considere servicios profesionales para:
+
+* Integraciones complejas de múltiples sistemas
+* Lógica empresarial avanzada y reglas de automatización
+* Flujos de trabajo de procesamiento de datos a gran escala
+* Custom API development
+* Capacitación del equipo y optimización del flujo de trabajo
+* Cuando no tiene recursos internos
+
+## Opciones de Servicio
+
+### Paquetes de Incorporación
+
+Obtenga ayuda de nuestro equipo central con nuestros [Paquetes de incorporación](https://twenty.com/onboarding-packages) de 4 horas:
+
+* **Creación de Flujos de Trabajo**: Construya flujos de trabajo personalizados para sus procesos de negocio
+* **Diseño del Modelo de Datos**: Optimice su estructura de datos para la automatización de flujos de trabajo
+* **Migración de Datos**: Importe datos existentes con la integración adecuada de flujos de trabajo
+
+### Socios de Implementación
+
+Trabaje con socios certificados para personalizaciones avanzadas. Contáctenos en contact@twenty.com para conectarse con nuestros [socios de implementación](https://twenty.com/partners).
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..9c6eda7ec8
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Resolución de problemas de flujo de trabajo
+description: Common workflow issues and how to resolve them.
+---
+
+## Problemas Comunes y Soluciones
+
+### Flujo de trabajo no se activa
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Soluciones**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Soluciones**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Soluciones**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Soluciones**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Soluciones**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..f9a3a0bc52
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Tipo | Records Required | Ejecuciones de flujos de trabajo |
+ | ---- | ---------------- | -------------------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/es/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Ejemplos**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/es/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Soluciones**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Límite | Valor | Behavior |
+ | ------ | ----- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..076ea3398e
--- /dev/null
+++ b/packages/twenty-docs/l/es/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Flujos de trabajo
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## Why Workflows Matter
+
+Twenty was built to bring maximum flexibility to its users. En lugar de obligarte a adaptar tus procesos empresariales a características rígidas y preconstruidas, los workflows te permiten crear automatizaciones que configuran el CRM que mejor respalda los casos de uso únicos de tu negocio.
+
+Workflows es la función integrada de Twenty para desarrollar estas automatizaciones. Te ofrecen los bloques para crear exactamente lo que tu negocio necesita, cuando lo necesita.
+
+## ¿Qué puedo hacer con los workflows?
+
+Recomendamos construir automatizaciones con dos propósitos principales:
+
+1. **Automatizaciones internas para facilitar el día a día de tu equipo**: Reduce la cantidad de entradas manuales y tareas repetitivas que ralentizan a tu equipo.
+2. **Incorporar datos dentro y fuera de Twenty**: Conecta Twenty mediante llamadas API y webhooks a tu base de datos y otras herramientas.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Mejores prácticas de flujo de trabajo
+
+* **Editar nombres de pasos**: Renombre los pasos de su flujo de trabajo para describir claramente lo que hace cada uno. Esto ayuda con el mantenimiento y facilita la transferencia a compañeros de trabajo
+* **Aprovechar los datos de pasos anteriores**: Puede usar campos de registros devueltos por cualquier paso anterior en su flujo de trabajo
+* **Comenzar simple**: Inicie con flujos de trabajo básicos y agregue complejidad con el tiempo a medida que se sienta más cómodo con el sistema
+* **Planificar antes de construir**: Trace la lógica de su flujo de trabajo antes de comenzar a construir para evitar quedarse atascado a mitad de camino
+
+## Próximos Pasos
+
+* [Workflow Triggers](/l/es/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/es/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/custom-objects.mdx
new file mode 100644
index 0000000000..c3b12f5531
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/custom-objects.mdx
@@ -0,0 +1,39 @@
+---
+title: Oggetti personalizzati
+---
+
+Gli oggetti sono strutture che permettono di memorizzare dati (record, attributi e valori) specifici di un'organizzazione. Twenty offre sia oggetti standard che personalizzati.
+
+Gli oggetti standard sono oggetti integrati con un set di attributi disponibili per tutti gli utenti. Examples of standard objects in Twenty include Company and Person. Standard objects have standard fields that are also available for all Twenty users, like Company.displayName.
+
+Gli oggetti personalizzati sono oggetti che puoi creare per memorizzare informazioni uniche per la tua organizzazione. Non sono integrati; i membri del tuo workspace possono creare e personalizzare oggetti personalizzati per contenere informazioni non adatte per gli oggetti standard.
+
+## Schema di alto livello
+
+
+
+
+
+
+
+## Come funziona
+
+Gli oggetti personalizzati derivano da tabelle di metadati che determinano la forma, il nome e il tipo degli oggetti. Tutte queste informazioni sono presenti nello schema di metadati, composto da tabelle:
+
+* **DataSource**: Dettagli su dove sono presenti i dati.
+* **Oggetto**: Descrive l'oggetto e si collega a una DataSource.
+* **Campo**: Delinea i campi di un Oggetto e si collega all'Oggetto.
+
+Per aggiungere un oggetto personalizzato, il membro del workspace interrogherà l'API /metadata. Questo aggiorna i metadati di conseguenza e calcola uno schema GraphQL basato sui metadati, memorizzandolo in una cache GQL per un uso successivo.
+
+
+
+
+
+
+
+Per recuperare i dati, il processo consiste nel effettuare interrogazioni tramite l'endpoint /graphql e passarle tramite il Query Resolver.
+
+
+
+
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..41fa580466
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+I flag delle funzionalità vengono utilizzati per nascondere funzionalità sperimentali. Per Twenty, sono impostati a livello di workspace e non a livello utente.
+
+## Adding a new feature flag
+
+In `FeatureFlagKey.ts` aggiungi il flag di funzionalità:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+Aggiungilo anche all'enum in `feature-flag.entity.ts`:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+Per applicare un flag di funzionalità su una funzione **backend** usa:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+Per applicare un flag di funzionalità su una funzione **frontend** usa:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## Configura i flag delle funzionalità per il deployment
+
+Cambia il record corrispondente nella Tabella `core.featureFlag`:
+
+| id | chiave | workspaceId | valore |
+| ------- | ------------------------ | ----------- | ------ |
+| Casuale | `IS_FEATURENAME_ENABLED` | IDWorkspace | `vero` |
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..34a8e92c88
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Architettura delle Cartelle
+info: Uno sguardo dettagliato alla nostra architettura di cartelle del server
+---
+
+The backend directory structure is as follows:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Capacità
+
+Definisce le autorizzazioni e include gestori per ciascuna entità.
+
+## Decoratori
+
+Definisce decoratori personalizzati in NestJS per funzionalità aggiuntive.
+
+Vedi [decoratori personalizzati](https://docs.nestjs.com/custom-decorators) per maggiori dettagli.
+
+## Filtri
+
+Include filtri di eccezione per gestire le eccezioni che potrebbero verificarsi nei punti finali GraphQL.
+
+## Guards
+
+See [guards](https://docs.nestjs.com/guards) for more details.
+
+## Health
+
+Include un'API REST pubblicamente disponibile (healthz) che restituisce un JSON per confermare se il database funziona correttamente.
+
+## Metadati
+
+Definisce oggetti personalizzati e rende disponibile un'API GraphQL (graphql/metadata).
+
+## Workspace
+
+Genera e serve schemi GraphQL personalizzati basati sui metadati.
+
+### Workspace Directory Structure
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+La radice della directory di lavoro include il `workspace.factory.ts`, un file contenente la funzione `createGraphQLSchema`. Questa funzione genera uno schema specifico per il workspace utilizzando i metadati per adattare uno schema per i singoli lavori. Separando la costruzione dello schema e del risolutore, utilizziamo la funzione `makeExecutableSchema`, che combina questi elementi discreti.
+
+Questa strategia non riguarda solo l'organizzazione, ma aiuta anche con l'ottimizzazione, come la memorizzazione nella cache delle definizioni di tipo generate per migliorare le prestazioni e la scalabilità.
+
+### Workspace Schema builder
+
+Genera lo schema GraphQL e include:
+
+#### Factories:
+
+Costruttori specializzati per generare costrutti correlati a GraphQL.
+
+* La fabbrica type.factory traduce i metadati del campo in tipi GraphQL utilizzando `TypeMapperService`.
+* La fabbrica type-definition.factory crea oggetti di input o output GraphQL derivati da `objectMetadata`.
+
+#### Tipi GraphQL
+
+Includes enumerations, inputs, objects, and scalars, and serves as the building blocks for the schema construction.
+
+#### Interfacce e Definizioni di Oggetti
+
+Contiene i progetti per le entità GraphQL e include tipi predefiniti e personalizzati come `MONEY` o `URL`.
+
+#### Servizi
+
+Contains the service responsible for associating FieldMetadataType with its appropriate GraphQL scalar or query modifiers.
+
+#### Storage
+
+Include la classe `TypeDefinitionsStorage` che contiene definizioni di tipo riutilizzabili, evitando la duplicazione di tipi GraphQL.
+
+### Workspace Resolver Builder
+
+Crea funzioni di risolutore per interrogare e modificare lo schema GraphQL.
+
+Each factory in this directory is responsible for producing a distinct resolver type, such as the `FindManyResolverFactory`, designed for adaptable application across various tables.
+
+### Workspace Query Runner
+
+Esegue le query generate sul database e analizza il risultato.
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..f8c55a5382
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,100 @@
+---
+title: Comandi Backend
+---
+
+## Comandi utili
+
+Questi comandi devono essere eseguiti dalla cartella packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### Impostazione iniziale
+
+```
+npx nx database:reset twenty-server # setup the database with dev seeds
+```
+
+### Avvio del server
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # passa --fix per correggere gli errori di lint
+```
+
+### Test
+
+```
+npx nx run twenty-server:test:unit # esegui test unitari
+npx nx run twenty-server:test:integration # esegui test di integrazione
+```
+
+Nota: puoi eseguire `npx nx run twenty-server:test:integration:with-db-reset` nel caso in cui sia necessario resettare il database prima di eseguire i test di integrazione.
+
+### Ripristino del database
+
+Se vuoi resettare e seminare il database, puoi eseguire il seguente comando:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migrazioni
+
+#### Per oggetti negli schemi Core/Metadata (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Per gli oggetti del Workspace
+
+Non ci sono file di migrazioni; le migrazioni sono generate automaticamente per ogni workspace, memorizzate nel database e applicate con questo comando
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ This will drop the database and re-run the migrations and seed.
+
+ Assicurati di eseguire il backup dei dati che vuoi mantenere prima di eseguire questo comando.
+
+
+## Tech Stack
+
+Twenty utilizza principalmente NestJS per il backend.
+
+Prisma è stato il primo ORM che abbiamo usato. Ma per permettere agli utenti di creare campi personalizzati e oggetti personalizzati, un livello più basso aveva più senso poiché abbiamo bisogno di avere un controllo granulare. Il progetto ora utilizza TypeORM.
+
+Ecco come appare ora lo stack tecnologico.
+
+**Core**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Database**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Integrazioni di terze parti**
+
+* [Sentry](https://sentry.io/welcome/) per il tracciamento degli errori
+
+**Testing**
+
+* [Jest](https://jestjs.io/)
+
+**Strumenti**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Sviluppo**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/zapier.mdx
new file mode 100644
index 0000000000..a6a28e2277
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/zapier.mdx
@@ -0,0 +1,81 @@
+---
+title: App di Zapier
+---
+
+Sincronizza facilmente Twenty con oltre 3000 app utilizzando [Zapier](https://zapier.com/). Automatizza le attività, aumenta la produttività e potenzia le relazioni con i clienti!
+
+## Informazioni su Zapier
+
+Zapier è uno strumento che ti permette di automatizzare i flussi di lavoro collegando le app che il tuo team usa quotidianamente. Il concetto fondamentale di Zapier sono i flussi di lavoro automatici, chiamati Zaps, che includono trigger e azioni.
+
+Puoi saperne di più su come funziona Zapier [qui](https://zapier.com/how-it-works).
+
+## Setup
+
+### Passo 1: Installa i pacchetti di Zapier
+
+```bash
+cd packages/twenty-zapier\n\nyarn
+```
+
+### Step 2: Login with the CLI
+
+Usa le tue credenziali Zapier per accedere usando il CLI:
+
+```bash
+zapier login
+```
+
+### Step 3: Set environment variables
+
+Dalla cartella `packages/twenty-zapier`, esegui:
+
+```bash
+cp .env.example .env
+```
+
+Esegui l'applicazione localmente, vai su [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks) e genera una chiave API.
+
+Sostituisci il valore **YOUR_API_KEY** nel file `.env` con la chiave API appena generata.
+
+## Sviluppo
+
+
+ Assicurati di eseguire `yarn build` prima di qualsiasi comando `zapier`.
+
+
+### Test
+
+```bash
+yarn test
+```
+
+### Lint
+
+```bash
+yarn format
+```
+
+### Osserva e compila mentre modifichi il codice
+
+```bash
+yarn watch
+```
+
+### Convalida la tua app Zapier
+
+```bash
+yarn validate
+```
+
+### Distribuisci la tua app Zapier
+
+```bash
+yarn deploy
+```
+
+### Elenca tutti i comandi del CLI di Zapier
+
+```bash
+zapier
+```
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..d529c574cc
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Segnalazione Bug
+
+To report a bug, please [create an issue on GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+Puoi anche chiedere aiuto su [Discord](https://discord.gg/cx5n4Jzs57).
+
+## Richieste di Funzionalità
+
+If you're not sure if it's a bug, and you feel it's closer to a feature request, then you should probably [open a discussion instead](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Prima di Iniziare
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..427fff73db
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,325 @@
+---
+title: Migliori Pratiche
+---
+
+Questo documento descrive le migliori pratiche da seguire quando si lavora sul frontend.
+
+## Gestione dello Stato
+
+React e Recoil gestiscono la gestione dello stato nella base di codice.
+
+### Usa `useRecoilState` per memorizzare lo stato
+
+È buona pratica creare tanti atomi quanti servono per memorizzare il tuo stato.
+
+
+ È meglio usare atomi extra piuttosto che cercare di essere troppo concisi con l'iniezione di props.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default value',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Non utilizzare `useRef` per memorizzare lo stato
+
+Evita di usare `useRef` per memorizzare lo stato.
+
+Se vuoi memorizzare lo stato, dovresti usare `useState` o `useRecoilState`.
+
+Consulta [come gestire i re-render](#managing-re-renders) se senti che hai bisogno di `useRef` per evitare alcuni re-render.
+
+## Gestione dei Re-Render
+
+I re-render possono essere difficili da gestire in React.
+
+Ecco alcune regole da seguire per evitare re-render non necessari.
+
+Tieni presente che puoi **sempre** evitare i re-render comprendendo la loro causa.
+
+### Lavora a livello radice
+
+Evitare i re-render in nuove funzionalità è ora più semplice eliminandoli a livello radice.
+
+Il componente sidecar `PageChangeEffect` contiene un solo `useEffect` che detiene tutta la logica da eseguire su un cambio di pagina.
+
+In questo modo sai che c'è solo un luogo che può attivare un re-render.
+
+### Pensa sempre due volte prima di aggiungere `useEffect` nel tuo codice
+
+I re-render sono spesso causati da `useEffect` non necessari.
+
+Dovresti pensare se hai bisogno di `useEffect`, o se puoi spostare la logica in una funzione gestore di eventi.
+
+Troverai generalmente facile spostare la logica in una funzione `handleClick` o `handleChange`.
+
+Puoi trovarli anche in librerie come Apollo: `onCompleted`, `onError`, ecc.
+
+### Usa un componente simile per estrarre la logica `useEffect` o di recupero dati
+
+Se senti di dover aggiungere un `useEffect` nel tuo componente radice, dovresti considerare di estrarlo in un componente sidecar.
+
+Puoi applicare lo stesso per la logica di recupero dati, con i hook di Apollo.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Usa stati di famiglia recoil e selettori di famiglia recoil
+
+Gli stati e i selettori di famiglia Recoil sono un ottimo modo per evitare re-render.
+
+Sono utili quando hai bisogno di memorizzare una lista di elementi.
+
+### Non dovresti usare `React.memo(MyComponent)`
+
+Evita di usare `React.memo()` perché non risolve la causa del re-render, ma interrompe invece la catena di re-render, il che può portare a comportamenti inaspettati e rendere il codice molto difficile da rifattorizzare.
+
+### Limita l'uso di `useCallback` o `useMemo`
+
+Spesso non sono necessari e renderanno il codice più difficile da leggere e mantenere per un guadagno di prestazioni che è impercettibile.
+
+## Console.logs
+
+Le dichiarazioni `console.log` sono preziose durante lo sviluppo, offrendo informazioni in tempo reale sui valori delle variabili e sul flusso del codice. But, leaving them in production code can lead to several issues:
+
+1. **Prestazioni**: Un logging eccessivo può influire sulle prestazioni di runtime, soprattutto nelle applicazioni lato client.
+
+2. **Sicurezza**: Registrare dati sensibili può esporre informazioni critiche a chiunque ispezioni la console del browser.
+
+3. **Pulizia**: Riempire la console di log può oscurare avvertimenti o errori importanti che sviluppatori o strumenti devono vedere.
+
+4. **Professionalità**: Gli utenti finali o i clienti che controllano la console e vedono una miriade di dichiarazioni di log potrebbero mettere in dubbio la qualità e la raffinatezza del codice.
+
+Assicurati di rimuovere tutti i `console.logs` prima di distribuire il codice in produzione.
+
+## Denominazione
+
+### Denominazione delle Variabili
+
+I nomi delle variabili dovrebbero descrivere precisamente lo scopo o la funzione della variabile.
+
+#### Il problema con i nomi generici
+
+I nomi generici nella programmazione non sono ideali perché mancano di specificità, portando all'ambiguità e riducendo la leggibilità del codice. Tali nomi non riescono a trasmettere lo scopo della variabile o della funzione, rendendo difficile per gli sviluppatori comprendere l'intento del codice senza un'indagine più approfondita. Questo può risultare in tempi di debug più lunghi, maggiore suscettibilità agli errori e difficoltà nella manutenzione e nella collaborazione. Nel frattempo, una denominazione descrittiva rende il codice autoesplicativo e più facile da navigare, migliorando la qualità del codice e la produttività dello sviluppatore.
+
+```tsx
+// ❌ Bad, uses a generic name that doesn't communicate its
+// purpose or content clearly
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Good, uses a descriptive name
+const [email, setEmail] = useState('');
+```
+
+#### Alcune parole da evitare nei nomi delle variabili
+
+* fittizio
+
+### Gestori di Eventi
+
+I nomi dei gestori degli eventi dovrebbero iniziare con `handle`, mentre `on` è un prefisso usato per nominare gli eventi nelle props dei componenti.
+
+```tsx
+// ❌ Bad
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Good
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Props Opzionali
+
+Evita di passare il valore predefinito per una prop opzionale.
+
+**ESEMPIO**
+
+Guarda il componente `EmailField` definito di seguito:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Utilizzo**
+
+```tsx
+// ❌ Bad, passing in the same value as the default value adds no value
+const Form = () => ;
+```
+
+```tsx
+// ✅ Good, assumes the default value
+const Form = () => ;
+```
+
+## Componente come props
+
+Cercate, per quanto possibile, di passare componenti non istanziati come props, così i figli possono decidere autonomamente quali props devono passare.
+
+L'esempio più comune per questo sono i componenti icona:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Per far sì che React capisca che il componente è un componente, è necessario usare PascalCase, per poi istanziarlo con ``.
+
+## Prop Drilling: Mantienilo Minimal
+
+Il prop drilling, nel contesto di React, si riferisce alla pratica di passare variabili di stato e i loro setter attraverso molti livelli di componenti, anche se i componenti intermedi non li usano. Anche se a volte è necessario, un eccessivo prop drilling può portare a:
+
+1. **Diminuzione della leggibilità**: Tracciare da dove proviene un prop o dove viene utilizzato può diventare complicato in una struttura di componenti profondamente nidificata.
+
+2. **Sfide di manutenzione**: Cambiamenti nella struttura dei props di un componente potrebbero richiedere aggiustamenti in diversi componenti, anche se non utilizzano direttamente il prop.
+
+3. **Ridotta riutilizzabilità del componente**: Un componente che riceve molti props solo per passarli diventa meno generico e più difficile da riutilizzare in contesti diversi.
+
+Se ritieni di utilizzare eccessivo prop drilling, vedi [migliori pratiche di gestione dello stato](#state-management).
+
+## Importa
+
+Quando importi, opta per gli alias designati anziché specificare percorsi completi o relativi.
+
+**The Aliases**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Utilizzo**
+
+```tsx
+// ❌ Bad, specifies the entire relative path
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Good, utilises the designated aliases
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Validazione dello Schema
+
+[Zod](https://github.com/colinhacks/zod) è il validatore di schema per oggetti non tipizzati:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email must be a valid email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Modifiche Incompatibili
+
+Esegui sempre test manuali approfonditi prima di procedere per garantire che le modifiche non abbiano causato interruzioni altrove, dato che i test non sono ancora stati ampiamente integrati.
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..4d7537e226
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Architettura delle Cartelle
+info: Uno sguardo dettagliato all'architettura delle nostre cartelle
+---
+
+In questa guida, esplorerai i dettagli della struttura delle directory del progetto e come contribuisce all'organizzazione e alla manutenibilità di Twenty.
+
+By following this folder architecture convention, it's easier to find the files related to specific features and ensure that the application is scalable and maintainable.
+
+```
+fronte
+└───moduli
+│ └───modulo1
+│ │ └───sottomodulo1
+│ └───modulo2
+│ └───ui
+│ │ └───schermo
+│ │ └───ingressi
+│ │ │ └───bottoni
+│ │ └───...
+└───pagine
+└───...
+```
+
+## Pagine
+
+Include i componenti di alto livello definiti dalle rotte dell'applicazione. Importano componenti di livello inferiore dalla cartella modules (vedi dettagli sotto).
+
+## Moduli
+
+Ogni modulo rappresenta una funzionalità o un gruppo di funzionalità, comprendente i suoi componenti specifici, stati e logica operativa.
+Dovrebbero tutti seguire la struttura sottostante. Puoi nidificare moduli all'interno di moduli (indicati come sottomoduli) e le stesse regole si applicano.
+
+```
+modulo1
+ └───componenti
+ │ └───componente1
+ │ └───componente2
+ └───costanti
+ └───contesti
+ └───graphql
+ │ └───frammenti
+ │ └───query
+ │ └───mutazioni
+ └───hook
+ │ └───interni
+ └───stati
+ │ └───selettori
+ └───tipi
+ └───utilità
+```
+
+### Contesti
+
+Un contesto è un modo per passare dati attraverso l'albero dei componenti senza dover trasmettere i props manualmente a ogni livello.
+
+Vedi [React Context](https://react.dev/reference/react#context-hooks) per ulteriori dettagli.
+
+### GraphQL
+
+Include frammenti, query e mutazioni.
+
+Vedi [GraphQL](https://graphql.org/learn/) per ulteriori dettagli.
+
+* Frammenti
+
+Un frammento è un pezzo riutilizzabile di una query, che puoi usare in posti diversi. Usando i frammenti, è più facile evitare la duplicazione di codice.
+
+Vedi [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) per ulteriori dettagli.
+
+* Query
+
+Vedi [GraphQL Queries](https://graphql.org/learn/queries/) per ulteriori dettagli.
+
+* Mutazioni
+
+Vedi [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) per ulteriori dettagli.
+
+### Hook
+
+Vedi [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) per ulteriori dettagli.
+
+### Stati
+
+Contiene la logica di gestione degli stati. [RecoilJS](https://recoiljs.org) se ne occupa.
+
+* Selettori: Vedi [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) per ulteriori dettagli.
+
+La gestione degli stati integrata di React si occupa ancora dello stato all'interno di un componente.
+
+### Utilità
+
+Dovrebbe contenere solo funzioni pure riutilizzabili. Otherwise, create custom hooks in the `hooks` folder.
+
+## UI
+
+Contiene tutti i componenti UI riutilizzabili usati nell'applicazione.
+
+Questa cartella può contenere sottocartelle, come `data`, `display`, `feedback` e `input` per tipi specifici di componenti. Ogni componente dovrebbe essere autonomo e riutilizzabile, così da poterlo utilizzare in diverse parti dell'applicazione.
+
+Separando i componenti UI dagli altri componenti nella cartella `modules`, è più facile mantenere un design coerente e apportare modifiche alla UI senza influenzare altre parti (logica di business) del codice.
+
+## Interfaccia e dipendenze
+
+Puoi importare codice di altri moduli da qualsiasi modulo, tranne la cartella `ui`. Questo manterrà il suo codice facile da testare.
+
+### Interni
+
+Ogni parte (hook, stati, ...) di un modulo può avere una cartella `internal`, che contiene le parti utilizzate solo all'interno del modulo.
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..25bd6ae987
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: Guida di stile
+---
+
+Questo documento include le regole da seguire quando si scrive codice.
+
+L'obiettivo qui è avere una base di codice coerente, facile da leggere e da mantenere.
+
+Per questo, è meglio essere un po' più dettagliati che troppo concisi.
+
+Tieni sempre a mente che le persone leggono il codice più spesso di quanto non lo scrivano, soprattutto in un progetto open source, dove chiunque può contribuire.
+
+Ci sono molte regole che non sono definite qui, ma che vengono controllate automaticamente dai linters.
+
+## React
+
+### Usa componenti funzionali
+
+Usa sempre componenti funzionali TSX.
+
+Non utilizzare l'`import` di default con `const`, perché è più difficile da leggere e importare con il completamento del codice.
+
+```tsx
+// ❌ Male, più difficile da leggere, più difficile da importare con il completamento del codice
+const MyComponent = () => {
+ return Ciao Mondo
;
+};
+
+export default MyComponent;
+
+// ✅ Bene, facile da leggere, facile da importare con il completamento del codice
+export function MyComponent() {
+ return Ciao Mondo
;
+};
+```
+
+### Props
+
+Crea il tipo di proprietà e chiamalo `(ComponentName)Props` se non c'è bisogno di esportarle.
+
+Usa la destrutturazione delle props.
+
+```tsx
+// ❌ Male, nessun tipo
+export const MyComponent = (props) => Ciao {props.name}
;
+
+// ✅ Bene, tipo
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Ciao {name}
;
+```
+
+#### Evita di usare `React.FC` o `React.FunctionComponent` per definire i tipi di proprietà
+
+```tsx
+/* ❌ - Male, definisce le annotazioni dei tipi di componenti con `FC`
+ * - Con `React.FC`, il componente accetta implicitamente una prop `children`
+ * anche se non è definita nel tipo di prop. Questo potrebbe non essere
+ * sempre desiderabile, soprattutto se il componente non intende rendere
+ * children.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### Nessuna espansione singola delle variabili delle props negli elementi JSX
+
+Evita di usare l'espansione singola delle variabili delle props negli elementi JSX, come `{...props}`. Questa pratica spesso porta a un codice meno leggibile e più difficile da mantenere perché non è chiaro quali props stia ricevendo il componente.
+
+```tsx
+/* ❌ - Male, espande una singola variabile di prop nel componente sottostante
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Ragionamento:
+
+* A colpo d'occhio, è più chiaro quali props il codice passa, rendendo più semplice comprenderlo e mantenerlo.
+* Aiuta a prevenire un accoppiamento stretto tra i componenti attraverso le loro props.
+* Gli strumenti di linting rendono più facile identificare le props mal scritte o non utilizzate quando si elencano esplicitamente.
+
+## JavaScript
+
+### Usa l'operatore di coalescenza dei valori null `??`
+
+```tsx
+// ❌ Male, può restituire 'default' anche se il valore è 0 o ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Bene, restituirà 'default' solo se il valore è null o undefined
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Usa il collegamento delle opzioni `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Usa `type` invece di `interface`
+
+Usa sempre `type` invece di `interface`, perché quasi sempre si sovrappongono, e `type` è più flessibile.
+
+```tsx
+// ❌ Male
+interface MyInterface {
+ name: string;
+}
+
+// ✅ Bene
+type MyType = {
+ name: string;
+};
+```
+
+### Usa letterali di stringa invece di enum
+
+[I letterali di stringa](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) sono la modalità preferita per gestire valori simili agli enum in TypeScript. Sono più facili da estendere con Pick e Omit e offrono una migliore esperienza per lo sviluppatore, in particolare con il completamento del codice.
+
+Puoi vedere perché TypeScript consiglia di evitare gli enum [qui](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Male, utilizza un enum
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ Bene, utilizza un letterale di stringa
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL e librerie interne
+
+Dovresti usare gli enum che il codegen GraphQL genera.
+
+È anche meglio usare un enum quando si utilizza una libreria interna, così la libreria interna non deve esporre un tipo di letterale di stringa che non è correlato all'API interna.
+
+Esempio:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Stile
+
+### Usa StyledComponents
+
+Stile i componenti con [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Male
+Ciao Mondo
+```
+
+```tsx
+// ✅ Bene
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Prefissi i componenti stilizzati con "Styled" per differenziarli dai componenti "reali".
+
+```tsx
+// ❌ Male
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Bene
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Tematizzazione
+
+Utilizzare il tema per la maggior parte della stilizzazione dei componenti è l'approccio preferito.
+
+#### Unità di misura
+
+Evita di usare `px` o valori `rem` direttamente nei componenti stilizzati. I valori necessari sono generalmente già definiti nel tema, quindi è consigliato sfruttare il tema per questi scopi.
+
+#### Colori
+
+Evita di introdurre nuovi colori; usa invece la palette esistente nel tema. Nel caso in cui la palette non sia adeguata, procedi lasciando un commento affinché il team possa risolvere.
+
+```tsx
+// ❌ Male, specifica direttamente i valori di stile senza utilizzare il tema
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Bene, sfrutta il tema
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Applicare importazioni senza tipo
+
+Evita le importazioni di tipo. Per far rispettare questo standard, una regola di ESLint controlla e segnala qualsiasi violazione delle importazioni di tipo. Questo aiuta a mantenere la coerenza e la leggibilità del codice TypeScript.
+
+```tsx
+// ❌ Male
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Male
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Bene
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Perché evitare importazioni di tipo
+
+* **Coerenza**: Evitando le importazioni di tipo e usando un unico approccio sia per le importazioni di tipo che di valore, il codice rimane coerente nel suo stile di importazione dei moduli.
+
+* **Leggibilità**: Le importazioni senza tipo migliorano la leggibilità del codice rendendo chiaro quando si stanno importando valori o tipi. Questo riduce l'ambiguità e rende più semplice comprendere lo scopo dei simboli importati.
+
+* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code.
+
+### Regola ESLint
+
+An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. This rule will generate errors or warnings for any type import violations.
+
+Please note that this rule specifically addresses rare edge cases where unintentional type imports occur. TypeScript stesso scoraggia questa pratica, come menzionato nelle [note di rilascio di TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). Nella maggior parte delle situazioni, non si dovrebbe aver bisogno di usare importazioni di solo tipo.
+
+Per assicurarti che il tuo codice sia conforme a questa regola, assicurati di eseguire ESLint come parte del tuo flusso di lavoro di sviluppo.
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..fa86409e10
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,58 @@
+---
+title: Lavora con Figma
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+Figma è uno strumento di progettazione dell'interfaccia collaborativa che aiuta a colmare il divario comunicativo tra designer e sviluppatori.
+Questa guida spiega come puoi collaborare con Figma.
+
+## Accesso
+
+1. **Accedi al link condiviso:** Puoi accedere al file Figma del progetto [qui](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **Accedi:** Se non hai ancora effettuato l'accesso, Figma ti inviterà a farlo.
+ Le funzionalità chiave sono disponibili solo per gli utenti connessi, come la modalità sviluppatore e la possibilità di selezionare un telaio dedicato.
+
+
+ Non sarai in grado di collaborare efficacemente senza un account.
+
+
+## Struttura di Figma
+
+On the left sidebar, you can access the different pages of Twenty's Figma. Ecco come sono organizzate:
+
+* **Pagina dei componenti:** Questa è la prima pagina. Il designer la usa per creare e organizzare gli elementi di design riutilizzabili impiegati in tutto il file di design. Ad esempio, pulsanti, icone, simboli o qualsiasi altro componente riutilizzabile. Serve a mantenere la coerenza nel design.
+* **Pagina principale:** La seconda pagina è la pagina principale, che mostra l'interfaccia utente completa del progetto. Puoi premere ***Play*** per utilizzare il prototipo completo dell'app.
+* **Pagine delle caratteristiche:** Le altre pagine sono generalmente dedicate alle caratteristiche in corso di sviluppo. Contengono il design di caratteristiche specifiche o moduli dell'applicazione o del sito web. Sono generalmente ancora in fase di sviluppo.
+
+## Suggerimenti utili
+
+Con l'accesso in sola lettura, non puoi modificare il design, ma puoi accedere a tutte le caratteristiche che saranno utili per convertire i design in codice.
+
+### Usa la modalità Dev
+
+La modalità Dev di Figma migliora la produttività degli sviluppatori offrendo facile navigazione nel design, gestione efficace delle risorse, strumenti di comunicazione efficienti, integrazioni toolbox, rapidi frammenti di codice e informazioni chiave sui layer, colmando il divario tra design e sviluppo. Puoi saperne di più sulla modalità Dev [qui](https://www.figma.com/dev-mode/).
+
+Cambia alla modalità "Sviluppatore" nella parte destra della barra degli strumenti per vedere le specifiche del design, copiare il CSS e accedere alle risorse.
+
+### Usa il Prototipo
+
+Fai clic su qualsiasi elemento del canvas e premi il pulsante "Play" nell'angolo in alto a destra dell'interfaccia per accedere alla visuale del prototipo. La modalità Prototipo ti permette di interagire con il design come se fosse il prodotto finale. Dimostra il flusso tra gli schermi e il comportamento degli elementi dell'interfaccia come pulsanti, link o menu quando interagiti.
+
+1. **Comprendere transizioni e animazioni:** Nella modalità Prototipo, puoi vedere qualsiasi transizione o animazione aggiunta da un designer tra gli schermi o gli elementi dell'interfaccia utente, fornendo ai sviluppatori istruzioni visive chiare sul comportamento e lo stile previsto.
+2. **Chiarimento dell'implementazione:** Un prototipo può anche aiutare a ridurre le ambiguità. Gli sviluppatori possono interagire con esso per ottenere una migliore comprensione della funzionalità o dell'aspetto di particolari elementi.
+
+Per dettagli e consigli più completi sull'apprendimento della piattaforma Figma, puoi visitare la [Documentazione ufficiale di Figma](https://help.figma.com/hc/en-us).
+
+### Misura le distanze
+
+Seleziona un elemento, tieni premuto il tasto `Option` (Mac) o `Alt` (Windows), quindi passa con il mouse su un altro elemento per vedere la distanza tra di loro.
+
+### Estensione Figma per VSCode (Consigliata)
+
+[Figma per VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) ti permette di navigare e ispezionare i file di design, collaborare con i designer, tracciare i cambiamenti e velocizzare l'implementazione - tutto senza lasciare il tuo editor di testo.
+Fa parte delle nostre estensioni consigliate.
+
+## Collaborazione
+
+1. **Utilizzo dei commenti:** Puoi utilizzare la funzione commento cliccando sull'icona a forma di fumetto nella parte sinistra della barra degli strumenti.
+2. **Chat del cursore:** Una caratteristica interessante di Figma è la chat del cursore. Premi `;` su Mac e `/` su Windows per inviare un messaggio se vedi qualcun altro utilizzare Figma nello stesso momento.
diff --git a/packages/twenty-docs/l/it/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/it/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..115b135ba0
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: Configurazione Locale
+description: La guida per i collaboratori (o sviluppatori curiosi) che vogliono eseguire Twenty localmente.
+---
+
+## Prerequisiti
+
+
+
+ Prima di poter installare e usare Twenty, assicurati di installare quanto segue sul tuo computer:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` non funzionerà, dovresti usare `yarn` invece. Yarn è ora incluso con Node.js, quindi non è necessario installarlo separatamente.
+ Devi solo eseguire `corepack enable` per abilitare Yarn se non l'hai ancora fatto.
+
+
+
+
+ 1. Installa WSL
+ Apri PowerShell come amministratore ed esegui:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Dovresti ora vedere un prompt per riavviare il computer. In caso contrario, riavvialo manualmente.
+
+ Al riavvio, si aprirà una finestra di PowerShell e installerà Ubuntu. Questo potrebbe richiedere un po' di tempo.
+ Vedrai un prompt per creare un nome utente e una password per la tua installazione di Ubuntu.
+
+ 2. Installa e configura Git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Your Name"
+
+ git config --global user.email "youremail@domain.com"
+ ```
+
+ 3. Installa nvm, node.js e yarn
+
+
+ Usa `nvm` per installare la versione corretta di `node`. Il file `.nvmrc` garantisce che tutti i collaboratori utilizzino la stessa versione.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Chiudi e riapri il tuo terminale per usare nvm. Poi esegui i seguenti comandi.
+
+ ```bash
+
+ nvm install # installa la versione di node raccomandata
+
+ nvm use # usa la versione di node raccomandata
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Passaggio 1: Clona con Git
+
+Nel tuo terminale, esegui il seguente comando.
+
+
+
+ Se non hai già configurato le chiavi SSH, puoi imparare come farlo [qui](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Passaggio 2: Posizionati alla radice
+
+```bash
+cd twenty
+```
+
+Dovresti eseguire tutti i comandi nei passaggi successivi dalla radice del progetto.
+
+## Passaggio 3: Configura un database PostgreSQL
+
+
+
+ **Opzione 1 (preferita):** Per predisporre il database in locale:
+ Usa il seguente link per installare PostgreSQL sulla tua macchina Linux: [Installazione di PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Nota: Potrebbe essere necessario aggiungere `sudo -u postgres` al comando prima di `psql` per evitare errori di permessi.
+
+ **Opzione 2:** Se hai Docker installato:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Opzione 1 (preferita):** Per predisporre il database in locale con `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Puoi verificare se il server PostgreSQL è in esecuzione eseguendo:
+
+ ```bash
+ brew services list
+ ```
+
+ L'installatore potrebbe non creare l'utente `postgres` di default quando si installa
+ tramite Homebrew su MacOS. Invece, crea un ruolo di PostgreSQL che corrisponde al tuo nome utente macOS
+ (es., "john").
+ Per controllare e creare l'utente `postgres` se necessario, segui questi passaggi:
+
+ ```bash
+ # Connetti a PostgreSQL
+ psql postgres
+ o
+ psql -U $(whoami) -d postgres
+ ```
+
+ Una volta nel prompt di psql (postgres=#), esegui:
+
+ ```bash
+ # Elenca i ruoli di PostgreSQL esistenti
+ \du
+ ```
+
+ Vedrai un output simile a:
+
+ ```bash
+ Nome ruolo | Attributi | Membro di
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Se non vedi un ruolo `postgres` elencato, procedi al passo successivo.
+ Crea manualmente il ruolo `postgres`:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Questo crea un ruolo superuser chiamato `postgres` con accesso di login.
+
+ **Opzione 2:** Se hai Docker installato:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Tutti i passaggi seguenti devono essere eseguiti nel terminale WSL (all'interno della tua macchina virtuale)
+
+ **Opzione 1:** Per predisporre PostgreSQL in locale:
+ Usa il seguente link per installare PostgreSQL nella tua macchina virtuale Linux: [Installazione di PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Nota: Potrebbe essere necessario aggiungere `sudo -u postgres` al comando prima di `psql` per evitare errori di permessi.
+
+ **Opzione 2:** Se hai Docker installato:
+ Eseguire Docker su WSL aggiunge un livello extra di complessità.
+ Usa questa opzione solo se ti senti a tuo agio con i passaggi extra coinvolti, incluso l'attivazione di [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Puoi ora accedere al database su [localhost:5432](localhost:5432), con utente `postgres` e password `postgres`.
+
+## Passaggio 4: Configura un database Redis (cache)
+
+Twenty richiede una cache Redis per offrire le migliori prestazioni
+
+
+
+ **Opzione 1:** Per predisporre Redis in locale:
+ Usa il seguente link per installare Redis sulla tua macchina Linux: [Installazione di Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opzione 2:** Se hai Docker installato:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opzione 1 (preferita):** Per predisporre Redis in locale con `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Avvia il tuo server Redis:
+ `brew services start redis`
+
+ **Opzione 2:** Se hai Docker installato:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opzione 1:** Per predisporre Redis in locale:
+ Usa il seguente link per installare Redis sulla tua macchina virtuale Linux: [Installazione di Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opzione 2:** Se hai Docker installato:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Se hai bisogno di una GUI client, ti consigliamo [Redis Insight](https://redis.io/insight/) (versione gratuita disponibile)
+
+## Passaggio 5: Configura le variabili d'ambiente
+
+Usa variabili d'ambiente o file `.env` per configurare il tuo progetto. Maggiori informazioni [qui](/l/it/developers/self-host/capabilities/setup)
+
+Copia i file `.env.example` in `/front` e `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/it/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Passaggio 6: Installazione delle dipendenze
+
+Per costruire il server Twenty e popolare alcuni dati nel tuo database, esegui il seguente comando:
+
+```bash
+yarn
+```
+
+Nota che `npm` o `pnpm` non funzioneranno
+
+## Passaggio 7: Esecuzione del progetto
+
+
+
+ A seconda della tua distribuzione Linux, il server Redis potrebbe essere avviato automaticamente.
+ In caso contrario, controlla la [guida all'installazione di Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) per la tua distribuzione.
+
+
+
+ Redis dovrebbe essere già in esecuzione. In caso contrario, esegui:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ A seconda della tua distribuzione Linux, il server Redis potrebbe essere avviato automaticamente.
+ In caso contrario, controlla la [guida all'installazione di Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) per la tua distribuzione.
+
+
+
+Configura il tuo database con il seguente comando:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Avvia il server, il worker e i servizi del frontend:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+In alternativa, puoi avviare tutti i servizi contemporaneamente:
+
+```bash
+npx nx start
+```
+
+## Passo 8: Utilizza Twenty
+
+**Frontend**
+
+Il frontend di Twenty sarà in esecuzione su [http://localhost:3001](http://localhost:3001).
+Puoi accedere utilizzando l'account demo predefinito: `tim@apple.dev` (password: `tim@apple.dev`)
+
+**Backend**
+
+* Il server di Twenty sarà attivo e funzionante su [http://localhost:3000](http://localhost:3000)
+* L'API GraphQL è accessibile su [http://localhost:3000/graphql](http://localhost:3000/graphql)
+* L'API REST è raggiungibile su [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## Risoluzione dei problemi
+
+Se riscontri problemi, controlla [Risoluzione dei problemi](/l/it/developers/self-host/capabilities/troubleshooting) per le soluzioni.
diff --git a/packages/twenty-docs/l/it/developers/contribute/contribute.mdx b/packages/twenty-docs/l/it/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..622d1eff4b
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Panoramica
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/it/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/it/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..da106b1f2d
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: API
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty was built to be developer-friendly, offering powerful APIs that adapt to your custom data model. Forniamo quattro tipi distinti di API per soddisfare diverse esigenze di integrazione.
+
+## Approccio incentrato sullo sviluppatore
+
+Twenty generates APIs specifically for your data model:
+
+* **Nessun ID lungo richiesto**: Utilizza direttamente i nomi degli oggetti e dei campi negli endpoint
+* **Oggetti standard e personalizzati trattati allo stesso modo**: I tuoi oggetti personalizzati ricevono lo stesso trattamento API di quelli predefiniti
+* **Endpoint dedicati**: Ogni oggetto e campo ottiene il proprio endpoint API
+* **Documentazione personalizzata**: Generata specificamente per il modello di dati del tuo workspace
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### Core API
+
+Accessibile su `/rest/` o `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Gestire le relazioni dei record
+
+### Metadata API
+
+Accessibile su `/rest/metadata/` o `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Crea, modifica o elimina oggetti e campi
+* Configura le impostazioni del workspace
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Formato | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## Endpoint API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Autenticazione
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Crea una chiave API
+
+1. Go to **Settings → APIs & Webhooks**
+2. Click **+ Create key**
+3. Configura:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Clicca su **Salva**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Click on the role to assign
+3. Apri la scheda **Assegnazione**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/it/user-guide/permissions-access/capabilities/permissions) for details.
+
+### Gestisci chiavi API
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Go to **Settings → APIs & Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Operazioni Batch
+
+Both REST and GraphQL support batch operations:
+
+* **Dimensione batch**: Fino a 60 record per richiesta
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | Valore |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/it/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/it/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..add3992b27
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Prerequisiti
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+From here you can:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Autenticazione
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Esempi:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Risoluzione dei problemi
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/it/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/it/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..630788caa9
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooks
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Crea un Webhook
+
+1. Vai a **Impostazioni → API e Webhook → Webhook**
+2. Clicca su **+ Crea webhook**
+3. Enter your webhook URL (must be publicly accessible)
+4. Clicca su **Salva**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Gestisci Webhook
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Eventi
+
+Twenty sends webhooks for these event types:
+
+| Evento | Esempio |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Campo | Descrizione |
+| ----------- | ------------------------------------------------ |
+| `evento` | What happened (e.g., `person.created`) |
+| `dati` | The full record that was created/updated/deleted |
+| `timestamp` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Convalida del Webhook
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Intestazione | Descrizione |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Metodo | Direzione | Use Case |
+| ---------------------------- | --------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/it/developers/extend/extend.mdx b/packages/twenty-docs/l/it/developers/extend/extend.mdx
new file mode 100644
index 0000000000..9a2765d51b
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Panoramica
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/it/developers/introduction.mdx b/packages/twenty-docs/l/it/developers/introduction.mdx
new file mode 100644
index 0000000000..9a9e392d4d
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/it/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/it/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..c397b27f12
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Altri metodi
+---
+
+
+ Questo documento è mantenuto dalla comunità. Potrebbe contenere problemi.
+
+
+## Kubernetes tramite Terraform e Manifest
+
+Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+Distribuisci Twenty sui server utilizzando Coolify. (L'immagine ufficiale su Coolify sarà disponibile a breve)
+
+[Documentazione di Coolify](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Distribuisci Twenty su EasyPanel con il modello mantenuto dalla comunità di seguito.
+
+[Distribuisci su EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Distribuisci Twenty sui server con Elest.io utilizzando il link sottostante.
+
+[Distribuisci su Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty su Railway
+
+Distribuisci Twenty su Railway con il modello mantenuto dalla comunità di seguito.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty su Sealos
+
+Distribuisci Twenty su Sealos con il modello mantenuto dalla comunità di seguito.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Altro
+
+Sentiti libero di aprire un PR per aggiungere più opzioni di provider Cloud.
diff --git a/packages/twenty-docs/l/it/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/it/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..99b8c7501a
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Click con Docker Compose
+---
+
+
+ I container Docker sono per hosting in produzione o auto-hosting, per il contributo consulta il [Setup Locale](/l/it/developers/contribute/capabilities/local-setup).
+
+
+## Panoramica
+
+Questa guida fornisce istruzioni passo passo per installare e configurare l'applicazione Twenty usando Docker Compose. L'obiettivo è rendere il processo semplice ed evitare gli errori comuni che potrebbero compromettere il tuo setup.
+
+**Importante:** Modifica solo le impostazioni esplicitamente menzionate in questa guida. Modificare altre configurazioni potrebbe portare a problemi.
+
+Consulta i documenti [Configurazione delle Variabili di Ambiente](/l/it/developers/self-host/capabilities/setup) per configurazioni avanzate. Tutte le variabili di ambiente devono essere dichiarate nel file docker-compose.yml a livello di server e/o di worker a seconda della variabile.
+
+## Requisiti di Sistema
+
+* RAM: Assicurati che il tuo ambiente abbia almeno 2GB di RAM. Memoria insufficiente può causare arresti anomali dei processi.
+* Docker & Docker Compose: Assicurati che entrambi siano installati e aggiornati.
+
+## Opzione 1: Script a riga singola
+
+Installa l'ultima versione stabile di Twenty con un unico comando:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Per installare una versione o un ramo specifico:
+
+```bash
+VERSION=vx.y.z BRANCH=nome-ramo bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Sostituisci x.y.z con il numero di versione desiderato.
+* Sostituisci nome-ramo con il nome del ramo che vuoi installare.
+
+## Opzione 2: Passaggi manuali
+
+Segui questi passaggi per un setup manuale.
+
+### Passo 1: Configura il File di Ambiente
+
+1. **Crea il File .env**
+
+ Copia il file di ambiente di esempio in un nuovo file .env nella tua directory di lavoro:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Genera Token Segreti**
+
+ Esegui il seguente comando per generare una stringa casuale unica:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Importante:** Tieni questo valore segreto / non condividerlo.
+
+3. **Aggiorna il `.env`**
+
+ Sostituisci il valore segnaposto nel tuo file .env con il token generato:
+
+ ```ini
+ APP_SECRET=prima_stringa_casuale
+ ```
+
+4. **Imposta la Password di Postgres**
+
+ Aggiorna il valore `PG_DATABASE_PASSWORD` nel file .env con una password forte senza caratteri speciali.
+
+ ```ini
+ PG_DATABASE_PASSWORD=mia_password_forte
+ ```
+
+### Passo 2: Ottieni il File Docker Compose
+
+Scarica il file `docker-compose.yml` nella tua directory di lavoro:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Passo 3: Avvia l'Applicazione
+
+Avvia i container Docker:
+
+```bash
+docker compose up -d
+```
+
+### Passo 4: Accedi all'Applicazione
+
+Se ospiti twentyCRM sul tuo computer, apri il browser e naviga a [http://localhost:3000](http://localhost:3000).
+
+Se lo ospiti su un server, controlla che il server sia in esecuzione e che tutto sia ok con
+
+```bash
+curl http://localhost:3000
+```
+
+## Configurazione
+
+### Esponi Twenty per Accesso Esterno
+
+Per impostazione predefinita, Twenty gira su `localhost` alla porta `3000`. Per accedervi tramite un dominio esterno o indirizzo IP devi configurare il `SERVER_URL` nel tuo file `.env`.
+
+#### Comprendere `SERVER_URL`
+
+* **Protocollo:** Usa `http` o `https` a seconda della tua configurazione.
+ * Usa `http` se non hai configurato SSL.
+ * Usa `https` se hai configurato SSL.
+* **Dominio/IP:** Questo è il nome del dominio o indirizzo IP dove la tua applicazione è accessibile.
+* **Porta:** Includi il numero di porta se non stai usando le porte predefinite (`80` per `http`, `443` per `https`).
+
+### Requisiti SSL
+
+SSL (HTTPS) è necessario affinché alcune caratteristiche del browser funzionino correttamente. Mentre queste caratteristiche potrebbero funzionare durante lo sviluppo locale (poiché i browser trattano localhost in modo diverso), è necessario un setup SSL adeguato quando si ospita Twenty su un dominio regolare.
+
+Ad esempio, l'API degli appunti potrebbe richiedere un contesto sicuro - alcune funzionalità come i pulsanti di copia in tutta l'applicazione potrebbero non funzionare senza HTTPS abilitato.
+
+Raccomandiamo fortemente di configurare Twenty dietro un proxy inverso con terminazione SSL per una sicurezza e funzionalità ottimali.
+
+#### Configurare `SERVER_URL`
+
+1. **Determina il tuo URL di Accesso**
+ * **Senza Proxy Inverso (Accesso Diretto):**
+
+ Se accedi all'applicazione direttamente senza un proxy inverso:
+
+ ```ini
+ SERVER_URL=http://tuo-dominio-o-ip:3000
+ ```
+
+ * **Con Proxy Inverso (Porte Standard):**
+
+ Se usi un proxy inverso come Nginx o Traefik e hai configurato SSL:
+
+ ```ini
+ SERVER_URL=https://tuo-dominio-o-ip
+ ```
+
+ * **Con Proxy Inverso (Porte Personalizzate):**
+
+ Se usi porte non standard:
+
+ ```ini
+ SERVER_URL=https://tuo-dominio-o-ip:porta-personalizzata
+ ```
+
+2. **Aggiorna il File `.env`**
+
+ Apri il tuo file `.env` e aggiorna il `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://tuo-dominio-o-ip:tuaporta
+ ```
+
+ **Esempi:**
+
+ * Accesso diretto senza SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Accesso tramite dominio con SSL:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **Riavvia l'Applicazione**
+
+ Per rendere effettive le modifiche, riavvia i container Docker:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Considerazioni
+
+* **Configurazione del Reverse Proxy:**
+
+ Assicurati che il tuo reverse proxy inoltri le richieste alla porta interna corretta (`3000` per impostazione predefinita). Configura la terminazione SSL e tutte le intestazioni necessarie.
+
+* **Impostazioni Firewall:**
+
+ Apri le porte necessarie nel tuo firewall per consentire l'accesso esterno.
+
+* **Coerenza:**
+
+ Il `SERVER_URL` deve corrispondere a come gli utenti accedono alla tua applicazione nei loro browser.
+
+#### Persistenza
+
+* **Volumi di Dati:**
+
+ La configurazione di Docker Compose utilizza volumi per mantenere i dati per il database e l'archiviazione del server.
+
+* **Ambienti Senza Stato:**
+
+ Se si distribuisce in un ambiente senza stato (ad esempio, alcuni servizi di cloud), configura l'archiviazione esterna per mantenere i dati.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Risoluzione dei problemi
+
+Se riscontri problemi, controlla [Risoluzione dei problemi](/l/it/developers/self-host/capabilities/troubleshooting) per le soluzioni.
diff --git a/packages/twenty-docs/l/it/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/it/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..4b2cb848d6
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,292 @@
+---
+title: Setup
+---
+
+# Gestione della Configurazione
+
+
+ **Prima volta che installi?** Segui la [guida all'installazione di Docker Compose](/l/it/developers/self-host/capabilities/docker-compose) per far funzionare Twenty, quindi torna qui per la configurazione.
+
+
+Twenty offre **due modalità di configurazione** per soddisfare diverse esigenze di distribuzione:
+
+**Accesso al pannello di amministrazione:** Solo gli utenti con privilegi di amministrazione (`canAccessFullAdminPanel: true`) possono accedere all'interfaccia di configurazione.
+
+## 1. Configurazione del Pannello di Amministrazione (Predefinito)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # predefinito
+```
+
+**La maggior parte della configurazione avviene tramite l'interfaccia utente** dopo l'installazione:
+
+1. Accedi alla tua istanza Twenty (solitamente `http://localhost:3000`)
+2. Go to **Settings / Admin Panel / Configuration Variables**
+3. Configura integrazioni, email, storage e altro
+4. Le modifiche hanno effetto immediato (entro 15 secondi per distribuzioni multi-container)
+
+
+ **Distribuzioni Multi-Container:** Quando si utilizza la configurazione del database (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), sia i container server che worker leggono dallo stesso database. Le modifiche al pannello di amministrazione influiscono su entrambi automaticamente, eliminando la necessità di duplicare le variabili di ambiente tra i container (eccetto per le variabili infrastrutturali).
+
+
+**Cosa puoi configurare tramite il pannello di amministrazione:**
+
+* **Autenticazione** - Google/Microsoft OAuth, impostazioni della password
+* **Email** - Impostazioni SMTP, modelli, verifica
+* **Storage** - Configurazione S3, percorsi storage locale
+* **Integrazioni** - Gmail, Google Calendar, servizi Microsoft
+* **Workflow & Rate Limiting** - Execution limits, API throttling
+* **E molto altro ancora...**
+
+
+
+
+ Ogni variabile è documentata con descrizioni nel tuo pannello di amministrazione in **Impostazioni → Pannello di Amministrazione → Variabili di Configurazione**.
+ Alcune impostazioni infrastrutturali come connessioni al database (`PG_DATABASE_URL`), URL del server (`SERVER_URL`) e segreti dell'app (`APP_SECRET`) possono essere configurati solo tramite file `.env`.
+
+ [Riferimento tecnico completo →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Configurazione Solo-Ambiente
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Tutta la configurazione gestita tramite file `.env`:**
+
+1. Imposta `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` nel tuo file `.env`
+2. Aggiungi tutte le variabili di configurazione nel tuo file `.env`
+3. Riavvia i container per applicare le modifiche
+4. Il pannello di amministrazione mostrerà i valori attuali ma non potrà modificarli
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Integrazione Gmail & Google Calendar
+
+### Crea Progetto nel Google Cloud
+
+1. Vai a [Google Cloud Console](https://console.cloud.google.com/)
+2. Crea un nuovo progetto o seleziona uno esistente
+3. Abilita queste API:
+
+* [API Gmail](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [API Google Calendar](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [API People](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### Configura OAuth
+
+1. Vai a [Credenziali](https://console.cloud.google.com/apis/credentials)
+2. Crea ID client OAuth 2.0
+3. Aggiungi questi URI di reindirizzamento:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Configura in Twenty
+
+1. Vai a **Impostazioni → Pannello di Amministrazione → Variabili di Configurazione**
+2. Trova la sezione **Google Auth**
+3. Imposta queste variabili:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Modalità solo ambiente:** Se imposti `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, aggiungi queste variabili al tuo file `.env` invece.
+
+
+**Scope richiesti** (configurati automaticamente): [Vedi il codice sorgente pertinente](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Se la tua app è in modalità di test
+
+Se la tua app è in modalità di test, dovrai aggiungere utenti di prova al tuo progetto.
+
+Sotto [Schermo di Consenso OAuth](https://console.cloud.google.com/apis/credentials/consent), aggiungi i tuoi utenti di prova nella sezione "Utenti di Prova".
+
+## Integrazione Microsoft 365
+
+
+ Gli utenti devono avere una [Licenza Microsoft 365](https://admin.microsoft.com/Adminportal/Home) per poter utilizzare l'API Calendario e Messaggi. Non potranno sincronizzare il loro account su Twenty senza una.
+
+
+### Crea un progetto in Microsoft Azure
+
+Avrai bisogno di creare un progetto in [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) e ottenere le credenziali.
+
+### Abilita API
+
+Nel Microsoft Azure Console abilita le seguenti API in "Permessi":
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profile
+* Microsoft Graph: offline_access
+
+Nota: "Mail.ReadWrite" e "Mail.Send" sono obbligatori solo se vuoi inviare email utilizzando le nostre azioni di flusso di lavoro. Puoi usare "Mail.Read" invece se vuoi solo ricevere email.
+
+### URI di Riindirizzamento Autorizzati
+
+Devi aggiungere i seguenti URI di reindirizzamento al tuo progetto:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Configura in Twenty
+
+1. Vai a **Impostazioni → Pannello di Amministrazione → Variabili di Configurazione**
+2. Trova la sezione **Microsoft Auth**
+3. Imposta queste variabili:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Modalità solo ambiente:** Se imposti `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, aggiungi queste variabili al tuo file `.env` invece.
+
+
+### Configura scope
+
+[Vedi il codice sorgente pertinente](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'email'
+* 'profilo'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Se la tua app è in modalità di test
+
+Se la tua app è in modalità di test, dovrai aggiungere utenti di prova al tuo progetto.
+
+Aggiungi i tuoi utenti di prova nella sezione "Utenti e gruppi".
+
+## Lavori in Background per Calendario & Messaggistica
+
+Dopo aver configurato le integrazioni di Gmail, Google Calendar o Microsoft 365, devi avviare i lavori in background che sincronizzano i dati.
+
+Registrare i seguenti lavori ricorrenti nel tuo container worker:
+
+```bash
+# dal tuo container worker
+ yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## Configurazione Email
+
+1. Vai a **Impostazioni → Pannello di Amministrazione → Variabili di Configurazione**
+2. Trova la sezione **Email**
+3. Configura le impostazioni SMTP:
+
+
+
+ Avrai bisogno di provvedere una [Password per l'App](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=indirizzo_email_gmail
+ * EMAIL_SMTP_PASSWORD='password_app_gmail'
+
+
+
+ Tieni a mente che se hai abilitato l'autenticazione a due fattori, avrai bisogno di fornire una [Password per l'App](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=indirizzo_email_office365
+ * EMAIL_SMTP_PASSWORD='password_office365'
+
+
+
+ **smtp4dev** è un server SMTP fittizio per lo sviluppo e il test.
+
+ * Esegui l'immagine smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Accedi all'interfaccia smtp4dev qui: [http://localhost:8090](http://localhost:8090)
+ * Imposta le seguenti variabili:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Modalità solo ambiente:** Se imposti `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, aggiungi queste variabili al tuo file `.env` invece.
+
diff --git a/packages/twenty-docs/l/it/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/it/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..28263cf396
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,227 @@
+---
+title: Risoluzione dei problemi
+---
+
+## Risoluzione dei problemi
+
+If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting,
+here are some solutions for common problems.
+
+### Auto-ospitato
+
+#### La prima installazione risulta in `autenticazione password fallita per l'utente "postgres"`
+
+🚨 **IMPORTANTE: Questa soluzione è SOLO per nuove installazioni** 🚨
+Se hai un'istanza di Twenty esistente con dati di produzione, **NON** seguire questi passaggi poiché elimineranno permanentemente il tuo database!
+
+Durante l'installazione di Twenty per la prima volta, potresti voler cambiare la password del database predefinita.
+La password impostata durante la prima installazione viene memorizzata in modo permanente nel volume del database. Se in seguito provi a cambiare questa password nella configurazione senza rimuovere il vecchio volume, otterrai errori di autenticazione poiché il database utilizza ancora la password iniziale.
+
+⚠️ ATTENZIONE: I passaggi seguenti ELIMINERANNO PERMANENTEMENTE tutti i dati del database! ⚠️
+Procedi solo se si tratta di una nuova installazione senza dati importanti.
+
+Per aggiornare il `PG_DATABASE_PASSWORD` devi:
+
+```sh
+# Aggiorna il PG_DATABASE_PASSWORD in .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR interruzioni di linea trovate [Windows]
+
+This is due to the line break characters of Windows and the git configuration. Prova a eseguire:
+
+```
+git config --global core.autocrlf false
+```
+
+Quindi elimina il repository e clonalo nuovamente.
+
+#### Schema dei metadati mancante
+
+Durante l'installazione di Twenty, devi fornire il tuo database postgres con gli schemi, le estensioni e gli utenti corretti.
+Se riesci a eseguire correttamente questo provisioning, dovresti avere schemi `default` e `metadata` nel tuo database.
+If you don't, make sure you don't have more than one postgres instance running on your computer.
+
+#### Cannot find module 'twenty-emails' or its corresponding type declarations.
+
+You have to build the package `twenty-emails` before running the initialization of the database with `npx nx run twenty-emails:build`
+
+#### Pacchetto twenty-x mancante
+
+Assicurati di eseguire yarn nella directory principale e poi esegui `npx nx server:dev twenty-server`. Se ancora non funziona prova a costruire manualmente il pacchetto mancante.
+
+#### Lint on Save not working
+
+Questo dovrebbe funzionare direttamente con l'estensione eslint installata. Se questo non funziona prova ad aggiungere questo alle impostazioni di vscode (nello scope del container di sviluppo):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "esplicito"
+
+}
+```
+
+#### Durante l'esecuzione di `npx nx start` o `npx nx start twenty-front`, viene generato un errore di memoria insufficiente
+
+In `packages/twenty-front/.env` decommentare `VITE_DISABLE_TYPESCRIPT_CHECKER=true` e `VITE_DISABLE_ESLINT_CHECKER=true` per disabilitare i controlli in background riducendo così la quantità di RAM necessaria.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Ad esempio, se lavori sul server, esegui solo `npx nx worker twenty-server`
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`ERRORE FATALE: Mark-compacts inefficaci vicino al limite dell'heap Assegnazione fallita - heap di memoria JavaScript esaurito`
+
+Il metodo alternativo è eseguire il seguente comando nel terminale o aggiungerlo nel profilo .bashrc per configurarlo automaticamente:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+Il flag --max-old-space-size=8192 imposta un limite massimo di 8GB per l'heap di Node.js; l'utilizzo si adatta alla domanda dell'applicazione.
+Riferimento: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. In Twenty, abbiamo notato che alcune estensioni di VScode stavano occupando molta RAM quindi le disabilitiamo temporaneamente.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### Durante l'esecuzione di `npx nx start` ci sono strani [0] e [1] nei log
+
+È previsto poiché il comando `npx nx start` sta eseguendo più comandi in background
+
+#### Nessuna email inviata
+
+La maggior parte delle volte, è perché il `worker` non è in esecuzione in background. Prova a eseguire
+
+```
+npx nx worker twenty-server
+```
+
+#### Non posso connettere il mio account Microsoft 365
+
+La maggior parte delle volte, è perché il tuo amministratore non ha abilitato la Licenza Microsoft 365 per il tuo account. Controlla [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Se hai un codice di errore `AADSTS50020`, probabilmente significa che stai utilizzando un account Microsoft personale. Questo non è ancora supportato. Maggiori informazioni [qui](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### Durante l'esecuzione di `yarn` compaiono avvisi in console
+
+Gli avvisi informano sul caricamento di dipendenze aggiuntive che non sono esplicitamente dichiarate in `package.json`, quindi fintanto che non appare un errore critico, tutto dovrebbe funzionare come previsto.
+
+#### Quando l'utente accede alla pagina di login, appare un errore sull'utente non autorizzato che tenta di accedere allo spazio di lavoro nei log
+
+È previsto poiché l'utente non è autorizzato quando è disconnesso poiché la sua identità non è verificata.
+
+#### Come verificare se il tuo worker è in esecuzione?
+
+* Vai su [webhook-test.com](https://webhook-test.com/) e copia **Your Unique Webhook URL**.
+
+
+
+
+
+* Apri la tua app Twenty, naviga su `/settings` e abilita il toggle **Avanzate** in basso a sinistra dello schermo.
+* Crea un nuovo webhook.
+* Incolla **Your Unique Webhook URL** nel campo **Endpoint Url** in Twenty. Imposta i **Filtri** su `Companies` e `Created`.
+
+
+
+
+
+* Vai su `/objects/companies` e crea un nuovo record aziendale.
+* Ritorna su [webhook-test.com](https://webhook-test.com/) e verifica se è stata ricevuta una nuova **richiesta POST**.
+
+
+
+
+
+* Se è ricevuta una **richiesta POST**, il tuo worker è in esecuzione con successo. In caso contrario, devi risolvere i problemi del tuo worker.
+
+#### Front-end fails to start and returns error TS5042: Option 'project' cannot be mixed with source files on a command line
+
+Commenta il plugin checker in `packages/twenty-ui/vite-config.ts` come mostrato nell'esempio sotto
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Pannello di amministrazione non accessibile
+
+Esegui `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` nel container del database per accedere al pannello di amministrazione.
+
+### Composizione Docker a un clic
+
+#### Impossibile connettersi
+
+Se non riesci ad accedere dopo la configurazione:
+
+1. Esegui i seguenti comandi:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Riavvia i container Docker:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Si noti che il comando database:reset cancellerà completamente il tuo database e lo ricreerà da zero.
+
+#### Problemi di connessione dietro un reverse proxy
+
+Se stai eseguendo Twenty dietro un reverse proxy e stai riscontrando problemi di connessione:
+
+1. **Verifica SERVER_URL:**
+
+ Assicurati che il `SERVER_URL` nel tuo file `.env` corrisponda all'URL di accesso esterno, incluso `https` se SSL è abilitato.
+
+2. **Controlla le impostazioni del reverse proxy:**
+
+ * Conferma che il tuo reverse proxy sta inoltrando correttamente le richieste al server Twenty.
+ * Assicurati che le intestazioni come `X-Forwarded-For` e `X-Forwarded-Proto` siano impostate correttamente.
+
+3. **Riavvia i servizi:**
+
+ Dopo aver apportato modifiche, riavvia sia il reverse proxy che i container Twenty.
+
+#### Errore durante il caricamento di un'immagine - permesso negato
+
+Cambiare la proprietà della cartella dei dati sull'host da root a un altro utente e gruppo risolve questo problema.
+
+## Ottenere aiuto
+
+Se incontri problemi non coperti in questa guida:
+
+* Controlla i log:
+
+ Visualizza i log dei container per i messaggi di errore:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Supporto comunitario:
+
+ Contatta la [comunità Twenty](https://github.com/twentyhq/twenty/issues) o [canali di supporto](https://discord.gg/cx5n4Jzs57) per assistenza.
diff --git a/packages/twenty-docs/l/it/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/it/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..8e6f487e15
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Guida per l'aggiornamento
+---
+
+## General guidelines
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Se hai utilizzato Docker Compose, segui questi passaggi:
+
+1. In un terminale, sull'host dove Twenty è in esecuzione, spegni Twenty: `docker compose down`
+
+2. Aggiorna la versione modificando il valore `TAG` nel file .env vicino al tuo docker-compose. ( We recommend consuming `major.minor` version such as `v0.53` )
+
+3. Riporta Twenty online con `docker compose up -d`
+
+Se desideri aggiornare la tua istanza di alcune versioni, ad es. da v0.33.0 a v0.35.0, devi aggiornare la tua istanza in modo sequenziale, in questo esempio da v0.33.0 a v0.34.0, quindi da v0.34.0 a v0.35.0.
+
+**Assicurati che dopo ogni versione aggiornata tu abbia un backup non corrotto.**
+
+## Passaggi di aggiornamento specifici per la versione
+
+## v1.0
+
+Ciao Twenty v1.0! 🎉
+
+## v0.60
+
+### Miglioramenti delle prestazioni
+
+Tutte le interazioni con l'API dei metadati sono state ottimizzate per migliori prestazioni, specialmente per la manipolazione dei metadati degli oggetti e le operazioni di creazione dello spazio di lavoro.
+
+Abbiamo ristrutturato la nostra strategia di caching per dare priorità ai cache hit rispetto alle query del database quando possibile, migliorando significativamente le prestazioni delle operazioni dell'API dei metadati.
+
+Se incontri problemi di runtime dopo l'aggiornamento, potresti dover svuotare la cache per assicurarti che sia sincronizzata con le ultime modifiche. Esegui questo comando nel tuo contenitore twenty-server:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.55
+
+Non è più necessario eseguire alcun comando, la nuova immagine si occuperà automaticamente di eseguire tutte le migrazioni richieste.
+
+### `User does not have permission` error
+
+Se riscontri errori di autorizzazione nella maggior parte delle richieste dopo l'aggiornamento, potresti dover svuotare la cache per ricalcolare le autorizzazioni più recenti.
+
+Nel tuo contenitore `twenty-server`, esegui:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Questo problema è specifico per questa versione di Twenty e non dovrebbe essere richiesto per i futuri aggiornamenti.
+
+### v0.54
+
+Dalla versione `0.53`, non sono necessarie azioni manuali.
+
+#### Deprecazione dello schema dei metadati
+
+Abbiamo fuso lo schema `metadata` in quello `core` per semplificare il recupero dei dati da `TypeORM`.
+Abbiamo fuso il passaggio del comando `migrate` all'interno del comando `upgrade`. Non raccomandiamo di eseguire il comando `migrate` manualmente all'interno di nessuno dei tuoi contenitori server/worker.
+
+### Dalla v0.53
+
+A partire da `0.53`, l'aggiornamento è eseguito programmaticamente all'interno del `DockerFile`, il che significa che d'ora in poi, non è necessario eseguire alcun comando manualmente.
+
+Assicurati di continuare ad aggiornare la tua istanza in modo sequenziale, senza saltare alcuna versione principale (ad es. `0.43.3` a `0.44.0` è consentito, ma `0.43.1` a `0.45.0` non lo è), altrimenti potrebbe portare la sincronizzazione delle versioni dello spazio di lavoro a desincronizzarsi, il che potrebbe causare errori di runtime e funzionalità mancanti.
+
+Per verificare se uno spazio di lavoro è stato correttamente migrato, puoi controllare la sua versione nel database nella tabella `core.workspace`.
+
+Dovrebbe sempre essere nell'ambito della versione `major.minor` corrente della tua istanza di Twenty, puoi visualizzare la tua versione nell'admin panel (su `/settings/admin-panel`, accessibile se il tuo utente ha impostata a vero la proprietà `canAccessFullAdminPanel` nel database) o eseguendo `echo $APP_VERSION` all'interno del tuo contenitore `twenty-server`.
+
+Per correggere una versione di spazio di lavoro desincronizzata, dovrai aggiornare dalla versione corrispondente di Twenty seguendo la guida all'aggiornamento relativa in modo sequenziale fino a raggiungere la versione desiderata.
+
+#### Rimozione di `auditLog`
+
+Abbiamo rimosso l'oggetto standard auditLog, il che significa che la dimensione del tuo backup potrebbe ridursi significativamente dopo questa migrazione.
+
+### v0.51 a v0.52
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.52.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Ho uno spazio di lavoro bloccato in una versione tra `0.52.0` e `0.52.6`.
+
+Purtroppo `0.52.0` e `0.52.6` sono stati completamente rimossi da dockerHub.
+You will have to manually update your workspace version to `0.51.0` in database and upgrade using twenty version `0.52.11` following its just above upgrade guide.
+
+### v0.50 a v0.51
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.51.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 a v0.50.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.50.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Mutazione di docker-compose.yml
+
+Questa versione include una mutazione di `docker-compose.yml` per dare al servizio `worker` accesso al volume `server-local-data`.
+Aggiorna il tuo `docker-compose.yml` locale con [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 a v0.44.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.44.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 a v0.43.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.43.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+In questa versione, abbiamo anche passato all'immagine postgres:16 in docker-compose.yml.
+
+#### (Opzione 1) Migrazione del database
+
+Mantenere l'immagine postgres-spilo esistente va bene, ma dovrai bloccare la versione nel tuo docker-compose.yml a 0.43.0.
+
+#### (Opzione 2) Migrazione del database
+
+Se desideri migrare il tuo database alla nuova immagine postgres:16, segui questi passaggi:
+
+1. Scarica il tuo database dal vecchio contenitore postgres-spilo.
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Assicurati che il tuo file di dump non sia vuoto.
+
+2. Aggiorna il tuo docker-compose.yml per utilizzare l'immagine postgres:16 come nel file [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml)
+
+3. Ripristinare il database nel nuovo contenitore postgres:16.
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 a v0.42.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.42.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Variabili di ambiente**
+
+* Rimosso: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Aggiunto: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 a v0.41.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.41.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Variabili di ambiente**
+
+* Rimosso: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 a v0.40.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.40.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Variabili di ambiente**
+
+* Aggiunto: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 a v0.35.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.35.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.35` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+**Variabili di ambiente**
+
+* Abbiamo sostituito `ENABLE_DB_MIGRATIONS` con `DISABLE_DB_MIGRATIONS` (il valore predefinito ora è `false`, probabilmente non hai bisogno di impostare nulla)
+
+### v0.33.0 a v0.34.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.34.0.
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.34` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+**Variabili di ambiente**
+
+* Rimosso: `FRONT_BASE_URL`
+* Aggiunto: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Abbiamo aggiornato il modo in cui gestiamo l'URL del frontend.
+Ora puoi impostare l'URL del frontend utilizzando le variabili `FRONT_DOMAIN`, `FRONT_PROTOCOL` e `FRONT_PORT`.
+Se FRONT_DOMAIN non è impostato, l'URL del frontend verrà impostato su `SERVER_URL`.
+
+### v0.32.0 a v0.33.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.33.0.
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+Il comando `yarn command:prod cache:flush` svuoterà la cache di Redis.
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.33` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+A partire da questa versione, l'immagine di twenty-postgres per il database è diventata deprecata e si usa twenty-postgres-spilo.
+Se vuoi continuare ad usare l'immagine di twenty-postgres, semplicemente sostituisci `twentycrm/twenty-postgres:${TAG}` con `twentycrm/twenty-postgres` in docker-compose.yml.
+
+### v0.31.0 a v0.32.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.32.0.
+
+**Migrazione di schema e dati**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.32` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+**Variabili di ambiente**
+
+Abbiamo aggiornato il modo in cui gestiamo la connessione Redis.
+
+* Rimosso: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Aggiunto: `REDIS_URL`
+
+Aggiorna il tuo file `.env` per utilizzare la nuova variabile `REDIS_URL` al posto dei singoli parametri di connessione Redis.
+
+Abbiamo anche semplificato il modo in cui gestiamo i token JWT.
+
+* Rimosso: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Aggiunto: `APP_SECRET`
+
+Aggiorna il tuo file `.env` per utilizzare la nuova variabile `APP_SECRET` al posto dei singoli segreti dei token (puoi usare lo stesso segreto di prima o generare una nuova stringa casuale)
+
+**Account collegato**
+
+Se stai usando un account collegato per sincronizzare le tue email e calendari di Google, dovrai attivare l'[API delle Persone](https://developers.google.com/people) sul tuo console amministrativa di Google.
+
+### v0.30.0 a v0.31.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.31.0.
+
+**Migrazione di schema e dati**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.31` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+### v0.24.0 a v0.30.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.30.0.
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Abbiamo aggiornato il nostro [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) per riflettere questa modifica.
+Assicurati di aggiornare la tua configurazione e le tue variabili di ambiente di conseguenza:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Migrazione di schema e dati**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.30` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+### v0.23.0 a v0.24.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.24.0.
+
+Esegui i seguenti comandi:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+Il comando `yarn database:migrate:prod` applicherà le migrazioni alla struttura del database (schemi core e metadata)
+Il comando `yarn command:prod upgrade-0.24` si occupa della migrazione dei dati di tutti gli spazi di lavoro.
+
+### v0.22.0 a v0.23.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.23.0.
+
+Esegui i seguenti comandi:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+The `yarn database:migrate:prod` command will apply the migrations to the Database.
+Il comando `yarn command:prod upgrade-0.23` si occupa della migrazione dei dati, includendo il trasferimento delle attività a compiti/note.
+
+### v0.21.0 a v0.22.0
+
+Aggiorna la tua istanza di Twenty per utilizzare l'immagine v0.22.0.
+
+Esegui i seguenti comandi:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+The `yarn database:migrate:prod` command will apply the migrations to the Database.
+Il comando `yarn command:prod workspace:sync-metadata -f` sincronizzerà la definizione degli oggetti standard nelle tabelle dei metadati e applicherà le migrazioni necessarie agli spazi di lavoro esistenti.
+Il comando `yarn command:prod upgrade-0.22` applicherà specifiche trasformazioni dei dati per adattarsi alle nuove opzioni di strumentazione richiesta predefinita dell'oggetto.
diff --git a/packages/twenty-docs/l/it/developers/self-host/self-host.mdx b/packages/twenty-docs/l/it/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..5b43d48b24
--- /dev/null
+++ b/packages/twenty-docs/l/it/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Panoramica
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/it/navigation.json b/packages/twenty-docs/l/it/navigation.json
index 42201c9dac..1f0289b500 100644
--- a/packages/twenty-docs/l/it/navigation.json
+++ b/packages/twenty-docs/l/it/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Guida Utente",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Per Iniziare"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Modello dati"
+ "label": "Modello dati",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "Essentials CRM"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Viste"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Workflows"
+ "label": "Flussi di Lavoro",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Need More Help"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Collaborazione"
+ "ai": {
+ "label": "AI",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integrazioni & API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Reportistica"
+ "dashboards": {
+ "label": "Cruscotti",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Fatturazione",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Impostazioni"
- },
- "pricing": {
- "label": "Prezzi"
- },
- "resources": {
- "label": "Risorse"
+ "label": "Impostazioni",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Sviluppatori"
},
- "devGettingStarted": {
- "label": "Per Iniziare",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Auto-Hosting"
- },
- "apiAndWebhooks": {
- "label": "API e Webhook"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Contribuire",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Sviluppo Frontend",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Sviluppo Frontend",
"groups": {
- "display": {
- "label": "Visualizzazione"
- },
- "feedback": {
- "label": "Feedback"
- },
- "input": {
- "label": "Input"
- },
- "navigation": {
- "label": "Navigation"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Mostra"
+ },
+ "feedback": {
+ "label": "Feedback"
+ },
+ "input": {
+ "label": "Input"
+ },
+ "navigation": {
+ "label": "Navigazione"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Sviluppo Backend"
}
}
- },
- "backendDevelopment": {
- "label": "Sviluppo Backend"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/it/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..a9a9acc84f
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: App Tooltip
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Un breve messaggio che visualizza informazioni aggiuntive quando un utente interagisce con un elemento.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Intuizioni del cliente
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ---------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | string | Classe CSS opzionale per uno stile aggiuntivo |
+ | anchorSelect | Selettore CSS | Selettore per l'ancora del tooltip (l'elemento che attiva il tooltip) |
+ | contenuto | stringa | Il contenuto che si desidera visualizzare all'interno del tooltip |
+ | delayHide | numero | Il ritardo in secondi prima di nascondere il tooltip dopo che il cursore lascia l'ancora |
+ | compensazione | numero | La compensazione in pixel per posizionare il tooltip |
+ | noArrow | booleano | Se `true`, nasconde la freccia sul tooltip |
+ | èAperto | booleano | Se `true`, il tooltip è aperto di default |
+ | posizione | stringa `PlacesType` di `react-tooltip` | Specifica la posizione del tooltip. I valori includono `bottom`, `left`, `right`, `top`, `top-start`, `top-end`, `right-start`, `right-end`, `bottom-start`, `bottom-end`, `left-start`, e `left-end` |
+ | positionStrategy | stringa `PositionStrategy` di `react-tooltip` | Strategia di posizionamento per il tooltip. Ha due valori: `absolute` e `fixed` |
+
+
+
+## Testo traboccante con Tooltip
+
+Gestisce il testo traboccante e visualizza un tooltip quando il testo trabocca.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | --------- | ------- | ----------------------------------------------------------------- |
+ | testo | stringa | Il contenuto che vuoi visualizzare nell'area di testo traboccante |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/it/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..b6f6c5e51d
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Segno di spunta
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Rappresenta un'azione riuscita o completata.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Estende `React.ComponentPropsWithoutRef<'div'>` e accetta tutte le proprietà di un elemento `div` regolare.
+
+
+
+## Segno di spunta animato
+
+Rappresenta un'icona di segno di spunta con l'aggiunta della funzionalità di animazione.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione | Predefinito |
+ | ----------- | -------- | ----------------------------------------------- | ----------- |
+ | isAnimating | booleano | Controlla se il segno di spunta è in animazione | falso |
+ | colore | stringa | Colore del segno di spunta | |
+ | durata | numero | La durata dell'animazione in secondi | 0,5 secondi |
+ | dimensione | numero | La dimensione del segno di spunta | 28 pixel |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/it/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..6ce2696edb
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Chip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Un elemento visivo che puoi utilizzare come contenitore cliccabile o non cliccabile con un'etichetta, componenti opzionali a sinistra e a destra, e varie opzioni di stile per visualizzare etichette e tag.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | -------------- | -------------------------------- | ----------------------------------------------------------------------------------------------- |
+ | collegaAEntità | string | Il link all'entità |
+ | entityId | stringa | L'identificatore unico per l'entità |
+ | nome | stringa | Il nome dell'entità |
+ | pictureUrl | stringa | s picture", |
+ | avatarType | Tipo di Avatar | Il tipo di avatar che vuoi visualizzare. Has two options: `rounded` and `squared` |
+ | variante | `EntityChipVariant` enumerazione | Variante del chip dell'entità che vuoi visualizzare. Ha due opzioni: `regolare` e `trasparente` |
+ | IconaSinistra | IconaComponente | Un componente React che rappresenta un'icona. Visualizzato sul lato sinistro del chip |
+
+
+
+## Esempi
+
+### Chip Trasparente Disabilitato
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Chip Disabilitato con Tooltip
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Chip Entità
+
+Un elemento simile a un chip per visualizzare informazioni su un'entità.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | -------------- | -------------------------------- | ---------------------------------------------------------------------------------------------- |
+ | collegaAEntità | stringa | Il link all'entità |
+ | entityId | string | L'identificatore unico per l'entità |
+ | nome | stringa | Il nome dell'entità |
+ | pictureUrl | stringa | s picture", |
+ | avatarType | Tipo di Avatar | Il tipo di avatar che vuoi visualizzare. Has two options: `rounded` and `squared` |
+ | variante | `EntityChipVariant` enumerazione | Variante del chip dell'entità che vuoi visualizzare. Ha due opzioni: `regular` e `transparent` |
+ | IconaSinistra | IconaComponente | Un componente React che rappresenta un'icona. Visualizzato sul lato sinistro del chip |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/it/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..06fd31e4b4
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: Icone
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Un elenco di icone utilizzate in tutta la nostra app.
+
+## Tabler Icons
+
+We use Tabler icons for React throughout the app.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ Puoi importare ogni icona come componente. Ecco un esempio:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione | Predefinito |
+ | ---------- | ------- | -------------------------------------------- | ------------ |
+ | dimensione | numero | L'altezza e la larghezza dell'icona in pixel | 24 |
+ | colore | stringa | Il colore delle icone | currentColor |
+ | tratto | numero | La larghezza del tratto dell'icona in pixel | 2 |
+
+
+
+## Custom Icons
+
+In addition to Tabler icons, the app also uses some custom icons.
+
+### Icon Address Book
+
+Displays an address book icon.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione | Predefinito |
+ | ---------- | ------ | -------------------------------------------- | ----------- |
+ | dimensione | numero | L'altezza e la larghezza dell'icona in pixel | 24 |
+ | tratto | numero | La larghezza del tratto dell'icona in pixel | 2 |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/it/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..b083ed9028
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+A small badge or "pill" to indicate something is coming soon.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/it/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/it/twenty-ui/display/tag.mdx
index a026a4c13b..058f11482e 100644
--- a/packages/twenty-docs/l/it/twenty-ui/display/tag.mdx
+++ b/packages/twenty-docs/l/it/twenty-ui/display/tag.mdx
@@ -4,41 +4,35 @@ image: /images/user-guide/table-views/table.png
---
-
+
Componente per categorizzare o etichettare visivamente i contenuti.
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
-
-
-```jsx
-import { Tag } from "@/ui/display/tag/components/Tag";
-
-export const MyComponent = () => {
- return (
- console.log("click")}
- />
- );
-};
-```
-
-
-
-
-
-| Props | Tipo | Descrizione |
-| ---------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| nomeClasse | string | Nome opzionale per stile aggiuntivo |
-| colore | string | Colore dell'etichetta. Le opzioni includono: `verde`, `turchese`, `cielo`, `blu`, `viola`, `rosa`, `rosso`, `arancione`, `giallo`, `grigio` |
-| testo | string | Il contenuto dell'etichetta |
-| onClick | funzione | Funzione opzionale chiamata quando un utente clicca sull'etichetta |
-
-
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+ | Props | Tipo | Descrizione |
+ | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | string | Nome opzionale per stile aggiuntivo |
+ | colore | stringa | Colore dell'etichetta. Le opzioni includono: `verde`, `turchese`, `cielo`, `blu`, `viola`, `rosa`, `rosso`, `arancione`, `giallo`, `grigio` |
+ | testo | stringa | Il contenuto dell'etichetta |
+ | onClick | funzione | Funzione opzionale chiamata quando un utente clicca sull'etichetta |
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx
index 31e1bc3726..865d85a940 100644
--- a/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/it/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
Utilizza un editor di testo avanzato basato su blocchi di [BlockNote](https://www.blocknotejs.org/) per permettere agli utenti di modificare e visualizzare blocchi di contenuti.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| Props | Tipo | Descrizione |
-| ------ | ----------------- | ---------------------------------------------------- |
-| editor | `BlockNoteEditor` | L'istanza o la configurazione dell'editor di blocchi |
-
-
+
+ | Props | Tipo | Descrizione |
+ | ------ | ----------------- | ---------------------------------------------------- |
+ | editor | `BlockNoteEditor` | L'istanza o la configurazione dell'editor di blocchi |
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/it/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..c4545babc1
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Pulsanti
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+Un elenco di pulsanti e gruppi di pulsanti utilizzati nell'app.
+
+## Pulsante
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ----------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome della classe opzionale per stile aggiuntivo |
+ | Icona | `React.ComponentType` | Un componente icona opzionale mostrato all'interno del pulsante |
+ | titolo | stringa | Il contenuto testuale del pulsante |
+ | larghezzaCompleta | booleano | Definisce se il pulsante deve occupare l'intera larghezza del suo contenitore |
+ | variante | stringa | La variante di stile visivo del pulsante. Le opzioni includono `primary`, `secondary` e `tertiary`. |
+ | dimensione | stringa | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. |
+ | posizione | stringa | La posizione del pulsante rispetto ai suoi fratelli. Le opzioni includono: `standalone`, `left`, `right` e `middle`. |
+ | accento | stringa | Il colore di accentuazione del pulsante. Le opzioni includono: `default`, `blue` e `danger`. |
+ | presto | booleano | Indica se il pulsante è segnato come "presto" (ad esempio per funzionalità imminenti) |
+ | disabilitato | booleano | Specifica se il pulsante è disabilitato o meno |
+ | focus | booleano | Determina se il pulsante è messo a fuoco |
+ | onClick | funzione | Una funzione callback che si attiva quando l'utente clicca sul pulsante |
+
+
+
+## Gruppo di Pulsanti
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ---------- | --------- | -------------------------------------------------------------------------------------------------------------------------- |
+ | variante | stringa | La variante di stile visivo dei pulsanti all'interno del gruppo. Le opzioni includono `primary`, `secondary` e `tertiary`. |
+ | dimensione | stringa | Le dimensioni dei pulsanti all'interno del gruppo. Ha due opzioni: `medium` e `small`. |
+ | accento | stringa | Il colore di accentuazione dei pulsanti all'interno del gruppo. Le opzioni includono `default`, `blue` e `danger`. |
+ | nomeClasse | stringa | Nome della classe opzionale per stile aggiuntivo |
+ | figli | ReactNode | Un array di elementi React che rappresentano i singoli pulsanti all'interno del gruppo |
+
+
+
+## Pulsante Galleggiante
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------ | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+ | Icona | `React.ComponentType` | Un componente icona opzionale mostrato all'interno del pulsante |
+ | titolo | stringa | Il contenuto testuale del pulsante |
+ | dimensione | stringa | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. |
+ | posizione | stringa | La posizione del pulsante rispetto ai suoi fratelli. Le opzioni includono: `standalone`, `left`, `middle` e `right`. |
+ | applicaOmbra | booleano | Determina se applicare l'ombra a un pulsante |
+ | applicaBlur | booleano | Determina se applicare un effetto blur al pulsante |
+ | disabilitato | booleano | Determina se il pulsante è disabilitato |
+ | focus | booleano | Indica se il pulsante è messo a fuoco |
+
+
+
+## Gruppo di Pulsanti Galleggianti
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione | Predefinito |
+ | ---------- | --------- | -------------------------------------------------------------------------------------- | ----------- |
+ | dimensione | stringa | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. | piccolo |
+ | figli | ReactNode | Un array di elementi React che rappresentano i singoli pulsanti all'interno del gruppo | |
+
+
+
+## Pulsante Icona Galleggiante
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------ | --------------------- | --------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+ | Icona | `React.ComponentType` | Un componente icona opzionale mostrato all'interno del pulsante |
+ | dimensione | stringa | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. |
+ | posizione | stringa | La posizione del pulsante rispetto ai suoi fratelli. Le opzioni includono: `standalone`, `left`, `right`, e `middle`. |
+ | applicaOmbra | booleano | Determina se applicare l'ombra a un pulsante |
+ | applicaBlur | booleano | Determina se applicare un effetto blur al pulsante |
+ | disabilitato | booleano | Determina se il pulsante è disabilitato |
+ | focus | booleano | Indica se il pulsante ha il focus |
+ | onClick | funzione | Una funzione callback che si attiva quando l'utente clicca sul pulsante |
+ | èAttivo | booleano | Determina se il pulsante è in uno stato attivo |
+
+
+
+## Gruppo di Pulsanti Icona Galleggianti
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ----------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+ | dimensione | stringa | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. |
+ | iconButtons | array | Un array di oggetti, ciascuno rappresentante un pulsante icona nel gruppo. Ogni oggetto dovrebbe includere il componente icona che si vuole visualizzare nel pulsante, la funzione che si vuole chiamare quando un utente clicca sul pulsante e se il pulsante dovrebbe essere attivo o meno. |
+
+
+
+## Pulsante Leggero
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------ | ----------------- | ---------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+ | icona | `React.ReactNode` | L'icona che si vuole visualizzare nel pulsante |
+ | titolo | string | Il contenuto testuale del pulsante |
+ | accento | string | Il colore di accentuazione del pulsante. Le opzioni includono: `secondary` e `tertiary`. |
+ | attivo | booleano | Determina se il pulsante è in uno stato attivo |
+ | disabilitato | booleano | Determina se il pulsante è disabilitato |
+ | focus | booleano | Indica se il pulsante è messo a fuoco |
+ | onClick | funzione | Una funzione callback che si attiva quando l'utente clicca sul pulsante |
+
+
+
+## Pulsante Icona Leggera
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------ | --------------------- | --------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+ | testId | string | Identificatore di prova per il pulsante |
+ | Icona | `React.ComponentType` | Un componente icona opzionale visualizzato all'interno del pulsante |
+ | titolo | string | Il contenuto di testo del pulsante |
+ | dimensione | string | La dimensione del pulsante. Ha due opzioni: `small` e `medium`. |
+ | accento | string | Il colore accentato del pulsante. Le opzioni includono: `secondary` e `tertiary`. |
+ | attivo | booleano | Determina se il pulsante si trova in uno stato attivo |
+ | disabilitato | booleano | Determina se il pulsante è disabilitato |
+ | focus | booleano | Indica se il pulsante ha il focus |
+ | onClick | funzione | Una funzione di callback che si attiva quando l'utente fa clic sul pulsante |
+
+
+
+## Pulsante principale
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------------- | -------------------------------- | -------------------------------------------------------------------------------------------- |
+ | titolo | string | Il contenuto di testo del pulsante |
+ | larghezzaCompleta | booleano | Definisce se il pulsante dovrebbe estendersi per tutta la larghezza del suo contenitore |
+ | variante | string | La variante dello stile visivo del pulsante. Options include `primary` and `secondary` |
+ | presto | booleano | Indica se il pulsante è contrassegnato come "presto" (ad esempio per funzionalità in arrivo) |
+ | Icona | `React.ComponentType` | Un componente icona opzionale visualizzato all'interno del pulsante |
+ | React `button` props | `React.ComponentProps<'button'>` | Sono supportate tutte le proprietà standard del pulsante HTML |
+
+
+
+## Pulsante icona rotondo
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | -------------------- | ----------------------------------------------- | ----------- |
+ | Icona | `React.ComponentType` | |
+ | React `button` props | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/it/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..a064697f46
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: Checkbox
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Utilizzato quando un utente deve selezionare più valori da diverse opzioni.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange function fired")}
+ onCheckedChange={() => console.log("onCheckedChange function fired")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | --------------- | -------- | ------------------------------------------------------------------------------------------------ |
+ | selezionato | booleano | Indica se la casella di controllo è selezionata |
+ | indeterminato | booleano | Indica se la casella di controllo è in uno stato indeterminato (né selezionata né deselezionata) |
+ | onChange | funzione | La funzione callback che vuoi attivare quando lo stato della casella di controllo cambia |
+ | onCheckedChange | funzione | La funzione callback che vuoi attivare quando lo stato di "selezionato" cambia |
+ | variante | stringa | Lo stile visivo della casella. Le opzioni includono: `primary`, `secondary` e `tertiary` |
+ | dimensione | stringa | La dimensione della casella di controllo. Ha due opzioni: `small` e `large` |
+ | forma | stringa | La forma della casella di controllo. Ha due opzioni: `squared` e `rounded` |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/it/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..a3e513a9b9
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Schema di colori
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Color Scheme Card
+
+Rappresenta diversi schemi di colore ed è appositamente progettato per temi chiari e scuri.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione | Predefinito |
+ | ---------------- | --------------------------------------- | --------------------------------------------------------------------------------------- | ----------- |
+ | variante | stringa | La variante dello schema di colore. Le opzioni includono `Scuro`, `Chiaro` e `Sistema`. | chiaro |
+ | selezionato | booleano | Se `vero`, visualizza un segno di spunta per indicare lo schema di colore selezionato. | |
+ | additional props | `React.ComponentPropsWithoutRef<'div'>` | Proprietà standard dell'elemento HTML `div` | |
+
+
+
+## Color Scheme Picker
+
+Consente agli utenti di scegliere tra diversi schemi di colore.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | --------- | ------------------ | ---------------------------------------------------------------------------------- |
+ | valore | `Schema di colori` | Lo schema di colore attualmente selezionato |
+ | onChange | funzione | La funzione di callback si attiva quando un utente seleziona uno schema di colore. |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/it/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..963eea003a
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: Selettore di icone
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Un selettore di icone basato su menu a tendina che consente agli utenti di scegliere un'icona da un elenco.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Icona selezionata:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------- |
+ | disabilitato | booleano | Disabilita il selettore di icone se impostato su `true` |
+ | onChange | funzione | La funzione di callback attivata quando l'utente seleziona un'icona. Riceve un oggetto con le proprietà `iconKey` e `Icon` |
+ | chiaveIconaSelezionata | stringa | La chiave dell'icona inizialmente selezionata |
+ | onClickOutside | funzione | Funzione di callback attivata quando l'utente fa clic fuori dal menu a tendina |
+ | onClose | funzione | Funzione di callback attivata quando il menu a tendina viene chiuso |
+ | onOpen | funzione | Funzione di callback attivata quando il menu a tendina viene aperto |
+ | variante | stringa | La variante di stile visivo dell'icona cliccabile. Le opzioni includono: `primario`, `secondario` e `terziario` |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/it/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..a1386db1d4
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Image Input
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Consente agli utenti di caricare e rimuovere un'immagine.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ----------------- | -------- | -------------------------------------------------------------------------------------------------------------- |
+ | immagine | string | L'URL di origine dell'immagine |
+ | onUpload | funzione | La funzione chiamata quando un utente carica una nuova immagine. Riceve l'oggetto `File` come parametro |
+ | onRemove | funzione | La funzione chiamata quando l'utente clicca sul pulsante di rimozione |
+ | onAbort | funzione | La funzione chiamata quando un utente clicca sul pulsante di annullamento durante il caricamento dell'immagine |
+ | isUploading | booleano | Indica se un'immagine è attualmente in fase di caricamento |
+ | messaggioDiErrore | stringa | Un messaggio di errore opzionale da visualizzare sotto l'input dell'immagine |
+ | disabilitato | booleano | Se `vero`, l'intero input è disabilitato e i pulsanti non sono cliccabili |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/it/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..161c3421b3
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Radio
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Utilizzato quando gli utenti possono scegliere solo un'opzione da una serie di opzioni.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------ |
+ | stile | proprietà `React.CSS` | Stili inline aggiuntivi per il componente |
+ | nomeClasse | stringa | Classe CSS opzionale per uno stile aggiuntivo |
+ | selezionato | booleano | Indica se il pulsante di opzione è selezionato |
+ | valore | stringa | L'etichetta o il testo associato al pulsante di opzione |
+ | onChange | funzione | The function called when the selected radio button is changed |
+ | onCheckedChange | funzione | La funzione chiamata quando cambia lo stato `selezionato` del pulsante di opzione |
+ | dimensione | stringa | La dimensione del pulsante di opzione. Le opzioni includono: `grande` e `piccolo` |
+ | disabilitato | booleano | Se `true`, il pulsante di opzione è disabilitato e non cliccabile |
+ | posizioneEtichetta | stringa | La posizione del testo dell'etichetta rispetto al pulsante di opzione. Ha due opzioni: `sinistra` e `destra` |
+
+
+
+## Gruppo di Radio
+
+Raggruppa insieme pulsanti di opzione correlati.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------- | ----------------- | -------------------------------------------------------------------------------- |
+ | valore | stringa | Il valore del pulsante di opzione attualmente selezionato |
+ | onChange | funzione | The callback function triggered when the radio button is changed |
+ | onValueChange | funzione | La funzione di callback attivata quando cambia il valore selezionato nel gruppo. |
+ | figli | `React.ReactNode` | Consente di passare componenti React (come Radio) come figli al Gruppo di Radio |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/select.mdx b/packages/twenty-docs/l/it/twenty-ui/input/select.mdx
new file mode 100644
index 0000000000..5f14aa2884
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/select.mdx
@@ -0,0 +1,51 @@
+---
+title: Seleziona
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+Permette agli utenti di scegliere un valore da un elenco di opzioni predefinite.
+
+
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
+
+ import { Select } from '@/ui/input/components/Select';
+
+ export const MyComponent = () => {
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | string | Classe CSS opzionale per uno stile aggiuntivo |
+ | disabilitato | booleano | Quando impostato su `true`, disabilita l'interazione dell'utente con il componente |
+ | etichetta | stringa | L'etichetta per descrivere lo scopo del componente `Select` |
+ | onChange | funzione | La funzione chiamata quando i valori selezionati cambiano |
+ | opzioni | array | Represents the options available for the `Selected` component. It's an array of objects where each object has a `value` (the unique identifier), `label` (the unique identifier), and an optional `Icon` |
+ | valore | stringa | Rappresenta il valore attualmente selezionato. It should match one of the `value` properties in the `options` array |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/text.mdx b/packages/twenty-docs/l/it/twenty-ui/input/text.mdx
index d4104cf4a0..16913b7c6c 100644
--- a/packages/twenty-docs/l/it/twenty-ui/input/text.mdx
+++ b/packages/twenty-docs/l/it/twenty-ui/input/text.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/notes/notes_header.png
---
-
+
## Input Testo
@@ -12,59 +12,53 @@ image: /images/user-guide/notes/notes_header.png
Consente agli utenti di inserire e modificare il testo.
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
-
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
-```jsx
-import { RecoilRoot } from "recoil";
-import { TextInput } from "@/ui/input/components/TextInput";
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
-export const MyComponent = () => {
- const handleChange = (text) => {
- console.log("Input changed:", text);
- };
+ return (
+
+
+
+ );
+ };
- const handleKeyDown = (event) => {
- console.log("Key pressed:", event.key);
- };
+ ```
+
- return (
-
-
-
- );
-};
-
-```
-
-
-
-
-
-| Props | Tipo | Descrizione |
-| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| nomeClasse | string | Nome opzionale per stile aggiuntivo |
-| etichetta | string | Rappresenta l'etichetta per l'input |
-| onChange | funzione | La funzione chiamata quando cambia il valore dell'input |
-| larghezzaCompleta | booleano | Indica se l'input deve occupare il 100% della larghezza |
-| disattivaTastiRapidi | booleano | Indica se i tasti rapidi sono abilitati per l'input |
-| errore | string | Rappresenta il messaggio di errore da visualizzare. Quando fornito, aggiunge anche un'icona di errore sul lato destro dell'input |
-| premiTasto | funzione | Chiamato quando un tasto viene premuto mentre il campo di input è attivo. Riceve un `React.KeyboardEvent` come argomento |
-| IconaDestra | IconaComponente | Un componente icona opzionale visualizzato sul lato destro dell'input |
-
-Il componente accetta anche altre proprietà dell'elemento di input HTML.
-
-
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+ | etichetta | stringa | Rappresenta l'etichetta per l'input |
+ | cambiaDiStato | funzione | La funzione chiamata quando cambia il valore dell'input |
+ | larghezzaCompleta | booleano | Indica se l'input deve occupare il 100% della larghezza |
+ | disattivaTastiRapidi | booleano | Indica se i tasti rapidi sono abilitati per l'input |
+ | errore | stringa | Rappresenta il messaggio di errore da visualizzare. Quando fornito, aggiunge anche un'icona di errore sul lato destro dell'input |
+ | premiTasto | funzione | Chiamato quando un tasto viene premuto mentre il campo di input è attivo. Riceve un `React.KeyboardEvent` come argomento |
+ | IconaDestra | IconaComponente | Un componente icona opzionale visualizzato sul lato destro dell'input |
+ Il componente accetta anche altre proprietà dell'elemento di input HTML.
+
## Input Testo Autosize
@@ -72,46 +66,40 @@ Il componente accetta anche altre proprietà dell'elemento di input HTML.
Componente di input testo che regola automaticamente la sua altezza in base al contenuto.
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
-
-
-```jsx
-import { RecoilRoot } from "recoil";
-import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
-
-export const MyComponent = () => {
- return (
-
- console.log("onValidate function fired")}
- minRows={1}
- placeholder="Write a comment"
- onFocus={() => console.log("onFocus function fired")}
- variant="icon"
- buttonTitle
- value="Task: "
- />
-
- );
-};
-```
-
-
-
-
-
-| Props | Tipo | Descrizione |
-| -------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
-| suValida | funzione | La funzione di callback che si vuole attivare quando l'utente valida l'input |
-| righeMinime | numero | Il numero minimo di righe per l'area di testo |
-| segnaposto | string | Il testo segnaposto che si vuole visualizzare quando l'area di testo è vuota |
-| suFocus | funzione | La funzione di callback che si vuole attivare quando l'area di testo ottiene il focus |
-| variante | string | La variante dell'input. Le opzioni includono: `predefinito`, `icona` e `pulsante` |
-| titoloPulsante | string | Il titolo per il pulsante (applicabile solo per la variante pulsante) |
-| valore | string | Il valore iniziale per l'area di testo |
-
-
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------- | -------- | ------------------------------------------------------------------------------------- |
+ | suValida | funzione | La funzione di callback che si vuole attivare quando l'utente valida l'input |
+ | righeMinime | numero | Il numero minimo di righe per l'area di testo |
+ | segnaposto | stringa | Il testo segnaposto che si vuole visualizzare quando l'area di testo è vuota |
+ | suFocus | funzione | La funzione di callback che si vuole attivare quando l'area di testo ottiene il focus |
+ | variante | stringa | La variante dell'input. Le opzioni includono: `predefinito`, `icona` e `pulsante` |
+ | titoloPulsante | stringa | Il titolo per il pulsante (applicabile solo per la variante pulsante) |
+ | valore | stringa | Il valore iniziale per l'area di testo |
+
## Area di Testo
@@ -119,35 +107,31 @@ export const MyComponent = () => {
Consente di creare input di testo multilinea.
-
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
-```jsx
-import { TextArea } from "@/ui/input/components/TextArea";
+ export const MyComponent = () => {
+ return (
+
-export const MyComponent = () => {
- return (
-
-
-
-
-| Props | Tipo | Descrizione |
-| ------------ | -------- | --------------------------------------------------------------------------- |
-| disabilitato | booleano | Indica se l'area di testo è disabilitata |
-| righeMinime | numero | Numero minimo di righe visibili per l'area di testo. |
-| onChange | funzione | Funzione di callback attivata quando il contenuto dell'area di testo cambia |
-| segnaposto | string | Il testo segnaposto visualizzato quando l'area di testo è vuota |
-| valore | string | Il valore corrente dell'area di testo |
-
-
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------- | -------- | --------------------------------------------------------------------------- |
+ | disabilitato | booleano | Indica se l'area di testo è disabilitata |
+ | righeMinime | numero | Numero minimo di righe visibili per l'area di testo. |
+ | cambiaDiStato | funzione | Funzione di callback attivata quando il contenuto dell'area di testo cambia |
+ | segnaposto | stringa | Il testo segnaposto visualizzato quando l'area di testo è vuota |
+ | valore | stringa | Il valore corrente dell'area di testo |
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/it/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..802c5a22ab
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Attiva/Disattiva
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione | Predefinito |
+ | ---------------------- | -------- | ----------------------------------------------------------------------------------------- | ----------- |
+ | valore | booleano | Lo stato attuale dell'interruttore | `falso` |
+ | onChange | funzione | Funzione di callback attivata quando lo stato dell'interruttore cambia | |
+ | colore | stringa | Colore dell'interruttore quando è | colore blu |
+ | dimensioneInterruttore | stringa | Size of the toggle, affecting both height and weight. Ha due opzioni: `small` e `medium`. | medio |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/introduction.mdx b/packages/twenty-docs/l/it/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..6b9bda25a5
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Panoramica
+description: Libreria di componenti per Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Componenti
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/it/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..b84dc7b6e2
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Breadcrumb
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Visualizza una barra di navigazione a briciole di pane.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "Home", href: "/" },
+ { children: "Categoria", href: "/category" },
+ { children: "Sottocategoria", href: "/category/subcategory" },
+ { children: "Pagina Attuale" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | nomeClasse | string | Nome classe opzionale per uno styling aggiuntivo |
+ | collegamenti | array | An array of objects, each representing a breadcrumb link. Ogni oggetto ha una proprietà `children` (il contenuto testuale del collegamento) e una proprietà `href` opzionale (l'URL a cui navigare quando il collegamento viene cliccato) |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/it/twenty-ui/navigation/links.mdx
index a6257ab9c3..9ea5346401 100644
--- a/packages/twenty-docs/l/it/twenty-ui/navigation/links.mdx
+++ b/packages/twenty-docs/l/it/twenty-ui/navigation/links.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/what-is-twenty/20.png
---
-
+
## Collegamento di Contatto
@@ -12,44 +12,40 @@ image: /images/user-guide/what-is-twenty/20.png
Un componente di collegamento stilizzato per visualizzare le informazioni di contatto.
-
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
-```jsx
-import { BrowserRouter as Router } from 'react-router-dom';
+ import { ContactLink } from 'twenty-ui/navigation';
-import { ContactLink } from 'twenty-ui/navigation';
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log('Contact link clicked!', event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log('Contact link clicked!', event);
- };
-
- return (
-
-
- example@example.com
-
-
- );
-};
-```
-
-
-
-
-| Props | Tipo | Descrizione |
-| ---------- | ----------------- | ------------------------------------------------------------------- |
-| nomeClasse | string | Nome opzionale per stile aggiuntivo |
-| href | string | L'URL di destinazione o il percorso per il link |
-| onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
-| figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
-
-
+ return (
+
+
+ example@example.com
+
+
+ );
+ };
+ ```
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ---------- | ----------------- | ------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+ | href | stringa | L'URL di destinazione o il percorso per il link |
+ | onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
+ | figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
+
## Collegamento Non Elaborato
@@ -57,39 +53,36 @@ export const MyComponent = () => {
Un componente di collegamento stilizzato per visualizzare collegamenti.
-
+
+ ```jsx
+ import { RawLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { RawLink } from "/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log("Contact link clicked!", event);
- };
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
- return (
-
-
- Contact Us
-
-
- );
-};
+ ```
+
-```
-
-
-
-
-| Props | Tipo | Descrizione |
-| ---------- | ----------------- | ------------------------------------------------------------------- |
-| nomeClasse | string | Nome opzionale per stile aggiuntivo |
-| href | string | L'URL di destinazione o il percorso per il link |
-| onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
-| figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
-
-
+
+ | Proprietà | Tipo | Descrizione |
+ | ---------- | ----------------- | ------------------------------------------------------------------- |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+ | href | stringa | L'URL di destinazione o il percorso per il link |
+ | onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
+ | figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
+
## Collegamento Arrotondato
@@ -97,38 +90,34 @@ export const MyComponent = () => {
Un collegamento stilizzato arrotondato con un componente Chip per i collegamenti.
-
+
+ ```jsx
+ import { RoundedLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { RoundedLink } from "/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
-export const MyComponent = () => {
- const handleLinkClick = (event) => {
- console.log("Contact link clicked!", event);
- };
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
+ ```
+
- return (
-
-
- Contact Us
-
-
- );
-};
-```
-
-
-
-
-
-| Props | Tipo | Descrizione |
-| ------- | ----------------- | ------------------------------------------------------------------- |
-| href | string | L'URL di destinazione o il percorso per il link |
-| figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
-| onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
-
-
+
+ | Proprietà | Tipo | Descrizione |
+ | --------- | ----------------- | ------------------------------------------------------------------- |
+ | href | stringa | L'URL di destinazione o il percorso per il link |
+ | figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
+ | onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
+
## Collegamento Sociale
@@ -136,33 +125,30 @@ export const MyComponent = () => {
Collegamenti social stilizzati, con supporto per vari tipi di collegamenti social, come URL, LinkedIn e X (o Twitter).
-
+
+ ```jsx
+ import { SocialLink } from "twenty-ui/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
-```jsx
-import { SocialLink } from "twenty-ui/navigation";
-import { BrowserRouter as Router } from "react-router-dom";
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
-export const MyComponent = () => {
- return (
-
-
-
- );
-};
-```
-
-
-
-
-| Props | Tipo | Descrizione |
-| ------- | ----------------- | -------------------------------------------------------------------------------------------------------------------- |
-| href | string | L'URL di destinazione o il percorso per il link |
-| figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
-| tipo | string | Il tipo di collegamenti social. Le opzioni includono: `url`, `LinkedIn`, e `Twitter` |
-| onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
-
-
+
+ | Proprietà | Tipo | Descrizione |
+ | --------- | ----------------- | ------------------------------------------------------------------------------------ |
+ | href | stringa | L'URL di destinazione o il percorso per il link |
+ | figli | `React.ReactNode` | Il contenuto da visualizzare all'interno del collegamento |
+ | tipo | stringa | Il tipo di collegamenti social. Le opzioni includono: `url`, `LinkedIn`, e `Twitter` |
+ | onClick | funzione | Funzione di callback da attivare quando si fa clic sul collegamento |
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/it/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..60c92dfed1
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,427 @@
+---
+title: Voce di menu
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Una voce di menu versatile progettata per essere utilizzata in un menu o in un elenco di navigazione.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Voce di menu cliccata!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Icona pulsante cliccata!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ------------- | --------------- | ------------------------------------------------------------------------------------------------------------ |
+ | IconaSinistra | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | accento | stringa | Specifica il colore dell'accento della voce di menu. Options include: `default`, `danger`, and `placeholder` |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | iconButtons | array | Un array di oggetti che rappresentano pulsanti icona aggiuntivi associati alla voce di menu |
+ | isTooltipOpen | booleano | Controlla la visibilità del tooltip associato alla voce di menu |
+ | testId | stringa | L'attributo data-testid per scopi di test |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per stile aggiuntivo |
+
+
+
+## Variants
+
+Le diverse varianti del componente voce di menu includono le seguenti:
+
+### Comando
+
+Una voce di menu in stile comando all'interno di un menu per indicare le scorciatoie da tastiera.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Comando cliccato!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------ | --------------- | ----------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | firstHotKey | stringa | Il primo collegamento da tastiera associato al comando |
+ | secondHotKey | stringa | Il secondo collegamento da tastiera associato al comando |
+ | isSelected | booleano | Indica se la voce di menu è selezionata o evidenziata |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Trascinabile
+
+Un componente di menu trascinabile progettato per essere utilizzato in un menu o elenco in cui gli elementi possono essere trascinati e azioni aggiuntive possono essere eseguite tramite pulsanti icona.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Voce di menu cliccata!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------- | --------------- | --------------------------------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | accento | stringa | Specifica il colore dell'accento della voce di menu. Può essere `default`, `placeholder` o `danger` |
+ | iconButtons | array | Un array di oggetti che rappresentano pulsanti icona aggiuntivi associati alla voce di menu |
+ | isTooltipOpen | booleano | Controlla la visibilità del tooltip associato alla voce di menu |
+ | onClick | funzione | Funzione di callback attivata quando il link viene cliccato |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | isDragDisabled | booleano | Indica se il trascinamento è disabilitato |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Multi-selezione
+
+Fornisce un modo per implementare la funzionalità di selezione multipla con una casella di controllo associata.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------- | --------------- | ------------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | selected | booleano | Indica se la voce di menu è selezionata (segnata) |
+ | onSelectChange | funzione | Funzione di callback attivata quando cambia lo stato della casella di controllo |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Avatar multi-selezione
+
+Una voce di menu a selezione multipla con un avatar, una casella di controllo per la selezione e contenuto testuale.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="Prima opzione"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | -------------- | ----------- | ------------------------------------------------------------------------------- |
+ | avatar | `ReactNode` | L'avatar o icona da visualizzare sul lato sinistro della voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | selected | booleano | Indica se la voce di menu è selezionata (segnata) |
+ | onSelectChange | funzione | Funzione di callback attivata quando cambia lo stato della casella di controllo |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Naviga
+
+Una voce di menu con un'icona opzionale a sinistra, contenuto testuale e un'icona a freccia verso destra.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Naviga a un'altra pagina");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ---------- | --------------- | ----------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Seleziona
+
+Una voce di menu selezionabile, con opzioni di contenuto a sinistra (icona e testo) e un indicatore (icona di selezione) per lo stato selezionato.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Voce di menu selezionata");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------ | --------------- | ----------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | selected | booleano | Indica se la voce di menu è selezionata (segnata) |
+ | disabilitato | booleano | Indica se la voce di menu è disabilitata |
+ | hovered | booleano | Indica se la voce di menu viene attualmente evidenziata |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Seleziona Avatar
+
+Una voce di menu selezionabile con un avatar, opzioni di contenuto a sinistra (avatar e testo) e un indicatore (icona di selezione) per lo stato selezionato.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Voce di menu selezionata");
+ };
+
+ return (
+ }
+ text="Prima Opzione"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------ | ----------- | ----------------------------------------------------------------------- |
+ | avatar | `ReactNode` | L'avatar o l'icona da visualizzare sul lato sinistro della voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | selezionato | booleano | Indica se la voce di menu è selezionata (segnata) |
+ | disabilitato | booleano | Indica se la voce di menu è disabilitata |
+ | hovered | booleano | Indica se la voce di menu viene attualmente evidenziata |
+ | testId | stringa | L'attributo data-testid per scopi di test |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Seleziona Colore
+
+Una voce di menu selezionabile con un campione di colore per scenari in cui si desidera che gli utenti scelgano un colore da un menu.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Voce di menu selezionata");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | colore | stringa | Il colore del tema che viene visualizzato come campione nella voce di menu. Le opzioni includono: `verde`, `turchese`, `cielo`, `blu`, `viola`, `rosa`, `rosso`, `arancione`, `giallo`, e `grigio` |
+ | selezionato | booleano | Indica se la voce di menu è selezionata (segnata) |
+ | disabilitato | booleano | Indica se la voce di menu è disabilitata |
+ | hovered | booleano | Indica se la voce di menu viene attualmente evidenziata |
+ | variante | stringa | La variante del campione di colore. Può essere `default` o `pipeline` |
+ | onClick | funzione | Funzione di callback attivata quando la voce di menu viene cliccata |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
+
+### Toggle
+
+Una voce di menu con un interruttore a levetta associato per permettere agli utenti di abilitare o disabilitare una funzionalità specifica
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+
+ import { MenuItemToggle } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietà | Tipo | Descrizione |
+ | ---------------------- | --------------- | ----------------------------------------------------------------------------- |
+ | LeftIcon | IconaComponente | Un'icona opzionale a sinistra visualizzata prima del testo nella voce di menu |
+ | testo | stringa | Il contenuto di testo della voce di menu |
+ | attivato | booleano | Indica se l'interruttore è nello stato "on" o "off" |
+ | onToggleChange | funzione | Funzione di callback attivata quando cambia lo stato dell'interruttore |
+ | dimensioneInterruttore | stringa | La dimensione dell'interruttore a levetta. Può essere \ |
+ | nomeClasse | stringa | Nome opzionale per lo stile aggiuntivo |
+
+
diff --git a/packages/twenty-docs/l/it/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/it/twenty-ui/navigation/step-bar.mdx
new file mode 100644
index 0000000000..f67ae1c5c5
--- /dev/null
+++ b/packages/twenty-docs/l/it/twenty-ui/navigation/step-bar.mdx
@@ -0,0 +1,34 @@
+---
+title: Step Bar
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Visualizza il progresso attraverso una sequenza di passi numerati evidenziando il passo attivo. Renderizza un contenitore con passi, ciascuno rappresentato dal componente `Passo`.
+
+
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+
+ export const MyComponent = () => {
+ return (
+
+ Passo 1
+ Passo 2
+ Passo 3
+
+ );
+ };
+ ```
+
+
+
+ | Props | Tipo | Descrizione |
+ | ----------- | ------ | ---------------------------------------------------------------------------------------------------- |
+ | passoAttivo | numero | L'indice del passo attualmente attivo. Determina quale passo dovrebbe essere visualmente evidenziato |
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..6e7d3980bf
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Panoramica
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Descrizione |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/it/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/it/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..d7a6e3cf99
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Panoramica
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Descrizione |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/it/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/it/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..7ed74c1f48
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: Autorizzazioni e controllo degli accessi
+description: Controlla a cosa gli agenti AI possono accedere e cosa possono modificare nel tuo spazio di lavoro.
+---
+
+## Panoramica
+
+Gli agenti AI rispettano la struttura delle autorizzazioni esistente. Ciò è particolarmente importante per i team che desiderano controllare esattamente a cosa i processi di AI automatizzati possono accedere o cosa possono modificare nel proprio spazio di lavoro.
+
+## Assegna un ruolo a un agente AI
+
+1. Vai a **Impostazioni → Ruoli**
+2. Clicca sul ruolo che vuoi assegnare
+3. Apri la scheda **Assegnazione**
+4. In **Agenti AI**, fai clic su **+ Assegna a un agente AI**
+5. Seleziona l'agente AI dall'elenco
+6. Conferma l'assegnazione
+
+## Perché assegnare ruoli agli agenti AI?
+
+| Vantaggio | Descrizione |
+| ----------------- | --------------------------------------------------------------------------- |
+| **Sicurezza** | Limita i dati a cui gli agenti AI possono accedere o che possono modificare |
+| **Conformità** | Garantisci che l'AI elabori solo i dati necessari |
+| **Controllo** | Previeni azioni indesiderate da parte delle automazioni AI |
+| **Tracciabilità** | Tieni traccia di quali azioni sono state eseguite da ciascun agente |
+
+
+ Per gli agenti AI che operano all'interno dei flussi di lavoro, l'assegnazione di un ruolo garantisce che l'agente non possa accedere o modificare dati al di fuori dell'ambito previsto, anche se il flusso di lavoro dispone di autorizzazioni più ampie.
+
+
+## Correlati
+
+* [Autorizzazioni](/l/it/user-guide/permissions-access/capabilities/permissions) — informazioni dettagliate sulla creazione e gestione dei ruoli
+* [Agenti AI](/l/it/user-guide/ai/capabilities/ai-agents) — funzionalità di AI nei flussi di lavoro
diff --git a/packages/twenty-docs/l/it/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/it/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/ai/overview.mdx b/packages/twenty-docs/l/it/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..66b81266f1
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: AI
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## Novità in arrivo
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Casi di utilizzo:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Rimani aggiornato
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/it/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/it/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..888dcdced3
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: Piani tariffari
+description: Scopri i piani tariffari di Twenty e come passare da uno all'altro.
+---
+
+## Panoramica
+
+Twenty offre prezzi flessibili per team di ogni dimensione, sia con hosting cloud sia con self‑hosting.
+
+## Piani cloud
+
+### Pro (Cloud)
+
+Per i team pronti a scalare:
+
+* Tutte le funzionalità CRM di base
+* Sincronizzazione email e calendario
+* Flussi di lavoro e automazioni
+* Supporto standard
+
+
+ Le funzionalità premium (SSO e autorizzazioni a livello di riga) non sono incluse nel piano Pro.
+
+
+### Organizzazione (Cloud)
+
+Per i team più numerosi con esigenze avanzate:
+
+* Tutto ciò che è incluso in Pro
+* **Funzionalità premium**: integrazione SSO e autorizzazioni a livello di riga
+* Supporto prioritario
+
+## Piani self‑hosted
+
+### Gratuito (self‑hosted)
+
+Esegui Twenty sulla tua infrastruttura senza costi:
+
+* Include tutte le funzionalità di Pro
+* Supporto della community via Discord
+* Pieno controllo sui tuoi dati
+
+### Organizzazione (self‑hosted)
+
+Per i team che necessitano di funzionalità premium con il self‑hosting:
+
+* Tutte le funzionalità di Pro
+* **Funzionalità premium**: integrazione SSO e autorizzazioni a livello di riga
+* Supporto del team di Twenty
+* Nessun requisito di pubblicare il codice personalizzato come open source prima della distribuzione
+
+## Funzionalità premium
+
+Le funzionalità premium sono disponibili solo nei piani Organizzazione (Cloud o self‑hosted):
+
+* **Integrazione SSO**: Single Sign‑On con il tuo provider di identità
+* **Autorizzazioni a livello di riga**: controllo degli accessi granulare a livello di record
+
+## Cambio piano
+
+### Esegui l'upgrade a Organizzazione
+
+1. Vai a **Impostazioni → Fatturazione**
+2. Fai clic su **Passa a Organizzazione**
+3. Conferma l'upgrade
+
+### Esegui il downgrade a Pro
+
+Contatta il supporto per eseguire il downgrade del tuo piano.
+
+### Passa alla fatturazione annuale
+
+1. Vai a **Impostazioni → Fatturazione**
+2. Fai clic su **Passa all'annuale**
+3. Risparmia con la fatturazione annuale
+
+### Passa alla fatturazione mensile
+
+Contatta il supporto per tornare alla fatturazione mensile.
diff --git a/packages/twenty-docs/l/it/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/it/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..999bf45c9a
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Crediti del flusso di lavoro
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Panoramica
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Mensile | 5 million/month |
+| Annuale | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Utilizzo dei Crediti |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI prompts** (coming soon) | Variable based on usage |
+
+I crediti vengono detratti in tempo reale quando i workflow vengono eseguiti.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Go to **Settings → Billing**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Acquisto di Crediti Aggiuntivi
+
+Need more credits?
+
+1. Go to **Settings → Billing**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/it/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/it/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..c4b08c9f2a
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Prezzi
+
+
+
+ Sì, puoi usare Twenty gratuitamente mentre ospiti autonomamente. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Il supporto è accessibile tramite la nostra comunità su Discord.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ Non offriamo posti gratuiti. La tariffazione è per utente e ogni utente necessita di una licenza per accedere a Twenty.
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`. Poi clicca su `Passa all'Organizzazione`.
+
+
+
+ Si prega di contattare direttamente il nostro team tramite il supporto, al momento non c'è un modo semplice per farlo utilizzando l'interfaccia utente.
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`. Poi clicca su `Passa ad Annuale`.
+
+
+
+ Si prega di contattare direttamente il nostro team tramite il supporto, al momento non c'è un modo semplice per farlo utilizzando l'interfaccia utente.
+
+
+
+ Lo troverai sotto `Impostazioni → Fatturazione`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Ogni azione del flusso di lavoro consuma crediti in base alla sua complessità:
+
+ * Le operazioni interne di base (come ricerca, aggiornamento, creazione di record) consumano pochissimi crediti
+ * Le operazioni più complesse come i nodi di codice e le richieste a servizi esterni consumano più crediti
+ * I prompt IA (in arrivo presto!) consumeranno anche più crediti in base all'uso
+
+ I crediti vengono detratti in tempo reale quando i workflow vengono eseguiti. Puoi monitorare il tuo utilizzo in `Impostazioni → Fatturazione` per controllare il consumo e i crediti rimanenti.
+
+
+
+ Puoi acquistare crediti aggiuntivi sotto `Impostazioni → Fatturazione`.
+
+
+
+## Fatturazione
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`.
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`. Poi clicca su `Visualizza dettagli di fatturazione`. Sarai in grado di aggiungere un nuovo metodo di pagamento lì.
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`. Poi clicca su `Visualizza dettagli di fatturazione`. Sarai in grado di modificare le informazioni di fatturazione lì.
+
+
+
+ Puoi farlo sotto `Impostazioni → Fatturazione`. Poi clicca su `Visualizza dettagli di fatturazione`. Vedrai tutte le tue fatture in fondo allo schermo.
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/billing/overview.mdx b/packages/twenty-docs/l/it/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..8fa9c6a28d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Fatturazione
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Piano | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/it/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..5bedf1ed01
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Calendario
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/it/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Scheda del calendario
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Persone**: Visualizza tutte le riunioni programmate con un contatto specifico
+* **Aziende**: Vedi tutte le riunioni relative a un'azienda e ai suoi dipendenti
+* **Opportunità**: Accedi alla cronologia delle riunioni relative all'azienda collegata a questa opportunità
+
+### Visualizzazione della cronologia delle riunioni
+
+1. **Naviga a un record**: Vai a qualsiasi record di Persona, Azienda o Opportunità
+2. **Seleziona la scheda Calendario**: Clicca sulla scheda `Calendario` accanto alla scheda Emails
+3. **Sfoglia la cronologia delle riunioni**: Visualizza tutte le riunioni programmate e i loro dettagli
+4. **Accedi al contesto della riunione**: Vedi i partecipanti, i tempi e le informazioni relative alle riunioni
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Cosa viene sincronizzato
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Cosa non viene sincronizzato
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..0ec8f688a8
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Nota**: Per connettere i tuoi account email e configurare le impostazioni di sincronizzazione, visita [Configurazione Email e Calendario](/l/it/user-guide/calendar-emails/overview).
+
+## Come funziona l'integrazione dell'email
+
+Twenty collega automaticamente le email dalle tue caselle di posta connesse ai relativi record CRM, mantenendo la cronologia di comunicazione in un unico posto.
+
+### Objects Where Emails Can Be Found
+
+Le conversazioni email appaiono in tre oggetti principali:
+
+* **Persone**: Visualizza tutte le email scambiate con un contatto specifico
+* **Aziende**: Vedi tutte le email relative ad un'azienda e ai suoi dipendenti
+* **Opportunità**: Accedi ai thread email relativi all'azienda collegata a questa opportunità. I thread email delle singole persone sull'opportunità non sono ancora mostrati.
+
+### Visualizzazione dei thread email
+
+1. **Naviga a un record**: Vai a qualsiasi record di Persona, Azienda o Opportunità
+2. **Seleziona la scheda Email**: Clicca sulla scheda `Emails` per visualizzare le email sincronizzate
+3. **Apri un thread email**: Clicca su qualsiasi email per aprire e leggere l'intera conversazione
+4. **Sfoglia cronologia**: Scorri attraverso la cronologia completa delle email con quel contatto
+
+
+
+## Cosa vedrai
+
+### Vista del thread email
+
+Quando apri un thread email, puoi:
+
+* **Leggere le conversazioni complete**: Vedi l'intero scambio di email
+* **Visualizzare i partecipanti**: Vedi tutte le persone coinvolte nel thread email
+* **Verificare i timestamp**: Scopri esattamente quando è stata inviata ciascuna email
+* **Accedere al contesto**: Comprendi la cronologia completa delle comunicazioni
+
+### Visibilità delle email
+
+A seconda delle impostazioni della casella di posta, potresti vedere:
+
+* **Contenuto completo**: Testo e dettagli email completi
+* **Subject + Metadata**: Subject line, sender, recipient, and timestamp
+* **Solo metadati**: Informazioni di base senza contenuto email
+
+## Comportamento di sincronizzazione delle email
+
+### Cosa viene sincronizzato
+
+* **Email esterne**: Tutte le email con contatti al di fuori della tua organizzazione
+* **Collegamento automatico**: Le email si connettono ai record di Persone e Aziende esistenti
+* **Indirizzi multipli**: Le email provenienti da qualsiasi indirizzo si collegano allo stesso record contatto
+* **Aggiornamenti**: Nuove email appaiono entro 5 minuti
+
+### Cosa non viene sincronizzato
+
+* **Email interne**: Le email tra colleghi (stesso dominio) rimangono private
+* **Email di gruppo**: Liste di distribuzione e email di gruppo sono escluse
+* **Cartelle escluse**: Cartelle che hai scelto di non sincronizzare (configurate in Impostazioni → Account → Email)
+
+### Sincronizzazione selettiva delle cartelle (Funzione Lab)
+
+Controlla quali cartelle email sincronizzano con Twenty:
+
+1. Abilita `Cartella Messaggi` in Impostazioni → Rilasci → Lab
+2. Configura le cartelle in Impostazioni → Account → Email
+3. Scegli cartelle specifiche da includere o escludere (Posta in arrivo, Inviati, Archivio, cartelle personalizzate)
+
+## Risoluzione dei problemi di sincronizzazione delle email
+
+### Problemi comuni di sincronizzazione
+
+* **Ritardi di sincronizzazione**: Le email appaiono entro 5 minuti, ma le importazioni iniziali richiedono più tempo
+* **Email mancanti**: Verifica se:
+ * Le cartelle sono escluse nelle impostazioni della Cartella Messaggi
+ * La creazione automatica dei contatti è disabilitata (le email necessitano di record Twenty esistenti)
+ * L'email è di colleghi (stesso dominio) o liste di gruppo
+ * La casella di posta sta ancora completando la sincronizzazione iniziale
+
+### Limitazioni delle email
+
+* **Cartelle di sistema**: Alcune cartelle email potrebbero non essere disponibili per la sincronizzazione
+* **Alias**: Solo le vere caselle di posta possono essere connesse (non gli alias email)
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..64c371ca1b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/it/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/it/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..5927a75da5
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Oggetto | What You See |
+| --------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Aziende** | All emails with anyone from that company (based on email domain) |
+| **Opportunità** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Oggetti personalizzati
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..29e673fe41
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Panoramica
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Go to **Settings → Accounts**
+2. Clicca su **Aggiungi account**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..47beb33008
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: Limita le email importate},{
+description: Controlla quali email vengono importate in Twenty.
+---
+
+## Panoramica
+
+Per impostazione predefinita, Twenty sincronizza tutte le email esterne dalla tua casella di posta collegata. Puoi limitare ciò che viene importato utilizzando la **selezione delle cartelle** e le **impostazioni di visibilità**.
+
+## Metodo 1: Selezione delle cartelle (consigliato)
+
+Controlla quali cartelle email sincronizzano con Twenty:
+
+1. Vai su **Impostazioni → Versioni → Lab**
+2. Abilita **Cartella dei messaggi**
+3. Torna a **Impostazioni → Account**
+4. Seleziona il tuo account email collegato
+5. Scegli quali cartelle sincronizzare:
+
+| Cartella | Descrizione |
+| --------------------------- | ----------------------------------------- |
+| **Posta in arrivo** | Email in arrivo principali |
+| **Posta inviata** | Email in uscita che hai inviato |
+| **Archivio** | Messaggi archiviati |
+| **Cartelle personalizzate** | Qualsiasi cartella specifica che desideri |
+
+6. Escludi le cartelle che non vuoi sincronizzare (Spam, Cestino, cartelle personali)
+
+Questo ti offre un controllo preciso su quali email compaiono nel tuo CRM senza sincronizzare tutto.
+
+## Metodo 2: Impostazioni per la creazione automatica dei contatti
+
+Controlla quando i contatti vengono creati dalle email:
+
+1. Vai su **Impostazioni → Account**
+2. Seleziona la tua casella di posta collegata
+3. Scegli un'opzione:
+ * **Disattivato**: Non vengono creati contatti, ma le email si sincronizzano comunque con i contatti esistenti
+ * **Inviati e ricevuti**: Crea contatti da tutte le email esterne
+ * **Solo inviati**: Crea contatti solo dalle email che invii
+
+## Cosa viene sempre escluso
+
+Queste email non vengono mai sincronizzate, indipendentemente dalle impostazioni:
+
+* **Email interne**: Messaggi tra colleghi (stesso dominio)
+* **Email di gruppo**: Liste di distribuzione e messaggi di gruppo
+* **Spam/Cestino**: Le cartelle di sistema sono generalmente escluse
+
+## Nota importante
+
+Non forniamo un indirizzo email in CC per la sincronizzazione selettiva. Usa la funzione di selezione delle cartelle sopra per ottenere lo stesso livello di controllo.
diff --git a/packages/twenty-docs/l/it/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/it/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..dfcab24aca
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Opzioni di Connessione
+
+### Account Google (Gmail & Google Calendar)
+
+1. Go to **Settings → Accounts**
+2. Clicca su **Aggiungi account**
+3. Seleziona **Continua con Google**
+4. Autorizza Twenty ad accedere al tuo Gmail e Google Calendar
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Le tue email e gli eventi del calendario inizieranno a sincronizzarsi automaticamente
+
+### Account Microsoft (Outlook & Microsoft Calendar)
+
+1. Go to **Settings → Accounts**
+2. Clicca su **Aggiungi account**
+3. Seleziona **Continua con Microsoft**
+4. Autorizza Twenty ad accedere al tuo Outlook e Microsoft Calendar
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Le tue email e gli eventi del calendario inizieranno a sincronizzarsi automaticamente
+
+### Configurazione SMTP/CalDAV (Altri Fornitori)
+
+Per altri fornitori di email e calendario:
+
+1. Vai a **Impostazioni → Rilasci → Lab** per abilitare la funzionalità
+2. Torna a **Impostazioni → Account**
+3. Configura le impostazioni SMTP per l'email
+4. Configura le impostazioni CalDAV per il calendario
+5. Testa la connessione
+
+### Caselle Multiple
+
+* **Account Illimitati**: Collega vari account email per utente
+* **Gestione Account**: Passa tra diverse caselle di posta
+* **Impostazioni di Sincronizzazione**: Configura impostazioni differenti per ciascuna casella
+
+
+ Solo vere caselle di posta possono essere collegate (es. supporto@dominio.com con la propria inbox). Alias email che inoltrano ad un'altra casella non possono essere collegati a Twenty.
+
+
+## Configurazione Email
+
+### Visibilità Messaggi
+
+Scegli diversi livelli di visibilità per le tue email:
+
+* **Solo Metadati**: Condividi solo informazioni di base (mittente, destinatario, data, ora)
+* **Oggetto e Metadati**: Condividi l'oggetto insieme ai metadati
+* **Tutto il Contenuto dell'Email**: Condividi l'intero contenuto dell'email inclusi gli allegati
+
+### Creazione Automatica Contatti
+
+* **Disattivato**: Nessuna creazione automatica di contatti
+* **Per messaggi inviati e ricevuti**: Crea contatti per tutte le interazioni email esterne
+* **Solo per messaggi inviati**: Crea contatti solo per email che invii
+* **Nota**: Le email interne (stesso dominio) non vengono mai sincronizzate per mantenere la privacy
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controlla quali email vengono sincronizzati con la Selezione Cartelle Messaggi (Funzionalità del Lab)
+
+Controlla quali cartelle email sincronizzano con Twenty:
+
+1. Vai a **Impostazioni → Rilasci → Lab** e abilita **Cartella Messaggi**
+2. Torna a **Impostazioni → Account** e seleziona il tuo account email collegato
+3. Scegli quali cartelle sincronizzare:
+ * **Posta in Arrivo**: Email in entrata principali
+ * **Inviati**: Email in uscita che hai inviato
+ * **Cartelle Personalizzate**: Qualsiasi cartella specifica che vuoi includere
+ * **Escludi Cartelle**: Salta cartelle come Spam, Cestino o cartelle personali
+
+Questo ti offre un controllo preciso su quali email appaiono nel tuo CRM senza sincronizzare tutto.
+
+**Cosa viene sincronizzato:**
+
+* **Email Esterne**: Tutte le email con contatti esterni dalle cartelle selezionate
+* **Email Interne**: Non sincronizzate (email dello stesso dominio rimangono private)
+* **Allegati**: In arrivo nel H1 2026
+
+**Nota**: Non forniamo un indirizzo email CC per la sincronizzazione selettiva. Invece, usa la funzionalità Cartella Messaggi sopra per ottenere lo stesso livello di controllo su quali email sincronizzano con Twenty.
+
+## Configurazione Calendario
+
+### Visibilità Eventi
+
+Scegli cosa sarà visibile ad altri utenti nel tuo spazio di lavoro:
+
+* **Tutto**: Tutti i dettagli dell'evento saranno condivisi con il tuo team
+* **Metadati**: Solo la data e i partecipanti saranno condivisi con il tuo team
+
+### Creazione Automatica Contatti per Riunioni
+
+* **Sì**: Crea automaticamente contatti per i partecipanti alle riunioni non nel tuo CRM
+* **No**: Collega solo le riunioni ai contatti esistenti
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controlla quali eventi vengono sincronizzati
+
+* **Importazione Riunioni**: Importa automaticamente gli eventi del calendario
+* **Collegamento Contatti**: Collega le riunioni ai record di Persone e Aziende
+
+**Cosa viene sincronizzato:**
+
+* **Riunioni**: Eventi del calendario con partecipanti esterni
+* **Collegamento Contatti**: Eventi collegati automaticamente ai record CRM
+* **Eventi di Team**: Visibilità del calendario condiviso
+
+## Frequenza di Sincronizzazione
+
+**Aggiornamenti ogni 5 minuti**: Sia i dati delle email che del calendario vengono sincronizzati automaticamente ogni 5 minuti dopo l'importazione iniziale.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Prossimi Passi
+
+* [Mailbox capabilities](/l/it/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/it/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..858446655c
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Cruscotti
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Panoramica
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Migliori Pratiche
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Preferiti
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..415396744c
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widget
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Stile
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/it/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/it/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..bf2c6b0e0b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Non ancora. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/it/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..68231d45f3
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Cruscotti
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Cruscotti
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Schede
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widget
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Salva
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Migliori Pratiche
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Prossimi Passi
+
+* [Widgets and visualizations](/l/it/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/it/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..3637b95b66
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Come Funziona
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/it/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/it/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..daa28f8381
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Campi di Relazione
+
+Please see our dedicated article: [Import Relations Between Objects](/l/it/user-guide/data-migration/capabilities/import-relations)
+
+### Campi Selezione
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..d163b68337
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Formati di file supportati
+description: Formati di file supportati per l'importazione dei dati in Twenty.
+---
+
+## Formati supportati
+
+Twenty supporta tre formati di file per l'importazione:
+
+| Formato | Estensione | Note |
+| ------------------ | ---------- | ------------------------------- |
+| **CSV** | .csv | Consigliato, il più compatibile |
+| **Excel** | .xlsx | Formato Excel moderno |
+| **Excel (Legacy)** | .xls | Formato Excel precedente |
+
+## Requisiti dei file
+
+| Requisito | Valore |
+| -------------------- | ------------------------------------------------------- |
+| **Codifica** | UTF-8 consigliato |
+| **Limite di record** | 10.000 record per file |
+| **Struttura** | La prima riga deve contenere le intestazioni di colonna |
+| **Contenuto** | Un solo tipo di oggetto per file |
+
+## Migliori pratiche per CSV
+
+* **Delimitatore**: usa la virgola (`,`) o il punto e virgola (`;`)
+* **Qualificatore di testo**: usa le virgolette doppie (`\"`) per il testo che contiene virgole
+* **Terminatori di riga**: Windows (CRLF) o Unix (LF), entrambi supportati
+* **Valori vuoti**: lascia le celle vuote, non usare "NULL" o "N/A"
+
+## Migliori pratiche per Excel
+
+Durante l'esportazione da Excel:
+
+* Rimuovi le formule (esporta solo i valori)
+* Elimina le righe vuote alla fine
+* Assicurati che non ci siano celle unite
+* Usa solo il primo foglio
+
+## Set di dati di grandi dimensioni
+
+Per set di dati superiori a 10.000 record:
+
+* Suddividi in più file
+* Oppure usa l'[importazione tramite API](/l/it/user-guide/data-migration/how-tos/import-data-via-api) per un numero illimitato di record
+
+Per migrazioni molto grandi (oltre 100.000 record), le API sono significativamente più veloci e più affidabili delle importazioni CSV.
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..bcf9d3cc79
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Panoramica
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Oggetto | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Aziende** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Membri del Workspace** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..af76e0e65f
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Panoramica
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Oggetto | Unique Fields |
+| -------------------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Aziende** | `id`, `domain` |
+| **Oggetti personalizzati** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Migliori Pratiche
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..31baa88ea1
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Panoramica
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Casi di utilizzo:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/it/developers/extend/capabilities/apis).
+
+### Permessi
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Campi di Relazione
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/it/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Prossimi Passi
+
+* [How to Update Existing Records](/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/it/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/it/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..f05d0657c2
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Panoramica
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Messaggio di errore | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Cosa vedrai
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Cosa vedrai
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### Email
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Dominio
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Data
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Telefono
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Esempio |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Booleano
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Valuta
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Esempio |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Numero
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/it/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Cosa vedrai
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Cosa vedrai
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/it/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Cosa vedrai
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/it/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Relazioni
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Modello dati
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/it/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/it/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/it/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..3606633af0
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Panoramica
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Prima di Iniziare
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/it/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Campo | Required? | Formato | Note |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Testo | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Numero | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Errore | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Sì! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Risoluzione dei problemi
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/it/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..8eb579d989
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Panoramica
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Prima di Iniziare
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Campo | Required? | Formato | Note |
+| ----------------- | ----------- | ----------------- | ------------------------- |
+| **Email** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Testo | |
+| **Last Name** | Recommended | Testo | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Testo | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Esempio |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Formato | Esempio |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Note |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| Email | **Email** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Telefono | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Errore | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Sì! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Risoluzione dei problemi
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/it/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..09951d8bf4
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Panoramica
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | Valore |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Documentazione |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/it/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/it/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Migliori Pratiche
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/it/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Servizi Professionali
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/it/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Sì! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/it/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..8514e9306f
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Panoramica
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Relazione | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Azienda | Persone |
+| Companies → Opportunities | Azienda | Opportunità |
+| People → Tasks | Persona | Attività |
+| People → Notes | Persona | Note |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| --------------------------------- | --------------------------------------------------------------- |
+| **Aziende** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Membri dello spazio di lavoro** | `id` (UUID), `email` (not name) |
+| **Oggetti personalizzati** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Identificatore | Formato | Esempio |
+| -------------- | -------------- | -------------------------------------- |
+| Dominio | URL format | `https://acme.com` |
+| Email | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Sì! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Puoi:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Risoluzione dei problemi
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/it/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..3d169e2834
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Migrazione da altri CRM
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Panoramica
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Vai a **Impostazioni → Membri**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Oggetti personalizzati
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ----------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **Email** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/it/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/it/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Ricrea i Flussi di Lavoro
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/it/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Problemi comuni e soluzioni
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Lista di Verifica Post-Migrazione
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Configurazione
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Hai Bisogno di Aiuto?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/it/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..9659f8d32e
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Migrazione da Soluzioni Self-Hosted a Cloud
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Panoramica
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Aziende
+2. Persone
+3. Opportunità
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+Prima:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+Dopo:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Viste
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Flussi di Lavoro
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Integrazioni
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Lista di Verifica Post-Migrazione
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Hai Bisogno di Aiuto?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/it/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..10b396e7f5
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: Prepara i tuoi file CSV
+description: Guida completa passo passo per formattare i tuoi dati per l'importazione in Twenty.
+---
+
+## Panoramica
+
+Questa guida ti accompagna nella preparazione del tuo file CSV per un'importazione riuscita. Segui questi passaggi per evitare errori.
+
+## Passaggio 1: Controlla i requisiti del file
+
+Prima di iniziare, assicurati che il tuo file soddisfi questi requisiti:
+
+| Requisito | Dettagli |
+| ------------------------ | --------------------------- |
+| **Formato** | CSV, XLSX o XLS |
+| **Limite di dimensione** | 10.000 record per file |
+| **Codifica** | Si consiglia UTF-8 |
+| **Struttura** | Un tipo di oggetto per file |
+
+Per set di dati superiori a 10.000 record, suddividi in più file oppure usa l'[importazione tramite API](/l/it/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Passaggio 2: Scarica il file di esempio
+
+**Questo è il passaggio più importante.** Il file di esempio ti mostra i nomi delle colonne e il formato esatti che Twenty si aspetta.
+
+1. Vai alla vista dell'oggetto (Persone, Aziende, ecc.)
+2. Fai clic su **⋮** → **Importa record**
+3. Fai clic su **Scarica file di esempio**
+4. Usa questo file come modello
+
+**Suggerimento avanzato:** Esporta invece alcuni record esistenti. Questo ti fornisce esempi reali di come i dati devono essere formattati e i nomi delle colonne verranno mappati automaticamente durante l'importazione.
+
+## Passaggio 3: Rimuovi i valori duplicati
+
+Twenty impone l'unicità su alcuni campi. I duplicati causeranno errori di importazione.
+
+| Oggetto | Campi unici |
+| -------------------------- | ------------------------------------------------------------- |
+| **Persone** | `id`, `email` |
+| **Aziende** | `id`, `domain` |
+| **Oggetti personalizzati** | `id`, più qualsiasi campo che hai contrassegnato come univoco |
+
+**Prima dell'importazione:**
+
+1. Ordina il tuo foglio di calcolo in base al campo univoco (email o dominio)
+2. Rimuovi o unisci le righe duplicate
+3. Verifica la presenza di duplicati già esistenti in Twenty
+
+**I record eliminati in modo non definitivo contano ai fini dell'unicità.** I record in Menu Comandi → Vedi record eliminati causeranno errori di duplicato. Eliminali definitivamente oppure ripristinali e aggiornali.
+
+## Passaggio 4: Formattta correttamente ogni tipo di campo
+
+Tipi di campo diversi richiedono formati specifici. Ecco il riferimento completo:
+
+### Campi di testo
+
+* Non è richiesta una formattazione speciale
+* Gli spazi iniziali/finali vengono rimossi automaticamente
+
+### Campi email
+
+* Deve avere un formato email valido: `name@domain.com`
+* Deve essere univoco (nessun duplicato nel file o in Twenty)
+* Per email aggiuntive, usa questo formato nella colonna **Email / Email aggiuntive**:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Campi del dominio
+
+* **Formato consigliato**: `https://domain.com`
+* Questo corrisponde al formato usato dalla sincronizzazione della casella di posta/calendario (evita duplicati)
+* Compila entrambe le colonne:
+ * **Dominio / Etichetta dominio**: `domain.com`
+ * **Dominio / URL dominio**: `https://domain.com`
+* Deve essere univoco all'interno del tuo file e in Twenty
+
+### Campi telefono
+
+Il telefono è un **campo annidato** che richiede più colonne:
+
+| Colonna | Esempio |
+| -------------------------------------------------------------- | ------------ |
+| **Telefoni / Numero di telefono principale** | `4159095555` |
+| **Telefoni / Codice paese del telefono principale** | `US` |
+| **Telefoni / Prefisso internazionale del telefono principale** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Esempio |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Campi Selezione
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Prossimi Passi
+
+Your file is ready! Now:
+
+* [Import Companies](/l/it/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..85cbe0131d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Panoramica
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Casi di utilizzo:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Come Funziona
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Oggetto | Recommended | Alternative | Note |
+| -------------------------- | ---------------- | ----------- | ---------------------------- |
+| **People** | `email` | `id` | Email is human-readable |
+| **Aziende** | `dominio` | `id` | Domain is human-readable |
+| **Oggetti personalizzati** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Risultato |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Risultato | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Sì! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Migliori Pratiche
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Risoluzione dei problemi
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/it/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/it/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/it/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/it/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/it/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..e1fee5e1ae
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: Migrazione dei dati
+description: Importa ed esporta i dati del tuo CRM tramite file CSV o API.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Metodi di importazione
+
+Twenty supporta due metodi principali per importare dati:
+
+| Metodo | Ideale per | Limite di volume |
+| -------------------- | ------------------------------------------- | ---------------------- |
+| **Importazione CSV** | Migrazioni standard, aggiornamenti regolari | 10.000 record per file |
+| **Importazione API** | Migrazioni su larga scala, automazione | Illimitato |
+
+Per set di dati molto grandi (centinaia di migliaia di record), usa le API. I nostri [partner di implementazione](/l/it/user-guide/getting-started/capabilities/implementation-services) possono aiutarti a eseguire questi script se necessario.
+
+## Nozioni di base sull'importazione CSV
+
+Puoi importare dati per qualsiasi oggetto utilizzando file CSV, XLSX o XLS. Ogni file dovrebbe contenere **solo un tipo di oggetto** (ad esempio, solo record di Persone).
+
+**I campi devono esistere prima dell'importazione.** Il caricamento di un file CSV crea record ma non crea campi. Se ti servono campi personalizzati, creali prima in **Impostazioni → Modello dati**.
+
+### Passaggi
+
+1. Vai all'oggetto in cui vuoi importare i dati
+2. Fai clic sull'icona **⋮** in alto a destra (questo è il Menu comandi) e fai clic su **Importa record**
+3. Scarica il file modello per assicurarti che i dati siano nel formato previsto
+4. Carica il tuo file CSV formattato
+5. Abbina le tue colonne ai campi di Twenty
+6. Esamina gli errori (evidenziati in giallo) e correggili, modificando direttamente nell'interfaccia utente (UI)
+7. Conferma l'importazione
+
+### Importazione delle relazioni tra oggetti
+
+Puoi importare le relazioni tra oggetti utilizzando la funzione di importazione CSV. Devi fare riferimento all'oggetto correlato utilizzando un campo univoco di tale oggetto: l'`id`, l'`email` per Persone e Membri dello spazio di lavoro, il `domain` per le aziende, qualsiasi altro campo impostato come univoco nel modello dati per qualsiasi altro oggetto.
+
+**I record eliminati influiscono sull'unicità.** I record eliminati in modo non definitivo (visibili nel Menu comandi → Vedi record eliminati) sono inclusi nei controlli di unicità. Se importi un record con lo stesso valore univoco di un record eliminato, il record eliminato verrà ripristinato.
+
+
+ **L'ordine di importazione è importante!**
+
+ Quando importi oggetti correlati, carica i file in questo ordine:
+
+ 1. **Aziende** per prime (il lato "uno" delle relazioni)
+ 2. **Persone** in secondo luogo (collegate alle aziende tramite companyId)
+ 3. **Opportunità** in terzo luogo (collegate ad aziende/persone)
+ 4. **Oggetti personalizzati** con relazioni per ultimi
+
+ Perché? Il lato "uno" di una relazione uno-a-molti deve esistere prima di potervi fare riferimento. Ad esempio, il record Azienda deve esistere prima di importare una Persona con l'ID di quella azienda.
+
+
+Consulta [questo articolo](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) per una guida passo passo su come procedere.
+
+## Esporta Dati
+
+Esporta i dati del tuo spazio di lavoro per backup, reportistica o migrazione.
+
+### Passaggi
+
+1. Vai all'oggetto che vuoi esportare
+2. Configura la vista con le colonne di cui hai bisogno
+3. Fai clic su **⋮** → **Esporta vista**
+4. Salva il file CSV
+
+**Vengono esportate solo le colonne visibili.** Il file CSV conterrà solo le colonne visualizzate nella vista corrente. Aggiungi o nascondi colonne prima dell'esportazione per controllare quali dati includere.
+
+**Limiti di esportazione**: fino a 20.000 record per esportazione.
+
+## Permessi
+
+L'importazione e l'esportazione dei dati richiedono autorizzazioni specifiche:
+
+* **Importazione**: Richiede l'autorizzazione "Import CSV"
+* **Esportazione**: Richiede l'autorizzazione "Export CSV"
+
+Contatta l'amministratore dello spazio di lavoro se non disponi di queste autorizzazioni.
+
+## Prossimi Passi
+
+* [Prepara i file CSV](/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [Importa le relazioni tra oggetti](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Importa tramite API per set di dati di grandi dimensioni](/l/it/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..f91df7bb8e
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Campi
+description: Comprendere il ruolo dei campi e come gestirli.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Informazioni sui Campi
+
+I campi sono come colonne in un foglio di calcolo. Memorizzano diversi tipi di dati come testo, numeri o date. I campi possono essere standard (di sistema) o personalizzati (quelli che crei tu).
+
+### Campi Standard
+
+I campi standard sono integrati in Twenty per gestire esigenze aziendali comuni.
+
+Ad esempio, `Nome` e `Cognome` sono campi standard nell'oggetto `People`. Memorizzano dati di testo per nomi individuali.
+
+Non puoi eliminare i campi standard, ma puoi disattivarli se non ne hai bisogno.
+
+Puoi anche personalizzare le opzioni dei campi standard di tipo `SELECT`, ad esempio le opzioni della `Fase` nelle Opportunità.
+
+
+
+### Campi Personalizzati
+
+I campi personalizzati possono essere aggiunti a qualsiasi oggetto. Puoi memorizzare testo, numeri, date, selezioni a discesa e altro. Usa campi personalizzati per tracciare informazioni specifiche per la tua attività.
+
+Ad esempio, un campo personalizzato per SpaceX potrebbe essere `Stato operativo razzo`, che indica se un razzo è operativo.
+
+
+
+## Tipi di campo
+
+Twenty supporta vari tipi di campo:
+
+| Tipo | Descrizione | Esempio |
+| --------------- | ------------------------------------------------------------------ | ------------------------------ |
+| Indirizzo | Indirizzo strutturato con via, città, stato, paese, codice postale | Indirizzo dell'ufficio |
+| Array | Elenco di valori di testo | Etichette |
+| Booleano | Casella di controllo vero/falso | Attivo |
+| Valuta | Valore monetario con codice valuta | Importo della trattativa (USD) |
+| Data | Valori di data | Data di chiusura |
+| Data e ora | Data con orario | Ora della riunione |
+| Dominio | Dominio del sito web (utilizzato per le Aziende) | acme.com |
+| Email | Indirizzi email (con principale + aggiuntivi) | Email del contatto |
+| JSON | Dati JSON strutturati | Metadati personalizzati |
+| Collegamenti | URL con etichette (principale + secondaria) | Sito web, LinkedIn |
+| Testo lungo | Testo multilinea | Descrizione, Note |
+| Multi-selezione | Scelte multiple da un elenco predefinito | Etichette, Categorie |
+| Numero | Valori numerici (interi o decimali) | Quantità, Punteggio |
+| Telefono | Numeri di telefono con prefisso internazionale | Telefono di lavoro |
+| Valutazione | Valutazione a stelle (1-5) | Priorità, Punteggio |
+| Relazione | Collegamenti a record in altri oggetti | Azienda → Persone |
+| Seleziona | Scelta singola da un elenco predefinito | Fase, Stato |
+| Testo | Testo su una riga | Nome, Titolo |
+
+## Crea un campo personalizzato
+
+Per aggiungere un campo personalizzato a qualsiasi oggetto, segui questi passaggi:
+
+1. Vai su `Impostazioni` nella barra laterale sinistra.
+2. Vai su `Modello di dati`, quindi seleziona l'oggetto che desideri personalizzare.
+3. Procedi cliccando su `Aggiungi Campo`.
+4. Scegli un nome e un tipo di campo che si adattano alle tue esigenze. Considera l'aggiunta di una descrizione del campo per una migliore comprensione.
+
+Il tuo nuovo campo è ora disponibile nei campi dell'applicazione. Per visualizzarlo in una vista specifica, fai clic sul menu delle opzioni, quindi seleziona `Campi`.
+
+
+
+**Modo rapido:** Fai clic sul pulsante **+** in alto a destra di ogni tabella oggetto, quindi seleziona `Personalizza campi`. Ciò ti porterà direttamente alle impostazioni del Modello di Dati.
+
+
+
+## Disattiva un campo
+
+Puoi disattivare un campo per nasconderlo dall'app senza perdere i tuoi dati. Pensalo come un nascondimento del campo invece di un'eliminazione.
+
+Ecco come puoi farlo:
+
+1. Trova il campo che desideri disattivare nelle impostazioni del tuo oggetto.
+
+2. Clicca sui tre punti `⋮` accanto al campo per aprire il menu.
+
+3. Seleziona `Disattiva` dall'elenco a discesa.
+
+
+
+Cosa succede quando disattivi un campo?
+
+1. **Nell'app:** Il campo scompare e non puoi aggiungervi nuovi valori.
+
+2. **Relazioni esistenti:** Se è un campo di relazione, le connessioni esistenti rimangono ma non puoi crearne di nuove.
+
+3. **Accesso API:** Puoi ancora accedere al campo e ai suoi dati tramite l'API.
+
+Puoi riattivare i campi Standard e Personalizzati o avere l'opzione di eliminarli permanentemente.
+
+## Rendi Unici i Campi
+
+Rendi un campo unico per garantire che i record distinti non possano avere lo stesso valore. Ad esempio, gli indirizzi email sono unici per ogni persona.
+
+Se ottieni un errore impostando l'unicità, controlla i valori duplicati nei tuoi dati (inclusi i record eliminati).
+
+## Procedure Migliori per la Configurazione dei Campi
+
+### Convenzioni e Limitazioni sui Nomi
+
+* **I nomi singolari e plurali devono essere distinti**: La nostra API GraphQL necessita di nomi distinti per le mutazioni
+* **Nomi di campo protetti**: alcuni nomi sono riservati all'uso di sistema (ad es., `Type`, `Application`)
+
+### Campi Valuta e Telefono
+
+* **Valuta predefinita**: può essere configurata tramite il modello di dati
+* **Codici paesi predefiniti**: possono essere configurati per i campi telefono tramite il modello di dati
+
+### Campi Selezione
+
+* **Può essere selezionata un'opzione predefinita** per ogni campo Selezione
+
+### Campi di Testo dei Record
+
+* **Ogni oggetto ha un campo di visualizzazione principale**: Questo campo appare nella colonna più a sinistra e rappresenta il record quando collegato a altri oggetti. Deve essere un campo di testo. Ad esempio, Persone usa `Nome` come campo principale, quindi quando colleghi una persona a un'azienda, vedrai il loro nome nella vista dell'azienda.
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..f7f49828b2
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Oggetti
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Oggetti standard
+
+Gli oggetti standard sono entità predefinite nel tuo spazio di lavoro per aiutarti a iniziare. Fanno parte di un modello di dati condiviso accessibile a tutti gli utenti di Twenty. Puoi usarli così come sono, personalizzarli o disattivarli.
+
+
+
+### Persone
+
+L'oggetto `Persone` memorizza i tuoi contatti. Include dettagli di contatto e cronologia delle interazioni, così puoi vedere tutte le tue interazioni con i clienti in un unico posto.
+
+### Azienda
+
+L'oggetto `Aziende` memorizza i tuoi account aziendali. Include dettagli come settore, dimensioni e posizione. Le aziende si collegano sia agli oggetti `Persone` che `Opportunità`.
+
+### Opportunità
+
+L'oggetto `Opportunità` memorizza i dati relativi alle trattative. Traccia la progressione delle potenziali vendite, dalla prospezione alla chiusura, registrando fasi, dimensioni dell'accordo, account associato e data di chiusura prevista. Puoi visualizzare il tuo pipeline di vendita in un layout kanban.
+
+### Note
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Attività
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Oggetti personalizzati
+
+Gli oggetti personalizzati ti permettono di memorizzare informazioni uniche della tua organizzazione che gli oggetti standard non possono gestire. Ad esempio, se sei SpaceX, potresti voler creare un oggetto personalizzato per Razzi e Lanci.
+
+
+
+### Creating a New Custom Object
+
+Per creare un nuovo oggetto personalizzato:
+
+1. Vai a Impostazioni nella barra laterale a sinistra.
+2. Sotto Spazio di lavoro, vai su Modello di dati. Qui potrai vedere una panoramica di tutti i tuoi oggetti standard e personalizzati esistenti (sia attivi che disabilitati).
+
+
+
+3. Clicca su `+ Nuovo oggetto` in alto. Inserisci il nome (sia singolare che plurale), scegli un'icona, aggiungi una descrizione per il tuo oggetto personalizzato e clicca Salva (in alto a destra). Utilizzando Annuncio come esempio di oggetto personalizzato, il singolare sarebbe "annuncio" e il plurale sarebbe "annunci" insieme a una descrizione come "Annunci che gli host hanno creato per mostrare la loro proprietà."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Migliori Pratiche
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..212dea6272
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Campi di Relazione
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Clicca su **Salva**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ----------- | --------- | ------------- |
+| Persone | Aziende | Many-to-One |
+| Opportunità | Aziende | Many-to-One |
+| Opportunità | Persone | Many-to-One |
+
+## Migliori Pratiche
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..ab49a85822
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/it/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Clicca su **Salva**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/it/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/it/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/it/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..3bd6770421
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/it/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Clicca su **Salva**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/it/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/it/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/it/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/it/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..4a8fd22399
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Prima di Iniziare
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/it/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Clicca su **Salva**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/it/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..01fa9a7e09
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: Personalizza il tuo modello di dati},{
+description: Panoramica delle opzioni di personalizzazione del modello di dati.
+---
+
+Il modello di dati di Twenty è completamente personalizzabile. Crea oggetti, campi e relazioni per rispecchiare la tua azienda.
+
+## Collegamenti rapidi
+
+| Voglio... | Guida |
+| ---------------------------- | ------------------------------------------------------------------------------------------ |
+| Crea un nuovo oggetto | [Come creare oggetti personalizzati](/l/it/user-guide/data-model/how-tos/create-custom-objects) |
+| Aggiungi campi a un oggetto | [Come creare campi personalizzati](/l/it/user-guide/data-model/how-tos/create-custom-fields) |
+| Collega gli oggetti tra loro | [Come creare campi di relazione](/l/it/user-guide/data-model/how-tos/create-relation-fields) |
+
+## Per saperne di più
+
+* [Comprendere il tuo modello di dati](/l/it/user-guide/data-model/overview) — concetti chiave e consigli di pianificazione
+* [Oggetti](/l/it/user-guide/data-model/capabilities/objects) — oggetti standard e personalizzati
+* [Campi](/l/it/user-guide/data-model/capabilities/fields) — tutti i tipi di campo
+* [Campi di relazione](/l/it/user-guide/data-model/capabilities/relation-fields) — collegare gli oggetti
+* [FAQ sul modello di dati](/l/it/user-guide/data-model/how-tos/data-model-faq) — domande frequenti
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..de80bbb31e
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: FAQ del modello dati
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Gestione degli Oggetti
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Non ancora. L'ordinamento degli oggetti nella navigazione è attualmente fisso, ma questa funzionalità è pianificata per una futura versione.
+
+
+
+ Tutti gli oggetti attivi appaiono nella navigazione. Puoi disattivare gli oggetti di cui non hai bisogno in **Impostazioni → Modello dati**.
+
+
+
+## Funzionalità dei Campi
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ La nostra API GraphQL utilizza entrambe le forme per operazioni diverse:
+
+ * `createPerson` (singolare) per azioni su singoli record
+ * `createPeople` (plurale) per operazioni di massa
+
+ Questo crea limitazioni quando le forme singolari e plurali sono le stesse, ma migliora l'esperienza dello sviluppatore.
+
+
+
+ Certi nomi di campi come `Tipo` o `Applicazione` sono riservati per uso di sistema. Scegli nomi alternativi come `Categoria` o `Classificazione`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ I campi di formula arriveranno nel **Q1 2026**. Nel frattempo, puoi utilizzare i Workflows per calcolare e aggiornare automaticamente i valori dei campi.
+
+
+
+ I campi nidificati arriveranno nel **Q1 2026**. Attualmente, puoi utilizzare i Workflows per importare i valori dei campi da oggetti correlati. Ad esempio, per visualizzare il settore di un'azienda sul record di una Persona, crea un campo personalizzato su Persone e utilizza un Workflow per sincronizzare il valore.
+
+
+
+ Il riordino dei campi sarà disponibile con layout personalizzati nel **Q4 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## Relazioni
+
+
+
+ Sì! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/it/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Accesso e Permessi
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Contatta l'amministratore del tuo workspace. L'accesso al modello dati è solitamente riservato solo agli amministratori.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Need More Help?
+
+Check our [Implementation Services](/l/it/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/it/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/it/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..c34e39c105
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Modello dati
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Un modello di dati è la struttura che definisce come le informazioni sono organizzate nel tuo CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Oggetti
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Campi
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Nome
+* Email
+* Telefono
+* Titolo di lavoro
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Records
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Ad esempio:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Campi** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Ogni azienda lavora in modo diverso. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Questi vanno oltre un singolo campo perché contengono i propri dati e relazioni.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Chiediti:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Prossimi Passi
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/it/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/it/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/it/user-guide/data-model/how-tos/create-relation-fields)
+
+## Hai Bisogno di Aiuto?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/it/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..09e2c7abcb
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glossario
+description: Familiarizza con la terminologia essenziale utilizzata in Twenty.
+---
+
+## API
+
+Le API (Interfaccia di Programmazione delle Applicazioni) ti consentono di connettere Twenty con altri sistemi software e creare integrazioni personalizzate.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Menu Comandi
+
+Il Menu Comandi è un'interfaccia di accesso rapido (aperta con `Cmd + K` su Mac e `Ctrl + K` su Windows) che ti consente di eseguire azioni, creare record e navigare nel tuo workspace in modo efficiente.
+
+## Azienda & Persone
+
+Il CRM ha due tipi fondamentali di record:
+
+* A `Company` represents a business or organization.
+* `People` represent your company's current and prospective customers or clients.
+
+## Campi Personalizzati
+
+I Campi Personalizzati sono campi di dati che crei per catturare informazioni specifiche alle esigenze e ai processi della tua azienda.
+
+## Modello dati
+
+Un Modello di Dati è la struttura che definisce come le informazioni sono organizzate nel tuo CRM, inclusi quali oggetti esistono, le loro proprietà (campi) e come sono correlati tra loro.
+
+## Preferiti
+
+I Preferiti sono record che hai contrassegnato per un accesso rapido, apparendo nella tua barra laterale per una navigazione istantanea ai dati importanti.
+
+## Campo
+
+Un campo si riferisce a un'area specifica dove sono memorizzati dati particolari per un'entità.
+
+## Integration
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Iteratore
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+Un `Kanban` è un modo visivo per monitorare i tuoi processi aziendali utilizzando carte e colonne. Ogni colonna rappresenta una fase nel tuo processo (ad esempio: nuovo, in corso, vinto, perso), e sposti i record attraverso queste fasi man mano che progrediscono.
+
+## Oggetto
+
+Un Oggetto è una struttura dati che rappresenta un tipo specifico di entità nel tuo CRM (come Persone, Aziende o Opportunità). Gli Oggetti possono essere standard (di sistema) o personalizzati (creati da te).
+
+## Opportunità
+
+Le Opportunità in Twenty CRM sono potenziali accordi o vendite con aziende o contatti.
+
+## Record
+
+Un Record indica un'istanza di un oggetto, come una specifica azienda o un contatto.
+
+## Campi di Relazione
+
+Relation Fields create connections between different objects, allowing you to link records together (like connecting a Person to a Company).
+
+## Campi Standard
+
+I Campi Standard sono campi dati predefiniti che vengono forniti con oggetti di default e forniscono funzionalità comuni in tutti i workspace.
+
+## Attività
+
+Le Attività in Twenty CRM sono attività assegnate relative a contatti, aziende o opportunità.
+
+## Trigger
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Viste
+
+Puoi personalizzare la visualizzazione dei tuoi record usando le viste, impostando diversi filtri, layout e opzioni di ordinamento per ciascuna vista.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhooks
+
+Webhooks are automated messages sent from Twenty to other applications when specific events occur, enabling real-time data synchronization.
+
+## Flussi di Lavoro
+
+I Flussi di Lavoro sono processi automatizzati che attivano azioni in base a condizioni specifiche, aiutandoti ad automatizzare attività ripetitive e processi aziendali.
+
+## Workspace
+
+Un `Workspace` rappresenta tipicamente un'azienda che utilizza Twenty. Contiene tutti i record e i dati che tu e i membri del tuo team aggiungete a Twenty.
+Ha un singolo nome di dominio, che di solito è il nome di dominio che la tua azienda usa per gli indirizzi email dei dipendenti.
+
+## Membri del Workspace
+
+I Membri del Workspace sono gli utenti di Twenty del tuo team che hanno accesso al tuo Workspace. Possono essere assegnati come proprietari o assegnatari per i record.
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..809f1688b2
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Servizi di Implementazione
+description: Che tu abbia bisogno d'aiuto per iniziare o creare personalizzazioni avanzate, abbiamo una soluzione.
+---
+
+## Pacchetti di Onboarding
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Progettazione del Modello Dati**: Progetta e crea il tuo modello di dati personalizzato con oggetti, campi e relazioni.
+* **Migrazione dei Dati**: Migra i tuoi dati esistenti dal tuo CRM attuale a Twenty.
+* **Creazione di Flussi di Lavoro**: Crea flussi di lavoro personalizzati per supportare i tuoi processi aziendali.
+
+## Partner di Implementazione
+
+Collabora con partner certificati di Twenty per personalizzazioni e integrazioni più avanzate. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..06555d9ea9
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Che cos'è Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Visione
+
+Creare un buon CRM è difficile perché è un atto di equilibrio.
+Per ogni azienda, i requisiti sembrano semplici, eppure le esigenze di ciascuno sono distinte.
+Il risultato è un CRM che è o troppo basilare, o che tenta di essere un tuttofare finendo per non essere esperto in nulla.
+
+All'inizio, Twenty appare come la maggior parte dei CRM che già conosci: puoi monitorare le trattative, organizzare i contatti, gestire compiti e note.
+**Ma ciò che lo distingue è il nostro approccio all'estensibilità. Stiamo costruendo una piattaforma aperta che fornisce i blocchi di costruzione per risolvere i tuoi problemi aziendali unici.**
+
+Prioritizziamo principi universali e pattern comuni rispetto agli elenchi di funzionalità.
+Non cerchiamo di avere tutte le risposte, ma piuttosto di consentire agli utenti di trovare ciò che funziona meglio per loro.
+L'open-source è la base del nostro approccio, garantendo che Twenty evolva con la sua comunità, per la sua comunità.
+
+## Vantaggi
+
+**Personalizzabile:** Progettato per adattarsi alle esigenze della tua azienda.
+
+**Guidato dalla comunità:** Costruito e mantenuto da una vasta comunità open-source.
+
+**Conveniente:** Non sarai mai vincolato al fornitore, poiché puoi sempre ospitare autonomamente.
+
+## Caratteristiche principali
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Scopri di più](/l/it/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/it/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Inizia qui](/l/it/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/it/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/it/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/it/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/it/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/it/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Inizia a integrare](/l/it/developers/extend/capabilities/apis).
+
+## Unisciti ora
+
+[Registrati qui](https://app.twenty.com) o [diventa un collaboratore su GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..bff30abb92
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Ogni azienda lavora in modo diverso. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Ciò ti offre un valore immediato e aiuta il tuo team a vedere Twenty in azione con dati reali. You can do so under Settings → Accounts.
+
+## 1. Personalizza il tuo modello di dati
+
+Twenty offre la flessibilità necessaria per modellare il modello di dati che meglio supporterà la tua routine quotidiana.
+Create objects and fields of any type, including relations between your different objects. Puoi farlo sotto Impostazioni → Modello di Dati.
+Ecco alcuni suggerimenti:
+
+* **Non sei limitato nel numero di campi personalizzati né di oggetti personalizzati**. Aggiungere oggetti e campi personalizzati non comporterà l'aggiornamento del tuo piano.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Si consiglia di utilizzarli il più possibile, aggiungendo campi per categorizzare i tuoi record se necessario. Ecco un esempio:
+ * È meglio utilizzare l'oggetto Persone per i tuoi potenziali clienti e partner, creando un campo nell'oggetto Persone chiamato `Tipo di Persona`, invece di creare un oggetto personalizzato Partner. Perché non potresti accedere alle email scambiate con questa persona dai record del Partner.
+ * Crea viste diverse sotto Persone, una per visualizzare i partner e una per visualizzare i potenziali clienti.
+* Due Persone non possono avere lo stesso indirizzo email. Due Aziende non possono avere lo stesso dominio.
+* Puoi disattivare i campi e gli oggetti standard che non vuoi utilizzare.
+* Puoi nascondere i campi dalle viste: non aver paura di creare campi, non dovrai mostrarli tutti.
+
+Leggi [questo articolo](/l/it/user-guide/data-model/overview) per imparare a progettare il tuo modello di dati.
+
+## 2. Importa i tuoi dati
+
+Importare i tuoi dati esistenti in Twenty dà al tuo team un contesto fin dall'inizio.
+
+### Connect your mailbox
+
+Se non lo hai fatto creando il tuo spazio di lavoro, collega il tuo **account Google o Microsoft** sotto Impostazioni → Account. Questo permette a Twenty di:
+
+* Importare i tuoi messaggi e incontri
+* Creare automaticamente i contatti basandosi sulle interazioni (opzionale)
+* Mantenere visibile la cronologia delle comunicazioni per il tuo team
+
+**Usi un altro provider?**
+Puoi aggiungere un'altra casella di posta tramite SMTP o un altro calendario tramite CalDAV. Dovrai attivare la funzionalità sotto Impostazioni → Rilasci → Lab, e poi tornare alla scheda Impostazioni → Account.
+
+### Importa dati via csv
+
+Usa il menu Comando (`Cmd + K` o `Ctrl + K`) per importare Persone, Aziende, Opportunità o qualsiasi oggetto personalizzato tramite CSV.
+
+**Linee guida principali**:
+
+* Scarica il file di esempio per capire il formato richiesto
+* Limita ogni file a 10k record
+* Rimuovi email duplicate per le Persone o domini duplicati per le Aziende
+* Rivedi e correggi gli errori (evidenziati in giallo) prima di importare
+
+Leggi [questo articolo](/l/it/user-guide/data-migration/overview) per saperne di più sull'importazione dei dati.
+
+## 3. Crea la tua prima vista
+
+Creare diverse viste è fondamentale per rendere i dati azionabili per il tuo team.
+Ecco come procedere:
+
+* **Aggiungi o nascondi colonne**
+ Gestisci i campi visibili in una determinata vista facendo clic su Opzioni → Campi (dall'angolo in alto a destra). Puoi mostrare/nascondere i campi da lì.
+
+* **Riorganizza i campi**
+ Riorganizza i campi in una determinata vista facendo clic su Opzioni → Campi (dall'angolo in alto a destra). Trascina e rilascia i campi per riorganizzarli.
+
+* **Filtra la tua vista**
+ Restringi i record visibili utilizzando i Filtri dalla parte in alto a destra.
+
+* **Ordina i record**
+ Riordina i record visualizzati utilizzando la funzione Ordina dalla parte in alto a destra, o cliccando direttamente sul nome della colonna.
+
+* **Scegli il layout**
+ Puoi passare a un layout **Kanban** o a un layout elenco **Raggruppa Per**, purché l'oggetto abbia un campo di selezione tipo `Stadio` o simile.
+
+* **Salva la tua vista come Preferiti**
+ Ciò può essere fatto utilizzando il menu a discesa che mostra le diverse viste.
+
+## Cosa c'è dopo?
+
+Inizia a creare automazioni usando [flussi di lavoro](/l/it/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..680563e8a3
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Crea un Workspace
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Fase 1: Registrazione
+
+1. Vai a [Registrati su Twenty](https://app.twenty.com).
+2. Seleziona il tuo metodo di registrazione preferito:
+ * **Continua con Google** per registrazione con account Google.
+ * **Continua con Microsoft** per registrazione con account Microsoft.
+ * Oppure, **Continua con Email** per registrazione tramite email.
+
+
+
+## Fase 2: Scelta del Periodo di Prova
+
+Scegli tra due periodi di prova:
+
+### 30 giorni
+
+Con carta di credito
+
+### 7 giorni
+
+Senza carta di credito
+
+Entrambe le prove comprendono:
+
+* Accesso completo
+* Contatti illimitati
+* Integrazione e-mail
+* Oggetti personalizzati
+* API e Webhook
+
+Puoi cliccare su "Cambia piano" per scegliere un piano o un intervallo di fatturazione diverso.
+
+
+
+## Fase 3: Conferma di Pagamento e Configurazione dell'Account
+
+Post payment approval via Stripe, you're directed to create your workspace and user profile. Ricorda che puoi annullare il tuo abbonamento in qualsiasi momento.
+
+## Supporto
+
+Per domande o aiuto, contatta il team di supporto dedicato a [contact@twenty.com](mailto:contact@twenty.com) o invia un messaggio su [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..61ba73b1dc
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Ottieni una panoramica rapida su come navigare nella piattaforma e dove eseguire diverse azioni.
+---
+
+## Il Layout Principale
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. È qui che si svolge il lavoro quotidiano.
+Da qui puoi visualizzare, modificare ed eliminare i record, oltre a creare nuove viste.
+
+
+
+## La Barra di Navigazione
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Passa tra i tuoi diversi spazi di lavoro usando il menu a discesa oppure crea un nuovo spazio di lavoro.
+* Usa la barra di ricerca (premi `/` per attivarla all’istante)
+* Apri la sezione Impostazioni
+* Have direct access to your **Favourites views**. Favourites are unique for each user.
+* Passa tra i diversi oggetti
+* **Crea automazioni** utilizzando i flussi di lavoro
+* Contatta il supporto e apri la nostra Guida utente.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. Puoi accedervi in due modi:
+
+* **Scorciatoia da tastiera**: Premi `Cmd + K` (Mac) o `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Crea nuovi record
+* **Importa ed esporta dati tramite CSV**
+* Crea nuove viste
+* Accedi ai record eliminati (Twenty supporta eliminazioni temporanee e definitive)
+* Consulta le scorciatoie da tastiera per accedere rapidamente agli oggetti nel tuo spazio di lavoro
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Viste
+
+Ogni oggetto (come Opportunità o Persone) supporta più viste. Non c’è un limite al numero di viste per oggetto.
+
+Utilizza il menu a discesa in alto a sinistra del layout principale per passare tra le diverse visualizzazioni. Ad esempio:
+
+* Usa una vista Kanban per monitorare le opportunità in base alla fase
+* Usa la vista Group By per creare sezioni e migliorare l’efficienza
+* Usa i filtri per concentrarti su record specifici (ad es. contatti creati la settimana scorsa)
+* Salva le viste filtrate per riutilizzarle in seguito
+* Aggiungi le viste ai preferiti per un accesso rapido
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/it/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Impostazioni
+
+Apri le tue Impostazioni dall'angolo in alto a sinistra per:
+
+* **Connetti i tuoi account di posta e calendario** per una sincronizzazione senza interruzioni
+* Personalizza il tuo **modello di dati**: crea oggetti, campi e relazioni personalizzati
+* **Accedi all’area di prova delle API e configura i webhook**
+* **Gestisci i permessi utente** e i controlli di accesso dello spazio di lavoro
+* Invita i membri del team e gestisci i ruoli utente
+* Modifica il tuo profilo e le preferenze dello spazio di lavoro
+* Configura la fatturazione e monitora l’utilizzo dei crediti dei flussi di lavoro
+* Scopri le ultime versioni e le funzionalità in arrivo (in Rilasci → scheda Lab)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/it/user-guide/introduction.mdx b/packages/twenty-docs/l/it/user-guide/introduction.mdx
new file mode 100644
index 0000000000..c80fc0e978
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..8676300841
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Permessi
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Il sistema di permessi di Twenty ti consente di controllare l'accesso a tre aree principali:
+
+* **Oggetti e Campi**: Controlla chi può visualizzare, modificare o eliminare i record e i singoli campi
+* **Impostazioni**: Gestisci l'accesso alla configurazione dello spazio di lavoro e alle funzioni amministrative
+* **Azioni**: Controlla le azioni generali dello spazio di lavoro come importare dati o inviare e-mail
+
+## Crea un Ruolo
+
+Per creare un nuovo ruolo:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Sotto **Tutti i Ruoli**, clicca su **+ Crea Ruolo**
+3. Inserisci un nome per il ruolo
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Clicca su **Salva** per concludere
+
+## Elimina un Ruolo
+
+Per eliminare un ruolo:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Clicca sul ruolo che desideri rimuovere
+3. Apri la scheda **Impostazioni**, quindi clicca su **Elimina Ruolo**
+4. Clicca su **Conferma** nel modulo
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Tutti i ruoli tranne quello di **Admin** possono essere eliminati. Deve sempre esserci almeno un membro assegnato al ruolo di **Admin**.
+
+
+## Assegna Ruoli ai Membri
+
+### Visualizza Assegnazioni Correnti
+
+* Vai a **Impostazioni → Ruoli**
+* Vedi tutti i ruoli e quanti membri sono assegnati a ciascuno
+* Visualizza quali membri hanno quali ruoli
+
+### Assegna un Ruolo a un Membro
+
+1. Vai a **Impostazioni → Ruoli**
+2. Clicca sul ruolo che vuoi assegnare
+3. Apri la scheda **Assegnazione**
+4. Clicca su **+ Assegna a membro**
+5. Seleziona il membro dello spazio di lavoro dall'elenco
+6. Conferma l'assegnazione
+
+### Imposta Ruolo Predefinito
+
+1. Vai a **Impostazioni → Ruoli**
+2. Nella sezione **Opzioni**, trova **Ruolo Predefinito**
+3. Seleziona quale ruolo i nuovi membri dovrebbero ricevere automaticamente
+4. I nuovi membri dello spazio di lavoro riceveranno questo ruolo al momento della registrazione
+
+
+ You can only assign roles to existing workspace members. Per invitare nuovi membri, utilizza [Gestione Membri](/l/it/user-guide/settings/capabilities/member-management).
+
+
+## Personalizza Permessi
+
+I permessi determinano a cosa ogni ruolo può accedere o modificare all'interno del tuo spazio di lavoro, inclusi i record degli oggetti dello spazio di lavoro, le impostazioni e le azioni.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Descrizione |
+| -------------------------------------------- | -------------------------------------- |
+| **Visualizzare record su tutti gli oggetti** | View records in lists and detail pages |
+| **Modificare record su tutti gli oggetti** | Modify existing records |
+| **Cancellare record su tutti gli oggetti** | Soft-delete records (can be restored) |
+| **Distruggere record su tutti gli oggetti** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Descrizione |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Gestione degli Override sui Permessi
+
+To override inherited permissions:
+
+1. Clicca su **X** per rimuovere la regola ereditata
+2. Select the specific permissions you want
+3. Clicca sull'icona arancione **Annulla** (freccia circolare) per ripristinare le modifiche
+
+Al termine, clicca su **Fine**, quindi **Salva** una volta reindirizzato alla pagina del ruolo.
+
+### Permessi delle Impostazioni dello Spazio di lavoro
+
+Controlla l'accesso alle impostazioni dello spazio di lavoro in due modi:
+
+* Attiva **Accesso Completo Impostazioni** per concedere pieno accesso
+* Oppure abilita permessi specifici (ad es., generazione chiave API, preferenze dello spazio di lavoro, assegnazione ruoli, configurazione del modello di dati, impostazioni di sicurezza e gestione dei flussi di lavoro)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Permessi per Azioni dello Spazio di lavoro
+
+Controlla l'accesso alle azioni generali dello spazio di lavoro:
+
+* Attiva **Accesso Completo all'Applicazione** per concedere pieni permessi
+* Oppure abilita azioni individuali come **Invia Email**, **Importa CSV** e **Esporta CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Vai a **Impostazioni → Ruoli**
+2. Clicca sul ruolo che vuoi assegnare
+3. Apri la scheda **Assegnazione**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Conferma l'assegnazione
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Vai a **Impostazioni → Ruoli**
+2. Clicca sul ruolo che vuoi assegnare
+3. Apri la scheda **Assegnazione**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Conferma l'assegnazione
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..dd3ebaf43a
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Prerequisiti
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Vai a **Impostazioni → Membri**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Migliori Pratiche
+
+### Sicurezza
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Risoluzione dei problemi
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Ottenere aiuto
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/it/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/it/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..551122029b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Ruoli
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Permessi
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Vai a **Impostazioni → Ruoli**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## SSO
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/it/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..8435af9755
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: Permessi e accesso},{
+description: Gestisci ruoli, permessi e il controllo degli accessi nel tuo spazio di lavoro.
+---
+
+
+
+
+
+Il sistema di permessi di Twenty ti consente di controllare chi può accedere e modificare i dati nel tuo spazio di lavoro. Crea ruoli, assegna permessi e configura SSO per un accesso sicuro.
+
+## Cosa c'è in questa sezione
+
+
+
+ Crea ruoli e configura i permessi per oggetti, campi e impostazioni.
+
+
+
+ Configura il Single Sign-On con il tuo provider di identità.
+
+
+
+ Domande frequenti su ruoli, permessi e SSO.
+
+
+
+## Funzionalità principali
+
+* **Accesso basato sui ruoli**: Crea ruoli personalizzati con permessi specifici
+* **Permessi sugli oggetti**: Controlla chi può visualizzare, modificare o eliminare i record
+* **Permessi sui campi**: Limita l'accesso ai campi sensibili
+* **Permessi sulle impostazioni**: Controlla l'accesso alla configurazione dello spazio di lavoro
+* **Integrazione SSO**: Configura il single sign-on per la sicurezza a livello aziendale (piano Organization)
+
+## Collegamenti rapidi
+
+* [Crea un ruolo](/l/it/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [Configura SSO](/l/it/user-guide/permissions-access/capabilities/sso-configuration)
+* [Gestisci i membri del team](/l/it/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/it/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/it/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..a974b6da47
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Dominio del workspace
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Personalizza dominio
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Domini approvati
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Aggiungi dominio di accesso approvato
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Salva
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Domini Pubblici
+
+Crea un ambiente di hosting completo e sicuro su questi domini.
+
+### Aggiungi Dominio Pubblico
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/it/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/it/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..a3a54dd5df
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Gestione dei Membri
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Invita Nuovi Membri
+
+### Using Email Invitation
+
+1. Vai a **Impostazioni → Membri**
+2. Click **+ Invite**
+3. Inserisci l'indirizzo email della persona
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Vai a **Impostazioni → Membri**
+2. Copia il link di invito allo spazio di lavoro
+3. Condividi il link con i nuovi membri del team
+4. Riceveranno accesso una volta registrati
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/it/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Domini di Accesso Approvati
+
+Allow team members to join automatically based on their email domain:
+
+1. Vai a **Impostazioni → Domini**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/it/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/it/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/it/user-guide/settings/capabilities/profile-settings.mdx b/packages/twenty-docs/l/it/user-guide/settings/capabilities/profile-settings.mdx
new file mode 100644
index 0000000000..38fced9af8
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/capabilities/profile-settings.mdx
@@ -0,0 +1,43 @@
+---
+title: Impostazioni del profilo
+description: Gestisci il tuo profilo personale e le impostazioni di sicurezza.
+---
+
+## Informazioni Personali
+
+### Nome e Email
+
+* **Nome Visualizzato**: Aggiorna come appare il tuo nome agli altri membri del workspace
+* **Indirizzo Email**: Cambia la tua email di login (richiede verifica)
+* **Immagine del Profilo**: Carica un avatar personalizzato o usa le tue iniziali
+
+## Impostazioni di Sicurezza
+
+### Autenticazione a Due Fattori (2FA)
+
+Abilita 2FA per aggiungere un livello extra di sicurezza al tuo account:
+
+1. Vai a **Impostazioni → Impostazioni del Profilo**
+2. Clicca **Abilita 2FA**
+3. Scansiona il codice QR con la tua app di autenticazione
+4. Inserisci il codice di verifica per confermare
+
+### Gestione delle Password
+
+* **Cambia Password**: Aggiorna la tua password attuale
+* **Requisiti della Password**: Deve avere almeno 8 caratteri
+
+## Gestione del Profilo
+
+### Elimina Account
+
+
+ Eliminare il tuo account rimuoverà permanentemente il tuo accesso a tutti i workspace. Questa azione non può essere annullata, perderai l'accesso a tutti i workspace di cui sei membro e dovresti considerare di lasciare individualmente i workspace se vuoi solo uscire da specifici team.
+
+
+Per eliminare il tuo account:
+
+1. Vai a **Impostazioni → Impostazioni del Profilo**
+2. Scorri fino a **Zona di Pericolo**
+3. Clicca **Elimina Account**
+4. Conferma digitando il tuo indirizzo email
diff --git a/packages/twenty-docs/l/it/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/it/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..6fc8457589
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Impostazioni delle versioni
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Funzionalità del Lab
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Vai su **Impostazioni → Versioni**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/it/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/it/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..3ab0cbb185
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Impostazioni del workspace
+description: Personalizza il tuo nome e il branding del workspace.
+---
+
+Those are accessible under **Settings → General**.
+
+## Immagine del workspace
+
+* **Carica logo**: Aggiungi un logo personalizzato del workspace
+* **Supported formats**: PNG, JPEG, and GIF files under 10MB
+* **Rimuovi**: Elimina il logo corrente del workspace
+
+## Nome dello spazio di lavoro
+
+* **Nome**: Cambia il nome visualizzato del workspace
+* Questo nome appare a tutti i membri del workspace
+
+## Zona pericolosa
+
+
+ L'eliminazione del workspace rimuove permanentemente tutti i dati e non può essere annullata. Tutti i dati del workspace saranno persi per sempre, tutti i membri perderanno immediatamente l'accesso, e questa azione non può essere revocata.
+
+
+Per eliminare il tuo workspace:
+
+1. Clicca sul pulsante **Elimina workspace**
+2. Conferma l'eliminazione quando richiesto
+
+**Nota**: Solo gli amministratori del workspace possono eliminare i workspace.
diff --git a/packages/twenty-docs/l/it/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/it/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..97b7fa18cf
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Impostazioni FAQ
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Impostazioni del workspace
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Profile Settings
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Clicca **Abilita 2FA**
+ 4. Scansiona il codice QR con la tua app di autenticazione
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Clicca **Elimina Account**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Impostazioni esperienza
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Go to **Settings → Accounts**
+ 2. Clicca su **Aggiungi account**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Go to **Settings → Accounts**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Domini
+
+
+
+ Sì! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Funzionalità del Lab
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/settings/overview.mdx b/packages/twenty-docs/l/it/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..70de7bf46b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Impostazioni
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Go to **Settings → Accounts**
+2. Clicca su **Aggiungi account**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/it/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Vai a **Impostazioni → Membri**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Prossimi Passi
+
+* [Workspace settings](/l/it/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/it/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/it/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..ec4ccce9ec
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Vista Calendario
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/it/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..c3262005f2
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Viste della tabella
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Kanban Views
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Migliori Pratiche
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/it/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/it/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..c84023513e
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ---------- | -------------------------------------------------- |
+| Testo | Equals, Contains, Starts with, Ends with, Is empty |
+| Numero | Equals, Greater than, Less than, Between, Is empty |
+| Data | Equals, Before, After, Between, Is empty |
+| Seleziona | Equals, Is any of, Is empty |
+| Checkbox | Is true, Is false |
+| Relazione | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/it/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/it/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..d78eb004ef
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Kanban Views
+
+Kanban views visually map out process flows, where each column stands for a distinct stage and each card represents a record.
+
+## Sposta le Carte tra le Fasi
+
+Puoi spostare ogni carta tra le fasi mentre attraversa il tuo flusso di lavoro trascinandola e rilasciandola. Per procedere, tieni premuto il clic su una carta e spostala nella fase successiva.
+
+
+
+## Add and Delete Stages
+
+Puoi adattare il tuo flusso di lavoro alle tue esigenze usando le fasi, che rappresentano un valore in un Campo Seleziona:
+
+### Aggiungi Fasi
+
+Per aggiungere una fase, accedi alle impostazioni del campo Seleziona navigando su Impostazioni > Modello dati, selezionando il tuo oggetto e poi il campo da cui dipende la tua board Kanban.
+
+
+
+### Rimuovi Fasi
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Puoi configurare la tua bacheca Kanban per mostrare alcuni campi e nasconderne altri. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Puoi anche riordinare l'ordine dei campi tenendo premuto sul nome del campo e trascinandolo dove vuoi.
+
+
+
+## Vista compatta
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Descrizione |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Migliori Pratiche
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..ef911a223b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Viste della tabella
+description: Display your data in a spreadsheet-like list format.
+---
+
+## Informazioni sulle viste della tabella
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Casi di utilizzo:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/it/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..78e5756d70
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## View Visibility
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Preferiti
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/it/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/it/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..085a5f80b0
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Prerequisiti
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Clicca su **Salva**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Oggetto | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Opportunità | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/it/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..44bf9d6104
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Prerequisiti
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Clicca su **Salva**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Completato |
+
+## Related
+
+* [Kanban Views](/l/it/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/it/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..f47365ae21
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Clicca su **Salva**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Opzione | Descrizione |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Salva
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/it/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..6da388c8cd
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Limita l'accesso alla tua visualizzazione},{
+description: Controlla chi può vedere le tue visualizzazioni personalizzate.
+---
+
+Ogni visualizzazione (tranne le visualizzazioni predefinite "All [Object Name]") ha la propria impostazione di visibilità.
+
+## Passaggi
+
+1. Apri la visualizzazione a cui vuoi limitare l'accesso
+2. Fai clic su **Opzioni** in alto a destra
+3. Fai clic su **Visibilità**
+4. Seleziona **Non in elenco**
+
+La tua visualizzazione è ora visibile solo a te.
+
+## Opzioni di visibilità
+
+| Impostazione | Chi può vedere |
+| ----------------- | ------------------------------------- |
+| **Workspace** | Tutti i membri dello spazio di lavoro |
+| **Non in elenco** | Solo tu |
+
+## Note
+
+* Le visualizzazioni predefinite "All [Object Name]" non possono essere impostate come non in elenco
+* Le visualizzazioni non in elenco non compaiono nei menu a discesa delle visualizzazioni degli altri utenti
+* Puoi ripristinare la visibilità su Workspace in qualsiasi momento
+
+## Correlati
+
+* [Impostazioni della visualizzazione](/l/it/user-guide/views-pipelines/capabilities/view-settings) — tutte le opzioni di configurazione della visualizzazione
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..18cbc091e1
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Fase | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Migliori Pratiche
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/it/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..e23ec83f56
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Mostra l\"Importo previsto nella tua pipeline\
+description: Calcola e visualizza i valori delle opportunità ponderati in base alla probabilità della fase.
+---
+
+L"Importo previsto è un valore calcolato: **Importo × Probabilità**. Questo ti aiuta a prevedere i ricavi ponderando le opportunità in base alla probabilità di chiusura.
+
+
+ Questo è un esempio di creazione di [Campi formula](/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields) usando i workflow.
+
+
+Questa guida ti accompagna nella configurazione dei campi personalizzati e dei workflow necessari per calcolare e visualizzare gli importi previsti nella tua pipeline.
+
+## Passaggio 1: Crea campi personalizzati
+
+Hai bisogno di due campi personalizzati sull"oggetto Opportunità.
+
+### Crea il campo Probabilità
+
+1. Vai a **Impostazioni → Modello dati → Opportunità**
+2. Fai clic su **+ Aggiungi campo**
+3. Configura:
+ * **Nome**: Probabilità
+ * **Tipo**: Numero
+ * **Descrizione**: Probabilità basata sulla fase (0-100%)
+4. Clicca su **Salva**
+
+### Crea il campo Importo previsto
+
+1. Fai clic su **+ Aggiungi campo**
+2. Configura:
+ * **Nome**: Importo previsto
+ * **Tipo**: Valuta
+ * **Descrizione**: Calcolato: Importo × Probabilità
+3. Clicca su **Salva**
+
+### Opzionale: Imposta i campi come di sola lettura per gli utenti
+
+Se non vuoi che gli utenti modifichino manualmente questi campi calcolati:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Seleziona il ruolo da configurare
+3. Trova l"oggetto Opportunità
+4. Imposta i campi **Probabilità** e **Importo previsto** come di sola lettura
+
+Questo garantisce che solo i workflow possano aggiornare questi valori.
+
+## Passaggio 2: Crea il workflow n. 1 — Aggiorna la Probabilità al cambio di fase
+
+Questo workflow imposta automaticamente la Probabilità quando un"opportunità passa a una nuova fase.
+
+### Crea il workflow
+
+1. Vai a **Workflows**
+2. Fai clic su **+ Nuovo workflow**
+3. Assegna il nome "Aggiorna la probabilità al cambio di fase"
+
+### Configura il trigger
+
+1. Aggiungi un trigger **Record creato o aggiornato**
+2. Seleziona **Opportunità** come oggetto
+3. Filtra su: il campo **Fase** è aggiornato
+
+### Aggiungi rami per ogni fase
+
+Crea un ramo per ogni fase con la relativa probabilità:
+
+| Fase | Probabilità |
+| -------------- | ----------- |
+| Nuovo | 10% |
+| Qualificato | 25% |
+| Riunione | 40% |
+| Proposta | 60% |
+| Negoziazione | 80% |
+| Chiuso - Vinta | 100% |
+| Chiuso - Persa | 0% |
+
+
+ Per creare un nuovo ramo, fai clic con il tasto destro sul canvas del workflow e fai clic su **Nuova azione**. Quindi, collega questa azione al nodo precedente trascinando la freccia dal nodo precedente a questa nuova azione.
+
+
+Per ogni fase:
+
+1. Aggiungi un nodo **Filtro**: Fase = [nome della fase]
+2. Aggiungi un"azione **Aggiorna record**:
+ * Record: l"Opportunità che ha attivato il trigger
+ * Campo: Probabilità
+ * Valore: [probabilità per quella fase]
+
+### Calcola l"Importo previsto
+
+Dopo che i rami si ricongiungono:
+
+1. Aggiungi un nodo **Filtro**: Importo non è vuoto
+2. Aggiungi un"azione **Aggiorna record**:
+ * Record: l"Opportunità che ha attivato il trigger
+ * Campo: Importo previsto
+ * Valore: Importo × Probabilità
+
+## Passaggio 3: Crea il workflow n. 2 — Ricalcola al cambio dell"Importo
+
+Questo workflow aggiorna l"Importo previsto quando l"Importo dell"opportunità cambia.
+
+### Crea il workflow
+
+1. Vai a **Workflows**
+2. Fai clic su **+ Nuovo workflow**
+3. Assegna il nome "Ricalcola l"Importo previsto al cambio dell"Importo"
+
+### Configura il trigger
+
+1. Aggiungi un trigger **Record creato o aggiornato**
+2. Seleziona **Opportunità** come oggetto
+3. Filtra su: il campo **Importo** è aggiornato
+
+### Aggiungi la logica
+
+1. Aggiungi un nodo **Filtro**: Importo non è vuoto
+2. Aggiungi un"azione **Aggiorna record**:
+ * Record: l"Opportunità che ha attivato il trigger
+ * Campo: Importo previsto
+ * Valore: Importo × Probabilità
+
+## Passaggio 4: Visualizza nella tua pipeline
+
+Ora mostra i totali dell"Importo previsto nella tua vista Kanban:
+
+1. Apri la vista Kanban della tua **Pipeline di vendita**
+2. Fai clic sul **numero** accanto al nome di qualsiasi Fase nella parte superiore di una colonna
+3. Seleziona **Somma**
+4. Scegli **Importo previsto**
+
+Ogni colonna ora mostra il valore totale ponderato della pipeline per quella fase.
+
+## Sommario
+
+| Componente | Scopo |
+| -------------------------- | ---------------------------------------------------------------------------------- |
+| **Campo Probabilità** | Memorizza la probabilità di vittoria basata sulla fase |
+| **Campo Importo previsto** | Memorizza Importo × Probabilità |
+| **Workflow n. 1** | Aggiorna la Probabilità quando la Fase cambia, quindi ricalcola l"Importo previsto |
+| **Workflow n. 2** | Ricalcola l"Importo previsto quando l"Importo cambia |
+| **Aggregazione** | Mostra la somma dell"Importo previsto per fase |
+
+## Correlati
+
+* [Campi formula](/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields) — crea campi calcolati usando i workflow
+* [Visualizzazioni Kanban](/l/it/user-guide/views-pipelines/capabilities/kanban-views) — aggregazioni di colonna
+* [Come creare campi personalizzati](/l/it/user-guide/data-model/how-tos/create-custom-fields) — configurazione dei campi
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..b67ddc338b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: Tieni traccia di quanto a lungo le opportunità restano in ogni fase.
+description: Monitora la velocità delle trattative tenendo traccia di quando le opportunità entrano in ogni fase.
+---
+
+
+ Questo è un esempio di creazione di [Campi formula](/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields) utilizzando i workflow — in particolare calcoli di date.
+
+
+Tenere traccia di quando le opportunità entrano in ogni fase ti aiuta a identificare i colli di bottiglia e a misurare la velocità delle trattative.
+
+Questa guida ti accompagna nella configurazione di campi personalizzati e di un workflow per registrare automaticamente quando un'opportunità passa a ciascuna fase e calcolare quanti giorni ha trascorso nella fase precedente.
+
+## Passaggio 1: Crea campi personalizzati
+
+Per ogni fase servono due tipi di campi:
+
+* **Campi Data e ora**: registrano quando l'opportunità è entrata in ciascuna fase
+* **Campi Numero**: memorizzano quanti giorni l'opportunità ha trascorso in ciascuna fase
+
+### Crea i campi "Ultimo ingresso"
+
+1. Vai a **Impostazioni → Modello dati → Opportunità**
+2. Per ogni fase, fai clic su **+ Aggiungi campo** e configura:
+ * **Nome**: Ultimo ingresso in [Nome fase] (ad es., "Ultimo ingresso in Nuovo", "Ultimo ingresso in Qualificato")
+ * **Tipo**: Data e ora
+ * **Descrizione**: Timestamp dell'ingresso dell'opportunità in questa fase
+3. Clicca su **Salva**
+
+Crea questi campi:
+
+* Ultimo ingresso in Nuovo
+* Ultimo ingresso in Qualificato
+* Ultimo ingresso in Riunione
+* Ultimo ingresso in Proposta
+* Ultimo ingresso in Negoziazione
+* Ultimo ingresso in Chiuso vinto
+* Ultimo ingresso in Chiuso perso
+
+### Crea i campi "Giorni nella fase"
+
+1. Per ogni fase, fai clic su **+ Aggiungi campo** e configura:
+ * **Nome**: Giorni in [Nome fase] (ad es., "Giorni in Nuovo", "Giorni in Qualificato")
+ * **Tipo**: Numero
+ * **Descrizione**: Numero di giorni trascorsi in questa fase
+2. Clicca su **Salva**
+
+Crea questi campi:
+
+* Giorni in Nuovo
+* Giorni in Qualificato
+* Giorni in Riunione
+* Giorni in Proposta
+* Giorni in Negoziazione
+
+
+ Non servono campi "Giorni in" per Chiuso vinto e Chiuso perso, poiché sono fasi finali.
+
+
+### Opzionale: rendi i campi di sola lettura
+
+Se non vuoi che gli utenti modifichino manualmente questi campi calcolati:
+
+1. Vai a **Impostazioni → Ruoli**
+2. Seleziona il ruolo da configurare
+3. Trova l'oggetto Opportunità
+4. Imposta i campi "Ultimo ingresso" e "Giorni in" come di sola lettura
+
+## Passaggio 2: Crea il workflow
+
+Questo singolo workflow gestisce entrambe le attività:
+
+* Registra il timestamp quando si entra in una nuova fase
+* Calcola i giorni trascorsi nella fase precedente
+
+### Crea il workflow
+
+1. Vai a **Workflows**
+2. Fai clic su **+ Nuovo workflow**
+3. Assegnagli il nome "Traccia tempo per fase"
+
+### Configura il trigger
+
+1. Aggiungi un trigger **Record aggiornato**
+2. Seleziona **Opportunità** come oggetto
+3. Filtro su: il campo **Fase** viene aggiornato
+
+### Aggiungi rami per ogni fase
+
+
+ Per creare un nuovo ramo, fai clic con il tasto destro sul canvas del workflow e fai clic su **Nuova azione**. Quindi, collega questa azione al nodo precedente trascinando la freccia dal nodo precedente a questa nuova azione.
+
+
+---
+
+**Ramo 1: Fase = Nuovo (prima fase)**
+
+Poiché è la prima fase, registriamo solo il timestamp di ingresso—non c'è una fase precedente da calcolare.
+
+1. Aggiungi un nodo **Filtro**: Fase = Nuovo
+2. Aggiungi un'azione **Codice**:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. Aggiungi un'azione **Aggiorna record**:
+ * Record: l'Opportunità che ha attivato il workflow
+ * Campo: Ultimo ingresso in Nuovo
+ * Valore: `now` dal nodo Codice
+
+---
+
+**Ramo 2: Fase = Qualificato**
+
+Quando si passa a Qualificato, registra l'ora di ingresso E calcola i giorni trascorsi in Nuovo.
+
+1. Aggiungi un nodo **Filtro**: Fase = Qualificato
+2. Aggiungi un'azione **Codice**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Configura l'input del nodo Codice: mappa `lastEnteredPreviousStage` al campo **Ultimo ingresso in Nuovo**
+4. Aggiungi un'azione **Aggiorna record**:
+ * Record: l'Opportunità che ha attivato il workflow
+ * Campi da aggiornare:
+ * Ultimo ingresso in Qualificato = `now`
+ * Giorni in Nuovo = `daysInPreviousStage`
+
+---
+
+**Ramo 3: Fase = Riunione**
+
+Quando si passa a Riunione, registra l'ora di ingresso E calcola i giorni trascorsi in Qualificato.
+
+1. Aggiungi un nodo **Filtro**: Fase = Riunione
+2. Aggiungi un'azione **Codice**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Configura l'input del nodo Codice: mappa `lastEnteredPreviousStage` al campo **Ultimo ingresso in Qualificato**
+4. Aggiungi un'azione **Aggiorna record**:
+ * Record: l'Opportunità che ha attivato il workflow
+ * Campi da aggiornare:
+ * Ultimo ingresso in Riunione = `now`
+ * Giorni in Qualificato = `daysInPreviousStage`
+
+---
+
+**Continua per le fasi rimanenti:**
+
+| Fase | Registra | Calcola |
+| ------------ | ------------------------------- | ---------------------- |
+| Proposta | Ultimo ingresso in Proposta | Giorni in Riunione |
+| Negoziazione | Ultimo ingresso in Negoziazione | Giorni in Proposta |
+| Chiuso vinto | Ultimo ingresso in Chiuso vinto | Giorni in Negoziazione |
+| Chiuso perso | Ultimo ingresso in Chiuso perso | Giorni in Negoziazione |
+
+I rami non devono ricongiungersi—ognuno viene eseguito in modo indipendente quando la relativa condizione di fase è soddisfatta.
+
+## Passaggio 3: Analizza il tempo per fase
+
+Con timestamp e conteggi dei giorni registrati, ora puoi analizzare la velocità delle trattative.
+
+### Crea una vista "Trattative lente"
+
+1. Crea una vista Tabella di Opportunità
+2. Aggiungi colonne: Nome, Fase, Giorni in [fase precedente], Importo
+3. Ordina per il campo "Giorni in" (decrescente)
+4. Filtra per Fase per concentrarti su una fase alla volta
+
+Le trattative in cima hanno trascorso più tempo nella fase precedente.
+
+### Usa le aggregazioni
+
+Nella vista Kanban della pipeline:
+
+1. Fai clic sul numero accanto al nome di una Fase
+2. Seleziona **Media**
+3. Scegli un campo "Giorni in"
+
+Questo mostra il tempo medio che le trattative trascorrono in ciascuna fase.
+
+## Sommario
+
+| Componente | Scopo |
+| --------------------------- | ---------------------------------------------------------------------- |
+| **Campi "Ultimo ingresso"** | Memorizzano quando l'opportunità è entrata in ciascuna fase |
+| **Campi "Giorni in"** | Memorizzano quanti giorni sono stati trascorsi in ciascuna fase |
+| **Workflow** | Registra il timestamp E calcola i giorni in un unico passaggio |
+| **Viste e aggregazioni** | Analizza la velocità delle trattative e individua i colli di bottiglia |
+
+## Correlati
+
+* [Workflows](/l/it/user-guide/workflows/overview) — nozioni di base sull'automazione
+* [Come creare campi personalizzati](/l/it/user-guide/data-model/how-tos/create-custom-fields) — configurazione dei campi
+* [Viste Kanban](/l/it/user-guide/views-pipelines/capabilities/kanban-views) — aggregazioni
diff --git a/packages/twenty-docs/l/it/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/it/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..66f21fc37a
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Viste e Pipeline
+description: Scopri come creare e gestire le viste in Twenty.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Comprendere le viste
+
+Le viste sono configurazioni salvate che determinano come vengono visualizzati i tuoi dati. Ogni vista può avere:
+
+* **Layout**: Tabella, Kanban o Calendario
+* **Filtri**: quali record mostrare
+* **Ordinamento**: come vengono ordinati i record
+* **Campi**: quali colonne sono visibili
+
+## Tipi di vista
+
+### Vista tabella
+
+La vista predefinita simile a un foglio di calcolo che mostra i record in righe con colonne personalizzabili.
+
+### Vista Kanban
+
+Una vista a bacheca visiva in cui i record appaiono come schede organizzate per fasi. Ideale per:
+
+* Pipeline di vendita
+* Monitoraggio dei progetti
+* Qualsiasi flusso di lavoro con fasi definite
+
+### Vista Calendario
+
+Visualizza i record con campi data su un calendario. Perfetto per:
+
+* Riunioni ed eventi
+* Scadenze e date di consegna
+* Pianificazione basata sul tempo
+
+## Creare una Visualizzazione
+
+Esistono due modi per creare una nuova visualizzazione.
+
+### Usa il menu a discesa della vista
+
+1. Vai a qualsiasi oggetto (Persone, Aziende, ecc.)
+2. Fai clic sul nome della vista in alto a sinistra (mostra la vista corrente con una freccia a discesa)
+3. Fai clic su **+ Aggiungi vista**
+4. Dai un nome alla vista e fai clic su **Crea**
+5. Scegli un layout (Tabella, Kanban o Calendario) in **Opzioni**
+6. Aggiungi filtri e ordinamento secondo necessità
+7. Puoi scegliere quali campi visualizzare e riordinarli
+8. Clicca su **Salva**
+
+
+
+### Inizia modificando una vista esistente
+
+1. Vai a qualsiasi oggetto (Persone, Aziende, ecc.)
+2. Scegli un layout (Tabella, Kanban o Calendario) in **Opzioni** oppure aggiungi filtri e ordinamento secondo necessità
+3. Fai clic su **Salva come nuova vista**
+4. Dai un nome alla vista e fai clic su **Crea**
+5. Continua a modificare la nuova vista
+6. Fai clic su **Aggiorna vista** per salvare le configurazioni aggiuntive
+
+
+
+## Gestione delle viste
+
+### Modifica una vista
+
+1. Seleziona la vista dal menu a discesa
+2. Apporta le tue modifiche (filtri, ordinamento, colonne)
+3. Fai clic su **Salva** per aggiornare la vista
+
+### Rinomina una vista o cambia la sua icona
+
+1. Apri il menu a discesa della vista
+2. Fai clic sul menu **⋮** accanto al nome della vista
+3. Seleziona **Modifica**
+4. Modifica il nome o l'icona
+5. Clicca su **Salva**
+
+### Riordina le viste
+
+1. Apri il menu a discesa della vista
+2. Fai clic e trascina una vista dalla maniglia di trascinamento
+3. Rilasciala nella posizione desiderata
+4. Il nuovo ordine viene salvato automaticamente
+
+### Aggiungi ai preferiti
+
+Fissa le viste usate di frequente per un accesso rapido:
+
+1. Apri il menu a discesa della vista
+2. Fai clic sul menu **⋮** accanto a una vista
+3. Seleziona **Aggiungi ai preferiti**
+4. La vista appare nella sezione dei preferiti
+
+### Elimina una vista
+
+1. Seleziona la vista da eliminare
+2. Fai clic sul menu a discesa della vista
+3. Fai clic sul menu **⋮** accanto alla vista
+4. Seleziona **Elimina**
+5. Conferma l'eliminazione
+
+
+ Le viste eliminate non possono essere ripristinate. Assicurati di volerla rimuovere prima di confermare.
+
+
+## Visibilità delle viste
+
+Ogni vista (eccetto le viste predefinite "Tutti [Nome oggetto]") ha la propria impostazione di visibilità.
+
+Per modificare la visibilità:
+
+1. Apri la vista
+2. Fai clic su **Opzioni → Visibilità**
+3. Scegli:
+ * **Workspace**: visibile a tutti i membri dello spazio di lavoro
+ * **Unlisted**: visibile solo a te
+
+
+ La visibilità delle viste predefinite "Tutti [Nome oggetto]" non può essere modificata.
+
+
+## Prossimi Passi
+
+* [Viste tabella](/l/it/user-guide/views-pipelines/capabilities/table-views)
+* [Viste Kanban](/l/it/user-guide/views-pipelines/capabilities/kanban-views)
+* [Filtri e ordinamento](/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Impostazioni della vista](/l/it/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..f8f20b7085
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Prerequisiti
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Impostazione**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Campo | Valore |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Benvenuto in {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Tipo di trigger | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Impostazione**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Impostazione**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Impostazione**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Migliori Pratiche
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Risoluzione dei problemi
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..52ca03363b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Migliori Pratiche
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..c2cb4b42e4
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Esempio |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Risultato
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Descrizione |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Risoluzione dei problemi
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Migliori Pratiche
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/it/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..21ead2e5e5
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Workflow Actions
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Actions define what happens after a trigger fires. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Crea un Record
+
+Aggiunge un nuovo record a un oggetto selezionato.
+
+**Configurazione:**
+
+* Seleziona l'oggetto di destinazione
+* Compila i campi richiesti e opzionali
+* Use data from previous steps or input values manually to populate fields
+
+**Output**: I dati del nuovo record creato sono disponibili per l'uso in passaggi successivi.
+
+### Aggiorna Record
+
+Modifica un record esistente in un oggetto selezionato.
+
+
+
+**Configurazione:**
+
+* Seleziona l'oggetto di destinazione
+* Scegli il record specifico da aggiornare.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Seleziona i campi da modificare e inserisci nuovi valori
+
+**Output**: I dati del record aggiornato sono disponibili per l'uso in passaggi successivi.
+
+### Elimina Record
+
+Rimuove un record da un oggetto selezionato.
+
+**Configurazione**:
+
+* Seleziona l'oggetto di destinazione
+* Scegli il record specifico da eliminare
+
+**Output**: I dati del record eliminato rimangono disponibili per l'uso in passaggi successivi.
+
+### Cerca Record
+
+Trova i record all'interno di un oggetto selezionato utilizzando condizioni di filtro.
+
+**Configurazione**:
+
+* Seleziona l'oggetto da cercare
+* Imposta criteri di filtro per restringere i risultati
+* Configura l'ordinamento e i limiti
+
+**Output**: Restituisce i record corrispondenti utilizzabili in passaggi successivi.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/it/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Configurazione**:
+
+* Seleziona l'oggetto di destinazione
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Usa dati dai passaggi precedenti per popolare i campi
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Iteratore
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Configurazione**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Definisci le azioni da eseguire su ciascun record nel ciclo.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filtro
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Configurazione**:
+
+* Select the record to filter
+* Definisci le condizioni e i criteri di filtro
+* Configura quali record devono passare ai passaggi successivi
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Tipo | Descrizione |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Casi di utilizzo**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### Invia email
+
+Invia un'email dal tuo flusso di lavoro. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Configurazione**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Inserisci l'indirizzo email del destinatario.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Imposta l'oggetto della email.
+* Componi il corpo del messaggio. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Modulo
+
+Visualizza un modulo durante l'esecuzione del flusso di lavoro per raccogliere l'input dell'utente. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Per i flussi di lavoro con altri trigger (Record Creato, Aggiornato, ecc.), i moduli sono accessibili solo tramite l'interfaccia di esecuzione del flusso di lavoro, il che non è l'esperienza utente prevista. Un centro notifiche sarà rilasciato nel 2026 per supportare correttamente i moduli nei flussi di lavoro automatizzati.
+
+
+**Configurazione**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Output**: Le risposte ai moduli sono disponibili per l'uso in passaggi successivi.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Codice
+
+Esegue JavaScript personalizzato all'interno del tuo workflow.
+
+**Configurazione**:
+
+* Accedi alle variabili dai passaggi precedenti. You can edit the variables names dynamically.
+
+
+
+* Scrivi il codice JavaScript nell'editor
+* Restituisci variabili per l'uso in passaggi successivi
+* Verifica il codice direttamente nel passaggio
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### Richiesta HTTP
+
+Invia una richiesta a un API esterno come parte del tuo workflow.
+
+
+
+**Configurazione**:
+
+* Inserisci l'URL del punto finale dell'API. Using parameters from previous steps is possible.
+* Seleziona metodo HTTP (GET, POST, PUT, PATCH, DELETE)
+* Aggiungi intestazioni e valori richiesti
+* Fornisci una risposta di esempio per l'anteprima della struttura
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Configurazione**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/it/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/it/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..41aa3d5bb1
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: Rami dei flussi di lavoro},{
+description: Crea percorsi paralleli e logica condizionale nei tuoi flussi di lavoro.
+---
+
+I rami ti consentono di suddividere il tuo workflow in più percorsi che possono essere eseguiti simultaneamente o in modo condizionale in base ai tuoi dati.
+
+
+
+## Come funzionano i rami
+
+Quando crei più connessioni da un singolo nodo, ogni percorso diventa un ramo. Per impostazione predefinita, **tutti i rami vengono eseguiti in parallelo**—non si attendono a vicenda.
+
+## Creazione dei rami
+
+### Aggiungi un nuovo ramo
+
+1. **Fai clic con il tasto destro sull'area di lavoro principale** del workflow (non su un nodo esistente)
+2. Clicca su **Aggiungi nodo**
+3. Scegli il tipo di nodo per il tuo nuovo ramo
+4. Trascina una freccia dalla parte inferiore del passaggio precedente alla parte superiore di questa nuova azione
+5. Ripeti per aggiungere altri rami dallo stesso nodo
+
+
+ Ogni ramo è indipendente. L'aggiunta di un ramo non influisce sugli altri percorsi esistenti da quel nodo.
+
+
+### Layout visivo
+
+I rami appaiono come percorsi paralleli nell'editor del workflow. Puoi trascinare i nodi per riorganizzare il layout visivo senza influire sull'esecuzione.
+
+## Rami condizionali
+
+Poiché tutti i rami vengono eseguiti per impostazione predefinita, usa nodi **Filtro** per controllare quali percorsi vengono effettivamente eseguiti:
+
+| Ramo | Condizione del filtro | Azione |
+| ---- | --------------------- | --------------------------------- |
+| A | Fase = "Vinta" | Invia un'email di congratulazioni |
+| B | Fase = "Persa" | Crea un'attività di follow-up |
+| C | Fase = "Negoziazione" | Notifica il responsabile |
+
+1. Crea rami dal tuo trigger o dall'azione
+2. Aggiungi un nodo **Filtro** come primo passaggio di ciascun ramo
+3. Configura ciascun filtro con condizioni reciprocamente esclusive
+4. Aggiungi le azioni dopo ciascun filtro
+
+Solo i rami in cui la condizione del filtro è soddisfatta continueranno l'esecuzione.
+
+## Unione dei rami
+
+**I rami non si uniscono automaticamente.** Ogni ramo viene eseguito in modo indipendente fino a quando non termina. Hai la massima flessibilità su come gestirlo:
+
+* **Opzione 1: Mantieni i rami separati**
+ Ogni ramo gestisce indipendentemente le proprie azioni di follow-up. Questo è l'approccio più semplice quando i rami non devono convergere.
+
+* **Opzione 2: Unisci i rami manualmente**
+ Quando crei il tuo workflow, puoi collegare manualmente più rami alla stessa azione a valle. Trascina semplicemente le frecce dalla fine di ciascun ramo a un nodo comune.
+
+
+ Sebbene tu possa usare un nodo [Delay](/l/it/user-guide/workflows/capabilities/workflow-actions#delay) per mettere in pausa l'esecuzione, al momento non è configurabile per attendere "fino a quando termina un altro ramo".
+
+
+## Correlati
+
+* [Come usare i rami nei workflow](/l/it/user-guide/workflows/capabilities/use-branches-in-workflows) - Guida passo passo
+* [Azioni del workflow](/l/it/user-guide/workflows/capabilities/workflow-actions) - Azioni disponibili, incluso Filtro
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..fd3b584028
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Crediti del flusso di lavoro
+description: Understand workflow credit consumption and management.
+---
+
+I crediti del flusso di lavoro alimentano le tue automazioni in Twenty. Capire come funzionano ti aiuta a ottimizzare i costi e a gestire efficacemente il tuo budget di automazione.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Come Funziona il Consumo dei Crediti
+
+Credits are consumed when workflows execute, not when you create them. Ogni azione del flusso di lavoro consuma crediti in base alla sua complessità:
+
+### Consumo di Crediti per Tipo di Azione
+
+* **Operazioni interne di base**: Consumo di crediti molto basso
+ * Cerca Record
+ * Crea Record
+ * Aggiorna Record
+ * Elimina Record
+ * Azioni del modulo
+
+* **Operazioni complesse**: Consumo di crediti più alto
+ * Azioni di codice (esecuzione JavaScript)
+ * Richieste HTTP a servizi esterni
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Deduzione in Tempo Reale
+
+Credits are deducted in real-time as workflows execute. Ciò significa:
+
+* I flussi di lavoro di bozza non consumano crediti
+* Solo i flussi di lavoro attivi e in esecuzione utilizzano la tua allocazione di crediti
+* I flussi di lavoro falliti consumano comunque crediti per i passaggi completati
+
+## Gestione dei Crediti
+
+### Verifica l'Uso dei Crediti
+
+1. Go to **Settings → Billing**
+2. Visualizza il tuo attuale consumo di crediti e il saldo rimanente
+3. Monitora i modelli di utilizzo per ottimizzare i tuoi flussi di lavoro
+
+### Acquisto di Crediti Aggiuntivi
+
+Se hai bisogno di più crediti oltre alla tua assegnazione del piano:
+
+1. Go to **Settings → Billing**
+2. Clicca sull'opzione per acquistare crediti aggiuntivi. Sono disponibili pacchetti di diverse dimensioni.
+3. I crediti vengono aggiunti al tuo saldo attuale
+
+## Migliori Pratiche
+
+* **Batch Processing**: Use bulk operations and Iterator actions efficiently
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Ottimizza le azioni di codice per l'efficienza
+* Elabora in gruppi per ridurre le chiamate individuali alle azioni
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..4d612af27d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Esecuzioni del workflow
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Stato | Descrizione |
+| ----------------- | ------------------------------------------------------------------------ |
+| **In esecuzione** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Formato dati non valido
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/it/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..88ee7ab700
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: Workflow Triggers
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Workflows always start with a single trigger that defines when the automation should run.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Membri dello spazio di lavoro
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Record Creato
+
+Starts the workflow when a new record is created in a selected object (People, Companies, Opportunities, or any custom object).
+
+**Configuration**: Select the object type to monitor for new records.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Record Aggiornato
+
+Starts the workflow when changes are made to an existing record.
+
+**Configurazione**:
+
+* Seleziona il tipo di oggetto
+* Specifica opzionalmente quali campi monitorare per le modifiche
+
+## Record Aggiornato o Creato
+
+Starts the workflow when a record is either created or updated in a selected object.
+
+**Perché è Importante:** Questo trigger è particolarmente utile perché i record creati tramite diversi metodi si comportano diversamente:
+
+* **Importazioni API/CSV:** I record vengono creati con tutti i campi popolati immediatamente
+* **Creazione manuale:** Prima vengono creati i record, poi i campi vengono aggiunti con aggiornamenti successivi
+
+**Configurazione**:
+
+* Seleziona il tipo di oggetto da monitorare
+* Specifica opzionalmente quali campi monitorare per le modifiche
+* The workflow will trigger both on initial creation and any subsequent updates
+
+## Record Eliminato
+
+Starts the workflow when a record is removed from an object.
+
+**Configuration**: Select the object type to monitor for deletions.
+
+## Manual Trigger
+
+Starts the workflow when triggered by a user action. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Configurazione di Disponibilità:**
+Scegli come il flusso di lavoro dovrebbe gestire la selezione dei record:
+
+* **Globale:** Non è richiesto alcun record per attivare questo flusso di lavoro. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Single**: The selected record(s) will be passed to your workflow. Questo è configurato per un determinato oggetto. Diversi record possono essere selezionati prima di attivare il flusso di lavoro. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Bulk**: I record selezionati verranno passati al tuo flusso di lavoro. Questo è configurato per un determinato oggetto. Diversi record possono essere selezionati prima di attivare il flusso di lavoro. The workflow will run once, providing the entire list of records as input. This means the workflow needs to contain an [Iterator action](/l/it/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Configurazione Aggiuntiva**:
+
+* Seleziona l'oggetto di destinazione (per disponibilità Singola e Bulk)
+* Scegli un'icona di comando per attivare il flusso di lavoro.
+* Configura la posizione nella barra di navigazione (Fissa o Non Fissa)
+
+**Metodi di Accesso**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Pulsante personalizzato nella barra di navigazione in alto (se configurato)
+
+## Time-Based Trigger: On a Schedule
+
+Starts the workflow on a recurring basis you define.
+
+**Configurazione**:
+
+* Seleziona l'unità di tempo (minuti, ore, giorni)
+* Inserisci un valore o usa espressioni cron personalizzate per pianificazioni avanzate
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Starts the workflow when a GET or POST request is received from an external service.
+
+
+
+**Configurazione**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | -------------------------- |
+| New leads need processing | Record Creato |
+| Data changes need sync | Record Aggiornato |
+| Import/manual data handling | Record Aggiornato o Creato |
+| Cleanup after deletion | Record Eliminato |
+| User-initiated action | Avvia Manualmente |
+| Recurring reports | On a Schedule |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..0714f2d872
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: Versioni del workflow
+description: Gestisci le versioni e le bozze dei workflow.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## Informazioni sulle versioni
+
+Ogni volta che attivi un workflow, viene creata una nuova versione. Questo ti permette di tenere traccia delle modifiche nel tempo e ripristinare le configurazioni precedenti se necessario.
+
+## Stati delle versioni
+
+| Stato | Descrizione |
+| --------------- | --------------------------------------------- |
+| **Bozza** | In fase di modifica, non ancora pubblicata |
+| **Attivo** | Versione live che risponde ai trigger |
+| **Disattivato** | In precedenza attivo ma fermato manualmente |
+| **Archiviato** | Versioni passate conservate per la cronologia |
+
+## Lavorare con le bozze
+
+Quando modifichi un workflow attivo, le modifiche vengono salvate come **bozza**. La versione attiva continua a essere eseguita mentre lavori agli aggiornamenti.
+
+Una volta terminata la modifica, puoi:
+
+* **Attiva**: Pubblica la bozza come nuova versione attiva (la versione precedente viene archiviata)
+* **Scarta**: Elimina la bozza e mantieni l'attuale versione attiva
+
+## Cronologia Versioni
+
+### Visualizzare le versioni precedenti
+
+1. Apri il workflow
+2. Fai clic sulla scheda **Versioni**
+3. Visualizza tutte le versioni precedenti con timestamp
+
+### Ripristinare una versione
+
+1. Trova la versione che desideri ripristinare
+2. Fai clic su **Usa come bozza**
+3. La versione viene copiata in una nuova bozza
+4. Apporta gli aggiornamenti necessari
+5. Attiva quando sei pronto
+
+## Migliori Pratiche
+
+### Gestione delle versioni
+
+* Attiva solo quando pronta per la produzione
+* Mantieni modifiche significative tra le versioni
+* Documenta le modifiche importanti nei nomi o nelle descrizioni dei workflow
+* Testa in modalità bozza prima di attivare i workflow
+
+### Ripristino delle modifiche
+
+* Se una nuova versione causa problemi, ripristina la versione precedente
+* Usa la cronologia delle versioni per tenere traccia delle modifiche
+* Testa sempre le versioni ripristinate prima di attivare
+
+## Workflow comuni
+
+### Modifica rapida
+
+1. Apporta piccole modifiche a un workflow attivo
+2. Testa in modalità bozza
+3. Attiva la nuova versione
+
+### Revisione importante
+
+1. Usa la versione precedente come punto di partenza
+2. Apporta modifiche significative in bozza
+3. Testa approfonditamente tutti gli scenari
+4. Attiva quando sei sicuro
+
+### Ripristino
+
+1. Identifica il problema con la versione corrente
+2. Trova nella cronologia l'ultima versione funzionante
+3. Fai clic su **Usa come bozza**
+4. Attiva per ripristinare il comportamento precedente
+
+## Correlati
+
+* [Guida introduttiva ai workflow](/l/it/user-guide/workflows/overview)
+* [Esecuzioni dei workflow](/l/it/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..48866b30f4
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Codice |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Valore |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Fonte | Dati |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..2ee9387b25
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Salva
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Campo | Valore |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Persone |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..0ec91d69f6
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Valore |
+| ------------- | --------------------------------- |
+| **Field** | Fase |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Valore |
+| ------------ | ---------------------------------------- |
+| **Object** | Azienda |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Valore |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Azione | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filtro | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Codice | Format data for invoicing API |
+| 5 | Richiesta HTTP | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..6554db7f81
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Esempio |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Campo | Valore |
+| ------- | ---------------------------------------------------- |
+| Nome | `{{trigger.body.firstName}}` |
+| Cognome | `{{trigger.body.lastName}}` |
+| Email | `{{trigger.body.email}}` |
+| Azienda | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..f8856773af
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Configura:
+
+| Campo | Valore |
+| ----------------------------- | ------------------------------- |
+| **Object** | Aziende |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Tipo** | Cliente |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Proprietario dell'account** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Configura:
+
+| Campo | Valore |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Attività |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Configura:
+
+| Campo | Valore |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Configura:
+
+| Campo | Valore |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Verifica:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Scatenante
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Azioni
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/it/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..6a71f3f29b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Configura:
+
+| Campo | Valore |
+| ---------- | ----------------------------------------------- |
+| **Object** | Opportunità |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Campo | Valore |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/it/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..c98cc45218
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Panoramica
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Prerequisiti
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/it/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/it/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..a458ae366d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Casi d'Uso Comuni
+
+| Fonte | Destination | Fields to Copy |
+| ----------- | ----------- | ------------------------------- |
+| Azienda | Opportunità | Industry, Company Size, ARR |
+| Persona | Opportunità | Email, Phone, Title |
+| Opportunità | Azienda | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Setup
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Setup
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/it/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Migliori Pratiche
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..e79d2b053a
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Casi d'Uso Comuni
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Setup
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Setup
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Setup
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Setup
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Migliori Pratiche
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Testing
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..6877c6abe2
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Panoramica
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configura:
+
+| Campo | Valore |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/it/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..86ef812a3d
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Servizi Professionali
+description: Get professional help building complex workflows and automations from Twenty's team and certified partners.
+---
+
+## Quando Hai Bisogno di Aiuto Professionale?
+
+Considera i servizi professionali per:
+
+* Complesse integrazioni multi-sistema
+* Logica aziendale avanzata e regole di automazione
+* Flussi di lavoro di elaborazione dati su larga scala
+* Sviluppo API personalizzato
+* Formazione del team e ottimizzazione dei flussi di lavoro
+* Quando non si hanno risorse interne
+
+## Opzioni di Servizio
+
+### Pacchetti di Onboarding
+
+Ottieni aiuto dal nostro team principale con i nostri pacchetti di [Onboarding da 4 ore](https://twenty.com/onboarding-packages):
+
+* **Workflow Creation**: Build custom workflows for your business processes
+* **Progettazione del Modello di Dati**: Ottimizza la tua struttura dei dati per l'automazione dei flussi di lavoro
+* **Migrazione dei Dati**: Importa dati esistenti con la giusta integrazione nel flusso di lavoro
+
+### Partner di Implementazione
+
+Collabora con partner certificati per personalizzazioni avanzate. Contattaci a contact@twenty.com per connetterti con i nostri [partner di implementazione](https://twenty.com/partners).
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..0947693004
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Risoluzione dei problemi del flusso di lavoro
+description: Common workflow issues and how to resolve them.
+---
+
+## Problemi comuni e soluzioni
+
+### Flusso di lavoro non attivato
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Soluzioni**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Soluzioni**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Soluzioni**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Soluzioni**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Soluzioni**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..e2a809d027
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Tipo | Records Required | Esecuzioni del workflow |
+ | ---- | ---------------- | ----------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/it/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Esempi**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/it/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Soluzioni**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | Valore | Behavior |
+ | ----- | ------ | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/it/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/it/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..1f4b43322b
--- /dev/null
+++ b/packages/twenty-docs/l/it/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Flussi di Lavoro
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## Perché i Workflow sono importanti
+
+Twenty è stato creato per offrire la massima flessibilità ai suoi utenti. Piuttosto che costringerti ad adattare i tuoi processi aziendali a funzionalità rigide e predefinite, i workflow ti consentono di creare automazioni che creano il CRM che meglio supporta i tuoi casi d'uso aziendali unici.
+
+I workflow sono la funzione in-app di Twenty per creare queste automazioni. Ti forniscono gli elementi costitutivi per creare esattamente ciò di cui la tua attività ha bisogno, quando ne ha bisogno.
+
+## Cosa posso fare con i workflow?
+
+Consigliamo di costruire automazioni per due scopi principali:
+
+1. **Automazioni interne per facilitare le attività quotidiane del tuo team**: Riduci il numero di inserimenti manuali e compiti ripetitivi che rallentano il tuo team.
+2. **Portare i dati dentro e fuori da Twenty**: Collega Twenty tramite chiamate API e webhooks al tuo database e ad altri strumenti.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Pratiche migliori per i flussi di lavoro
+
+* **Modifica i nomi dei passaggi**: Rinomina gli step del tuo flusso di lavoro per descrivere chiaramente cosa fa ciascuno. Ciò aiuta con la manutenzione e facilita il passaggio ai colleghi
+* **Sfrutta i dati dei passaggi precedenti**: Puoi utilizzare i campi dei record restituiti da qualsiasi passaggio precedente nel tuo flusso di lavoro
+* **Inizia in modo semplice**: Comincia con flussi di lavoro di base e aggiungi complessità nel tempo man mano che diventi più a tuo agio con il sistema
+* **Pianifica prima di costruire**: Mappa la logica del tuo flusso di lavoro prima di iniziare a costruire per evitare di rimanere bloccato a metà
+
+## Prossimi Passi
+
+* [Workflow Triggers](/l/it/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/it/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/best-practices-server.mdx
new file mode 100644
index 0000000000..2b3b85ec12
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/best-practices-server.mdx
@@ -0,0 +1,22 @@
+---
+title: Cele mai bune practici
+---
+
+This document outlines the best practices you should follow when working on the backend.
+
+## Urmați o abordare modulară
+
+Backend-ul urmează o abordare modulară, care este un principiu fundamental atunci când lucrați cu NestJS. Asigurați-vă că vă împărțiți codul în module reutilizabile pentru a menține o bază de cod curată și organizată.
+Fiecare modul ar trebui să encapsuleze o anumită funcționalitate sau caracteristică și să aibă un domeniu de aplicare bine definit. Această abordare modulară permite o clară separare a preocupărilor și elimină complexitățile inutile.
+
+## Expuneți servicii pentru utilizare în module
+
+Creați întotdeauna servicii care au o responsabilitate clară și unică, ceea ce îmbunătățește lizibilitatea și întreținerea codului. Denumirea serviciilor trebuie să fie descriptivă și consecventă.
+
+De asemenea, ar trebui să expuneți serviciile pe care doriți să le utilizați în alte module. Expunerea serviciilor la alte module este posibilă prin sistemul de injecție de dependențe puternic al NestJS și promovează cuplarea slabă între componente.
+
+## Evitați utilizarea tipului `any`
+
+Când declarați o variabilă ca fiind `any`, verificatorul de tip al TypeScript nu realizează niciun control de tip, făcând posibilă atribuirea oricărui tip de valori variabilei. TypeScript utilizează inferența tipului pentru a determina tipul variabilei pe baza valorii. Declarându-l ca `any`, TypeScript nu mai poate deduce tipul. This makes it hard to catch type-related errors during development, leading to runtime errors and makes the code less maintainable, less reliable, and harder to understand for others.
+
+De aceea, totul ar trebui să aibă un tip. Astfel, dacă creați un nou obiect cu un prenume și un nume de familie, ar trebui să creați o interfață sau tip care să conțină un prenume și un nume de familie care să definească forma obiectului pe care îl manipulați.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..089d50fbd1
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+Feature flags are used to hide experimental features. Pentru Twenty, acestea sunt setate la nivel de spațiu de lucru și nu la nivel de utilizator.
+
+## Adding a new feature flag
+
+In `FeatureFlagKey.ts` add the feature flag:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+Also add it to the enum in `feature-flag.entity.ts`:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+To apply a feature flag on a **backend** feature use:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+To apply a feature flag on a **frontend** feature use:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## Configure feature flags for the deployment
+
+Change the corresponding record in the Table `core.featureFlag`:
+
+| id | cheie | IdSpațiuDeLucru | valoare |
+| --------- | ------------------------ | --------------- | ---------- |
+| Aleatoriu | `IS_FEATURENAME_ENABLED` | IdSpațiuDeLucru | `adevărat` |
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..a4469a1877
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Arhitectura Folderului
+info: A detailed look into our server folder architecture
+---
+
+Structura directorului backend este următoarea:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Abilitate
+
+Definește permisiunile și include gestionari pentru fiecare entitate.
+
+## Decoratori
+
+Definește decoratori personalizați în NestJS pentru funcționalitate adăugată.
+
+Vezi [decoratori personalizați](https://docs.nestjs.com/custom-decorators) pentru mai multe detalii.
+
+## Filtre
+
+Include filtre de excepție pentru a gestiona excepțiile care ar putea apărea în punctele finale GraphQL.
+
+## Paznici
+
+Vezi [paznici](https://docs.nestjs.com/guards) pentru mai multe detalii.
+
+## Sănătate
+
+Include o API REST disponibilă public (healthz) care returnează un JSON pentru a verifica dacă baza de date funcționează așa cum este de așteptat.
+
+## Metadate
+
+Definește obiecte personalizate și face disponibilă o API GraphQL (graphql/metadata).
+
+## Spațiu de lucru
+
+Generează și servește o schemă GraphQL personalizată pe baza metadatelor.
+
+### Structura Directorului de Spațiu de Lucru
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+The root of the workspace directory includes the `workspace.factory.ts`, a file containing the `createGraphQLSchema` function. Această funcție generează schema specifică spațiului de lucru folosind metadatele pentru a personaliza o schemă pentru spațiile de lucru individuale. Prin separarea construcției de schema și rezolvatori, folosim funcția `makeExecutableSchema`, care combină aceste elemente discrete.
+
+Această strategie nu este doar despre organizare, ci ajută și la optimizare, cum ar fi caching-ul definițiilor de tip generate pentru a îmbunătăți performanța și scalabilitatea.
+
+### Constructor Schema Spațiu de Lucru
+
+Generează schema GraphQL și include:
+
+#### Fabrici:
+
+Constructori specializați pentru a genera construcții legate de GraphQL.
+
+* Tipul.fabrică traduce metadatele câmpului în tipuri GraphQL folosind `TypeMapperService`.
+* Tipul-definiție.fabrică creează obiecte GraphQL de intrare sau ieșire derivate din `objectMetadata`.
+
+#### Tipuri GraphQL
+
+Include enumerări, inputuri, obiecte și scalari și servește ca blocuri de construcție pentru construcția schema.
+
+#### Interfețe și Definiții de Obiect
+
+Conține planurile pentru entitățile GraphQL și include atât tipuri predefinite, cât și personalizate, precum `MONEY` sau `URL`.
+
+#### Servicii
+
+Conține serviciul responsabil pentru asocierea FieldMetadataType cu scalarul GraphQL corespunzător sau modificatorii de interogare.
+
+#### Stocare
+
+Include clasa `TypeDefinitionsStorage` care conține definiții de tip reutilizabile, prevenind duplicarea tipurilor GraphQL.
+
+### Constructor Rezolvator Spațiu de Lucru
+
+Creează funcții de rezolvare pentru interogarea și modificarea schemei GraphQL.
+
+Fiecare fabrică din acest director este responsabilă pentru producerea unui tip de rezolvator distinct, cum ar fi `FindManyResolverFactory`, proiectată pentru aplicare adaptabilă în diverse tabele.
+
+### Executor Întrebări Spațiu de Lucru
+
+Rulează interogările generate pe baza de date și parcurge rezultatul.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/queue.mdx
new file mode 100644
index 0000000000..08b31479bb
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/queue.mdx
@@ -0,0 +1,41 @@
+---
+title: Coada de mesaje
+---
+
+Cozile facilitează desfășurarea operațiunilor asincrone. Acestea pot fi folosite pentru a efectua sarcini de fundal precum trimiterea unui e-mail de bun venit la înregistrare.
+Fiecare caz de utilizare va avea propria clasă de coadă extinsă din `MessageQueueServiceBase`.
+
+În prezent, acceptăm doar `bull-mq`[bull-mq](https://bullmq.io/) ca driver de coadă.
+
+## Pași pentru a crea și utiliza o coadă nouă
+
+1. Adăugați un nume pentru noua coadă sub enum `MESSAGE_QUEUES`.
+2. Provide the factory implementation of the queue with the queue name as the dependency token.
+3. Inject the queue that you created in the required module/service with the queue name as the dependency token.
+4. Adăugați o clasă lucrător cu injectare bazată pe simbol, la fel ca producătorul.
+
+### Exemplu de utilizare
+
+```ts
+class Resolver {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {}
+
+ async onSomeAction() {
+ //business logic
+ await this.queue.add(someData);
+ }
+}
+
+//async worker
+class CustomWorker {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {
+ this.initWorker();
+ }
+
+ async initWorker() {
+ await this.queue.work(async ({ id, data }) => {
+ //worker logic
+ });
+ }
+}
+```
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..0791d456a4
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,101 @@
+---
+title: Comenzi Backend
+---
+
+## Comenzi utile
+
+Aceste comenzi ar trebui să fie executate din dosarul packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### Configurare de la prima utilizare
+
+```
+npx nx database:reset twenty-server # configurează baza de date cu seed-uri de dezvoltare
+```
+
+### Pornirea serverului
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # adaugă --fix pentru a remedia erorile de lint
+```
+
+### Test
+
+```
+npx nx run twenty-server:test:unit # rulează teste unitare
+npx nx run twenty-server:test:integration # rulează teste de integrare
+```
+
+Notă: poți rula `npx nx run twenty-server:test:integration:with-db-reset` în cazul în care trebuie să resetezi baza de date înainte de a rula testele de integrare.
+
+### Resetarea bazei de date
+
+Dacă vrei să resetezi și să configurezi baza de date, poți rula comanda următoare:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Migrații
+
+#### Pentru obiectele din schematizările de Bază/Metadate (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Pentru obiectele din Workspace
+
+Nu există fișiere de migrație, migrația este generată automat pentru fiecare spațiu de lucru,
+este stocată în baza de date și aplicată cu această comandă
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ Acest lucru va elimina baza de date și va relansa migrațiile și seed-urile.
+
+ Asigură-te că faci un backup pentru orice date pe care dorești să le păstrezi înainte de a rula această comandă.
+
+
+## Tehnologii Utilizate
+
+Twenty folosește în principal NestJS pentru backend.
+
+Prisma a fost primul ORM pe care l-am folosit. Dar pentru a permite utilizatorilor să creeze câmpuri și obiecte personalizate, un nivel inferior a făcut mai mult sens, deoarece trebuie să avem un control detaliat. Proiectul folosește acum TypeORM.
+
+Here's what the tech stack now looks like.
+
+**Core**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Bază de date**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Integrări terțe**
+
+* [Sentry](https://sentry.io/welcome/) pentru urmărirea erorilor
+
+**Testare**
+
+* [Jest](https://jestjs.io/)
+
+**Instrumente**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Dezvoltare**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/zapier.mdx
new file mode 100644
index 0000000000..71e5baf890
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/zapier.mdx
@@ -0,0 +1,83 @@
+---
+title: Zapier App
+---
+
+Sincronizează fără efort Twenty cu peste 3000 de aplicații folosind [Zapier](https://zapier.com/). Automatizează sarcinile, stimulează productivitatea și îmbunătățește relațiile cu clienții!
+
+## Despre Zapier
+
+Zapier este un instrument care îți permite să automatizezi fluxurile de lucru conectând aplicațiile pe care echipa ta le folosește zilnic. Conceptul de bază al Zapier este fluxurile de automatizare, numite Zaps, care includ triggeri și acțiuni.
+
+Poți afla mai multe despre cum funcționează Zapier [aici](https://zapier.com/how-it-works).
+
+## Configurare
+
+### Pasul 1: Instalează pachetele Zapier
+
+```bash
+cd packages/twenty-zapier
+
+yarn
+```
+
+### Pasul 2: Autentificare cu CLI-ul
+
+Folosește acreditările Zapier pentru a te autentifica folosind CLI-ul:
+
+```bash
+zapier login
+```
+
+### Pasul 3: Setează variabilele de mediu
+
+Din folderul `packages/twenty-zapier`, rulează:
+
+```bash
+cp .env.example .env
+```
+
+Rulează aplicația local, accesează [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks) și generează o cheie API.
+
+Înlocuiește valoarea **YOUR_API_KEY** din fișierul `.env` cu cheia API pe care tocmai ai generat-o.
+
+## Dezvoltare
+
+
+ Asigură-te că rulezi `yarn build` înainte de orice comandă `zapier`.
+
+
+### Test
+
+```bash
+yarn test
+```
+
+### Lint
+
+```bash
+yarn format
+```
+
+### Urmărește și compilează pe măsură ce editezi codul
+
+```bash
+yarn watch
+```
+
+### Validează aplicația Zapier
+
+```bash
+yarn validate
+```
+
+### Desfășoară aplicația Zapier
+
+```bash
+yarn deploy
+```
+
+### Listează toate comenzile CLI Zapier
+
+```bash
+zapier
+```
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..535eb583dd
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Raportare Erori
+
+Pentru a raporta o eroare, te rog [creează o problemă pe GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+Poți de asemenea să ceri ajutor pe [Discord](https://discord.gg/cx5n4Jzs57).
+
+## Cereri de Funcționalități
+
+Dacă nu ești sigur că este o eroare și simți că este mai aproape de o cerere de funcționalitate, atunci ar trebui probabil să [deschizi în loc o discuție](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Înainte de a începe
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..0c2b53979b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,325 @@
+---
+title: Cele mai bune practici
+---
+
+Acest document prezintă cele mai bune practici pe care ar trebui să le urmați atunci când lucrați la frontend.
+
+## Managementul stării
+
+React și Recoil se ocupă de managementul stării în cod.
+
+### Folosiți `useRecoilState` pentru a stoca starea
+
+It's good practice to create as many atoms as you need to store your state.
+
+
+ It's better to use extra atoms than trying to be too concise with props drilling.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default value',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Nu folosiți `useRef` pentru a stoca starea
+
+Evitați utilizarea `useRef` pentru a stoca starea.
+
+Dacă doriți să stocați starea, ar trebui să folosiți `useState` sau `useRecoilState`.
+
+See [how to manage re-renders](#managing-re-renders) if you feel like you need `useRef` to prevent some re-renders from happening.
+
+## Managing re-renders
+
+Re-render-urile pot fi greu de gestionat în React.
+
+Aici sunt câteva reguli de urmat pentru a evita re-render-urile inutile.
+
+Keep in mind that you can **always** avoid re-renders by understanding their cause.
+
+### Lucrați la nivelul rădăcinii
+
+Avoiding re-renders in new features is now made easy by eliminating them at the root level.
+
+Componenta secundară `PageChangeEffect` conține doar un `useEffect` ce deține toată logica de execuție la o schimbare de pagină.
+
+În acest fel știți că există doar un loc care poate declanșa un re-render.
+
+### Gândiți-vă de două ori înainte de a adăuga `useEffect` în baza de cod
+
+Re-render-urile sunt adesea cauzate de `useEffect` inutile.
+
+Ar trebui să vă gândiți dacă aveți nevoie de `useEffect` sau dacă puteți muta logica într-o funcție de handler de eveniment.
+
+Vă va fi, în general, ușor să mutați logica într-o funcție `handleClick` sau `handleChange`.
+
+De asemenea, le puteți găsi în biblioteci precum Apollo: `onCompleted`, `onError`, etc.
+
+### Folosiți o componentă adiacentă pentru a extrage `useEffect` sau logica de interogare de date
+
+Dacă simțiți nevoia să adăugați un `useEffect` în componenta rădăcină, ar trebui să luați în considerare extragerea sa într-o componentă secundară.
+
+Puteți aplica același principiu pentru logica de interogare de date, folosind hooks cu Apollo.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Folosiți stări de familie și selectoare de familie cu recoil
+
+Stările și selectoarele de familie cu recoil sunt o metodă excelentă de a evita re-render-urile.
+
+Sunt utile când trebuie să stocați o listă de elemente.
+
+### Nu ar trebui să folosiți `React.memo(MyComponent)`
+
+Evitați utilizarea `React.memo()` deoarece nu rezolvă cauza re-render-ului, ci întrerupe lanțul re-render, ceea ce poate duce la comportamente neașteptate și face codul foarte greu de refactorizat.
+
+### Limitați utilizarea `useCallback` sau `useMemo`
+
+Acestea sunt adesea inutile și vor face codul mai greu de citit și menținut pentru un câștig în performanță care nu este sesizabil.
+
+## Console.logs
+
+Instrucțiunile `console.log` sunt valoroase în timpul dezvoltării, oferind informații în timp real despre valorile variabilelor și fluxul de cod. Totuși, lăsându-le în codul de producție pot duce la mai multe probleme:
+
+1. **Performanță**: Logările excesive pot afecta performanța de execuție, în special în aplicațiile pe partea de client.
+
+2. **Siguranță**: Logarea datelor sensibile poate expune informații critice oricui inspectează consola browser-ului.
+
+3. **Claritate**: Umplerea consolei cu logări poate ascunde avertismente sau erori importante pe care dezvoltatorii sau uneltele le trebuie să le vadă.
+
+4. **Profesionalism**: Utilizatorii finali sau clienții care verifică consola și văd o multitudine de instrucțiuni de log s-ar putea să pună la îndoială calitatea și finisajul codului.
+
+Asigurați-vă că eliminați toate `console.log`-urile înainte de a trimite codul în producție.
+
+## Denumiri
+
+### Denumire de variabilă
+
+Denumirile variabilelor trebuie să descrie cu precizie scopul sau funcția variabilei.
+
+#### Problema cu denumirile generice
+
+Denumirile generice în programare nu sunt ideale deoarece nu au specificitate, ducând la ambiguitate și la reducerea lizibilității codului. Astfel de denumiri nu reușesc să transmită scopul variabilei sau funcției, ceea ce îngreunează înțelegerea intenției codului de către dezvoltatori fără o investigație mai profundă. Acest lucru poate duce la creșterea timpului de depanare, la o mai mare susceptibilitate la erori și dificultăți în întreținere și colaborare. Între timp, denumirile descriptive fac codul auto-explicativ și mai ușor de navigat, îmbunătățind calitatea codului și productivitatea dezvoltatorilor.
+
+```tsx
+// ❌ Bad, uses a generic name that doesn't communicate its
+// purpose or content clearly
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Good, uses a descriptive name
+const [email, setEmail] = useState('');
+```
+
+#### Câteva cuvinte de evitat în denumirile de variabile
+
+* dummy
+
+### Handlere de evenimente
+
+Numele handlerelor de evenimente ar trebui să înceapă cu `handle`, în timp ce `on` este un prefix folosit pentru a denumi evenimentele în prop-urile componentelor.
+
+```tsx
+// ❌ Bad
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Good
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Props opționale
+
+Evitați să transmiteți valoarea implicită pentru un props opțional.
+
+**EXEMPLU**
+
+Țineți cont de componenta `EmailField` definită mai jos:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Utilizare**
+
+```tsx
+// ❌ Bad, passing in the same value as the default value adds no value
+const Form = () => ;
+```
+
+```tsx
+// ✅ Good, assumes the default value
+const Form = () => ;
+```
+
+## Componentă ca props
+
+Încercați, pe cât posibil, să transmiteți componente neinstanțiate ca props, astfel încât copiii să poată decide singuri de ce props au nevoie să transmită.
+
+Cel mai frecvent exemplu pentru aceasta sunt componentele de pictograme:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// In MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Pentru ca React să înțeleagă că componenta este o componentă, trebuie să folosești PascalCase, pentru a o instanția ulterior cu ``
+
+## Prop Drilling: Păstrați-l Minimal
+
+Prop drilling, în contextul React, se referă la practica de a transmite variabile de stare și setatorii acestora prin multe straturi de componente, chiar dacă componentele intermediare nu le folosesc. Deși uneori necesar, prop drilling excesiv poate duce la:
+
+1. **Citibilitate Scăzută**: Urmărirea de unde provine un prop sau unde este utilizat poate deveni complexă într-o structură de componente foarte profundă.
+
+2. **Provocări de Mentenanță**: Schimbările în structura props a unei componente pot necesita ajustări în mai multe componente, chiar dacă acestea nu utilizează direct prop-ul.
+
+3. **Reutilizabilitate Redusă a Componentelor**: O componentă ce primește multe props doar pentru a le transmite mai departe devine mai puțin de uz general și mai greu de reutilizat în contexte diferite.
+
+Dacă simțiți că folosiți prea mult prop drilling, consultați [cele mai bune practici de gestionare a stării](#state-management).
+
+## Importuri
+
+Când importați, optați pentru pseudonimele desemnate în loc să specificați căi complete sau relative.
+
+**Pseudonimele**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Utilizare**
+
+```tsx
+// ❌ Bad, specifies the entire relative path
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Good, utilises the designated aliases
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Validarea Schemelor
+
+[Zod](https://github.com/colinhacks/zod) este validatorul de scheme pentru obiectele netipizate:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email must be a valid email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Schimbări Majore
+
+Efectuați întotdeauna teste manuale temeinice înainte de a continua pentru a garanta că modificările nu au cauzat întreruperi în altă parte, având în vedere că testele nu au fost încă integrate extensiv.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..8e07d798d3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Arhitectura Folderului
+info: O privire detaliată asupra arhitecturii folderului nostru
+---
+
+In this guide, you will explore the details of the project directory structure and how it contributes to the organization and maintainability of Twenty.
+
+Respectând convenția de arhitectură a folderului, este mai ușor să găsești fișierele legate de funcționalități specifice și să te asiguri că aplicația este scalabilă și ușor de întreținut.
+
+```
+front
+└───modul
+│ └───modul1
+│ │ └───submodul1
+│ └───modul2
+│ └───ui
+│ │ └───afișaj
+│ │ └───intrări
+│ │ │ └───butoane
+│ │ └───...
+└───pagini
+└───...
+```
+
+## Pagini
+
+Include componentele de nivel superior definite de rutele aplicației. Importă componente de nivel mai scăzut din folderul de module (mai multe detalii mai jos).
+
+## Module
+
+Fiecare modul reprezintă o funcționalitate sau un grup de funcționalități, cuprinzând componentele, stările și logica operațională specifice.
+Toate ar trebui să urmeze structura de mai jos. Poți introduce module în cadrul altor module (denumite submodule), iar aceleași reguli se vor aplica.
+
+```
+modul1
+ └───componente
+ │ └───componentă1
+ │ └───componentă2
+ └───constante
+ └───contexturi
+ └───graphql
+ │ └───fragmente
+ │ └───interogări
+ │ └───mutații
+ └───cârlige
+ │ └───interne
+ └───stări
+ │ └───selectorii
+ └───tipuri
+ └───unelte
+```
+
+### Contexturi
+
+Un context este o modalitate de a transmite date prin arborele de componente fără a fi necesar să transmiți manual proprietățile la fiecare nivel.
+
+Vezi [React Context](https://react.dev/reference/react#context-hooks) pentru mai multe detalii.
+
+### GraphQL
+
+Include fragmente, interogări și mutații.
+
+Vezi [GraphQL](https://graphql.org/learn/) pentru mai multe detalii.
+
+* Fragmente
+
+Un fragment este o bucată reutilizabilă dintr-o interogare, pe care o poți folosi în diferite locuri. Folosind fragmente este mai ușor să eviți duplicarea codului.
+
+Vezi [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) pentru mai multe detalii.
+
+* Interogări
+
+Vezi [GraphQL Queries](https://graphql.org/learn/queries/) pentru mai multe detalii.
+
+* Mutații
+
+Vezi [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) pentru mai multe detalii.
+
+### Hook-uri
+
+Vezi [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) pentru mai multe detalii.
+
+### Stări
+
+Conține logica de gestionare a stării. [RecoilJS](https://recoiljs.org) gestionează aceasta.
+
+* Selectori: Vezi [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) pentru mai multe detalii.
+
+Managementul de stare încorporat în React gestionează încă starea în cadrul unei componente.
+
+### Unelte
+
+Ar trebui să conțină doar funcții pure, reutilizabile. În caz contrar, creează hook-uri personalizate în folderul `hooks`.
+
+## UI
+
+Conține toate componentele UI reutilizabile folosite în aplicație.
+
+Acest folder poate conține subfoldere, precum `data`, `afișaj`, `feedback` și `intrare` pentru tipuri specifice de componente. Fiecare componentă ar trebui să fie autonomă și reutilizabilă, astfel încât să o poți folosi în diferite părți ale aplicației.
+
+Prin separarea componentelor UI de celelalte componente din folderul `modules`, este mai ușor să menții un design consistent și să faci modificări la interfața grafică fără a afecta alte părți (logica de afaceri) ale codului.
+
+## Interfață și dependențe
+
+Poți importa codul altor module din orice modul, cu excepția folderului `ui`. Acest lucru va menține codul ușor de testat.
+
+### Intern
+
+Fiecare parte (hook-uri, stări, ...) dintr-un modul poate avea un folder `intern`, care conține părți care sunt doar utilizate în cadrul modulului.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/frontend-commands.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
new file mode 100644
index 0000000000..d12545a7f8
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/frontend-commands.mdx
@@ -0,0 +1,90 @@
+---
+title: Comenzi Frontend
+---
+
+## Comenzi utile
+
+### Pornirea aplicației
+
+```bash
+npx nx start twenty-front
+```
+
+### Regenerate graphql schema based on API graphql schema
+
+```bash
+npx nx run twenty-front:graphql:generate --configuration=metadata
+```
+
+SAU
+
+```bash
+npx nx run twenty-front:graphql:generate
+```
+
+### Lint
+
+```bash
+npx nx run twenty-front:lint # utilizați --fix pentru a corecta erorile de lint
+```
+
+## Traduceri
+
+```bash
+npx nx run twenty-front:lingui:extract
+npx nx run twenty-front:lingui:compile
+```
+
+### Test
+
+```bash
+npx nx run twenty-front:test # rulați teste jest
+npx nx run twenty-front:storybook:serve:dev # rulați storybook
+npx nx run twenty-front:storybook:test # rulați testele # (are nevoie de yarn storybook:serve:dev pentru a rula)
+npx nx run twenty-front:storybook:coverage # (are nevoie de yarn storybook:serve:dev pentru a rula)
+```
+
+## Tehnologii Utilizate
+
+The project has a clean and simple stack, with minimal boilerplate code.
+
+**Aplicație**
+
+* [React](https://react.dev/)
+* [Apollo](https://www.apollographql.com/docs/)
+* [GraphQL Codegen](https://the-guild.dev/graphql/codegen)
+* [Recoil](https://recoiljs.org/docs/introduction/core-concepts)
+* [TypeScript](https://www.typescriptlang.org/)
+
+**Testare**
+
+* [Jest](https://jestjs.io/)
+* [Storybook](https://storybook.js.org/)
+
+**Instrumente**
+
+* [Yarn](https://yarnpkg.com/)
+* [Craco](https://craco.js.org/docs/)
+* [ESLint](https://eslint.org/)
+
+## Arhitectură
+
+### Rutare
+
+[React Router](https://reactrouter.com/) se ocupă de rutare.
+
+Pentru a evita [re-redări](/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front#managing-re-renders) inutile, toată logica de rutare se află în `useEffect` în `PageChangeEffect`.
+
+### Managementul stării
+
+[Recoil](https://recoiljs.org/docs/introduction/core-concepts) se ocupă de managementul stării.
+
+Consultați [cele mai bune practici](/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front#state-management) pentru mai multe informații despre managementul stării.
+
+## Testare
+
+[Jest](https://jestjs.io/) servește ca instrument pentru testarea unităților, în timp ce [Storybook](https://storybook.js.org/) este pentru testarea componentelor.
+
+Jest este utilizat în principal pentru testarea funcțiilor utilitare, nu a componentelor în sine.
+
+Storybook este pentru testarea comportamentului componentelor izolate, precum și pentru afișarea sistemului de design.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/hotkeys.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/hotkeys.mdx
new file mode 100644
index 0000000000..23448c1843
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/hotkeys.mdx
@@ -0,0 +1,178 @@
+---
+title: Comenzi rapide
+---
+
+## Introducere
+
+Atunci când aveți nevoie să ascultați o comandă rapidă, în mod normal ați folosi evenimentul `onKeyDown`.
+
+În `twenty-front` totuși, s-ar putea să aveți conflicte între aceleași comenzi rapide folosite în componente diferite, montate simultan.
+
+De exemplu, dacă aveți o pagină care ascultă tasta Enter, și un modal care ascultă aceeași tastă, cu o componentă Select în interiorul acelui modal care ascultă și ea tasta Enter, s-ar putea să apară un conflict când toate sunt montate simultan.
+
+## Hook-ul `useScopedHotkeys`
+
+Pentru a gestiona această problemă, avem un hook personalizat care face posibilă ascultarea comenzilor rapide fără niciun conflict.
+
+Îl așezați într-o componentă și va asculta comenzile rapide doar când componenta este montată ȘI când **domeniul comenzii rapide** specificat este activ.
+
+## How to listen for hotkeys in practice?
+
+Sunt două etape implicate în configurarea ascultării comenzilor rapide:
+
+1. Setați [domeniul comenzii rapide](#what-is-a-hotkey-scope-) care va asculta comenzi rapide
+2. Folosiți `useScopedHotkeys` pentru a asculta comenzile rapide
+
+Setarea domeniilor comenzilor rapide este necesară chiar și în paginile simple, deoarece alte elemente ale UI, cum ar fi meniul din stânga sau meniul de comandă, s-ar putea să asculte și ele comenzi rapide.
+
+## Cazuri de utilizare pentru comenzi rapide
+
+În general, veți avea două cazuri de utilizare care necesită comenzi rapide:
+
+1. Într-o pagină sau componentă montată într-o pagină
+2. Într-o componentă de tip modal care preia focusul datorită unei acțiuni a utilizatorului
+
+Al doilea caz de utilizare poate apărea recursiv: un dropdown într-un modal, de exemplu.
+
+### Ascultarea comenzilor rapide într-o pagină
+
+Exemplu:
+
+```tsx
+const PageListeningEnter = () => {
+ const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+ } = usePreviousHotkeyScope();
+
+ // 1. Set the hotkey scope in a useEffect
+ useEffect(() => {
+ setHotkeyScopeAndMemorizePreviousScope(
+ ExampleHotkeyScopes.ExampleEnterPage,
+ );
+
+ // Revert to the previous hotkey scope when the component is unmounted
+ return () => {
+ goBackToPreviousHotkeyScope();
+ };
+ }, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]);
+
+ // 2. Use the useScopedHotkeys hook
+ useScopedHotkeys(
+ Key.Enter,
+ () => {
+ // Some logic executed on this page when the user presses Enter
+ // ...
+ },
+ ExampleHotkeyScopes.ExampleEnterPage,
+ );
+
+ return My page that listens for Enter
;
+};
+```
+
+### Ascultarea comenzilor rapide într-o componentă de tip modal
+
+În acest exemplu vom folosi o componentă modal care ascultă tasta Escape pentru a-i spune părintelui să o închidă.
+
+Aici interacțiunea utilizatorului modifică domeniul.
+
+```tsx
+const ExamplePageWithModal = () => {
+ const [showModal, setShowModal] = useState(false);
+
+ const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+ } = usePreviousHotkeyScope();
+
+ const handleOpenModalClick = () => {
+ // 1. Set the hotkey scope when user opens the modal
+ setShowModal(true);
+ setHotkeyScopeAndMemorizePreviousScope(
+ ExampleHotkeyScopes.ExampleModal,
+ );
+ };
+
+ const handleModalClose = () => {
+ // 1. Revert to the previous hotkey scope when the modal is closed
+ setShowModal(false);
+ goBackToPreviousHotkeyScope();
+ };
+
+ return
+
My page with a modal
+ Open modal
+ {showModal && }
+ ;
+};
+```
+
+Apoi în componenta modal:
+
+```tsx
+const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => {
+ // 2. Use the useScopedHotkeys hook to listen for Escape.
+ // Note that escape is a common hotkey that could be used by many other components
+ // So it's important to use a hotkey scope to avoid conflicts
+ useScopedHotkeys(
+ Key.Escape,
+ () => {
+ onClose()
+ },
+ ExampleHotkeyScopes.ExampleModal,
+ );
+
+ return My modal component
;
+};
+```
+
+Este important să folosiți acest tipar când nu sunteți sigur că doar utilizând un useEffect la montare/demontare va fi suficient pentru a evita conflictele.
+
+Aceste conflicte pot fi greu de depanat și s-ar putea să apară mai des decât credeți cu useEffects.
+
+## Ce este un domeniu al comenzilor rapide?
+
+Un domeniu al comenzilor rapide este un șir de caractere care reprezintă un context în care comenzile rapide sunt active. Este în general codificat sub forma unui enum.
+
+Când schimbați domeniul comenzii rapide, comenzile rapide care ascultă acest domeniu vor fi activate, iar cele care ascultă alte domenii vor fi dezactivate.
+
+Puteți seta doar un singur domeniu la un moment dat.
+
+Ca exemplu, domeniile comenzilor rapide pentru fiecare pagină sunt definite în enumul `PageHotkeyScope`:
+
+```tsx
+export enum PageHotkeyScope {
+ Settings = 'settings',
+ CreateWorkspace = 'create-workspace',
+ SignInUp = 'sign-in-up',
+ CreateProfile = 'create-profile',
+ PlanRequired = 'plan-required',
+ ShowPage = 'show-page',
+ PersonShowPage = 'person-show-page',
+ CompanyShowPage = 'company-show-page',
+ CompaniesPage = 'companies-page',
+ PeoplePage = 'people-page',
+ OpportunitiesPage = 'opportunities-page',
+ ProfilePage = 'profile-page',
+ WorkspaceMemberPage = 'workspace-member-page',
+ TaskPage = 'task-page',
+}
+```
+
+Intern, domeniul selectat în prezent este stocat într-o stare Recoil care este partajată în toată aplicația:
+
+```tsx
+export const currentHotkeyScopeState = createState({
+ key: 'currentHotkeyScopeState',
+ defaultValue: INITIAL_HOTKEYS_SCOPE,
+});
+```
+
+Însă această stare Recoil nu ar trebui să fie gestionată manual! Vom vedea cum să o folosim în secțiunea următoare.
+
+## Cum funcționează intern?
+
+Am făcut un wrapper subțire peste [react-hotkeys-hook](https://react-hotkeys-hook.vercel.app/docs/intro) care îl face mai performant și evită re-rendările inutile.
+
+De asemenea, creăm o stare Recoil pentru a gestiona starea domeniului comenzilor rapide și să fie disponibilă oriunde în aplicație.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..5b2c0e535b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: Ghid de stil
+---
+
+Acest document include regulile ce trebuie urmate la scrierea codului.
+
+Scopul aici este de a avea o bază de cod coerentă, ușor de citit și ușor de întreținut.
+
+Pentru aceasta, este mai bine să fie mai detaliat decât prea concis.
+
+Ține mereu minte că oamenii citesc codul mai des decât îl scriu, mai ales într-un proiect open-source, unde oricine poate contribui.
+
+Există multe reguli care nu sunt definite aici, dar care sunt verificate automat de linters.
+
+## React
+
+### Folosește componente funcționale
+
+Utilizează întotdeauna componente funcționale TSX.
+
+Nu folosi `import` implicit cu `const`, deoarece este mai greu de citit și mai greu de importat cu completarea de cod.
+
+```tsx
+// ❌ Rău, mai greu de citit, mai greu de importat cu completarea codului
+const MyComponent = () => {
+ return Hello World
;
+};
+
+export default MyComponent;
+
+// ✅ Bun, ușor de citit, ușor de importat cu completarea codului
+export function MyComponent() {
+ return Hello World
;
+};
+```
+
+### Proprietăți
+
+Creează tipul proprietăților și numește-l `(NumeComponentă)Props` dacă nu este necesar să o exporți.
+
+Folosește destructurarea props.
+
+```tsx
+// ❌ Rău, fără tip
+export const MyComponent = (props) => Hello {props.name}
;
+
+// ✅ Bun, cu tip
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Hello {name}
;
+```
+
+#### Ferește-te de utilizarea `React.FC` sau `React.FunctionComponent` pentru a defini tipurile props
+
+```tsx
+/* ❌ - Rău, definește adnotările de componente cu `FC`
+ * - Cu `React.FC`, componenta acceptă implicit o prop `children`
+ * chiar dacă nu este definit în tipul prop. Acest lucru nu este întotdeauna
+ * de dorit, în special dacă componenta nu intenționează să redea
+ * copii.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### Fără Împrăștierea de Proprietăți cu o singură variabilă în Elemente JSX
+
+Evită utilizarea împrăștierii de proprietăți cu o singură variabilă în elemente JSX, cum ar fi `{...props}`. Această practică adesea duce la cod mai puțin lizibil și mai greu de întreținut deoarece nu este clar ce proprietăți primește componenta.
+
+```tsx
+/* ❌ - Rău, împrăștie o singură variabilă prop în componenta subadiacentă
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Raționament:
+
+* La o privire rapidă, este mai evident ce proprietăți sunt transmise de cod, făcându-l mai ușor de înțeles și întreținut.
+* Ajută la prevenirea unei cuplări strânse între componente prin proprietățile lor.
+* Instrumentele de linting fac mai ușor să identifici proprietăți sprellate greșit sau neutilizate atunci când enumeri explicit proprietățile.
+
+## JavaScript
+
+### Utilizează operatorul de coalescență nulă `??`
+
+```tsx
+// ❌ Rău, poate returna `implicit` chiar dacă valoarea este 0 sau ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Bun, va returna `implicit` doar dacă valoarea este null sau nedefinit
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Folosește accesarea opțională `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Use `type` instead of `interface`
+
+Always use `type` instead of `interface`, because they almost always overlap, and `type` is more flexible.
+
+```tsx
+// ❌ Bad
+interface MyInterface {
+ name: string;
+}
+
+// ✅ Good
+type MyType = {
+ name: string;
+};
+```
+
+### Folosește litere de șir în loc de enum
+
+[Literele de șir](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) sunt metoda standard pentru manipularea valorilor similare cu enum în TypeScript. Sunt mai ușor de extins cu Pick și Omit, oferind o experiență mai bună dezvoltatorilor, mai ales cu completarea codului.
+
+Poți vedea de ce TypeScript recomandă evitarea enumurilor [aici](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Rău, utilizează un enum
+enum Color {
+ Roșu = "red",
+ Verde = "green",
+ Albastru = "blue",
+}
+
+let color = Color.Roșu;
+```
+
+```tsx
+// ✅ Bun, utilizează o literă de șir
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL și biblioteci interne
+
+Ar trebui să folosești enumurile generate de GraphQL codegen.
+
+Este de asemenea mai bine să folosești un enum atunci când utilizezi o bibliotecă internă, astfel încât biblioteca internă să nu trebuiască să expose un tip de literă de șir care nu este legată de API-ul intern.
+
+Exemplu:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Stilizare
+
+### Folosește ComponentaStilizată
+
+Stilizează componentele cu [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Rău
+Hello World
+```
+
+```tsx
+// ✅ Bun
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Prefixează componentele stilizate cu „Styled” pentru a le diferenția de componentele „reale”.
+
+```tsx
+// ❌ Rău
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Bun
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Tematica
+
+Utilizarea temei pentru majoritatea stilizării componentelor este abordarea preferată.
+
+#### Unități de măsură
+
+Evită utilizarea directă a valorilor `px` sau `rem` în componentele stilizate. Valorile necesare sunt de regulă deja definite în temă, așa că este recomandat să utilizezi tema pentru aceste scopuri.
+
+#### Culori
+
+Abține-te să introduci culori noi; în schimb, folosește paleta existentă din temă. În situația în care paleta nu se potrivește, te rugăm să lași un comentariu pentru ca echipa să poată remedia acest aspect.
+
+```tsx
+// ❌ Rău, specifică stilul direct fără a utiliza tema
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Bun, utilizează tema
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Impunerea Neprecizării Importurilor de Tip
+
+Evită importurile de tip. Pentru a impune acest standard, o regulă ESLint verifică și raportează orice importuri de tip. Acest lucru ajută la menținerea consistenței și lizibilității în codul TypeScript.
+
+```tsx
+// ❌ Rău
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Rău
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Bun
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### De ce Fără Importuri de Tip
+
+* **Consistență**: Evitând importurile de tip și folosind o singură abordare atât pentru importurile de tip cât și de valoare, baza de cod rămâne consistentă în stilul său de import module.
+
+* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. Aceasta reduce ambiguitatea și face mai ușor de înțeles scopul simbolurilor importate.
+
+* **Întreținere**: Îmbunătățește întreținerea bazei de cod, deoarece dezvoltatorii pot identifica și localiza importurile doar de tip când revizuiesc sau modifică codul.
+
+### Regula ESLint
+
+O regulă ESLint, `@typescript-eslint/consistent-type-imports`, impune standardul fără importuri de tip. Această regulă va genera erori sau avertismente pentru orice încălcare a importurilor de tip.
+
+Please note that this rule specifically addresses rare edge cases where unintentional type imports occur. TypeScript descurajează el însuși această practică, așa cum este menționat în notele de lansare [TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). În majoritatea situațiilor, nu ar trebui să aveți nevoie de importuri doar de tip.
+
+To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..04e8edf432
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,59 @@
+---
+title: Lucrează cu Figma
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+Figma este un instrument de design de interfață colaborativ care ajută la eliminarea barierelor de comunicare între designeri și dezvoltatori.
+Acest ghid explică cum poți colabora cu Figma.
+
+## Acces
+
+1. **Accesează linkul partajat:** Poți accesa fișierul Figma al proiectului [aici](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **Autentificare:** Dacă nu ești deja autentificat, Figma te va solicita să faci acest lucru.
+ Funcțiile principale sunt disponibile doar pentru utilizatorii autentificați, cum ar fi modul dezvoltator și capacitatea de a selecta un cadru dedicat.
+
+
+ Nu vei putea colabora eficient fără un cont.
+
+
+## Structura Figma
+
+On the left sidebar, you can access the different pages of Twenty's Figma. Acestea sunt organizate astfel:
+
+* **Pagina de componente:** Aceasta este prima pagină. Designerul o folosește pentru a crea și organiza elementele de design reutilizabile folosite în întregul fișier de design. De exemplu, butoane, pictograme, simboluri sau oricare alte componente reutilizabile. Aceasta servește la menținerea consistenței în cadrul designului.
+* **Pagina principală:** A doua pagină este pagina principală, care afișează interfața completă a proiectului. Poți apăsa ***Play*** pentru a utiliza prototipul complet al aplicației.
+* **Pagini de funcționalitate:** Celelalte pagini sunt de obicei dedicate funcționalităților în curs de dezvoltare. Acestea conțin designul caracteristicilor specifice sau modulelor aplicației sau site-ului web. De obicei, sunt încă în dezvoltare.
+
+## Sfaturi utile
+
+Cu acces doar pentru citire, nu poți edita designul, dar poți accesa toate funcțiile care vor fi utile pentru a converti designurile în cod.
+
+### Folosește Modul Dev
+
+Modul Dev al Figma îmbunătățește productivitatea dezvoltatorilor prin oferirea unei navigări facile în design, gestionarea eficientă a resurselor, instrumente de comunicare eficace, integrări de toolbox, fragmente rapide de cod și informații esențiale despre straturi, reducând decalajul între design și dezvoltare. Poți afla mai multe despre Modul Dev [aici](https://www.figma.com/dev-mode/).
+
+Switch to the "Developer" mode in the right part of the toolbar to see design specs, copy CSS, and access assets.
+
+### Folosește Prototipul
+
+Fă clic pe orice element de pe pânză și apasă butonul “Play” din colțul de sus dreapta al interfeței pentru a accesa vizualizarea prototip. Modul Prototip îți permite să interacționezi cu designul ca și cum ar fi produsul final. Acesta demonstrează fluxul între ecrane și cum elementele de interfață, cum ar fi butoanele, link-urile sau meniurile, se comportă la interacțiune.
+
+1. **Înțelegerea tranzițiilor și animațiilor:** În modul de prototip, poți vizualiza orice tranziții sau animații adăugate de designer între ecrane sau elementele UI, oferind indicații vizuale clare dezvoltatorilor despre comportamentul și stilul dorit.
+2. **Clarificarea implementării:** Un prototip poate ajuta, de asemenea, la reducerea ambiguităților. Dezvoltatorii pot interacționa cu acesta pentru a înțelege mai bine funcționalitatea sau aspectul elementelor particulare.
+
+Pentru mai multe detalii și îndrumări despre învățarea platformei Figma, poți vizita [Documentația oficială Figma](https://help.figma.com/hc/en-us).
+
+### Măsoară distanțele
+
+Selectează un element, ține apăsată tasta `Option` (Mac) sau `Alt` (Windows), apoi plasează cursorul peste un alt element pentru a vedea distanța dintre ele.
+
+### Extensia Figma pentru VSCode (Recomandat)
+
+[Figma pentru VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension)
+îți permite să navighezi și să inspectezi fișierele de design, să colaborezi cu designeri, să urmărești schimbările și să grăbești implementarea - totul fără a părăsi editorul de text.
+Face parte din extensiile noastre recomandate.
+
+## Colaborare
+
+1. **Utilizarea comentariilor:** Ești binevenit să folosești funcția de comentarii făcând clic pe pictograma de bule din partea stângă a barei de instrumente.
+2. **Chat cu Cursor:** O caracteristică plăcută a Figma este Chatul cu Cursor. Apasă `;` pe Mac și `/` pe Windows pentru a trimite un mesaj dacă vezi pe altcineva folosind Figma în același timp cu tine.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/ro/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..d1218d10e5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: Configurare locală
+description: Ghidul pentru contribuitori (sau dezvoltatori curioși) care doresc să ruleze Twenty local.
+---
+
+## Cerințe
+
+
+
+ Înainte de a instala și utiliza Twenty, asigurați-vă că instalați următoarele pe computerul dvs.:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` nu va funcționa, ar trebui să folosiți `yarn` în schimb. Yarn este acum livrat cu Node.js, așa că nu este nevoie să-l instalați separat.
+ Trebuie doar să rulați `corepack enable` pentru a activa Yarn dacă nu ați făcut acest lucru deja.
+
+
+
+
+ 1. Instalați WSL
+ Deschideți PowerShell ca Administrator și rulați:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Ar trebui să vedeți acum un mesaj pentru a reporni computerul. Dacă nu, reporniți-l manual.
+
+ La repornire, o fereastră PowerShell se va deschide și va instala Ubuntu. Acest lucru poate dura ceva timp.
+ Veți vedea un mesaj pentru a crea un nume de utilizator și o parolă pentru instalarea Ubuntu.
+
+ 2. Instalați și configurați git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Numele Dvs."
+
+ git config --global user.email "emailul@domeniu.com"
+ ```
+
+ 3. Instalați nvm, node.js și yarn
+
+
+ Folosiți `nvm` pentru a instala versiunea corectă de `node`. Fișierul `.nvmrc` asigură că toți contribuitorii folosesc aceeași versiune.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Închideți și redeschideți terminalul pentru a utiliza nvm. Apoi rulați următoarele comenzi.
+
+ ```bash
+
+ nvm install # instalează versiunea recomandată de node
+
+ nvm use # folosește versiunea recomandată de node
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Pasul 1: Clonarea Git
+
+Rulați în terminalul dvs. comanda următoare.
+
+
+
+ Dacă nu ați configurat deja cheile SSH, puteți învăța cum să faceți acest lucru [aici](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Pasul 2: Poziționați-vă la rădăcină
+
+```bash
+cd twenty
+```
+
+Trebuie să rulați toate comenzile în pașii următori de la rădăcina proiectului.
+
+## Pasul 3: Configurarea unei baze de date PostgreSQL
+
+
+
+ **Opțiunea 1 (preferată):** Pentru a configura local baza de date:
+ Folosiți următorul link pentru a instala PostgreSQL pe mașina dvs. Linux: [Instalare PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Notă: Ar putea fi nevoie să adăugați `sudo -u postgres` la comandă înainte de `psql` pentru a evita erorile de permisiune.
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Opțiunea 1 (preferată):** Pentru a configura local baza de date cu `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Puteți verifica dacă serverul PostgreSQL este activ executând:
+
+ ```bash
+ brew services list
+ ```
+
+ Instalatorul s-ar putea să nu creeze implicit utilizatorul `postgres` atunci când instalați
+ prin Homebrew pe MacOS. În schimb, creează un rol PostgreSQL care se potrivește cu numele de utilizator al
+ macOS-ului dvs. (de ex., "john").
+ Pentru a verifica și crea utilizatorul `postgres` dacă este necesar, urmați acești pași:
+
+ ```bash
+ # Conectare la PostgreSQL
+ psql postgres
+ sau
+ psql -U $(whoami) -d postgres
+ ```
+
+ Odată ce ajungeți la promptul psql (postgres=#), rulați:
+
+ ```bash
+ # Listați rolurile PostgreSQL existente
+ \du
+ ```
+
+ Veți vedea un rezultat similar cu:
+
+ ```bash
+ Role name | Attributes | Member of
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Dacă nu vedeți un rol `postgres` listat, mergeți la pasul următor.
+ Creați rolul `postgres` manual:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Acest lucru creează un rol de superutilizator numit `postgres` cu drept de autentificare.
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Toți pașii următori trebuie rulați în terminalul WSL (în cadrul mașinii dvs. virtuale)
+
+ **Opțiunea 1:** Pentru a configura local PostgreSQL:
+ Folosiți următorul link pentru a instala PostgreSQL pe mașina dvs. virtuală Linux: [Instalare PostgreSQL](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Notă: Ar putea fi nevoie să adăugați `sudo -u postgres` la comandă înainte de `psql` pentru a evita erorile de permisiune.
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+ Rularea Docker pe WSL adaugă un strat suplimentar de complexitate.
+ Folosiți această opțiune doar dacă sunteți confortabil cu pașii suplimentari implicați, inclusiv activarea [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Acum puteți accesa baza de date la [localhost:5432](localhost:5432), cu utilizator `postgres` și parolă `postgres`.
+
+## Pasul 4: Configurați o bază de date Redis (cache)
+
+Twenty necesită un cache Redis pentru a oferi cea mai bună performanță
+
+
+
+ **Opțiunea 1:** Pentru a configura local Redis:
+ Folosiți următorul link pentru a instala Redis pe mașina dvs. Linux: [Instalare Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opțiunea 1 (preferată):** Pentru a configura local Redis cu `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Porniți serverul Redis:
+ `brew services start redis`
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Opțiunea 1:** Pentru a configura local Redis:
+ Folosiți următorul link pentru a instala Redis pe mașina dvs. virtuală Linux: [Instalare Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Opțiunea 2:** Dacă aveți docker instalat:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Dacă aveți nevoie de o interfață grafică pentru client, vă recomandăm [Redis Insight](https://redis.io/insight/) (versiune gratuită disponibilă)
+
+## Pasul 5: Configurați variabilele de mediu
+
+Utilizați variabile de mediu sau fișiere `.env` pentru a configura proiectul dvs. Mai multe informații [aici](/l/ro/developers/self-host/capabilities/setup)
+
+Copiați fișierele `.env.example` din `/front` și `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/ro/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Pasul 6: Instalarea dependențelor
+
+Pentru a construi serverul Twenty și a adăuga date în baza dvs. de date, rulați următoarea comandă:
+
+```bash
+yarn
+```
+
+Rețineți că `npm` sau `pnpm` nu vor funcționa
+
+## Pasul 7: Rularea proiectului
+
+
+
+ În funcție de distribuția Linux pe care o folosiți, serverul Redis s-ar putea să fie pornit automat.
+ Dacă nu, verificați [ghidul de instalare Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) pentru distribuția dvs.
+
+
+
+ Redis ar trebui să fie deja pornit. Dacă nu, rulați:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ În funcție de distribuția Linux pe care o folosiți, serverul Redis s-ar putea să fie pornit automat.
+ Dacă nu, verificați [ghidul de instalare Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) pentru distribuția dvs.
+
+
+
+Setați baza de date cu următoarea comandă:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Start the server, the worker and the frontend services:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+Alternativ, puteți porni toate serviciile odată:
+
+```bash
+npx nx start
+```
+
+## Pasul 8: Utilizați Twenty
+
+**Front-end**
+
+Frontend-ul Twenty va rula la [http://localhost:3001](http://localhost:3001).
+Vă puteți loga folosind contul demo implicit: `tim@apple.dev` (parolă: `tim@apple.dev`)
+
+**Back-end**
+
+* Serverul Twenty va fi operativ la [http://localhost:3000](http://localhost:3000)
+* API-ul GraphQL poate fi accesat la [http://localhost:3000/graphql](http://localhost:3000/graphql)
+* API-ul REST poate fi accesat la [http://localhost:3000/rest](http://localhost:3000/rest)
+
+## Depanare
+
+Dacă întâmpinați vreo problemă, verificați [Depanare](/l/ro/developers/self-host/capabilities/troubleshooting) pentru soluții.
diff --git a/packages/twenty-docs/l/ro/developers/contribute/contribute.mdx b/packages/twenty-docs/l/ro/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..62d350f77c
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Prezentare generală
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/ro/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/ro/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..2c1b432e72
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: API-uri
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty a fost creat pentru a fi prietenos cu dezvoltatorii, oferind API-uri puternice care se adaptează la modelul dvs. de date personalizat. Oferim patru tipuri distincte de API-uri pentru a satisface diferite nevoi de integrare.
+
+## Developer-First Approach
+
+Twenty generates APIs specifically for your data model:
+
+* **Nu sunt necesare ID-uri lungi**: Utilizați direct numele obiectelor și câmpurilor în punctele finale
+* **Obiectele standard și personalizate tratate în mod egal**: Obiectele dvs. personalizate primesc același tratament API ca și cele încorporate
+* **Puncte finale dedicate**: Fiecare obiect și câmp primește propriul său punct final API
+* **Documentație personalizată**: Generată special pentru modelul de date al spațiului dvs. de lucru
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### API Core
+
+Accesibil prin `/rest/` sau `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Gestionați relațiile de înregistrări
+
+### API Metadata
+
+Accesibil prin `/rest/metadata/` sau `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Creați, modificați sau ștergeți obiecte și câmpuri
+* Configurați setările spațiului de lucru
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Format | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## Puncte Finale API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Autentificare
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Creați o cheie API
+
+1. Mergeți la **Setări → API-uri & Webhook-uri**
+2. Click **+ Create key**
+3. Configurați:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Faceți clic pe **Salvare**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Accesați **Setări → Roluri**
+2. Click on the role to assign
+3. Deschideți fila **Atribuire**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/ro/user-guide/permissions-access/capabilities/permissions) for details.
+
+### Gestionați cheile API
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Mergeți la **Setări → API-uri & Webhook-uri**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Operațiuni de grup
+
+Both REST and GraphQL support batch operations:
+
+* **Dimensiunea grupului**: Până la 60 de înregistrări pe cerere
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | Valoare |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/ro/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/ro/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..a050f23c98
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Cerințe
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+De aici puteți:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Autentificare
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Exemple:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Depanare
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/ro/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/ro/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..4590198269
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooks
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Creează Webhook
+
+1. Mergeți la **Setări → API-uri şi Webhooks → Webhooks**
+2. Faceți clic pe **+ Creează webhook**
+3. Enter your webhook URL (must be publicly accessible)
+4. Faceți clic pe **Salvare**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Administrează Webhooks
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Evenimente
+
+Twenty sends webhooks for these event types:
+
+| Eveniment | Exemplu |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Câmp | Descriere |
+| ----------------- | ------------------------------------------------ |
+| `eveniment` | What happened (e.g., `person.created`) |
+| `date` | The full record that was created/updated/deleted |
+| `marcaj temporal` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Validarea Webhook-ului
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Antet | Descriere |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Metodă | Direcție | Use Case |
+| ---------------------------- | -------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/ro/developers/extend/extend.mdx b/packages/twenty-docs/l/ro/developers/extend/extend.mdx
new file mode 100644
index 0000000000..143a3553cf
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Prezentare generală
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/ro/developers/introduction.mdx b/packages/twenty-docs/l/ro/developers/introduction.mdx
new file mode 100644
index 0000000000..0f8664e666
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/ro/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/ro/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..647def4af1
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Alte metode
+---
+
+
+ Acest document este întreținut de comunitate. Ar putea conține probleme.
+
+
+## Kubernetes prin Terraform și Manifeste
+
+Community-led documentation for Kubernetes deployment is available [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+Deplasați Twenty pe servere folosind Coolify. (imaginea oficială pe Coolify va fi disponibilă curând)
+
+[Coolify documentation](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Deplasați Twenty pe EasyPanel cu șablonul întreținut de comunitate mai jos.
+
+[Deploy on EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Deplasați Twenty pe servere cu Elest.io folosind link-ul mai jos.
+
+[Deploy on Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty pe Railway
+
+Deplasați Twenty pe Railway cu șablonul întreținut de comunitate mai jos.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty pe Sealos
+
+Deplasați Twenty pe Sealos cu șablonul întreținut de comunitate mai jos.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Altele
+
+Vă rugăm să deschideți un PR pentru a adăuga mai multe opțiuni de furnizori de cloud.
diff --git a/packages/twenty-docs/l/ro/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/ro/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..290a942ff7
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Click cu Docker Compose
+---
+
+
+ Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/ro/developers/contribute/capabilities/local-setup).
+
+
+## Prezentare generală
+
+Acest ghid oferă instrucțiuni pas cu pas pentru a instala și configura aplicația Twenty folosind Docker Compose. Scopul este de a face procesul direct și de a preveni capcanele comune care ar putea deteriora configurarea dvs.
+
+**Important:** Modificați numai setările menționate explicit în acest ghid. Modificarea altor configurații poate duce la probleme.
+
+Consultați documentația [Setup Environment Variables](/l/ro/developers/self-host/capabilities/setup) pentru configurare avansată. Toate variabilele de mediu trebuie declarate în fișierul docker-compose.yml la nivel de server și/sau de lucru, în funcție de variabilă.
+
+## Cerințe de Sistem
+
+* RAM: Asigurați-vă că mediul dvs. are cel puțin 2 GB de RAM. Memoria insuficientă poate provoca prăbușirea proceselor.
+* Docker & Docker Compose: Asigurați-vă că ambele sunt instalate și la zi.
+
+## Opțiunea 1: Script într-o singură linie
+
+Install the latest stable version of Twenty with a single command:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Pentru a instala o versiune sau ramură specifică:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Înlocuiți x.y.z cu numărul versiunii dorite.
+* Înlocuiți branch-name cu numele ramurii pe care doriți să o instalați.
+
+## Opțiunea 2: Pași manuali
+
+Urmați acești pași pentru o configurare manuală.
+
+### Pasul 1: Configurați Fișierul de Mediu
+
+1. **Creați Fișierul .env**
+
+ Copiați exemplul de fișier de mediu într-un fișier .env nou în directorul de lucru:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Generați Tokenuri Secrete**
+
+ Rulați următoarea comandă pentru a genera un șir unic aleatoriu:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Important:** Păstrați această valoare secretă / nu o împărtășiți.
+
+3. **Actualizați `.env`**
+
+ Înlocuiți valoarea substituentului în fișierul dvs. .env cu tokenul generat:
+
+ ```ini
+ APP_SECRET=first_random_string
+ ```
+
+4. **Setați Parola pentru Postgres**
+
+ Actualizați valoarea `PG_DATABASE_PASSWORD` în fișierul .env cu o parolă puternică fără caractere speciale.
+
+ ```ini
+ PG_DATABASE_PASSWORD=my_strong_password
+ ```
+
+### Pasul 2: Obțineți Fișierul Docker Compose
+
+Descărcați fișierul `docker-compose.yml` în directorul de lucru:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Pasul 3: Lansați Aplicația
+
+Start the Docker containers:
+
+```bash
+docker compose up -d
+```
+
+### Pasul 4: Accesați Aplicația
+
+Dacă găzduiți twentyCRM pe propriul computer, deschideți browserul și navigați la [http://localhost:3000](http://localhost:3000).
+
+If you host it on a server, check that the server is running and that everything is ok with
+
+```bash
+curl http://localhost:3000
+```
+
+## Configurație
+
+### Expuneți Twenty pentru Acces Extern
+
+Implicit, Twenty rulează pe `localhost` la portul `3000`. Pentru a-l accesa printr-un domeniu extern sau adresă IP, trebuie să configurați `SERVER_URL` în fișierul dvs. `.env`.
+
+#### Înțelegerea `SERVER_URL`
+
+* **Protocol:** Utilizați `http` sau `https`, în funcție de configurarea dvs.
+ * Utilizați `http` dacă nu ați configurat SSL.
+ * Utilizați `https` dacă aveți SSL configurat.
+* **Domeniu/IP:** Acesta este numele domeniului sau adresa IP unde aplicația dvs. este accesibilă.
+* **Port:** Includeți numărul portului dacă nu utilizați porturile implicite (`80` pentru `http`, `443` pentru `https`).
+
+### Cerințe SSL
+
+SSL (HTTPS) este necesar pentru funcționarea corespunzătoare a anumitor funcții ale browserului. Deși aceste funcții pot funcționa în timpul dezvoltării locale (deoarece browserele tratează localhost diferit), o configurare SSL corespunzătoare este necesară când găzduiți Twenty pe un domeniu obișnuit.
+
+De exemplu, API-ul pentru clipboard ar putea necesita un context securizat - unele funcții precum butoanele de copiere din aplicație ar putea să nu funcționeze fără HTTPS activat.
+
+Recomandăm cu tărie configurarea Twenty din spatele unui proxy revers cu terminare SSL pentru securitate și funcționalitate optimă.
+
+#### Configurarea `SERVER_URL`
+
+1. **Stabiliți Adresa dvs. de Acces**
+ * **Fără Proxy Revers (Acces Direct):**
+
+ Dacă accesați aplicația direct, fără un proxy revers:
+
+ ```ini
+ SERVER_URL=http://your-domain-or-ip:3000
+ ```
+
+ * **Cu Proxy Revers (Porturi Standard):**
+
+ Dacă utilizați un proxy revers precum Nginx sau Traefik și aveți configurat SSL:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip
+ ```
+
+ * **Cu Proxy Revers (Porturi Custom):**
+
+ Dacă utilizați porturi non-standard:
+
+ ```ini
+ SERVER_URL=https://your-domain-or-ip:custom-port
+ ```
+
+2. **Actualizați Fișierul `.env`**
+
+ Deschideți fișierul dvs. `.env` și actualizați `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://your-domain-or-ip:your-port
+ ```
+
+ **Exemple:**
+
+ * Acces direct fără SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Acces prin domeniu cu SSL:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **Reporniți Aplicația**
+
+ Pentru ca modificările să intre în vigoare, reporniți containerele Docker:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Considerații
+
+* **Configurarea Proxy-ului Invers:**
+
+ Asigurați-vă că proxy-ul invers transmite cererile către portul intern corect (`3000` în mod implicit). Configurați finalizarea SSL și toate headerele necesare.
+
+* **Setările Firewall-ului:**
+
+ Deschideți porturile necesare în firewall-ul dvs. pentru a permite accesul extern.
+
+* **Consistență:**
+
+ `SERVER_URL` trebuie să corespundă modului în care utilizatorii accesează aplicația dvs. în browserele lor.
+
+#### Persistență
+
+* **Volume de Date:**
+
+ Configurația Docker Compose folosește volume pentru a persista datele pentru baza de date și stocarea serverului.
+
+* **Mediile Fără Stare:**
+
+ Dacă se utilizează un mediu fără stare (de ex., anumite servicii de cloud), configurați stocarea externă pentru a persista datele.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Depanare
+
+Dacă întâmpinați vreo problemă, verificați [Depanare](/l/ro/developers/self-host/capabilities/troubleshooting) pentru soluții.
diff --git a/packages/twenty-docs/l/ro/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/ro/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..c48b17cde9
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: Configurare
+---
+
+# Configuration Management
+
+
+ **Prima instalare?** Urmați [ghidul de instalare Docker Compose](/l/ro/developers/self-host/capabilities/docker-compose) pentru a rula Twenty, apoi reveniți aici pentru configurare.
+
+
+Twenty oferă **două moduri de configurare** pentru a se potrivi nevoilor diferite de implementare:
+
+**Acces la panoul de administrare:** Doar utilizatorii cu privilegii de administrator (`canAccessFullAdminPanel: true`) pot accesa interfața de configurare.
+
+## 1. Configurare Panou Admin (Implicită)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # implicit
+```
+
+**Majoritatea configurărilor se fac prin UI** după instalare:
+
+1. Accesați instanța dumneavoastră Twenty (de obicei `http://localhost:3000`)
+2. Mergeți la **Setări / Panou Admin / Variabile de Configurare**
+3. Configurați integrările, e-mailul, stocarea și multe altele
+4. Schimbările intră în vigoare imediat (în termen de 15 secunde pentru implementări cu mai multe containere)
+
+
+ **Implementări Multi-Container:** Când utilizați configurarea bazei de date (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), atât serverul cât și containerele worker citesc din aceeași bază de date. Modificările din panoul de administrare afectează ambele automat, eliminând necesitatea duplicării variabilelor de mediu între containere (cu excepția variabilelor de infrastructură).
+
+
+**Ce puteți configura prin panoul de administrare:**
+
+* **Autentificare** - OAuth Google/Microsoft, setări parole
+* **E-mail** - setări SMTP, șabloane, verificare
+* **Stocare** - configurație S3, căi stocare locală
+* **Integrări** - Gmail, Google Calendar, servicii Microsoft
+* **Workflow & Rate Limiting** - Execution limits, API throttling
+* **Și multe altele...**
+
+
+
+
+ Fiecare variabilă este documentată cu descrieri în panoul dvs. de administrare la **Setări → Panou Admin → Variabile de Configurare**.
+ Unele setări de infrastructură, cum ar fi conexiunile la baze de date (`PG_DATABASE_URL`), URL-urile serverului (`SERVER_URL`), și secretele aplicației (`APP_SECRET`) pot fi configurate doar prin fișierul `.env`.
+
+ [Referință tehnică completă →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Configurare Doar Mediu
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Toate configurațiile gestionate prin fișiere `.env`:**
+
+1. Setați `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` în fișierul dvs. `.env`
+2. Adăugați toate variabilele de configurare în fișierul dvs. `.env`
+3. Reporniți containerele pentru ca schimbările să aibă efect
+4. Panoul de administrare va afișa valorile curente, dar nu le poate modifica
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Integrare Gmail & Google Calendar
+
+### Creați Proiect Google Cloud
+
+1. Mergeți la [Google Cloud Console](https://console.cloud.google.com/)
+2. Creați un proiect nou sau selectați unul existent
+3. Activați aceste API-uri:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### Configurați OAuth
+
+1. Mergeți la [Credentials](https://console.cloud.google.com/apis/credentials)
+2. Creați Client ID OAuth 2.0
+3. Adăugați aceste URI-uri de redirecționare:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Configurați în Twenty
+
+1. Mergeți la **Setări → Panou Admin → Variabile de Configurare**
+2. Găsiți secțiunea **Autentificare Google**
+3. Setați aceste variabile:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Mod doar pentru mediu:** Dacă setați `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, adăugați aceste variabile în fișierul dvs. `.env` în schimb.
+
+
+**Domenii necesare** (configurate automat):
+[Consultați codul sursă relevant](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Dacă aplicația dvs. este în modul de test
+
+Dacă aplicația dvs. este în modul de test, va trebui să adăugați utilizatori de test în proiectul dvs.
+
+În [ecranul de consimțământ OAuth](https://console.cloud.google.com/apis/credentials/consent), adăugați utilizatorii dvs. de test în secțiunea "Utilizatori de test".
+
+## Integrare Microsoft 365
+
+
+ Utilizatorii trebuie să aibă un [Licență Microsoft 365](https://admin.microsoft.com/Adminportal/Home) pentru a putea utiliza API-ul Calendar și Mesagerie. Nu vor putea sincroniza contul lor pe Twenty fără una.
+
+
+### Creați un proiect în Microsoft Azure
+
+Va trebui să creați un proiect în [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) și să obțineți acreditările.
+
+### Activați API-urile
+
+În Microsoft Azure Console activați următoarele API-uri în "Permisiuni":
+
+* Graph Microsoft: Mail.ReadWrite
+* Graph Microsoft: Mail.Send
+* Graph Microsoft: Calendars.Read
+* Graph Microsoft: User.Read
+* Graph Microsoft: openid
+* Graph Microsoft: email
+* Graph Microsoft: profile
+* Graph Microsoft: offline_access
+
+Notă: "Mail.ReadWrite" și "Mail.Send" sunt obligatorii doar dacă doriți să trimiteți e-mailuri utilizând acțiunile noastre de flux de lucru. Puteți utiliza "Mail.Read" dacă doriți doar să primiți e-mailuri.
+
+### URIs de redirecționare autorizate
+
+Trebuie să adăugați următoarele URI-uri de redirecționare în proiectul dvs.:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Configurați în Twenty
+
+1. Mergeți la **Setări → Panou Admin → Variabile de Configurare**
+2. Găsiți secțiunea **Autentificare Microsoft**
+3. Setați aceste variabile:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Mod doar pentru mediu:** Dacă setați `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, adăugați aceste variabile în fișierul dvs. `.env` în schimb.
+
+
+### Configure scopes
+
+[Consultați codul sursă relevant](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'email'
+* 'profil'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Dacă aplicația dvs. este în modul de test
+
+Dacă aplicația dvs. este în modul de test, va trebui să adăugați utilizatori de test în proiectul dvs.
+
+Adăugați utilizatorii de test în secțiunea "Utilizatori și grupuri".
+
+## Background Jobs for Calendar & Messaging
+
+După configurarea integrărilor Gmail, Google Calendar, sau Microsoft 365, trebuie să porniți joburile de fundal care sincronizează datele.
+
+Înregistrați următoarele joburi recurente în containerul dvs. worker:
+
+```bash
+# from your worker container
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## Configurare Email
+
+1. Mergeți la **Setări → Panou Admin → Variabile de Configurare**
+2. Găsiți secțiunea **Email**
+3. Configurați setările dvs. SMTP:
+
+
+
+ Va trebui să provisionați o [Parolă de Aplicație](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ **smtp4dev** este un server SMTP fals pentru dezvoltare și testare.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** este un server SMTP fals pentru dezvoltare și testare.
+
+ * Rulați imaginea smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Accesați interfața smtp4dev aici: [http://localhost:8090](http://localhost:8090)
+ * Setați următoarele variabile:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Mod doar pentru mediu:** Dacă setați `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, adăugați aceste variabile în fișierul dvs. `.env` în schimb.
+
diff --git a/packages/twenty-docs/l/ro/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/ro/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..066c3b96b8
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,227 @@
+---
+title: Depanare
+---
+
+## Depanare
+
+Dacă întâmpinați orice problemă în timp ce configurați mediul pentru dezvoltare, actualizați instanța dvs. sau găzduiți pe cont propriu,
+iată câteva soluții la problemele comune.
+
+### Găzduire proprie
+
+#### Prima instalare rezultă în `autentificare parola eșuată pentru utilizatorul "postgres"`
+
+🚨 **IMPORTANT: Această soluție este DOAR pentru instalările noi** 🚨
+Dacă aveți deja o instanță Twenty cu date de producție, **NU** urmați acești pași deoarece vor șterge permanent baza dvs. de date!
+
+În timp ce instalați Twenty pentru prima dată, este posibil să doriți să schimbați parola implicită a bazei de date.
+Parola pe care o setați în timpul primei instalări devine stocată permanent în volumul bazei de date. Dacă mai târziu încercați să schimbați această parolă în configurația dvs. fără a elimina vechiul volum, veți obține erori de autentificare deoarece baza de date folosește încă parola originală.
+
+⚠️ AVERTIZARE: Următorii pași vor ȘTERGE PERMANENT toate datele din baza de date! ⚠️
+Continuați doar dacă aceasta este o instalare recentă fără date importante.
+
+Pentru a actualiza `PG_DATABASE_PASSWORD` trebuie să:
+
+```sh
+# Actualizați PG_DATABASE_PASSWORD în .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR line breaks found [Windows]
+
+Acest lucru se datorează caracterelor de pauză de linie ale Windows și configurației git. Încercați să rulați:
+
+```
+git config --global core.autocrlf false
+```
+
+Apoi ștergeți depozitul și clonați-l din nou.
+
+#### Schema de metadate lipsă
+
+În timpul instalării Twenty, trebuie să aprovizionați baza de date postgres cu schemele, extensiile și utilizatorii corecți.
+Dacă reușiți să executați această aprovizionare, ar trebui să aveți schemele `default` și `metadata` în baza dvs. de date.
+Dacă nu, asigurați-vă că nu aveți mai mult de o instanță postgres funcționând pe computerul dvs.
+
+#### Nu se poate găsi modulul 'twenty-emails' sau declarațiile de tip corespunzătoare.
+
+Trebuie să construiți pachetul `twenty-emails` înainte de a rula inițializarea bazei de date cu `npx nx run twenty-emails:build`
+
+#### Pachetul twenty-x lipsă
+
+Asigurați-vă că rulați yarn în directorul rădăcină și apoi rulați `npx nx server:dev twenty-server`. Dacă acest lucru nu funcționează, încercați să construiți manual pachetul lipsă.
+
+#### Lint la salvare nu funcționează
+
+Acesta ar trebui să funcționeze implicit cu extensia eslint instalată. Dacă acest lucru nu funcționează, încercați să adăugați acest lucru la setarea vscode (în sfera containerului dev):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### În timpul rulării `npx nx start` sau `npx nx start twenty-front`, apare o eroare Out of memory
+
+În `packages/twenty-front/.env` decomentați `VITE_DISABLE_TYPESCRIPT_CHECKER=true` și `VITE_DISABLE_ESLINT_CHECKER=true` pentru a dezactiva verificările de fundal, astfel reducând cantitatea de RAM necesară.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. De exemplu, dacă lucrați la server, rulați doar `npx nx worker twenty-server`
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`EROARE FATALĂ: Mark-compacts ineficiente lângă limita heap-ului Alocarea a eșuat - JavaScript heap out of memory`
+
+Soluția este să executați comanda de mai jos în terminal sau să o adăugați în profilul .bashrc pentru a se seta automat:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+Flag-ul --max-old-space-size=8192 setează o limită superioară de 8 GB pentru heap-ul Node.js; utilizarea se adaptează la cerințele aplicației.
+Referință: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. La Twenty, am observat că unele extensii VScode consumau multă RAM, așa că le dezactivăm temporar.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### În timp ce rulați `npx nx start` apar [0] și [1] ciudate în jurnale
+
+Acest lucru este de așteptat deoarece comanda `npx nx start` rulează mai multe comenzi în fundal
+
+#### Nu sunt trimise e-mailuri
+
+De cele mai multe ori, este deoarece `worker` nu rulează în fundal. Încercați să rulați
+
+```
+npx nx worker twenty-server
+```
+
+#### Nu pot conecta contul meu Microsoft 365
+
+De cele mai multe ori, este deoarece administratorul dvs. nu a activat licența Microsoft 365 pentru contul dvs. Verificați [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Dacă aveți un cod de eroare `AADSTS50020`, probabil înseamnă că utilizați un cont personal Microsoft. Aceasta nu este încă suportată. Mai multe informații [aici](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### În timp ce rulează `yarn` apar avertismente în consolă
+
+Avertismentele informă despre tragerea de dependențe suplimentare care nu sunt specificate explicit în `package.json`, așa că atâta timp cât nu apare o eroare de întrerupere, totul ar trebui să funcționeze conform așteptărilor.
+
+#### Când utilizatorul accesează pagina de autentificare, apare o eroare despre utilizatorul neautorizat care încearcă să acceseze spațiul de lucru în jurnale
+
+Acest lucru este așteptat deoarece utilizatorul este neautorizat când este deconectat, deoarece identitatea sa nu este verificată.
+
+#### Cum să verificați dacă worker-ul dvs. rulează?
+
+* Accesați [webhook-test.com](https://webhook-test.com/) și copiați **Your Unique Webhook URL**.
+
+
+
+
+
+* Deschideți aplicația Twenty, navigați la `/settings` și activați comutatorul **Avansat** în colțul din stânga jos al ecranului.
+* Creați un nou webhook.
+* Lipiți **Your Unique Webhook URL** în câmpul **Endpoint Url** din Twenty. Setați **Filtrele** pe `Companii` și `Create`.
+
+
+
+
+
+* Accesați `/objects/companies` și creați un nou registru de companie.
+* Întoarceți-vă la [webhook-test.com](https://webhook-test.com/) și verificați dacă a fost primit un nou **POST request**.
+
+
+
+
+
+* Dacă este primit un **POST request**, worker-ul dvs. rulează cu succes. În caz contrar, trebuie să depanați worker-ul dvs.
+
+#### Front-end-ul nu pornește și returnează eroarea TS5042: Opțiunea 'project' nu poate fi amestecată cu fișiere sursă pe linia de comandă
+
+Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Panoul de administrare nu este accesibil
+
+Rulați `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'tine@domeniultău.com';` în containerul de baze de date pentru a obține acces la panoul de administrare.
+
+### Docker compose cu un singur click
+
+#### Nu se poate conecta
+
+Dacă nu vă puteți conecta după configurare:
+
+1. Rulați următoarele comenzi:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Reporniți containerele Docker:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Rețineți că comenzile database:reset vor șterge complet baza dvs. de date și o vor recrea de la zero.
+
+#### Probleme de conexiune în spatele unui proxy invers
+
+Dacă rulați Twenty în spatele unui proxy invers și întâmpinați probleme de conexiune:
+
+1. **Verificați SERVER_URL:**
+
+ Asigurați-vă că `SERVER_URL` din fișierul dvs. `.env` corespunde cu URL-ul dvs. de acces extern, inclusiv `https` dacă SSL este activat.
+
+2. **Verificați Setările Proxy-ului Invers:**
+
+ * Confirmați că proxy-ul invers transmite corect cererile către serverul Twenty.
+ * Asigurați-vă că headerele precum `X-Forwarded-For` și `X-Forwarded-Proto` sunt setate corect.
+
+3. **Reporniți Serviciile:**
+
+ După ce faceți schimbări, reporniți atât proxy-ul invers, cât și containerele Twenty.
+
+#### Eroare la încărcarea unei imagini - permisiune refuzată
+
+Schimbarea proprietății folderului de date pe gazdă de la root la un alt utilizator și grup rezolvă această problemă.
+
+## Obținerea de ajutor
+
+Dacă întâmpinați probleme care nu sunt acoperite în acest ghid:
+
+* Verificați jurnalele:
+
+ Vizualizați jurnalele containerului pentru mesaje de eroare:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Suport Comunitar:
+
+ Contactați [comunitatea Twenty](https://github.com/twentyhq/twenty/issues) sau [canalele de suport](https://discord.gg/cx5n4Jzs57) pentru asistență.
diff --git a/packages/twenty-docs/l/ro/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/ro/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..df6cdad387
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Ghid de actualizare
+---
+
+## General guidelines
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Dacă ați utilizat Docker Compose, urmați acești pași:
+
+1. Într-un terminal, pe găzduitorul unde rulează Twenty, opriți Twenty: `docker compose down`.
+
+2. Actualizați versiunea modificând valoarea `TAG` din fișierul .env în apropierea docker-compose-ului. ( We recommend consuming `major.minor` version such as `v0.53` )
+
+3. Repuneți Twenty în funcțiune cu comanda `docker compose up -d`.
+
+Dacă doriți să actualizați instanța dvs. cu câteva versiuni, de exemplu de la v0.33.0 la v0.35.0, trebuie să actualizați instanța dvs. secvențial, în acest exemplu de la v0.33.0 la v0.34.0, apoi de la v0.34.0 la v0.35.0.
+
+**Asigurați-vă că după fiecare actualizare de versiune aveți un backup necorupt.**
+
+## Pași de actualizare specifici versiunii
+
+## v1.0
+
+Salut Twenty v1.0! 🎉
+
+## v0.60
+
+### Îmbunătățiri de performanță
+
+Toate interacțiunile cu API-ul de metadata au fost optimizate pentru o performanță mai bună, în special pentru manipularea metadata-ului obiectelor și operațiile de creare a spațiilor de lucru.
+
+Am refăcut strategia de caching pentru a prioritiza accesările din cache în detrimentul interogărilor către baza de date, îmbunătățind semnificativ performanța operațiunilor API-ului de metadata.
+
+Dacă întâmpinați probleme de runtime după actualizare, s-ar putea să fie nevoie să goliți cache-ul pentru a vă asigura că este sincronizat cu ultimele schimbări. Rulați această comandă în containerul dvs. twenty-server:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.55
+
+Nu este necesar să mai rulați nici o comandă, noua imagine se va ocupa automat de rularea tuturor migrațiilor necesare.
+
+### Eroare `Utilizatorul nu are permisiune`
+
+Dacă întâmpinați erori de autorizare la majoritatea cererilor după actualizare, s-ar putea să fie nevoie să goliți cache-ul pentru a recalcula permisiunile actualizate.
+
+În containerul dvs. `twenty-server`, rulați:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Această problemă este specifică versiunii Twenty și nu ar trebui să fie necesară pentru actualizările viitoare.
+
+### v0.54
+
+Începând cu versiunea `0.53`, nu sunt necesare acțiuni manuale.
+
+#### Depășirea schemelor de metadata
+
+Am combinat schema `metadata` cu cea `core` pentru a simplifica extragerea datelor din `TypeORM`.
+Am îmbinat pasul de comandă `migrate` în cadrul comenzii `upgrade`. Nu recomandăm rularea manuală a comenzii `migrate` în oricare dintre containerele dvs. server/worker.
+
+### Începând cu v0.53
+
+Începând cu `0.53`, actualizarea se face programatic în cadrul `DockerFile`, ceea ce înseamnă că de acum nu ar trebui să mai fie necesar să rulați manual nici o comandă.
+
+Asigurați-vă că vă actualizați instanța secvențial, fără a sări peste nicio versiune majoră (de exemplu, `0.43.3` to `0.44.0` este permis, dar `0.43.1` to `0.45.0` nu este), altfel ar putea duce la desincronizare a versiunii spațiului de lucru, care ar putea rezulta în erori de runtime și funcționalități lipsă.
+
+Pentru a verifica dacă un spațiu de lucru a fost migrat corect, puteți verifica versiunea acestuia în baza de date în tabelul `core.workspace`.
+
+Ar trebui să fie mereu în intervalul versiunii Twenty curente `major.minor`, puteți vizualiza versiunea instanței dvs. în panoul de administrare (la `/settings/admin-panel`, accesibil dacă utilizatorul dvs. are proprietatea `canAccessFullAdminPanel` setată la adevărat în baza de date) sau executând `echo $APP_VERSION` în containerul dvs. `twenty-server`.
+
+Pentru a remedia o desincronizare a versiunii spațiului de lucru, va trebui să actualizați din versiunea corespunzătoare Twenty urmând ghidul de actualizare relevant secvențial și așa mai departe până când ajungeți la versiunea dorită.
+
+#### Eliminarea `auditLog`
+
+Am eliminat obiectul standard auditLog, ceea ce înseamnă că dimensiunea backup-ului dvs. ar putea fi redusă semnificativ după această migrație.
+
+### v0.51 la v0.52
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.52
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Am un spațiu de lucru blocat în versiunea între `0.52.0` și `0.52.6`.
+
+Din păcate, `0.52.0` și `0.52.6` au fost complet eliminate din dockerHub.
+Va trebui să actualizați manual versiunea spațiului de lucru la `0.51.0` în baza de date și să actualizați utilizând versiunea twenty `0.52.11` urmând ghidul de actualizare de mai sus.
+
+### v0.50 la v0.51
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.51
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 la v0.50.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.50.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Mutarea docker-compose.yml
+
+Această versiune include o mutație `docker-compose.yml` pentru a oferi serviciului `worker` acces la volumul `server-local-data`.
+Vă rugăm să actualizați docker-compose.yml-ul dvs. local cu [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 la v0.44.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.44.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 la v0.43.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.43.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+În această versiune, am trecut și la imaginea postgres:16 în docker-compose.yml.
+
+#### (Opțiunea 1) Migrarea bazei de date
+
+Păstrarea imaginii existente postgres-spilo este adecvată, însă va trebui să congelați versiunea în docker-compose.yml la 0.43.0.
+
+#### (Opțiunea 2) Migrarea bazei de date
+
+Dacă doriți să migrați baza de date la noua imagine postgres:16, urmați acești pași:
+
+1. Copieți baza de date din vechiul container postgres-spilo
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Asigurați-vă că fișierul de backup nu este gol.
+
+2. Actualizați docker-compose.yml-ul pentru a utiliza imaginea postgres:16 din fișierul [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml).
+
+3. Restaurați baza de date în noul container postgres:16
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 la v0.42.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.42.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Variabile de mediu**
+
+* Eliminat: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Adăugat: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 la v0.41.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.41.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Variabile de mediu**
+
+* Eliminat: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 la v0.40.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.40.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Variabile de mediu**
+
+* Adăugat: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 la v0.35.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.35.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele de core și metadata)
+Comanda `yarn command:prod upgrade-0.35` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+**Variabile de mediu**
+
+* Am înlocuit `ENABLE_DB_MIGRATIONS` cu `DISABLE_DB_MIGRATIONS` (valoarea standard este acum `false`, probabil nu va trebui să setați nimic)
+
+### v0.33.0 la v0.34.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.34.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.34` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+**Variabile de mediu**
+
+* Eliminat: `FRONT_BASE_URL`
+* Adăugat: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Am actualizat modul în care gestionăm URL-ul frontend.
+Acum puteți seta URL-ul frontend utilizând variabilele `FRONT_DOMAIN`, `FRONT_PROTOCOL` și `FRONT_PORT`.
+Dacă FRONT_DOMAIN nu este setat, URL-ul frontend va reveni la `SERVER_URL`.
+
+### v0.32.0 la v0.33.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.33.0
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+Comanda `yarn command:prod cache:flush` va goli cache-ul Redis.
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.33` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+Începând cu această versiune, imaginea twenty-postgres pentru DB a devenit depășită și se utilizează twenty-postgres-spilo.
+Dacă doriți să păstrați utilizarea imaginii twenty-postgres, înlocuiți pur și simplu `twentycrm/twenty-postgres:${TAG}` cu `twentycrm/twenty-postgres` în docker-compose.yml.
+
+### v0.31.0 la v0.32.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.32.0
+
+**Migrarea schemelor și datelor**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.32` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+**Variabile de mediu**
+
+Am actualizat modul în care gestionăm conexiunea Redis.
+
+* Eliminat: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Adăugat: `REDIS_URL`
+
+Actualizați fișierul `.env` pentru a utiliza noua variabilă `REDIS_URL` în locul parametrilor individuali de conexiune Redis.
+
+Am simplificat, de asemenea, modul în care gestionăm jetoanele JWT.
+
+* Eliminat: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Adăugat: `APP_SECRET`
+
+Actualizați fișierul `.env` pentru a utiliza noua variabilă `APP_SECRET` în locul secretelor individuale ale tokenurilor (puteți folosi același secret ca și înainte sau generați unul nou aleator).
+
+**Cont conectat**
+
+Dacă utilizați un cont conectat pentru a sincroniza emailurile și calendarele Google, va trebui să activați [People API](https://developers.google.com/people) în consola dvs. Google Admin.
+
+### v0.30.0 la v0.31.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.31.0
+
+**Migrarea schemelor și datelor**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.31` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+### v0.24.0 la v0.30.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.30.0
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Am actualizat [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) pentru a reflecta acest lucru.
+Asigurați-vă că vă actualizați configurația și actualizați variabilele de mediu corespunzător:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Migrarea schemelor și datelor**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.30` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+### v0.23.0 la v0.24.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.24.0
+
+Rulați următoarele comenzi:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe structura bazei de date (schemele core și metadata)
+Comanda `yarn command:prod upgrade-0.24` se ocupă de migrația datelor pentru toate spațiile de lucru.
+
+### v0.22.0 la v0.23.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.23.0
+
+Rulați următoarele comenzi:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe baza de date.
+Comanda `yarn command:prod upgrade-0.23` se ocupă de migrația datelor, inclusiv transferul activităților către sarcini/note.
+
+### v0.21.0 la v0.22.0
+
+Actualizați instanța Twenty pentru a utiliza imaginea v0.22.0
+
+Rulați următoarele comenzi:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+Comanda `yarn database:migrate:prod` va aplica migrațiile pe baza de date.
+Comanda `yarn command:prod workspace:sync-metadata -f` va sincroniza definiția obiectelor standard cu tabelele de metadate și va aplica migrațiile necesare în spațiile de lucru existente.
+Comanda `yarn command:prod upgrade-0.22` va aplica transformări specifice de date pentru a se adapta la noile opțiuni defaultRequestInstrumentationOptions ale obiectului.
diff --git a/packages/twenty-docs/l/ro/developers/self-host/self-host.mdx b/packages/twenty-docs/l/ro/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..8c04604b0c
--- /dev/null
+++ b/packages/twenty-docs/l/ro/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Prezentare generală
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/ro/navigation.json b/packages/twenty-docs/l/ro/navigation.json
index 753fb5ad02..9519c7b319 100644
--- a/packages/twenty-docs/l/ro/navigation.json
+++ b/packages/twenty-docs/l/ro/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Ghid de utilizator",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Noțiuni de bază"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Model de date"
+ "label": "Model de date",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "Elemente esențiale CRM"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Vizualizări"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Fluxuri de lucru"
+ "label": "Fluxuri de lucru",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Ai nevoie de mai mult ajutor"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Colaborare"
+ "ai": {
+ "label": "AI",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integrări & API"
+ "viewsPipelines": {
+ "label": "Vizualizări și fluxuri",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Raportare"
+ "dashboards": {
+ "label": "Tablouri de Bord",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Facturare",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Setări"
- },
- "pricing": {
- "label": "Prețuri"
- },
- "resources": {
- "label": "Resurse"
+ "label": "Setări",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Dezvoltatori"
},
- "devGettingStarted": {
- "label": "Noțiuni de bază",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Găzduire proprie"
- },
- "apiAndWebhooks": {
- "label": "API și Webhooks"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Contribuții",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Dezvoltare Frontend",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Frontend Development",
"groups": {
- "display": {
- "label": "Afișare"
- },
- "feedback": {
- "label": "Feedback"
- },
- "input": {
- "label": "Intrare"
- },
- "navigation": {
- "label": "Navigation"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Afișare"
+ },
+ "feedback": {
+ "label": "Feedback"
+ },
+ "input": {
+ "label": "Intrare"
+ },
+ "navigation": {
+ "label": "Navigare"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Dezvoltare Backend"
}
}
- },
- "backendDevelopment": {
- "label": "Dezvoltare Backend"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..49797107c3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: Sfat aplicație
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Un mesaj scurt care afișează informații suplimentare atunci când utilizatorul interacționează cu un element.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Customer Insights
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | șir | Clasă CSS opțională pentru stilizare suplimentară |
+ | Selectează ancora | Selector CSS | Selector pentru ancora tooltipului (elementul care activează tooltipul) |
+ | conținut | șir | Conținutul pe care doriți să îl afișați în interiorul tooltipului |
+ | delayHide | număr | Întârzierea în secunde înainte de a ascunde tooltipul după ce cursorul părăsește ancora |
+ | deplasare | număr | Deplasarea în pixeli pentru poziționarea tooltipului |
+ | noArrow | boolean | Dacă este `adevărat`, ascunde săgeata de pe tooltip |
+ | isOpen | boolean | Dacă este `adevărat`, tooltipul este deschis în mod implicit |
+ | loc | șir `PlacesType` din `react-tooltip` | Specifică plasarea tooltipului. Valorile includ `jos`, `stânga`, `dreapta`, `sus`, `sus-start`, `sus-end`, `dreapta-start`, `dreapta-end`, `jos-start`, `jos-end`, `stânga-start`, și `stânga-end` |
+ | positionStrategy | șir `PositionStrategy` din `react-tooltip` | Strategia de poziționare pentru tooltip. Are două valori: `absolut` și `fix` |
+
+
+
+## Overflowing Text with Tooltip
+
+Gestionează textul redundant și afișează un tooltip când textul depășește.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | --- | ----------------------------------------------------------------- |
+ | text | șir | Conținutul pe care doriți să îl afișați în zona de text redundant |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..45d04442fc
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Bifă
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Reprezintă o acțiune reușită sau finalizată.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Extinde `React.ComponentPropsWithoutRef<'div'>` și acceptă toate proprietățile unui element `div` obișnuit.
+
+
+
+## Bifă Animată
+
+Reprezintă o pictogramă de bifă cu caracteristica suplimentară de animație.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ----------- | ------- | ------------------------------------------- | ------------ |
+ | isAnimating | boolean | Controls whether the checkmark is animating | fals |
+ | culoare | șir | Culoarea bifei | |
+ | durată | număr | Durata animației în secunde | 0,5 secunde |
+ | dimensiune | număr | Dimensiunea bifei | 28 de pixeli |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..21fe4c7d14
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Chip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Un element vizual pe care îl puteți folosi ca un container clicabil sau non-clicabil, cu o etichetă, componente opționale la stânga și dreapta și diverse opțiuni de stil pentru a afișa etichete și tag-uri.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------ | -------------------------- | -------------------------------------------------------------------------------------------- |
+ | linkToEntity | șir | Legătura către entitate |
+ | entitateId | șir | Identificatorul unic pentru entitate |
+ | nume | șir | Numele entității |
+ | pictureUrl | șir | imagine a lui s |
+ | tipAvatar | Tip Avatar | Tipul de avatar pe care doriți să îl afișați. Has two options: `rounded` and `squared` |
+ | variant | `Enumul EntityChipVariant` | Variant of the entity chip you want to display. Are două opțiuni: `regulat` și `transparent` |
+ | IconaStânga | ComponentaIcoana | O componentă React care reprezintă o icona. Afișată pe partea stângă a fișei |
+
+
+
+## Exemple
+
+### Transparent Disabled Chip
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Disabled Chip with Tooltip
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Entity Chip
+
+A Chip-like element to display information about an entity.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------ | -------------------------- | -------------------------------------------------------------------------------------------- |
+ | linkToEntity | șir | Legătura către entitate |
+ | entitateId | șir | Identificatorul unic pentru entitate |
+ | nume | șir | Numele entității |
+ | pictureUrl | șir | imagine a lui s |
+ | tipAvatar | Tip Avatar | Tipul de avatar pe care doriți să îl afișați. Has two options: `rounded` and `squared` |
+ | variant | `Enumul EntityChipVariant` | Variant of the entity chip you want to display. Are două opțiuni: `regulat` și `transparent` |
+ | IconaStânga | ComponentaIcoana | O componentă React care reprezintă o icona. Afișată pe partea stângă a fișei |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..fccc5b806f
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: Pictograme
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+O listă de pictograme utilizate în toată aplicația noastră.
+
+## Pictograme Tabler
+
+Folosim pictograme Tabler pentru React în toată aplicația.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ You can import each icon as a component. Iată un exemplu:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ----------- | ----- | ------------------------------------------ | ------------ |
+ | dimensiune | număr | Înălțimea și lățimea pictogramei în pixeli | 24 |
+ | culoare | șir | Culoarea pictogramelor | currentColor |
+ | trăsatura | număr | Grosimea trăsăturii pictogramei în pixeli | 2 |
+
+
+
+## Pictograme personalizate
+
+Pe lângă pictogramele Tabler, aplicația utilizează și alte pictograme personalizate.
+
+### Pictogramă Agendă
+
+Afișează o pictogramă de agendă.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ----------- | ----- | ------------------------------------------ | -------- |
+ | dimensiune | număr | Înălțimea și lățimea pictogramei în pixeli | 24 |
+ | trăsatura | număr | Grosimea trăsăturii pictogramei în pixeli | 2 |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..d7f894218c
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+O insignă mică sau "pastilă" pentru a indica faptul că ceva este pe cale să vină în curând.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/ro/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/ro/twenty-ui/display/tag.mdx
new file mode 100644
index 0000000000..966f14e2d3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/display/tag.mdx
@@ -0,0 +1,38 @@
+---
+title: Etichetă
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+Componentă pentru a categoriza vizual sau a eticheta conținutul.
+
+
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
+ | className | șir | Nume opțional pentru stilizare suplimentară |
+ | culoare | șir | Culoarea etichetei. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` |
+ | text | șir | Conținutul etichetei |
+ | onClick | funcție | Funcție opțională apelată când un utilizator face clic pe etichetă |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/block-editor.mdx
index 6cefde8e80..65e568b213 100644
--- a/packages/twenty-docs/l/ro/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
Folosește un editor de texte îmbogățit, bazat pe blocuri, de la [BlockNote](https://www.blocknotejs.org/) pentru a permite utilizatorilor să editeze și să vizualizeze blocuri de conținut.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| Proprietăți | Tip | Descriere |
-| ----------- | ----------------- | ----------------------------------------------- |
-| editor | `BlockNoteEditor` | Instanța sau configurarea editorului de blocuri |
-
-
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ----------------- | ----------------------------------------------- |
+ | editor | `BlockNoteEditor` | Instanța sau configurarea editorului de blocuri |
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..e660c77e39
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Butoane
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+O listă de butoane și grupuri de butoane utilizate în întreaga aplicație.
+
+## Buton
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | --------------------- | ----------------------------------------------------------------------------------------------------------- |
+ | numeClasa | șir | Nume de clasă opțional pentru stilizare suplimentară |
+ | Pictogramă | `React.ComponentType` | Un component de pictogramă opțional care este afișat în cadrul butonului |
+ | titlu | șir | Conținutul text al butonului |
+ | lățimeCompletă | boolean | Definește dacă butonul ar trebui să se extindă pe toată lățimea containerului său |
+ | variantă | șir | Varianta stilului vizual al butonului. Opțiunile includ `primar`, `secundar` și `terțiar` |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` |
+ | poziție | șir | Poziția butonului în raport cu frații săi. Opțiunile includ: `independent`, `stânga`, `dreapta` și `mijloc` |
+ | accent | șir | Culoarea accentului butonului. Opțiunile includ: `implicit`, `albastru` și `pericol` |
+ | în curând | boolean | Indică dacă butonul este marcat ca "în curând" (de exemplu, pentru funcționalități viitoare) |
+ | dezactivat | boolean | Specifies whether the button is disabled or not |
+ | focalizare | boolean | Determină dacă butonul are focalizare |
+ | laClick | funcție | O funcție de apel de întoarcere care se declanșează când utilizatorul face clic pe buton |
+
+
+
+## Grup de Butoane
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | --------- | -------------------------------------------------------------------------------------------------------------- |
+ | variantă | șir | Varianta stilului vizual al butoanelor din cadrul grupului. Opțiunile includ `primar`, `secundar` și `terțiar` |
+ | dimensiune | șir | Dimensiunea butoanelor din cadrul grupului. Are două opțiuni: `mediu` și `mic` |
+ | accent | șir | Culoarea accentului butoanelor din cadrul grupului. Opțiunile includ `implicit`, `albastru` și `pericol` |
+ | numeClasa | șir | Nume de clasă opțional pentru stilizare suplimentară |
+ | copii | ReactNode | O matrice de elemente React care reprezintă butoanele individuale din cadrul grupului |
+
+
+
+## Buton Plutitor
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | --------------------- | --------------------------------------------------------------------------------------------------- |
+ | numeClasa | șir | Nume opțional pentru stilizare suplimentară |
+ | Pictogramă | `React.ComponentType` | O componentă opțională de pictogramă afișată în cadrul butonului |
+ | titlu | șir | Conținutul textului butonului |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` |
+ | poziție | șir | Poziția butonului în raport cu frații săi. Options include: `standalone`, `left`, `middle`, `right` |
+ | applyShadow | boolean | Determines whether to apply shadow to a button |
+ | applyBlur | boolean | Determines whether to apply a blur effect to the button |
+ | dezactivat | boolean | Determină dacă butonul este dezactivat |
+ | focalizare | boolean | Indică dacă butonul este focusat |
+
+
+
+## Floating Button Group
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ----------- | --------- | ------------------------------------------------------------------------------------- | -------- |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` | mic |
+ | copii | ReactNode | O matrice de elemente React care reprezintă butoanele individuale din cadrul grupului | |
+
+
+
+## Buton Pictogramă Plutitor
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | --------------------- | ----------------------------------------------------------------------------------------------------------- |
+ | numeClasa | șir | Nume opțional pentru stilizare suplimentară |
+ | Pictogramă | `React.ComponentType` | O componentă opțională de pictogramă afișată în cadrul butonului |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` |
+ | poziție | șir | Poziția butonului în raport cu frații săi. Opțiunile includ: `independent`, `stânga`, `dreapta` și `mijloc` |
+ | applyShadow | boolean | Determines whether to apply shadow to a button |
+ | applyBlur | boolean | Determines whether to apply a blur effect to the button |
+ | dezactivat | boolean | Determină dacă butonul este dezactivat |
+ | focalizare | boolean | Indică dacă butonul este focusat |
+ | laClick | funcție | O funcție callback care se declanșează când utilizatorul face click pe buton |
+ | esteActiv | boolean | Determină dacă butonul este în stare activă |
+
+
+
+## Floating Icon Button Group
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | numeClasa | șir | Nume opțional pentru stilizare suplimentară |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` |
+ | iconButtons | matrice | An array of objects, each representing an icon button in the group. Each object should include the icon component you want to display in the button, the function you want to call when a user clicks on the button, and whether the button should be active or not. |
+
+
+
+## Light Button
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ----------------- | ---------------------------------------------------------------------------- |
+ | numeClasa | șir | Nume opțional pentru stilizare suplimentară |
+ | pictogramă | `React.ReactNode` | The icon you want to display in the button |
+ | titlu | șir | Conținutul textului butonului |
+ | accent | șir | Culoarea de accent a butonului. Opțiunile includ: `secundar` și `terțiar` |
+ | activ | boolean | Determină dacă butonul este în stare activă |
+ | dezactivat | boolean | Determină dacă butonul este dezactivat |
+ | focalizare | boolean | Indică dacă butonul este focusat |
+ | laClick | funcție | O funcție callback care se declanșează când utilizatorul face click pe buton |
+
+
+
+## Buton Pictogramă Luminoasă
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | --------------------- | ---------------------------------------------------------------------------- |
+ | numeClasă | șir | Nume opțional pentru stilizare suplimentară |
+ | idTest | șir | Identificator test pentru buton |
+ | Pictogramă | `React.ComponentType` | O componentă opțională de pictogramă afișată în cadrul butonului |
+ | titlu | șir | Conținutul textului butonului |
+ | dimensiune | șir | Dimensiunea butonului. Are două opțiuni: `mic` și `mediu` |
+ | accent | șir | Culoarea de accent a butonului. Opțiunile includ: `secundar` și `terțiar` |
+ | activ | boolean | Determină dacă butonul este într-o stare activă |
+ | dezactivat | boolean | Determină dacă butonul este dezactivat |
+ | focalizare | boolean | Indică dacă butonul este focusat |
+ | laClick | funcție | O funcție callback care se declanșează când utilizatorul face click pe buton |
+
+
+
+## Buton Principal
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------------- | -------------------------------- | -------------------------------------------------------------------------------------------- |
+ | titlu | șir | Conținutul textului butonului |
+ | lățimeCompletă | boolean | Definește dacă butonul ar trebui să ocupe toată lățimea containerului său |
+ | variantă | șir | Stilul vizual al butonului. Opțiunile includ `primar` și `secundar` |
+ | în curând | boolean | Indică dacă butonul este marcat ca "în curând" (de exemplu, pentru funcționalități viitoare) |
+ | Pictogramă | `React.ComponentType` | O componentă opțională de pictogramă afișată în cadrul butonului |
+ | React `button` props | `React.ComponentProps<'button'>` | All standard HTML button props are supported |
+
+
+
+## Buton Pictogramă Rotundă
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------------- | ----------------------------------------------- | --------- |
+ | Pictogramă | `React.ComponentType` | |
+ | React `button` props | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..883b463559
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Schema culorilor
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Color Scheme Card
+
+Reprezintă scheme de culori diferite și este special adaptat pentru teme deschise și întunecate.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ------------------------ | --------------------------------------- | -------------------------------------------------------------------------------- | -------- |
+ | variantă | șir | Varianta schemei de culori. Opțiuni includ `Întunecată`, `Deschisă`, și `Sistem` | luminos |
+ | selectat | boolean | If `true`, displays a checkmark to indicate the selected color scheme | |
+ | proprietăți suplimentare | `React.ComponentPropsWithoutRef<'div'>` | Proprietăți standard pentru elementul HTML `div` | |
+
+
+
+## Selector de scheme de culori
+
+Permite utilizatorilor să aleagă între diferite scheme de culori.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------------------ | --------------------------------------------------------------------------------------------------- |
+ | valoare | `Schema culorilor` | Schema de culori curentă selectată |
+ | onChange | funcție | Funcția de callback pe care doriți să o declanșați când un utilizator selectează o schemă de culori |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..0cfb5a8f9b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Intrare imagine
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Permite utilizatorilor să încarce și să elimine o imagine.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------- | ------------------------------------------------------------------------------------------------ |
+ | imagine | șir | URL-ul sursei imaginii |
+ | onUpload | funcție | Funcția apelată când un utilizator încarcă o imagine nouă. Primește obiectul `File` ca parametru |
+ | onRemove | funcție | Funcția apelată când utilizatorul face clic pe butonul de eliminare |
+ | onAbort | funcție | The function called when a user clicks on the abort button during image upload |
+ | isUploading | boolean | Indicates whether an image is currently being uploaded |
+ | mesajEroare | şir | Un mesaj de eroare opțional care să fie afișat sub intrarea imaginii |
+ | dezactivat | boolean | Dacă este „adevărat”, întreaga intrare este dezactivată, iar butoanele nu sunt clicabile |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..5408a1c0d7
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Radio
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Utilizat când utilizatorii pot alege doar o opțiune dintr-o serie de opțiuni.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------------- | ----------------------- | ---------------------------------------------------------------------------------------------- |
+ | stil | proprietăți `React.CSS` | Stiluri suplimentare inline pentru componentă |
+ | numeClasa | șir | Clasă CSS opțională pentru stilizare suplimentară |
+ | bifat | boolean | Indică dacă butonul radio este selectat |
+ | valoare | șir | Eticheta sau textul asociat cu butonul radio |
+ | onChange | funcție | Funcția apelată când butonul radio selectat este schimbat |
+ | laSchimbareBifată | funcție | Funcția apelată atunci când starea `verificat` a butonului radio se schimbă |
+ | dimensiune | șir | Dimensiunea butonului radio. Opțiuni incluse: `mare` și `mic` |
+ | dezactivat | boolean | Dacă este `adevărat`, butonul radio este dezactivat și nu este clicabil |
+ | labelPosition | șir | Poziția textului etichetei în raport cu butonul radio. Are două opțiuni: `stânga` și `dreapta` |
+
+
+
+## Grup Radio
+
+Groups together related radio buttons.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------- | ----------------- | ------------------------------------------------------------------------------------- |
+ | valoare | șir | Valoarea butonului radio selectat în prezent |
+ | onChange | funcție | Funcția callback activată când butonul radio este schimbat |
+ | onValueChange | funcție | Funcția callback activată când valoarea selectată din grup se schimbă. |
+ | copii | `React.ReactNode` | Îți permite să trimiți componente React (cum ar fi Radio) ca și copii la Grupul Radio |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/select.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/select.mdx
new file mode 100644
index 0000000000..80f1e49dd1
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/select.mdx
@@ -0,0 +1,51 @@
+---
+title: Selectați
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+Permite utilizatorilor să aleagă o valoare dintr-o listă de opțiuni predefinite.
+
+
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
+
+ import { Select } from '@/ui/input/components/Select';
+
+ export const MyComponent = () => {
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | șir | Clasă CSS opțională pentru stilizare suplimentară |
+ | dezactivat | boolean | Când este setat la `true`, dezactivează interacțiunea utilizatorului cu componenta |
+ | etichetă | șir | Eticheta care descrie scopul componentei `Select` |
+ | laSchimbare | funcție | Funcția apelată când valorile selectate se schimbă |
+ | opțiuni | array | Represents the options available for the `Selected` component. Este un tablou de obiecte unde fiecare obiect are un `value` (identificatorul unic), `label` (etichetă) și un `Icon` opțional |
+ | valoare | şir | Reprezintă valoarea momentan selectată. Ar trebui să corespundă uneia dintre proprietățile `value` din tabloul `opțiuni`. |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/text.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..1877c2e2c5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Text
+image: /images/user-guide/notes/notes_header.png
+---
+
+
+
+
+
+## Introduceți text
+
+Permite utilizatorilor să introducă și să editeze text.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
+ | numeClasa | șir | Nume opțional pentru stilizare suplimentară |
+ | etichetă | string | Reprezintă eticheta pentru intrare |
+ | onChange | funcție | The function called when the input value changes |
+ | lățimeCompletă | boolean | Indică dacă intrarea ar trebui să ocupe 100% din lățime |
+ | disableHotkeys | boolean | Indică dacă tastele rapide sunt activate pentru intrare |
+ | eroare | șir | Reprezintă mesajul de eroare care să fie afișat. Când este oferit, adaugă și o pictogramă de eroare pe partea dreaptă a intrării |
+ | onKeyDown | funcție | Apelează atunci când o tastă este apăsată în timp ce câmpul de intrare este focalizat. Primește un `React.KeyboardEvent` ca argument |
+ | RightIcon | ComponentaIcoana | An optional icon component displayed on the right side of the input |
+
+ Componenta acceptă și alte atribute de element HTML de intrare.
+
+
+
+## Autosize Text Input
+
+Componenta de intrare text care își ajustează automat înălțimea în funcție de conținut.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------- | ------- | --------------------------------------------------------------------------- |
+ | onValidate | funcție | The callback function you want to trigger when the user validates the input |
+ | minRows | număr | Numărul minim de rânduri pentru aria textului |
+ | text sugestiv | string | Text loc de plasare afișat când aria textului este goală |
+ | onFocus | funcție | Funcția de apelare dorită când aria textului câștigă focalizare |
+ | variantă | string | Varianta intrării. Opțiuni includ: `implicit`, `icon`, și `buton` |
+ | buttonTitle | string | Titlul pentru buton (aplicabil doar pentru varianta butonului) |
+ | valoare | string | Valoarea inițială pentru aria textului |
+
+
+
+## Text Area
+
+Vă permite să creați intrări de text pe mai multe linii.
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------- | ------- | -------------------------------------------------------------- |
+ | dezactivat | boolean | Indică dacă aria textului este dezactivată |
+ | minRows | număr | Numărul minim de rânduri vizibile pentru aria textului. |
+ | onChange | funcție | Callback function triggered when the text area content changes |
+ | text sugestiv | șir | Placeholder text displayed when the text area is empty |
+ | valoare | șir | Valoarea curentă a câmpului de text |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/ro/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..6ea7f4b208
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Comutare
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere | Implicit |
+ | ----------- | ------- | ------------------------------------------------------------------------------------------------------- | ---------------- |
+ | valoare | boolean | Starea actuală a comutatorului | `fals` |
+ | onChange | funcție | Callback function triggered when the toggle state changes | |
+ | culoare | șir | Culoarea comutatorului când este \ | culoare albastră |
+ | toggleSize | șir | Dimensiunea comutatorului, afectând atât înălțimea cât și greutatea. Are două opțiuni: `mic` și `mediu` | mediu |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/introduction.mdx b/packages/twenty-docs/l/ro/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..3561fe00e3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Prezentare generală
+description: Bibliotecă de componente pentru Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Componente
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/ro/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..8e938c1900
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Breadcrumb
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Renders a breadcrumb navigation bar.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "Home", href: "/" },
+ { children: "Category", href: "/category" },
+ { children: "Subcategory", href: "/category/subcategory" },
+ { children: "Current Page" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | șir | Nume de clasă opțional pentru stilizare suplimentară |
+ | linkuri | array | An array of objects, each representing a breadcrumb link. Each object has a `children` property (the text content of the link) and an optional `href` property (the URL to navigate to when the link is clicked) |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/ro/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..956d3b7224
--- /dev/null
+++ b/packages/twenty-docs/l/ro/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: Element de meniu
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Un element de meniu versatil, conceput pentru a fi utilizat într-un meniu sau listă de navigare.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Icon button clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------------ | ---------------- | ------------------------------------------------------------------------------------------------------------- |
+ | IconaStânga | ComponentaIcoana | O iconiță stângă opțională afișată înaintea textului în elementul de meniu |
+ | accent | șir | Specifică culoarea accentului pentru elementul de meniu. Opțiuni includ: `default`, `danger` și `placeholder` |
+ | text | șir | Conținutul textului din elementul de meniu |
+ | iconButtons | array | Un șir de obiecte care reprezintă butoane icon suplimentare asociate cu elementul de meniu |
+ | esteTooltipDeschis | boolean | Controlează vizibilitatea tooltip-ului asociat cu elementul de meniu |
+ | testId | şir | Atributul data-testid pentru scopuri de testare |
+ | laClick | funcție | Funcție de callback declanșată când se face clic pe elementul de meniu |
+ | numeClasă | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+## Variante
+
+Diferitele variante ale componentei elementului de meniu includ următoarele:
+
+### Comandă
+
+Un element de meniu de tip comandă într-un meniu pentru a indica scurtăturile de la tastatură.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Command clicked!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ------------ | ------------- | ----------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | O pictogramă opțională afișată înaintea textului din elementul de meniu |
+ | text | string | Conținutul text al elementului de meniu |
+ | firstHotKey | șir | Prima scurtătură de tastatură asociată cu comanda |
+ | secondHotKey | șir | A doua scurtătură de tastatură asociată cu comanda |
+ | isSelected | boolean | Indică dacă elementul de meniu este selectat sau evidențiat |
+ | onClick | funcție | Funcție de callback declanșată când se face clic pe elementul de meniu |
+ | className | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Draggable
+
+Un element de meniu drag realizat pentru a fi utilizat într-un meniu sau listă unde elementele pot fi trase, iar acțiuni suplimentare pot fi efectuate prin butoanele de pictograme.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | ------------- | ------------------------------------------------------------------------------------------ |
+ | LeftIcon | IconComponent | O pictogramă opțională afișată înaintea textului din elementul de meniu |
+ | accent | string | Culoarea accentului elementului de meniu. Poate fi `default`, `placeholder`, și `danger` |
+ | iconButtons | array | Un șir de obiecte care reprezintă butoane icon suplimentare asociate cu elementul de meniu |
+ | isTooltipOpen | boolean | Controlează vizibilitatea tooltip-ului asociat cu elementul de meniu |
+ | onClick | funcție | Funcție de callback declanșată când se face clic pe link |
+ | text | string | Conținutul de text al elementului de meniu |
+ | isDragDisabled | boolean | Indică dacă funcția de drag este dezactivată |
+ | className | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Multi Select
+
+Oferă o modalitate de a implementa funcționalitatea multi-select cu un checkbox asociat.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | ------------- | ----------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | O pictogramă opțională afișată înaintea textului din elementul de meniu |
+ | text | șir | Conținutul de text al elementului de meniu |
+ | selected | boolean | Indică dacă elementul de meniu este selectat (bifat) |
+ | onSelectChange | funcție | Funcție de callback declanșată când starea checkbox-ului se schimbă |
+ | className | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Multi Select Avatar
+
+Un element de meniu multi-select cu un avatar, un checkbox pentru selecție și conținut textual.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhgaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="Prima opțiune"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | ----------- | ---------------------------------------------------------------------------------- |
+ | avatar | `ReactNode` | Avatarul sau pictograma care va fi afișată în partea stângă a elementului de meniu |
+ | text | string | Conținutul de text al elementului de meniu |
+ | selected | boolean | Indică dacă elementul de meniu este selectat (bifat) |
+ | onSelectChange | funcție | Funcție de callback declanșată când starea checkbox-ului se schimbă |
+ | className | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Navigate
+
+Un element de meniu care include o pictogramă opțională în stânga, conținut text și o pictogramă de săgeată la dreapta.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Navigați la o altă pagină");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------------- | ----------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | O pictogramă opțională afișată înaintea textului din elementul de meniu |
+ | text | string | Conținutul de text al elementului de meniu |
+ | onClick | funcție | Funcție de callback declanșată când se face clic pe elementul de meniu |
+ | className | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Selectați
+
+Un element de meniu selectabil, care include opțional părți la stânga (pictogramă și text) și un indicator (pictograma de bifare) pentru starea selectată.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Elementul de meniu selectat");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------------- | ----------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | O pictogramă opțională afișată înaintea textului din elementul de meniu |
+ | text | string | Conținutul de text al elementului de meniu |
+ | selected | boolean | Indică dacă elementul de meniu este selectat (bifat) |
+ | dezactivat | boolean | Indică dacă elementul de meniu este dezactivat |
+ | hovered | boolean | Indică dacă elementul de meniu este în prezent trecut cu mouse-ul |
+ | laClick | funcție | Funcție de callback declanșată când se face clic pe elementul de meniu |
+ | numeClasa | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Selectați Avatar
+
+Un element de meniu selectabil cu un avatar, care include opțional părți la stânga (avatar și text) și un indicator (pictograma de bifare) pentru starea selectată.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Elementul de meniu selectat");
+ };
+
+ return (
+ }
+ text="Prima opțiune"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ----------- | --------------------------------------------------------------------------------------------- |
+ | avatar | `ReactNode` | Avatarul sau pictograma care urmează să fie afișată pe partea stângă a elementului de meniu |
+ | text | string | Conținutul text al elementului de meniu |
+ | selectat | boolean | Indică dacă elementul de meniu este selectat (bifat) |
+ | dezactivat | boolean | Indică dacă elementul de meniu este dezactivat |
+ | hovered | boolean | Indică dacă elementul de meniu este în prezent trecut cu mouse-ul |
+ | testId | string | Atributul data-testid pentru scopuri de testare |
+ | laClick | funcție | Funcția de apel invers care urmează să fie declanșată când se face clic pe elementul de meniu |
+ | numeClasa | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Selectați Culoarea
+
+Un element de meniu selectabil cu un eșantion de culoare pentru situațiile în care doriți ca utilizatorii să aleagă o culoare dintr-un meniu.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Elementul de meniu selectat");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | culoare | string | Culoarea temei care urmează să fie afișată ca eșantion în elementul de meniu. Opțiunile includ: `verde`, `turcoaz`, `cer`, `albastru`, `violet`, `roz`, `roșu`, `portocaliu`, `galben` și `gri` |
+ | selectat | boolean | Indică dacă elementul de meniu este selectat (bifat) |
+ | dezactivat | boolean | Indică dacă elementul de meniu este dezactivat |
+ | hovered | boolean | Indică dacă elementul de meniu este în prezent trecut cu mouse-ul |
+ | variant | string | Varianta eșantionului de culoare. Poate fi fie `default`, fie `pipeline` |
+ | laClick | funcție | Funcția de apel invers care urmează să fie declanșată când se face clic pe elementul de meniu |
+ | numeClasa | string | Nume opțional pentru stilizare suplimentară |
+
+
+
+### Comutare
+
+Un element de meniu cu un comutator asociat pentru a permite utilizatorilor să activeze sau să dezactiveze o caracteristică specifică
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Proprietăți | Tip | Descriere |
+ | -------------- | ------------- | --------------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | O pictogramă opțională la stânga afișată înaintea textului din elementul de meniu |
+ | text | string | Conținutul text al elementului de meniu |
+ | comutat | boolean | Indică dacă comutatorul este în starea „activat” sau „dezactivat” |
+ | onToggleChange | funcție | Callback function triggered when the toggle switch state changes |
+ | toggleSize | string | Dimensiunea comutatorului. It can be either \ |
+ | numeClasă | string | Nume opțional pentru stilizare suplimentară |
+
+
diff --git a/packages/twenty-docs/l/ro/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/ro/twenty-ui/navigation/step-bar.mdx
index 9e606867f7..59859520ed 100644
--- a/packages/twenty-docs/l/ro/twenty-ui/navigation/step-bar.mdx
+++ b/packages/twenty-docs/l/ro/twenty-ui/navigation/step-bar.mdx
@@ -4,35 +4,31 @@ image: /images/user-guide/api/api.png
---
-
+
Afișează progresul printr-o secvență de pași numerotați prin evidențierea pasului activ. Redă un container cu pași, fiecare fiind reprezentat de componenta `Pas`.
-
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
-```jsx
-import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+ export const MyComponent = () => {
+ return (
+
+ Step 1
+ Step 2
+ Step 3
+
+ );
+ };
+ ```
+
-export const MyComponent = () => {
- return (
-
- Step 1
- Step 2
- Step 3
-
- );
-};
-```
-
-
-
-
-
-| Proprietăți | Tip | Descriere |
-| ----------- | ----- | ------------------------------------------------------------------------------------------------------------- |
-| pasactiv | număr | Indexul pasului activ în prezent. Aceasta determină ce pas ar trebui să fie evidențiat vizual |
-
-
+
+ | Proprietăți | Tip | Descriere |
+ | ----------- | ----- | --------------------------------------------------------------------------------------------- |
+ | pasactiv | număr | Indexul pasului activ în prezent. Aceasta determină ce pas ar trebui să fie evidențiat vizual |
+
diff --git a/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..7ac501eda7
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Prezentare generală
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Descriere |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/ro/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/ro/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..4deb994fe5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Prezentare generală
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Descriere |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/ro/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/ro/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/ai/overview.mdx b/packages/twenty-docs/l/ro/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..5abc84e8b0
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: AI
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## Ce urmează
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Cazuri de utilizare:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Accesați **Setări → Roluri**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Rămâi la curent
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/ro/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ro/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..7dddea8d81
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Workflow Credits
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Prezentare generală
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Lunar | 5 million/month |
+| Anual | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Utilizare credit |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **Indicațiile AI** (în curând) | Variable based on usage |
+
+Credits are deducted in real-time when workflows execute.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Accesați **Setări → Facturare**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Achiziționarea de credite suplimentare
+
+Need more credits?
+
+1. Accesați **Setări → Facturare**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/ro/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/ro/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..b95325b997
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Prețuri
+
+
+
+ Yes, you can use Twenty for free while self-hosting. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Suportul este accesibil prin comunitatea noastră Discord.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ Nu oferim locuri gratuite. Prețul este pe utilizator și fiecare utilizator are nevoie de o licență pentru a accesa Twenty.
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`. Apoi, fă clic pe `Schimbă la Organization`.
+
+
+
+ Te rugăm să contactezi direct echipa noastră prin Suport, momentan nu există o modalitate simplă de a face acest lucru folosind interfața utilizatorului.
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`. Apoi, fă clic pe `Schimbă la Anual`.
+
+
+
+ Te rugăm să contactezi direct echipa noastră prin Suport, momentan nu există o modalitate simplă de a face acest lucru folosind interfața utilizatorului.
+
+
+
+ Vei găsi acest lucru sub `Setări → Facturare`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Fiecare acțiune de flux de lucru consumă credite în funcție de complexitatea sa:
+
+ * **Operațiunile interne de bază** (cum ar fi căutarea, actualizarea, crearea înregistrărilor) consumă foarte puține credite
+ * **Operațiunile mai complexe** cum ar fi nodurile de cod și cererile către servicii externe consumă mai multe credite
+ * **Indicațiile AI** (în curând!) vor consuma și ele mai multe credite în funcție de utilizare
+
+ Credits are deducted in real-time when workflows execute. Poți monitoriza utilizarea ta în **Setări → Facturare** pentru a urmări consumul și creditele rămase.
+
+
+
+ Poți cumpăra credite suplimentare sub `Setări → Facturare`.
+
+
+
+## Facturare
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`.
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`. Apoi, fă clic pe `Vizualizează detaliile de facturare`. Veți putea adăuga o nouă metodă de plată acolo.
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`. Apoi, fă clic pe `Vizualizează detaliile de facturare`. Veți putea edita informațiile de facturare acolo.
+
+
+
+ Poți face acest lucru sub `Setări → Facturare`. Apoi, fă clic pe `Vizualizează detaliile de facturare`. Veți vedea toate facturile dvs. în partea de jos a ecranului.
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/billing/overview.mdx b/packages/twenty-docs/l/ro/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..81fcdb0715
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Facturare
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Plan | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/ro/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..f890ec98cf
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Calendar
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/ro/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Calendar Tab
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Persoane**: Vizualizați toate întâlnirile programate cu un contact specific
+* **Companii**: Vizualizați toate întâlnirile legate de o companie și de angajații săi
+* **Oportunități**: Accesați istoricul întâlnirilor legate de compania asociată acestei oportunități
+
+### Vizualizarea istoricului întâlnirilor
+
+1. Navigați la o înregistrare: Accesați înregistrarea oricărei persoane, companii sau oportunități
+2. **Selectați fila Calendar**: Faceți clic pe fila `Calendar` lângă fila E-mailuri
+3. **Răsfoiți istoricul întâlnirilor**: Vizualizați toate întâlnirile programate și detaliile acestora
+4. **Accesați contextul întâlnirii**: Vizualizați participanții la întâlnire, orele și informațiile conexe
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Ce se sincronizează
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Ce nu se sincronizează
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..8446e6d942
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Notă**: Pentru a conecta conturile de e-mail și a configura setările de sincronizare, vizitați Configurare e-mail și calendar .
+
+## Cum funcționează integrarea e-mailului
+
+Twenty leagă automat e-mailurile din căsuțele poștale conectate la înregistrările CRM relevante, păstrând toate istoricul comunicațiilor într-un singur loc.
+
+### Objects Where Emails Can Be Found
+
+Conversațiile prin e-mail apar în trei obiecte principale:
+
+* **Persoane**: Vizualizați toate e-mailurile schimbate cu un contact specific
+* **Companii**: Vizualizați toate e-mailurile legate de o companie și de angajații săi
+* **Oportunități**: Accesați conversațiile prin e-mail legate de compania asociată acestei oportunități. Firurile de e-mail de la persoanele individuale din oportunitate nu sunt afișate încă.
+
+### Vizualizarea conversațiilor prin e-mail
+
+1. Navigați la o înregistrare: Accesați înregistrarea oricărei persoane, companii sau oportunități
+2. **Selectați fila E-mailuri**: Faceți clic pe fila `E-mailuri` pentru a vizualiza e-mailurile sincronizate
+3. **Deschideți un fir de e-mail**: Faceți clic pe orice e-mail pentru a deschide și a citi întreaga conversație
+4. **Răsfoiți istoricul**: Derulați prin întregul istoric al e-mailurilor cu acel contact
+
+
+
+## Ce veți vedea
+
+### Vizualizarea firului de e-mail
+
+Când deschideți un fir de e-mail, puteți:
+
+* **Citiți conversații complete**: Vizualizați întregul schimb de e-mailuri
+* **Vizualizați participanții**: Vedeți toate persoanele implicate în firul de e-mail
+* **Verificați marcajele de timp**: Aflați exact când a fost trimis fiecare e-mail
+* **Accesați contextul**: Înțelegeți întregul istoric al comunicațiilor
+
+### Vizibilitatea e-mailurilor
+
+În funcție de setările căsuței poștale, este posibil să vedeți:
+
+* **Conținut complet**: Textul complet al e-mailului și detaliile
+* **Subiect + Metadate**: Linia subiectului, expeditor, destinatar și marcaj de timp
+* **Doar Metadate**: Informații de bază fără conținutul e-mailului
+
+## Comportamentul sincronizării e-mailului
+
+### Ce se sincronizează
+
+* **E-mailuri externe**: Toate e-mailurile cu contacte din afara organizației
+* **Conectare automată**: E-mailuri care se leagă la înregistrări existente de persoane și companii
+* **Adrese multiple**: E-mailurile de la orice adresă se corelează la aceeași înregistrare de contact
+* **Actualizări**: Noile e-mailuri apar în termen de 5 minute
+
+### Ce nu se sincronizează
+
+* **E-mailuri interne**: E-mailurile între colegi (același domeniu) rămân private
+* **E-mailuri de grup**: Liste de distribuție și e-mailuri de grup sunt excluse
+* **Foldere excluse**: Folderele pe care ați ales să nu le sincronizați (configurate sub Setări → Conturi → E-mail)
+
+### Sincronizare selectivă de foldere (Caracteristică de laborator)
+
+Controlați care foldere de e-mail se sincronizează cu Twenty:
+
+1. Activați `Folder Mesaje` în Setări → Lansări → Laborator
+2. Configurați folderele sub Setări → Conturi → E-mail
+3. Alegeți foldere specifice de inclus sau exclus (Inbox, Trimise, Arhivă, foldere personalizate)
+
+## Depanarea sincronizării e-mailurilor
+
+### Probleme comune de sincronizare
+
+* **Întârzieri la sincronizare**: E-mailurile apar în cel mult 5 minute, dar importurile inițiale durează mai mult
+* **E-mailuri lipsă**: Verificați dacă:
+ * Folderele sunt excluse în setările Folder Mesaje
+ * Crearea automată a contactelor este dezactivată (e-mailurile necesită existența înregistrărilor Twenty)
+ * E-mailul este de la colegi (același domeniu) sau liste de grup
+ * Căsuța poștală finalizează încă sincronizarea inițială
+
+### Limitări ale e-mailului
+
+* **Foldere de sistem**: Unele foldere de e-mail s-ar putea să nu fie disponibile pentru sincronizare
+* **Aka**: Numai căsuțele reale de e-mail pot fi conectate (nu aliasurile de e-mail)
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..e7b75d7a15
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/ro/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..ebd28611b1
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Obiect | What You See |
+| ---------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Companii** | All emails with anyone from that company (based on email domain) |
+| **Oportunități** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Obiecte personalizate
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..d2e4e08693
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Prezentare generală
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Mergeți la **Setări → Conturi**
+2. Faceți clic pe **Adăugați cont**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/ro/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/ro/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..0a8eb2084b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Opțiuni de Conexiune
+
+### Cont Google (Gmail & Calendar Google)
+
+1. Mergeți la **Setări → Conturi**
+2. Faceți clic pe **Adăugați cont**
+3. Selectați **Continuați cu Google**
+4. Autorizați Twenty să acceseze Gmail și Calendarul Google
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. E-mailurile și evenimentele dvs. din calendar vor începe să se sincronizeze automat
+
+### Cont Microsoft (Outlook & Calendar Microsoft)
+
+1. Mergeți la **Setări → Conturi**
+2. Faceți clic pe **Adăugați cont**
+3. Selectați **Continuați cu Microsoft**
+4. Autorizați Twenty să acceseze Outlook și Calendarul Microsoft
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. E-mailurile și evenimentele dvs. din calendar vor începe să se sincronizeze automat
+
+### Configurarea SMTP/CalDAV (Alți Furnizori)
+
+Pentru alți furnizori de e-mail și calendar:
+
+1. Mergeți la **Setări → Lansări → Lab** pentru a activa funcția
+2. Întoarceți-vă la **Setări → Conturi**
+3. Configurați setările SMTP pentru e-mail
+4. Configurați setările CalDAV pentru calendar
+5. Testați conexiunea
+
+### Căsuțe Poștale Multiple
+
+* **Conturi Nelimitate**: Conectați multiple conturi de e-mail per utilizator
+* **Gestionarea Contului**: Schimbați între diferite căsuțe poștale
+* **Setări Sincronizare**: Configurați setări diferite per căsuță poștală
+
+
+ Numai căsuțele poștale adevărate pot fi conectate (de exemplu, support@domain.com cu propria căsuță). Aliasurile de e-mail care redirecționează către altă căsuță poștală nu pot fi conectate la Twenty.
+
+
+## Configurarea E-mailului
+
+### Vizibilitatea Mesajelor
+
+Alegeți diferite niveluri de vizibilitate pentru e-mailurile dvs.:
+
+* **Doar Metadate**: Partajați doar informații de bază (expeditor, destinatar, dată, oră)
+* **Subiect și Metadate**: Partajați linia de subiect împreună cu metadatele
+* **Toate Conținutul E-mailului**: Partajați întregul conținut al e-mailului, inclusiv atașamentele
+
+### Creare Automată de Contacte
+
+* **Dezactivat**: Fără creare automată de contacte
+* **Pentru mesajele trimise și primite**: Creați contacte pentru toate interacțiunile externe de e-mail
+* **Doar pentru mesajele trimise**: Creați contacte numai pentru e-mailurile pe care le trimiteți
+* **Notă**: E-mailurile interne (același domeniu) nu sunt sincronizate pentru a menține confidențialitatea
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controlați ce e-mailuri sunt sincronizate cu Seleția dosarelor de Mesaje (Funcția Lab)
+
+Controlați care foldere de e-mail se sincronizează cu Twenty:
+
+1. Mergeți la **Setări → Lansări → Lab** și activați **Dosar Mesaje**
+2. Întoarceți-vă la **Setări → Conturi** și selectați contul dvs. de e-mail conectat
+3. Alegeți ce dosare să sincronizați:
+ * **Inbox**: E-mailurile primare primite
+ * **Trimise**: E-mailurile trimise de dvs.
+ * **Dosare Personalizate**: Orice dosare specifice pe care doriți să le includeți
+ * **Excludeți Dosare**: Săriți dosare precum Spam, Coș de gunoi sau dosare personale
+
+Acest lucru vă oferă control precis asupra a ceea ce apare în CRM-ul dvs. fără a sincroniza totul.
+
+**Ce se Sincronizează:**
+
+* **E-mailuri Externe**: Toate e-mailurile cu contacte externe din dosarele selectate
+* **E-mailuri Interne**: Nu sunt sincronizate (e-mailurile de același domeniu rămân private)
+* **Atașamente**: Va veni în H1 2026
+
+**Notă**: Nu oferim o adresă de e-mail CC pentru sincronizarea selectivă. În schimb, utilizați funcția Dosar Mesaje de mai sus pentru a obține același nivel de control asupra sincronizării e-mailurilor cu Twenty.
+
+## Configurarea Calendarului
+
+### Vizibilitatea Evenimentelor
+
+Alegeți ce va fi vizibil pentru alți utilizatori din workspace-ul dvs.:
+
+* **Totul**: Detaliile întregului eveniment vor fi împărtășite echipei dvs.
+* **Metadate**: Doar data și participanții vor fi împărtășite echipei dvs.
+
+### Creare Automată de Contacte pentru Întâlniri
+
+* **Da**: Creați automat contacte pentru participanți la întâlniri care nu sunt în CRM-ul dvs.
+* **Nu**: Legați doar întâlnirile de contacte existente
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Controlați ce evenimente sunt sincronizate
+
+* **Import Întâlniri**: Importați automat evenimente din calendar
+* **Legare de Contacte**: Legați întâlnirile de fișele Persoanelor și Companiilor
+
+**Ce se Sincronizează:**
+
+* **Întâlniri**: Evenimente din calendar cu participanți externi
+* **Legare de Contacte**: Evenimente legate automat de fișele CRM
+* **Evenimente ale Echipelor**: Vizibilitatea calendarului partajat
+
+## Frecvența Sincronizării
+
+**Actualizări la fiecare 5 minute**: Atât e-mailurile cât și datele din calendar se sincronizează automat la fiecare 5 minute după importul inițial.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Pașii următori
+
+* [Mailbox capabilities](/l/ro/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/ro/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..3c00929cb3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Tablouri de Bord
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Prezentare generală
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Cele mai bune practici
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Favorite
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..9f18039414
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widgeturi
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Stilizare
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/ro/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/ro/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..965c3d33fe
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Încă nu. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/ro/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..be1515a010
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Tablouri de Bord
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Tablouri de Bord
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Taburi
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widgeturi
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Salvează
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Cele mai bune practici
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Pașii următori
+
+* [Widgets and visualizations](/l/ro/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/ro/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..558a7c3f8a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Cum Funcționează
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/ro/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/ro/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..6a46f0f770
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Câmpuri de relație
+
+Please see our dedicated article: [Import Relations Between Objects](/l/ro/user-guide/data-migration/capabilities/import-relations)
+
+### Câmpuri de selectare
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..c9d91be879
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Prezentare generală
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Obiect | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Companii** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Membri ai spațiului de lucru** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..3a0f02b7fc
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Prezentare generală
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Obiect | Unique Fields |
+| ------------------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Companii** | `id`, `domain` |
+| **Obiecte personalizate** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Cele mai bune practici
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..93bf9c8e78
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Prezentare generală
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Cazuri de utilizare:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/ro/developers/extend/capabilities/apis).
+
+### Permisiuni
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Câmpuri de relație
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/ro/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Pașii următori
+
+* [How to Update Existing Records](/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/ro/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/ro/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..96b28f7d3d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Prezentare generală
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Mesaj de eroare | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Ce veți vedea
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Ce veți vedea
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### Email
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Domeniu
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Dată
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Telefon
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Exemplu |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Boolean
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Monedă
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Exemplu |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Număr
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/ro/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Ce veți vedea
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Ce veți vedea
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/ro/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Ce veți vedea
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/ro/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Relații
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Model de date
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/ro/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/ro/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/ro/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..f2a1e383c7
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Prezentare generală
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Înainte de a începe
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/ro/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Câmp | Required? | Format | Notițe |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Text | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Număr | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Eroare | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Da! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Depanare
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/ro/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..c6c7bb0d9a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Prezentare generală
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Înainte de a începe
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Câmp | Required? | Format | Notițe |
+| ----------------- | ----------- | ----------------- | ------------------------- |
+| **Email** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Text | |
+| **Last Name** | Recommended | Text | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Text | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Exemplu |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Format | Exemplu |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Notițe |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| Email | **Email** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Telefon | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Eroare | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Da! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Depanare
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/ro/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..9c567400ff
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Prezentare generală
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | Valoare |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Documentație |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/ro/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/ro/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Cele mai bune practici
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/ro/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Servicii Profesionale
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ro/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Da! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/ro/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..82e4a07c58
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Prezentare generală
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Relație | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Companie | Persoane |
+| Companies → Opportunities | Companie | Oportunități |
+| People → Tasks | Persoană | Sarcini |
+| People → Notes | Persoană | Notițe |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| -------------------------------- | --------------------------------------------------------------- |
+| **Companii** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Membri ai Spațiului de Lucru** | `id` (UUID), `email` (not name) |
+| **Obiecte personalizate** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Identificator | Format | Exemplu |
+| ------------- | -------------- | -------------------------------------- |
+| Domeniu | URL format | `https://acme.com` |
+| Email | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Da! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Puteți fie să:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Depanare
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/ro/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..112ffb2415
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Migrarea de la alte CRM-uri
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Prezentare generală
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Mergi la **Setări → Membri**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Obiecte personalizate
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ----------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **Email** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/ro/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Recrearea fluxurilor de lucru
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/ro/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Probleme comune și soluții
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Lista de Verificare Post-Migrare
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Configurație
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Ai nevoie de ajutor?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ro/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..49e120b119
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Migrarea de la Self-Hosted la Cloud
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Prezentare generală
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Companii
+2. Persoane
+3. Oportunități
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+Înainte:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+După:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Vizualizări
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Fluxuri de lucru
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Integrări
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Lista de Verificare Post-Migrare
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Ai nevoie de ajutor?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ro/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..836e4ff960
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: "Pregătiți fișierele CSV "
+description: Ghid complet, pas cu pas, pentru a formata datele pentru import în Twenty.
+---
+
+## Prezentare generală
+
+Acest ghid vă ghidează în pregătirea fișierului CSV pentru un import reușit. Urmați acești pași pentru a evita erorile.
+
+## Pasul 1: Verificați cerințele fișierului
+
+Înainte de a începe, asigurați-vă că fișierul îndeplinește aceste cerințe:
+
+| Cerință | Detalii |
+| ------------------------ | -------------------------------- |
+| **Format** | CSV, XLSX sau XLS |
+| **Limită de dimensiune** | 10.000 de înregistrări pe fișier |
+| **Codificare** | UTF-8 recomandat |
+| **Structură** | Un tip de obiect pe fișier |
+
+Pentru seturi de date mai mari de 10.000 de înregistrări, împărțiți-le în mai multe fișiere sau folosiți [importul prin API](/l/ro/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Pasul 2: Descărcați fișierul de mostră
+
+**Acesta este cel mai important pas.** Fișierul de mostră vă arată exact denumirile de coloane și formatul pe care îl așteaptă Twenty.
+
+1. Accesați vizualizarea obiectului (Persoane, Companii etc.)
+2. Faceți clic pe **⋮** → **Importați înregistrări**
+3. Faceți clic pe **Descărcați fișierul de mostră**
+4. Folosiți acest fișier ca șablon
+
+**Sfat util:** Exportați în schimb câteva înregistrări existente. Acest lucru vă oferă exemple reale despre cum ar trebui să fie formatate datele, iar denumirile coloanelor se vor asocia automat în timpul importului.
+
+## Pasul 3: Eliminați valorile duplicate
+
+Twenty impune unicitatea pentru anumite câmpuri. Valorile duplicate vor provoca erori la import.
+
+| Obiect | Câmpuri unice |
+| ------------------------- | ------------------------------------------------------- |
+| **Persoane** | `id`, `email` |
+| **Companii** | `id`, `domain` |
+| **Obiecte personalizate** | `id`, precum și orice câmp pe care l-ați marcat ca unic |
+
+**Înainte de import:**
+
+1. Sortați foaia de calcul după câmpul unic (email sau domeniu)
+2. Eliminați sau îmbinați rândurile duplicate
+3. Verificați duplicatele care există deja în Twenty
+
+**Înregistrările șterse temporar se iau în calcul pentru unicitate.** Înregistrările din Meniul Comenzi → Vezi înregistrările șterse vor provoca erori de duplicat. Ștergeți-le definitiv sau restaurați-le și actualizați-le.
+
+## Pasul 4: Formatați corect fiecare tip de câmp
+
+Tipurile de câmpuri diferite necesită formate specifice. Iată referința completă:
+
+### Câmpuri text
+
+* Nu este necesară o formatare specială
+* Spațiile de la început/sfârșit sunt eliminate automat
+
+### Câmpuri e-mail
+
+* Trebuie să fie într-un format de e-mail valid: `name@domain.com`
+* Trebuie să fie unic (fără duplicate în fișier sau în Twenty)
+* Pentru adresele e-mail suplimentare, folosiți acest format în coloana **Emails / Additional Emails**:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Câmpuri domeniu
+
+* **Format recomandat**: `https://domain.com`
+* Acesta corespunde formatului folosit de sincronizarea căsuței poștale/calendarului (previne duplicatele)
+* Completați ambele coloane:
+ * **Domain / Domain Label**: `domain.com`
+ * **Domain / Domain URL**: `https://domain.com`
+* Trebuie să fie unic în fișierul dvs. și în Twenty
+
+### Câmpuri telefon
+
+Telefonul este un **câmp îmbricat** care necesită mai multe coloane:
+
+| Coloană | Exemplu |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Câmpuri adresă
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Exemplu |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Câmpuri de selectare
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Pașii următori
+
+Your file is ready! Now:
+
+* [Import Companies](/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..a8f8a34e84
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Prezentare generală
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Cazuri de utilizare:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Cum Funcționează
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Obiect | Recommended | Alternative | Notițe |
+| ------------------------- | ---------------- | ----------- | ---------------------------- |
+| **People** | `email` | `id` | Email is human-readable |
+| **Companii** | `domeniu` | `id` | Domain is human-readable |
+| **Obiecte personalizate** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Rezultat |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Rezultat | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Da! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Cele mai bune practici
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Depanare
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ro/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/ro/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..8840a6b77d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Obiecte
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standard Objects
+
+Obiectele standard sunt entități predefinite în spațiul tău de lucru care te ajută să începi. Fac parte dintr-un model de date comun accesibil tuturor utilizatorilor Twenty. Le poți folosi așa cum sunt, le poți personaliza sau le poți dezactiva.
+
+
+
+### Persoane
+
+Obiectul `People` stochează contactele tale. Include detalii de contact și istoricul interacțiunilor, astfel încât să poți vedea toate interacțiunile cu clienții într-un singur loc.
+
+### Companie
+
+Obiectul `Companies` stochează conturile tale de afaceri. Include detalii precum industria, dimensiunea și locația. Companiile se conectează la obiectele `People` și `Opportunities`.
+
+### Oportunități
+
+Obiectul `Opportunities` stochează datele legate de afaceri. Urmărește progresia posibilelor vânzări, de la prospectare la încheiere, înregistrând etapele, dimensiunile tranzacțiilor, contul asociat și data anticipată de închidere. Poți vizualiza fluxul de vânzări într-un layout kanban.
+
+### Notițe
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Sarcini
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Obiecte personalizate
+
+Obiectele personalizate îți permit să stochezi informații specifice organizației tale și pe care obiectele standard nu le pot gestiona. De exemplu, dacă ești SpaceX, poți dori să creezi un obiect personalizat pentru Rachete și Lansări.
+
+
+
+### Creating a New Custom Object
+
+Pentru a crea un obiect personalizat nou:
+
+1. Mergi la Setări, în bara laterală din stânga.
+2. Sub Spațiu de lucru, mergi la Model de date. Aici vei putea vedea o prezentare generală a tuturor obiectelor tale Standard și Personalizate (atât active, cât și dezactivate).
+
+
+
+3. Fă clic pe `+ Obiect nou` în partea de sus. Introduceți numele (singular și plural), alegeți o pictogramă, adăugați o descriere pentru obiectul personalizat și apăsați Salvare (în dreptul sus). Using Listing as an example of custom object, the singular would be "listing" and the plural would be "listings" along with a description like "Listings that hosts created to showcase their property."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Cele mai bune practici
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..8b0fe6b55a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Câmpuri de relație
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Faceți clic pe **Salvare**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ------------ | --------- | ------------- |
+| Persoane | Companii | Many-to-One |
+| Oportunități | Companii | Many-to-One |
+| Oportunități | Persoane | Many-to-One |
+
+## Cele mai bune practici
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..dbc6cdc162
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/ro/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Faceți clic pe **Salvare**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/ro/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/ro/user-guide/data-model/capabilities/fields) — all field types explained
+* [Întrebări frecvente despre modelul de date](/l/ro/user-guide/data-model/how-tos/data-model-faq) — întrebări uzuale
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..3a824199a0
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/ro/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Faceți clic pe **Salvare**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/ro/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/ro/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Obiecte](/l/ro/user-guide/data-model/capabilities/objects) — obiecte standard vs obiecte personalizate
+* [Întrebări frecvente despre modelul de date](/l/ro/user-guide/data-model/how-tos/data-model-faq) — întrebări uzuale
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..be22edc98b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Înainte de a începe
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/ro/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Faceți clic pe **Salvare**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/ro/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..ddee1b0089
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Întrebări frecvente despre modelul de date
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Gestionarea obiectelor
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Încă nu. Ordinea obiectelor în navigare este momentan fixă, însă această funcționalitate este planificată pentru o versiune viitoare.
+
+
+
+ Toate obiectele active apar în navigare. Poți dezactiva obiectele de care nu ai nevoie sub **Setări → Model de Date**.
+
+
+
+## Capabilitățile câmpurilor
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ API-ul nostru GraphQL folosește ambele forme pentru diferite operațiuni:
+
+ * `createPerson` (singular) pentru acțiuni cu un singur înregistrare
+ * `createPeople` (plural) pentru operațiuni în bloc
+
+ Aceasta creează limitări atunci când formele singular și plural sunt aceleași, dar îmbunătățește experiența dezvoltatorului.
+
+
+
+ Anumite nume de câmpuri, precum `Type` sau `Application`, sunt rezervate pentru utilizarea sistemului. Alege nume alternative precum `Category` sau `Classification`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Câmpurile cu formule vor fi disponibile în **T1 2026**. Între timp, poți folosi fluxuri de lucru pentru a calcula și actualiza automat valorile câmpurilor.
+
+
+
+ Câmpurile imbricate vor fi disponibile în **T1 2026**. În prezent, poți folosi fluxuri de lucru pentru a prelua valorile câmpurilor din obiectele înrudite. De exemplu, pentru a afișa industria unei companii pe un document despre o Persoană, creează un câmp personalizat la Persoane și folosește un flux de lucru pentru a sincroniza valoarea.
+
+
+
+ Rearanjarea câmpurilor va fi disponibilă cu machete personalizate în **T4 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## Relații
+
+
+
+ Da! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/ro/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Acces și permisiuni
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Contactează-ți administratorul de spațiu de lucru. Accesul la modelul de date este de obicei restricționat doar la administratori.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Ai nevoie de mai mult ajutor?
+
+Check our [Implementation Services](/l/ro/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/ro/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/ro/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..fcb958f585
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Model de date
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Un model de date este structura care definește cum sunt organizate informațiile în CRM-ul tău. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Obiecte
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Câmpuri
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Nume
+* Email
+* Telefon
+* Job Title
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Înregistrări
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+De exemplu:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Câmpuri** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Fiecare afacere funcționează diferit. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Acestea depășesc un singur câmp deoarece au propriile date și relații.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Întreabă-te:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Pașii următori
+
+Once you've planned your data model:
+
+* [Cum să creezi obiecte personalizate](/l/ro/user-guide/data-model/how-tos/create-custom-objects)
+* [Cum să creezi câmpuri personalizate](/l/ro/user-guide/data-model/how-tos/create-custom-fields)
+* [Cum să creezi câmpuri de relație](/l/ro/user-guide/data-model/how-tos/create-relation-fields)
+
+## Ai nevoie de ajutor?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/ro/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..97843ae34a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glosar
+description: Familiarizați-vă cu terminologia esențială utilizată în Twenty.
+---
+
+## API
+
+API (Interfața de Programare a Aplicațiilor) permite conectarea Twenty cu alte sisteme software și construirea de integrări personalizate.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Meniu de comenzi
+
+Meniul de comenzi este o interfață de acces rapid (deschisă cu `Cmd + K` pe Mac și `Ctrl + K` pe Windows) care vă permite să efectuați acțiuni, să creați înregistrări și să navigați eficient în spațiul de lucru.
+
+## Company & People
+
+CRM-ul are două tipuri fundamentale de înregistrări:
+
+* O `Companie` reprezintă o afacere sau o organizație.
+* `People` represent your company's current and prospective customers or clients.
+
+## Câmpuri personalizate
+
+Câmpurile personalizate sunt câmpuri de date pe care le creați pentru a colecta informații specifice necesităților și proceselor dvs. de afaceri.
+
+## Model de date
+
+Un model de date este structura care definește modul în care informațiile sunt organizate în CRM-ul dvs., incluzând ce obiecte există, proprietățile lor (câmpuri) și cum se relaționează între ele.
+
+## Favorite
+
+Favoritele sunt înregistrări pe care le-ați marcat pentru acces rapid, apărând în bara laterală pentru o navigare instantanee către date importante.
+
+## Câmp
+
+Un câmp se referă la o zonă specifică în care sunt stocate datele pentru o entitate.
+
+## Integrare
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Iterator
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+Un `Kanban` este o metodă vizuală de urmărire a proceselor de afaceri folosind carduri și coloane. Fiecare coloană reprezintă o etapă în procesul dvs. (de exemplu: nou, în derulare, câștigat, pierdut), iar înregistrările sunt mutate prin aceste etape pe măsură ce progresează.
+
+## Obiect
+
+Un obiect este o structură de date care reprezintă un tip specific de entitate în CRM-ul dvs. (cum ar fi Oameni, Companii sau Oportunități). Obiectele pot fi standard (încorporate) sau personalizate (create de dvs.).
+
+## Oportunități
+
+Oportunitățile în Twenty CRM sunt potențiale afaceri sau vânzări cu conturi sau contacte.
+
+## Înregistrare
+
+O înregistrare indică o instanță a unui obiect, cum ar fi un cont sau un contact specific.
+
+## Câmpuri de relație
+
+Câmpurile de relație creează conexiuni între diferite obiecte, permițându-vă să legați înregistrările între ele (cum ar fi conectarea unei Persoane la o Companie).
+
+## Câmpuri standard
+
+Câmpurile standard sunt câmpuri de date preconstruite care vin cu obiectele în mod implicit și oferă funcționalitate comună în toate spațiile de lucru.
+
+## Sarcini
+
+Sarcinile în Twenty CRM sunt activități atribuite care au legătură cu contacte, conturi sau oportunități.
+
+## Declanșatoare
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Vizualizări
+
+Puteți personaliza afișarea înregistrărilor dvs. folosind vizualizări, stabilind diferite filtre, aspecte și opțiuni de sortare pentru fiecare vizualizare.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhook-uri
+
+Webhook-urile sunt mesaje automate trimise de la Twenty către alte aplicații atunci când au loc evenimente specifice, permițând sincronizarea datelor în timp real.
+
+## Fluxuri de lucru
+
+Workflows are automated processes that trigger actions based on specific conditions, helping you automate repetitive tasks and business processes.
+
+## Spațiu de lucru
+
+Un `Spațiu de lucru` reprezintă de obicei o companie care folosește Twenty. Conține toate înregistrările și datele pe care dvs. și membrii echipei dvs. le adăugați la Twenty.
+Are un nume de domeniu unic, care este de obicei numele de domeniu folosit de compania dvs. pentru adresele de email ale angajaților.
+
+## Membri ai spațiului de lucru
+
+Membrii spațiului de lucru sunt utilizatorii Twenty din echipa dvs. care au acces la spațiul dvs. de lucru. Ei pot fi desemnați ca proprietari sau asignați pentru înregistrări.
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..dfed8db611
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Servicii de implementare
+description: Indiferent dacă ai nevoie de ajutor pentru a începe sau pentru a crea personalizări avansate, avem o soluție.
+---
+
+## Pachete de Introducere
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Proiectare model de date**: Proiectați și creați modelul de date personalizat cu obiecte, câmpuri și relații
+* **Migrarea datelor**: Migrați datele existente din CRM-ul actual la Twenty
+* **Creare Workflow**: Creați fluxuri de lucru personalizate pentru a susține procesele dvs. de afaceri
+
+## Parteneri de implementare
+
+Colaborați cu partenerii Twenty certificați pentru personalizări și integrații mai avansate. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..d32506cfca
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Ce este Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Viziune
+
+Crearea unui CRM bun este dificilă pentru că este un act de echilibru.
+Pentru fiecare afacere, cerințele par simple, dar nevoile fiecăruia sunt distincte.
+Rezultatul este un CRM fie prea simplu, fie care încearcă să fie universal dar sfârșește prin a nu excela în nici un aspect.
+
+La început, Twenty arată ca majoritatea CRM-urilor pe care le cunoașteți deja: puteți urmări oferte, organiza contacte, gestiona sarcini și note.
+**Dar ceea ce îl diferențiază este abordarea noastră privind extensibilitatea. Construim o platformă deschisă care oferă elementele de bază pentru a rezolva problemele unice ale afacerii tale.**
+
+Prioritizăm principiile universale și tiparele comune în locul listelor de caracteristici.
+Nu încercăm să avem toate răspunsurile, ci în schimb împuternicim utilizatorii să găsească ceea ce funcționează cel mai bine pentru ei.
+Open-source este fundamentul abordării noastre, asigurându-ne că Twenty evoluează cu comunitatea sa, pentru comunitatea sa.
+
+## Beneficii
+
+**Personalizabil:** Proiectat pentru a se potrivi nevoilor afacerii tale.
+
+**Condus de comunitate:** Construit și întreținut de o mare comunitate open-source.
+
+**Eficient din punct de vedere al costurilor:** Nu vei fi niciodată blocat de un furnizor, deoarece poți găzdui întotdeauna pe cont propriu.
+
+## Funcționalități principale
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Aflați mai multe](/l/ro/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/ro/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Începeți](/l/ro/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/ro/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/ro/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/ro/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/ro/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/ro/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Începeți integrarea](/l/ro/developers/extend/capabilities/apis).
+
+## Alătură-te acum
+
+[Înregistrați-vă aici](https://app.twenty.com) sau [deveniți contributor pe GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..ed6b6459d5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Fiecare afacere funcționează diferit. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Acest lucru îți oferă valoare imediată și ajută echipa ta să vadă Twenty în acțiune cu date reale. You can do so under Settings → Accounts.
+
+## 1. Personalizează modelul tău de date
+
+Twenty oferă flexibilitatea de care ai nevoie pentru a modela modelul de date care va susține cel mai bine activitățile tale zilnice.
+Creează obiecte și câmpuri de orice tip, inclusiv relații între diferite obiecte. Poți face asta în setări → Model de Date.
+Iată câteva sfaturi:
+
+* **Nu ești limitat în numărul de câmpuri personalizate sau de obiecte personalizate**. Adăugarea de obiecte și câmpuri personalizate nu va duce la actualizarea planului tău.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Recomandăm folosirea acestora cât mai mult posibil, adăugând câmpuri pentru a-ți clasifica înregistrările dacă este necesar. Iată un exemplu:
+ * Este cel mai bine să folosești obiectul Persoane pentru perspective și parteneri, creând un câmp pe obiectul Persoane numit `Tip Persoană`, în loc să creezi un obiect partener personalizat. Pentru că nu vei putea accesa e-mailurile schimbate cu această persoană din înregistrările partenerului.
+ * Creează diferite vizualizări sub Persoane, una pentru a afișa partenerii și alta pentru a afișa perspective.
+* Două Persoane nu pot avea aceeași adresă de e-mail. Două Companii nu pot avea același domeniu.
+* Poți dezactiva câmpurile și obiectele standard pe care nu vrei să le folosești.
+* Poți ascunde câmpurile din vizualizări: nu te teme să creezi câmpuri, nu va trebui să le afișezi pe toate.
+
+Citește [acest articol](/l/ro/user-guide/data-model/overview) pentru a afla cum să îți proiectezi modelul de date.
+
+## 2. Importă datele tale
+
+Importarea datelor existente în Twenty oferă echipei tale context de la început.
+
+### Conectează-ți căsuța de e-mail
+
+Dacă nu ai făcut asta atunci când ai creat spațiul de lucru, conectează-ți **contul Google sau Microsoft** în setări → Conturi. Acest lucru permite Twenty să:
+
+* Importe mesajele și întâlnirile tale
+* Automat să creeze contacte pe baza interacțiunilor (opțional)
+* Keep communication history visible for your team
+
+**Folosești un alt furnizor?**
+Poți adăuga o altă căsuță de e-mail prin SMTP sau un alt calendar prin CalDAV. Va trebui să activezi funcția în setări → Lansări → Lab, și apoi să revii la tabul setări → Conturi.
+
+### Importă date via csv
+
+Folosește meniul Comandă (`Cmd + K` sau `Ctrl + K`) pentru a importa Persoane, Companii, Oportunități sau orice obiect personalizat prin CSV.
+
+**Linii directoare cheie**:
+
+* Descarcă fișierul sample pentru a înțelege formatul așteptat
+* Limitează fiecare fișier la 10k de înregistrări
+* Elimină e-mailurile duplicate pentru Persoane sau domeniile duplicate pentru Companii
+* Revizuiește și corectează erorile (evidențiate cu galben) înainte de importare
+
+Citește [acest articol](/l/ro/user-guide/data-migration/overview) pentru a afla mai multe despre importul de date.
+
+## 3. Creează prima ta vizualizare
+
+Crearea diferitelor vizualizări este esențială pentru a face datele acționabile pentru echipa ta.
+Iată cum să procedezi:
+
+* **Adaugă sau ascunde coloane**
+ Gestionează câmpurile vizibile într-o anumită vizualizare făcând clic pe Opțiuni → Câmpuri (din dreapta sus). Poți arăta/ascunde câmpurile de acolo.
+
+* **Rearanjează câmpurile**
+ Rearanjează câmpurile dintr-o vizualizare dând clic pe Opțiuni → Câmpuri (din dreapta sus). Trage și fixează câmpurile pentru a le rearanja.
+
+* **Filtrează vizualizarea**
+ Redu numărul de înregistrări afișate folosind filtrele din dreapta sus.
+
+* **Sortează înregistrările**
+ Rearanjează înregistrările afișate folosind funcția de sortare din dreapta sus, sau dând clic direct pe numele coloanei.
+
+* **Alege layout-ul**
+ Poți comuta la un layout **Kanban** sau la un layout de tip listă **Group By**, atâta timp cât obiectul are un câmp de selectare `Stadiu` sau similar.
+
+* **Salvează vizualizarea ca Favorite**
+ Acest lucru poate fi realizat folosind meniul derulant care arată diferitele vizualizări.
+
+## Ce urmează?
+
+Începe să creezi automatizări folosind [fluxuri de lucru](/l/ro/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..1c253a9779
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Create a Workspace
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pasul 1: Înregistrare
+
+1. Navigați la [Twenty Sign Up](https://app.twenty.com).
+2. Selectați metoda de înscriere preferată:
+ * **Continuați cu Google** pentru înregistrarea contului Google.
+ * **Continuați cu Microsoft** pentru înregistrarea contului Microsoft.
+ * Or, **Continue With Email** for email registration.
+
+
+
+## Pasul 2: Alegerea Perioadei de Probă
+
+Alegeți între două perioade de încercare:
+
+### 30 de zile
+
+Cu card de credit
+
+### 7 zile
+
+Fără card de credit
+
+Ambele perioade de probă includ:
+
+* Acces complet
+* Contacte nelimitate
+* Integrare email
+* Obiecte personalizate
+* API & Webhooks
+
+Puteți face clic pe "Schimbă planul" pentru a alege un alt plan sau interval de facturare.
+
+
+
+## Pasul 3: Confirmarea Plății și Configurarea Contului
+
+După aprobarea plății prin Stripe, veți fi direcționat să vă creați spațiul de lucru și profilul de utilizator. Rețineți că vă puteți anula abonamentul oricând.
+
+## Suport
+
+Pentru întrebări sau ajutor, contactați echipa de suport dedicată la [contact@twenty.com](mailto:contact@twenty.com) sau trimiteți un mesaj pe [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..b7dc08c2e4
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Obțineți o imagine de ansamblu rapidă despre cum să navigați prin platformă și unde să întreprindeți diferite tipuri de acțiuni.
+---
+
+## Aspectul principal
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. Aici are loc munca de zi cu zi.
+De acolo puteți **vizualiza, edita, șterge înregistrările** și **crea noi vizualizări**.
+
+
+
+## Bara de navigare
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Schimbați între **mai multe spații de lucru** folosind meniul derulant sau creați un nou spațiu de lucru
+* Folosiți bara de căutare (apăsați `/` pentru a o focaliza instantaneu)
+* Deschideți secțiunea **Setări**
+* Accesați direct **vizualizările Favorite**. Favoritele sunt unice pentru fiecare utilizator.
+* Schimbați între diferite obiecte
+* **Creați automatizări** folosind fluxurile de lucru
+* Contactați Suportul și deschideți Ghidul Utilizatorului nostru.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. Puteți accesa în două moduri:
+
+* **Scurtătură de la tastatură**: Apăsați `Cmd + K` (Mac) sau `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Creați noi înregistrări
+* **Importați și exportați date în format CSV**
+* Creați noi vizualizări
+* Accesați înregistrările șterse (Twenty acceptă ștergeri temporare și permanente)
+* Vizualizați scurtăturile de la tastatură pentru a accesa rapid obiectele din spațiul de lucru
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Vizualizări
+
+Fiecare obiect (cum ar fi Oportunități sau Persoane) acceptă multiple vizualizări. Numărul de vizualizări pe obiect nu este limitat.
+
+Folosiți meniul derulant din stânga sus a aspectului principal pentru a schimba între diferitele vizualizări. De exemplu:
+
+* Folosiți o vizualizare Kanban pentru a urmări oportunitățile după stadiu
+* Folosiți vizualizarea Group By pentru a crea secțiuni și a îmbunătăți eficiența
+* Folosiți filtre pentru a vă concentra asupra unor înregistrări specifice (de ex., clienți potențiali creați săptămâna trecută)
+* Salvați vizualizările filtrate pentru a le reutiliza mai târziu
+* Adăugați vizualizările la favorite pentru acces rapid
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/ro/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Setări
+
+Deschideți setările din colțul din stânga sus pentru a:
+
+* **Conectați conturile de e-mail și calendar** pentru o sincronizare fără întreruperi
+* Personalizați-vă **modelul de date**: creați obiecte personalizate, câmpuri și relații
+* **Accesați playgroundul API și configurați webhook-urile**
+* **Gestionați permisiunile utilizatorilor** și controalele de acces ale spațiului de lucru
+* Invitați membrii echipei și gestionați rolurile utilizatorilor
+* Editați profilul și preferințele spațiului de lucru
+* Configurați facturarea și monitorizați utilizarea creditelor de flux de lucru
+* Descoperiți cele mai recente lansări și caracteristici viitoare (sub Lansări → fila Lab)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/ro/user-guide/introduction.mdx b/packages/twenty-docs/l/ro/user-guide/introduction.mdx
new file mode 100644
index 0000000000..387917727b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..05b3376a31
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Permisiuni
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Sistemul de permisiuni al Twenty vă permite să controlați accesul la trei domenii principale:
+
+* **Obiecte și Câmpuri**: Controlați cine poate vizualiza, edita sau șterge înregistrările și câmpurile individuale
+* **Setări**: Gestionați accesul la configurația workspace-ului și funcțiile administrative
+* **Acțiuni**: Controlați acțiunile generale ale workspace-ului cum ar fi importarea datelor sau trimiterea e-mailurilor
+
+## Create a Role
+
+Pentru a crea un rol nou:
+
+1. Accesați **Setări → Roluri**
+2. Sub **Toate Rolurile**, faceți clic pe **+ Creează Rol**
+3. Introduceți un nume de rol
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Faceți clic pe **Salvare** pentru a termina
+
+## Ștergeți un Rol
+
+Pentru a șterge un rol:
+
+1. Accesați **Setări → Roluri**
+2. Faceți clic pe rolul pe care doriți să-l eliminați
+3. Deschideți tab-ul **Setări**, apoi faceți clic pe **Șterge Rol**
+4. Faceți clic pe **Confirmă** în fereastra modală
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Toate, cu excepția rolului **Admin**, pot fi șterse. Trebuie să existe întotdeauna cel puțin un membru alocat rolului **Admin**.
+
+
+## Atribuiți Roluri Membrilor
+
+### Vizualizați Atribuirile Curente
+
+* Accesați **Setări → Roluri**
+* Vedeți toate rolurile și câți membri sunt alocați fiecăruia
+* Vizualizați ce membri au ce roluri
+
+### Atribuiți un Rol unui Membru
+
+1. Accesați **Setări → Roluri**
+2. Faceți clic pe rolul pe care doriți să-l atribuiți
+3. Deschideți fila **Atribuire**
+4. Faceți clic pe **+ Atribuie membrului**
+5. Selectați membrul workspace-ului din listă
+6. Confirmați atribuirea
+
+### Setați Rolul Implicit
+
+1. Accesați **Setări → Roluri**
+2. În secțiunea **Opțiuni**, găsiți **Rol Implicit**
+3. Selectați ce rol ar trebui să primească automat noii membri
+4. Noii membri ai workspace-ului vor primi acest rol când se alătură
+
+
+ You can only assign roles to existing workspace members. Pentru a invita noi membri, utilizați [Gestionarea Membrelor](/l/ro/user-guide/settings/capabilities/member-management).
+
+
+## Personalizați Permisiunile
+
+Permisiunile determină ce poate accesa sau modifica fiecare rol în cadrul workspace-ului dvs., incluzând înregistrările, setările și acțiunile obiectelor workspace-ului.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Descriere |
+| -------------------------------------------------- | -------------------------------------- |
+| **Vezi înregistrări pentru toate obiectele** | View records in lists and detail pages |
+| **Editează înregistrări pentru toate obiectele** | Modify existing records |
+| **Șterge înregistrări pentru toate obiectele** | Soft-delete records (can be restored) |
+| **Distruge înregistrările pentru toate obiectele** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Descriere |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Gestionați Suprascrierile de Permisiuni
+
+To override inherited permissions:
+
+1. Faceți clic pe **X** pentru a elimina regula moștenită
+2. Select the specific permissions you want
+3. Faceți clic pe pictograma portocalie **Anulează** (săgeată circulară) pentru a reveni la modificări
+
+Când ați terminat, faceți clic pe **Finalizare**, apoi **Salvare** odată ce ați fost redirecționat la pagina rolului.
+
+### Permisiuni pentru Setările Workspace-ului
+
+Controlați accesul la setările workspace-ului în două moduri:
+
+* Comutați **Setări Tot Acces** pentru a oferi acces complet
+* Sau activați permisiuni specifice (de ex., generarea de chei API, preferințele workspace-ului, atribuirea de roluri, configurația modelului de date, setările de securitate și gestionarea fluxurilor de lucru)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Permisiuni de Acțiune în Workspace
+
+Controlați accesul la acțiunile generale ale workspace-ului:
+
+* Comutați **Aplicare Tot Acces** pentru a oferi permisiuni complete
+* Sau activați acțiuni individuale cum ar fi **Trimite E-mail**, **Importă CSV** și **Exportă CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Accesați **Setări → Roluri**
+2. Faceți clic pe rolul pe care doriți să-l atribuiți
+3. Deschideți fila **Atribuire**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Confirmați atribuirea
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Accesați **Setări → Roluri**
+2. Faceți clic pe rolul pe care doriți să-l atribuiți
+3. Deschideți fila **Atribuire**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Confirmați atribuirea
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..2e1767fab9
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Cerințe
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Mergi la **Setări → Membri**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Cele mai bune practici
+
+### Securitate
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Depanare
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Obținerea de ajutor
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/ro/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/ro/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..d6751ca09e
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Roluri
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Permisiuni
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Accesați **Setări → Roluri**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## Autentificare Unică
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..e6ae30bbdf
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Domeniu Spațiu de lucru
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Personalizează Domeniul
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Domenii Aprobate
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Adaugă Domeniu de Acces Aprobat
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Salvează
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Domenii Publice
+
+Provisionați un mediu de găzduire complet și sigur pe aceste domenii.
+
+### Adaugă Domeniu Public
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..1f2d0fcf7b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Managementul membrilor
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Invită Noi Membri
+
+### Using Email Invitation
+
+1. Mergi la **Setări → Membri**
+2. Click **+ Invite**
+3. Introdu adresa de e-mail a persoanei
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Mergi la **Setări → Membri**
+2. Copiază link-ul de invitație pentru spațiul de lucru
+3. Distribuie link-ul cu noii membri ai echipei
+4. Vor primi acces odată ce se înscriu
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/ro/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Domenii de Acces Aprobate
+
+Allow team members to join automatically based on their email domain:
+
+1. Accesați **Setări → Domenii**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/ro/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/ro/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..d41bded64e
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Releases Settings
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Funcții ale Laboratorului
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Accesați **Setări → Lansări**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..b616d2226b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Setări Spațiu de Lucru
+description: Personalizează numele și brandingul spațiului tău de lucru.
+---
+
+Those are accessible under **Settings → General**.
+
+## Imaginea Spațiului de Lucru
+
+* **Încarcă Logo**: Adaugă un logo personalizat pentru spațiul de lucru
+* **Formate suportate**: Fișiere PNG, JPEG și GIF sub 10MB
+* **Eliminare**: Șterge logo-ul curent al spațiului de lucru
+
+## Nume Spațiu de lucru
+
+* **Nume**: Schimbă numele afișat al spațiului de lucru
+* Acest nume apare tuturor membrilor spațiului de lucru
+
+## Zonă de Pericol
+
+
+ Ștergerea spațiului de lucru elimină definitiv toate datele și nu poate fi anulată. Toate datele spațiului de lucru vor fi pierdute definitiv, toți membrii își vor pierde accesul imediat, iar această acțiune nu poate fi inversată.
+
+
+Pentru a șterge spațiul de lucru:
+
+1. Apasă butonul **Șterge spațiu de lucru**
+2. Confirmă ștergerea când ești solicitat
+
+**Notă**: Numai administratorii spațiului de lucru pot șterge spațiile de lucru.
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/ro/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..20eb4c9e30
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Întrebări frecvente privind setările
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Setări Spațiu de Lucru
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Setări profil
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Apasă pe **Activează 2FA**
+ 4. Scanează codul QR cu aplicația ta de autentificare
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Apasă pe **Șterge contul**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Setări Experiență
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Mergeți la **Setări → Conturi**
+ 2. Faceți clic pe **Adăugați cont**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Mergeți la **Setări → Conturi**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Domenii
+
+
+
+ Da! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Funcții ale Laboratorului
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/settings/overview.mdx b/packages/twenty-docs/l/ro/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..58ae353db9
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Setări
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Mergeți la **Setări → Conturi**
+2. Faceți clic pe **Adăugați cont**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/ro/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Mergi la **Setări → Membri**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Pașii următori
+
+* [Workspace settings](/l/ro/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/ro/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/ro/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..f3f5dcf84f
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Vizualizare calendar
+description: Afișează înregistrările cu câmpuri de dată într-un calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/ro/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..24ea04e6b6
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Vizualizări de Tabel
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Vizualizări Kanban
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Cele mai bune practici
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/ro/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/ro/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..06c3202c9a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ---------- | -------------------------------------------------- |
+| Text | Equals, Contains, Starts with, Ends with, Is empty |
+| Număr | Equals, Greater than, Less than, Between, Is empty |
+| Dată | Equals, Before, After, Between, Is empty |
+| Select | Equals, Is any of, Is empty |
+| Bifă | Is true, Is false |
+| Relație | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/ro/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/ro/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..43b8439951
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Despre vizualizările Kanban
+
+Kanban views visually map out process flows, where each column stands for a distinct stage and each card represents a record.
+
+## Mută Carduri între Etape
+
+You can move each card between stages as it goes through your workflow by dragging and dropping. Pentru a continua, ține apăsat pe un card și mută-l la etapa următoare.
+
+
+
+## Add and Delete Stages
+
+Poți personaliza fluxul de lucru pentru a se potrivi nevoilor tale folosind etape, care reprezintă o valoare într-un Câmp Selectează:
+
+### Adaugă Etape
+
+Pentru a adăuga o etapă, accesează setările câmpului Selectează navigând la Setări > Model de Date, selectând obiectul tău și apoi câmpul de care depinde tabloul Kanban.
+
+
+
+### Elimină Etape
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Poți configura panoul Kanban pentru a afișa unele câmpuri și a ascunde altele. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Poți, de asemenea, să rearanjezi ordinea câmpurilor ținând apăsat numele câmpului și trăgându-l acolo unde îl dorești.
+
+
+
+## Vizualizare Compactă
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Descriere |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Cele mai bune practici
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..c970aeeac6
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Vizualizări de Tabel
+description: Display your data in a spreadsheet-like list format.
+---
+
+## Despre Vizualizările de Tabel
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Cazuri de utilizare:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/ro/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..f7b4d23792
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## Vizibilitatea vizualizării
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Deschideți vizualizarea
+2. Faceți clic pe **Opțiuni → Vizibilitate**
+3. Select **Workspace** or **Unlisted**
+
+
+ Vizualizările implicite "Toate [Numele obiectului]" nu pot avea vizibilitatea modificată.
+
+
+## Rename a View
+
+1. Deschideți meniul derulant al vizualizării
+2. Faceți clic pe meniul **⋮** de lângă vizualizare
+3. Selectați **Editare**
+4. Enter the new name
+
+## Change View Icon
+
+1. Deschideți meniul derulant al vizualizării
+2. Faceți clic pe meniul **⋮** de lângă vizualizare
+3. Selectați **Editare**
+4. Click the icon to change it
+
+## Reordonați vizualizările
+
+Change the order views appear in the dropdown:
+
+1. Deschideți meniul derulant al vizualizării
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Favorite
+
+Fixați vizualizările utilizate frecvent pentru acces rapid:
+
+1. Deschideți meniul derulant al vizualizării
+2. Faceți clic pe meniul **⋮** de lângă o vizualizare
+3. Selectați **Adaugă la favorite**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Ștergeți o vizualizare
+
+1. Deschideți meniul derulant al vizualizării
+2. Faceți clic pe meniul **⋮** de lângă vizualizare
+3. Selectați **Ștergere**
+4. Confirmați ștergerea
+
+
+ Vizualizările șterse nu pot fi recuperate.
+
+
+## Related
+
+* [Views Overview](/l/ro/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/ro/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..34c0993956
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Cerințe
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Faceți clic pe **Salvare**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Obiect | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Oportunități | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/ro/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..da6cb3d44b
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Cerințe
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Faceți clic pe **Salvare**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Completat |
+
+## Related
+
+* [Kanban Views](/l/ro/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/ro/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..baad783154
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Faceți clic pe **Salvare**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Opțiunea | Descriere |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Salvează
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/ro/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..ad9e603826
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Restrict Access to Your View
+description: Control who can see your custom views.
+---
+
+Fiecare vizualizare (cu excepția vizualizărilor implicite "Toate [Numele obiectului]") are propria setare de vizibilitate.
+
+## Steps
+
+1. Open the view you want to restrict
+2. Click **Options** in the top right
+3. Click **Visibility**
+4. Select **Unlisted**
+
+Your view is now visible only to you.
+
+## Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+## Notițe
+
+* The default "All [Object Name]" views cannot be made unlisted
+* Unlisted views don't appear in other users' view dropdowns
+* You can change visibility back to Workspace at any time
+
+## Related
+
+* [View Settings](/l/ro/user-guide/views-pipelines/capabilities/view-settings) — all view configuration options
diff --git a/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..44f789cb1a
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Etapa | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Cele mai bune practici
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/ro/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..39c446605d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Cerințe
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Configurare**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Câmp | Valoare |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Bun venit la {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Tipul Trigger-ului | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Configurare**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Configurare**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Configurare**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Cele mai bune practici
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Depanare
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..3f0a13061c
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Cele mai bune practici
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..2bdec86828
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Exemplu |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Rezultat
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Descriere |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Depanare
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Cele mai bune practici
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..27742ee292
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Acțiuni Workflow
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Acțiunile definesc ce se întâmplă după declanșarea unui trigger. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Creați o Înregistrare
+
+Adaugă o nouă înregistrare la un obiect selectat.
+
+**Configurare**:
+
+* Selectați obiectul țintă
+* Completați câmpurile obligatorii și opționale
+* Use data from previous steps or input values manually to populate fields
+
+**Output**: Datele noii înregistrări create sunt disponibile pentru utilizare în pașii următori.
+
+### Actualizați Înregistrarea
+
+Modifică o înregistrare existentă într-un obiect selectat.
+
+
+
+**Configurare**:
+
+* Selectați obiectul țintă
+* Alegeți înregistrarea specifică de actualizat.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Selectați câmpurile de modificat și introduceți valori noi
+
+**Output**: Datele înregistrării actualizate sunt disponibile pentru utilizare în pașii următori.
+
+### Ștergeți Înregistrarea
+
+Îndepărtează o înregistrare dintr-un obiect selectat.
+
+**Configurare**:
+
+* Selectați obiectul țintă
+* Alegeți înregistrarea specifică de șters
+
+**Output**: Datele înregistrării șterse rămân disponibile pentru utilizare în pașii următori.
+
+### Căutați Înregistrări
+
+Găsește înregistrări într-un obiect selectat folosind condițiile de filtrare.
+
+**Configurare**:
+
+* Selectați obiectul de căutat
+* Setați criterii de filtrare pentru a restrânge rezultatele
+* Configurați ordonarea și limitele
+
+**Output**: Returnează înregistrările care se potrivesc care pot fi utilizate în pașii următori.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/ro/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Configurare**:
+
+* Selectați obiectul țintă
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Folosiți datele din pașii anteriori pentru a completa câmpurile
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Iterator
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Configurare**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Define the actions to perform on each record in the loop.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filter
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Configurare**:
+
+* Select the record to filter
+* Definiți condițiile și criteriile de filtrare
+* Configurați care înregistrări ar trebui să treacă la pașii următori
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Tip | Descriere |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Cazuri de utilizare**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### Send Email
+
+Trimite un email din fluxul dumneavoastră de lucru. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Configurare**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Introduceți adresa de email a destinatarului.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Setați linia de subiect.
+* Compuneți corpul mesajului. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Formular
+
+Solicită un formular în timpul execuției fluxului de lucru pentru a colecta intrarea utilizatorului. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Pentru fluxurile de lucru cu alte declanșatoare (Înregistrare creată, actualizată, etc.), formularele sunt accesibile doar prin interfața de execuție a fluxului de lucru, ceea ce nu este experiența de utilizator așteptată. Un centru de notificări va fi lansat în 2026 pentru a sprijini corespunzător formularele în fluxurile de lucru automatizate.
+
+
+**Configurare**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Output**: Răspunsurile formularului sunt disponibile pentru utilizare în pașii următori.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Cod
+
+Rulați JavaScript personalizat în cadrul fluxului dumneavoastră de lucru.
+
+**Configurare**:
+
+* Accesați variabilele din pașii anteriori. You can edit the variables names dynamically.
+
+
+
+* Scrieți cod JavaScript în editor
+* Returnați variabilele pentru utilizare în pașii următori
+* Testați codul direct în pas
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### Solicitare HTTP
+
+Trimite o cerere la un API extern ca parte a fluxului dumneavoastră de lucru.
+
+
+
+**Configurare**:
+
+* Introduceți URL-ul punctului final API. Using parameters from previous steps is possible.
+* Selectați metoda HTTP (GET, POST, PUT, PATCH, DELETE)
+* Adăugați anteturile și valorile necesare
+* Oferiți un exemplu de răspuns pentru previzualizarea structurii
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Configurare**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/ro/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/ro/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..7ea55bc804
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Workflow Credits
+description: Understand workflow credit consumption and management.
+---
+
+Creditele fluxului de lucru stimulează automatizările dvs. în Twenty. Înțelegerea modului în care funcționează vă ajută să optimizați costurile și să gestionați eficient bugetul de automatizare.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Cum funcționează consumul de credite
+
+Creditele sunt consumate când fluxurile de lucru se execută, nu atunci când le creați. Fiecare acțiune a fluxului de lucru consumă credite în funcție de complexitatea sa:
+
+### Consumul de credite în funcție de tipul de acțiune
+
+* **Operațiuni interne de bază**: Consum foarte mic de credite
+ * Căutați Înregistrări
+ * Creează înregistrare
+ * Actualizați Înregistrarea
+ * Ștergeți Înregistrarea
+ * Acțiuni de formular
+
+* **Operațiuni complexe**: Consum mai ridicat de credite
+ * Acțiuni de cod (execuție JavaScript)
+ * Solicitări HTTP către servicii externe
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Deducere în timp real
+
+Creditele sunt retrase în timp real pe măsură ce fluxurile de lucru se execută. Acest lucru înseamnă:
+
+* Fluxurile de lucru în ciornă nu consumă credite
+* Numai fluxurile de lucru active, rulate utilizează alocarea dvs. de credite
+* Fluxurile de lucru eșuate consumă totuși credite pentru pașii finalizați
+
+## Gestionarea creditelor
+
+### Verificați utilizarea creditelor
+
+1. Accesați **Setări → Facturare**
+2. Vizualizați consumul dvs. actual de credite și soldul rămas
+3. Monitorizați modelele de utilizare pentru a optimiza fluxurile de lucru
+
+### Achiziționarea de credite suplimentare
+
+Dacă aveți nevoie de mai multe credite decât alocarea planificată:
+
+1. Accesați **Setări → Facturare**
+2. Faceți clic pe opțiunea de a achiziționa credite suplimentare. Sunt disponibile pachete de diferite dimensiuni.
+3. Creditele sunt adăugate la soldul dvs. actual
+
+## Cele mai bune practici
+
+* **Procesare loturi**: Utilizați operațiuni în masă și acțiuni cu Iteratoare eficient
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Optimizați acțiunile de cod pentru eficiență
+* Batch operations to reduce individual action calls
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..7289d51c8d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Rulările fluxului de lucru
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Status | Descriere |
+| -------------- | ------------------------------------------------------------------------ |
+| **Se execută** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Format de date invalid
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..06d06ff281
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: Declanșatoare pentru fluxuri de lucru
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Fluxurile de lucru întotdeauna încep cu un declanșator unic care definește când ar trebui să ruleze automatizarea.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Membri ai spațiului de lucru
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Înregistrarea este creată
+
+Pornește fluxul de lucru când este creată o nouă înregistrare într-un obiect selectat (Persoane, Companii, Oportunități sau orice obiect personalizat).
+
+**Configurare**: Selectați tipul de obiect pentru a monitoriza noile înregistrări.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Înregistrarea este actualizată
+
+Pornește fluxul de lucru când se fac modificări într-o înregistrare existentă.
+
+**Configurare**:
+
+* Selectați tipul de obiect
+* Specificați opțional care câmpuri să fie monitorizate pentru modificări
+
+## Înregistrarea este actualizată sau creată
+
+Pornește fluxul de lucru când o înregistrare este fie creată, fie actualizată într-un obiect selectat.
+
+**De ce contează acest lucru**: Acest declanșator este deosebit de util deoarece înregistrările create prin metode diferite se comportă diferit:
+
+* **Importuri API/CSV**: Înregistrările sunt create cu toate câmpurile completate imediat
+* **Creare manuală**: Înregistrările sunt create mai întâi, apoi câmpurile sunt adăugate în actualizări ulterioare
+
+**Configurare**:
+
+* Selectați tipul de obiect pentru a monitoriza
+* Specificați opțional care câmpuri să fie monitorizate pentru modificări
+* Fluxul de lucru va fi declanșat atât la crearea inițială, cât și la orice actualizări ulterioare
+
+## Înregistrarea este ștearsă
+
+Pornește fluxul de lucru când o înregistrare este eliminată dintr-un obiect.
+
+**Configurare**: Selectați tipul de obiect pentru a monitoriza ștergerile.
+
+## Manual Trigger
+
+Pornește fluxul de lucru când este declanșat de o acțiune a utilizatorului. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Configurare disponibilitate**:
+Alegeți cum ar trebui ca fluxul de lucru să gestioneze selecția înregistrărilor:
+
+* **Global**: Nu se necesită nicio înregistrare pentru a declanșa acest flux de lucru. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Single**: Înregistrările selectate vor fi transmise către fluxul dumneavoastră de lucru. Se configurează pentru un obiect dat. Mai multe înregistrări pot fi selectate înainte de a declanșa fluxul de lucru. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Bulk**: Înregistrările selectate vor fi transmise către fluxul dumneavoastră de lucru. Se configurează pentru un obiect dat. Mai multe înregistrări pot fi selectate înainte de a declanșa fluxul de lucru. Fluxul de lucru va rula o singură dată, oferind întreaga listă de înregistrări ca intrare. This means the workflow needs to contain an [Iterator action](/l/ro/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Configurare suplimentară**:
+
+* Selectați obiectul țintă (pentru modurile Single și Bulk)
+* Alegeți o pictogramă de comandă pentru declanșarea fluxului de lucru
+* Configurați plasarea în navbar (fixat sau nefixat)
+
+**Metode de acces**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Buton personalizat în navbarul superior (dacă este configurat)
+
+## Time-Based Trigger: On a Schedule
+
+Pornește fluxul de lucru în mod recurent, conform configurării pe care o definiți.
+
+**Configurare**:
+
+* Selectați unitatea de timp (minute, ore, zile)
+* Introduceți o valoare sau folosiți expresii cron personalizate pentru programare avansată
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Pornește fluxul de lucru când este primită o cerere GET sau POST de la un serviciu extern.
+
+
+
+**Configurare**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ----------------------------------------- |
+| New leads need processing | Înregistrarea este creată |
+| Data changes need sync | Înregistrarea este actualizată |
+| Import/manual data handling | Înregistrarea este actualizată sau creată |
+| Cleanup after deletion | Înregistrarea este ștearsă |
+| User-initiated action | Lansare manuală |
+| Recurring reports | Conform unui program |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..0ce7b6b287
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Cod |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Valoare |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Sursa | Date |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..90498a2a66
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Salvează
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Câmp | Valoare |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Persoane |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..ab7550d885
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Valoare |
+| ------------- | --------------------------------- |
+| **Field** | Etapa |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Valoare |
+| ------------ | ---------------------------------------- |
+| **Object** | Companie |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Valoare |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Acțiune | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filter | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Cod | Format data for invoicing API |
+| 5 | Solicitare HTTP | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..076f6cadd3
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Exemplu |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Câmp | Valoare |
+| --------------- | ---------------------------------------------------- |
+| Prenume | `{{trigger.body.firstName}}` |
+| Nume de familie | `{{trigger.body.lastName}}` |
+| Email | `{{trigger.body.email}}` |
+| Companie | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..9fee39e8a5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Configurați:
+
+| Câmp | Valoare |
+| ------------------------- | ------------------------------- |
+| **Object** | Companii |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Tip** | Client |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Proprietarul contului** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Configurați:
+
+| Câmp | Valoare |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Sarcini |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Configurați:
+
+| Câmp | Valoare |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Configurați:
+
+| Câmp | Valoare |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Verifică:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Declanșator
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Acțiuni
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..350332ee57
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Configurați:
+
+| Câmp | Valoare |
+| ---------- | ----------------------------------------------- |
+| **Object** | Oportunități |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Câmp | Valoare |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..3845cd36d1
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Prezentare generală
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Cerințe
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/ro/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/ro/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..c7a77ae4d5
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Cazuri de Utilizare Comune
+
+| Sursa | Destination | Fields to Copy |
+| ------------ | ------------ | ------------------------------- |
+| Companie | Oportunitate | Industry, Company Size, ARR |
+| Persoană | Oportunitate | Email, Phone, Title |
+| Oportunitate | Companie | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Configurare
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Configurare
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Configurare
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/ro/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Cele mai bune practici
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..a3da72ac55
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Cazuri de Utilizare Comune
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/ro/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Configurare
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/ro/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Configurare
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Configurare
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Configurare
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Cele mai bune practici
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Testare
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/ro/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/ro/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..bbe7f197ec
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Prezentare generală
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configurați:
+
+| Câmp | Valoare |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..2b3940c5f9
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Servicii Profesionale
+description: Obține ajutor profesional în dezvoltarea fluxurilor de lucru complexe și a automatizărilor de la echipa Twenty și partenerii certificați.
+---
+
+## Când Aveți Nevoie de Ajutor Profesional?
+
+Consultați servicii profesionale pentru:
+
+* Integrări complexe multi-sistem
+* Logică avansată de afaceri și reguli de automatizare
+* Fluxuri de lucru pentru procesarea datelor la scară largă
+* Dezvoltare API personalizată
+* Team training and workflow optimization
+* Când nu aveți resurse interne
+
+## Opțiuni de Servicii
+
+### Pachete de Introducere
+
+Obțineți ajutorul echipei noastre de bază cu pachetele noastre de 4 ore de [Introducere](https://twenty.com/onboarding-packages):
+
+* **Workflow Creation**: Build custom workflows for your business processes
+* **Proiectarea modelului de date**: Optimizați structura datelor pentru automatizarea fluxului de lucru
+* **Migrarea datelor**: Importați datele existente cu integrare adecvată a fluxurilor de lucru
+
+### Parteneri de implementare
+
+Colaborați cu parteneri certificați pentru personalizări avansate. Contactați-ne la contact@twenty.com pentru a vă conecta cu partenerii noștri de [implementare](https://twenty.com/partners).
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..18d35dba5d
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Depanarea fluxului de lucru
+description: Common workflow issues and how to resolve them.
+---
+
+## Probleme comune și soluții
+
+### Flux de lucru care nu se declanșează
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Soluții**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Soluții**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Soluții**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Soluții**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Soluții**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..93985bf369
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Tip | Records Required | Rulările fluxului de lucru |
+ | --- | ---------------- | -------------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/ro/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Exemple**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/ro/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Soluții**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | Valoare | Behavior |
+ | ----- | ------- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/ro/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/ro/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..fe86dd1c0e
--- /dev/null
+++ b/packages/twenty-docs/l/ro/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Fluxuri de lucru
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## De ce Contează Fluxurile de Lucru
+
+Twenty a fost construit pentru a oferi utilizatorilor săi flexibilitate maximă. În loc să vă forțeze să adaptați procesele de afaceri la funcții rigide și predefinite, fluxurile de lucru vă permit să creați automatizări care să susțină cel mai bine cazurile de utilizare unice ale afacerii dvs.
+
+Fluxurile de lucru sunt funcția in-app a Twenty pentru crearea acestor automatizări. Ele vă oferă blocurile de construcție pentru a crea exact ceea ce are nevoie afacerea dvs., când are nevoie.
+
+## Ce pot face cu fluxurile de lucru?
+
+Recomandăm construirea automatizărilor pentru două scopuri principale:
+
+1. **Automatizări interne pentru a facilita activitatea zilnică a echipei dvs.**: Reduceți numărul de intrări manuale și sarcini repetitive care încetinesc echipa dvs.
+2. **Aduceți date în și în afara Twenty**: Conectați Twenty prin apeluri API și webhooks la baza dvs. de date și alte instrumente.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Cele mai bune practici ale fluxurilor de lucru
+
+* **Editați numele pașilor**: Redenumiți pașii fluxului dvs. de lucru pentru a descrie clar ce face fiecare. Acest lucru ajută la întreținere și facilitează transmiterea către colegi
+* **Folosiți datele pașilor anteriori**: Puteți utiliza câmpuri din înregistrările returnate de orice pas anterior din fluxul dvs. de lucru
+* **Începeți simplu**: Începeți cu fluxuri de lucru de bază și adăugați complexitate în timp, pe măsură ce deveniți mai familiar cu sistemul
+* **Planificați înainte de a construi**: Configurați logica fluxului de lucru înainte de a începe construcția pentru a evita blocarea la jumătatea procesului
+
+## Pașii următori
+
+* [Workflow Triggers](/l/ro/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ro/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/best-practices-server.mdx
new file mode 100644
index 0000000000..eb019b9cbc
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/best-practices-server.mdx
@@ -0,0 +1,22 @@
+---
+title: Лучшие практики
+---
+
+Этот документ описывает лучшие практики, которым следует следовать при работе с бэкендом.
+
+## Следуйте модульному подходу
+
+Бэкенд следует модульному подходу, который является основным принципом при работе с NestJS. Убедитесь, что вы разбиваете код на повторно используемые модули, чтобы поддерживать чистую и хорошо организованную кодовую базу.
+Каждый модуль должен инкапсулировать конкретную функциональность и иметь чётко определённую область ответственности. This modular approach enables clear separation of concerns and removes unnecessary complexities.
+
+## Expose services to use in modules
+
+Всегда создавайте сервисы с одной чёткой областью ответственности, что повышает читаемость и облегчает сопровождение кода. Называйте сервисы понятно и единообразно.
+
+Также следует экспортировать сервисы, которые вы хотите использовать в других модулях. Экспорт сервисов в другие модули возможен благодаря мощной системе внедрения зависимостей NestJS и способствует слабой связности между компонентами.
+
+## Избегайте использования типа `any`
+
+Когда вы объявляете переменную с типом `any`, система проверки типов TypeScript перестаёт выполнять проверку, что позволяет присваивать переменной значения любого типа. TypeScript использует вывод типов для определения типа переменной на основе значения. Если объявить переменную с типом `any`, TypeScript больше не сможет вывести её тип. Это затрудняет выявление ошибок, связанных с типами, во время разработки, приводит к ошибкам времени выполнения и делает код менее поддерживаемым, менее надёжным и труднее понятным для других разработчиков.
+
+Поэтому всё должно иметь тип. Поэтому, если вы создаёте новый объект с именем и фамилией, следует создать интерфейс или тип с полями имя и фамилия, определяющий структуру объекта, с которым вы работаете.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/custom-objects.mdx
new file mode 100644
index 0000000000..b5eeda41f5
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/custom-objects.mdx
@@ -0,0 +1,39 @@
+---
+title: Пользовательские объекты
+---
+
+Объекты - это структуры, которые позволяют хранить данные (записи, атрибуты и значения), специфичные для организации. Twenty provides both standard and custom objects.
+
+Стандартные объекты - это встроенные объекты с набором атрибутов, доступных для всех пользователей. Examples of standard objects in Twenty include Company and Person. Стандартные объекты имеют стандартные поля, которые также доступны всем пользователям Twenty, например, Company.displayName.
+
+Пользовательские объекты - это объекты, которые вы можете создать для хранения уникальной информации для вашей организации. They are not built-in; members of your workspace can create and customize custom objects to hold information that standard objects aren't suitable for.
+
+## Схема высокого уровня
+
+
+
+
+
+
+
+## Как это работает
+
+Пользовательские объекты происходят из таблиц метаданных, определяющих форму, имя и тип объектов. Вся эта информация присутствует в базе данных схемы метаданных, состоящей из таблиц:
+
+* **DataSource**: Указывает, где находятся данные.
+* **Объект**: Описывает объект и связывается с DataSource.
+* **Поле**: Описывает поля объекта и соединяет с объектом.
+
+Чтобы добавить пользовательский объект, участник рабочего пространства сделает запрос к /metadata API. Это обновляет метаданные соответствующим образом и создает схему GraphQL на основе метаданных, храня их в кэше GQL для дальнейшего использования.
+
+
+
+
+
+
+
+Для извлечения данных процесс включает выполнение запросов через конечную точку /graphql и их передачу через Query Resolver.
+
+
+
+
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/feature-flags.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/feature-flags.mdx
new file mode 100644
index 0000000000..7655d42f04
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/feature-flags.mdx
@@ -0,0 +1,46 @@
+---
+title: Feature Flags
+---
+
+Feature flags are used to hide experimental features. Для Twenty они устанавливаются на уровне рабочей области, а не на уровне пользователя.
+
+## Adding a new feature flag
+
+В `FeatureFlagKey.ts` добавьте флаг функции:
+
+```ts
+type FeatureFlagKey =
+ | 'IS_FEATURENAME_ENABLED'
+ | ...;
+```
+
+Также добавьте его в перечисление в `feature-flag.entity.ts`:
+
+```ts
+enum FeatureFlagKeys {
+ IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
+ ...
+}
+```
+
+To apply a feature flag on a **backend** feature use:
+
+```ts
+@Gate({
+ featureFlag: 'IS_FEATURENAME_ENABLED',
+})
+```
+
+To apply a feature flag on a **frontend** feature use:
+
+```ts
+const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
+```
+
+## Configure feature flags for the deployment
+
+Измените соответствующую запись в таблице `core.featureFlag`:
+
+| идентификатор | ключ | workspaceId | значение |
+| ------------- | ------------------------ | ----------- | -------- |
+| Случайный | `IS_FEATURENAME_ENABLED` | WorkspaceID | `истина` |
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..fda2dfa443
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Архитектура папок
+info: A detailed look into our server folder architecture
+---
+
+Структура серверной директории следующая:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Ability
+
+Определяет разрешения и включает обработчики для каждого объекта.
+
+## Декораторы
+
+Определяет пользовательские декораторы в NestJS для расширенной функциональности.
+
+Смотрите [пользовательские декораторы](https://docs.nestjs.com/custom-decorators) для более подробной информации.
+
+## Фильтры
+
+Includes exception filters to handle exceptions that might occur in GraphQL endpoints.
+
+## Guards
+
+Смотрите [защиты](https://docs.nestjs.com/guards) для более подробной информации.
+
+## Health
+
+Включает общедоступный REST API (healthz), который возвращает JSON, чтобы подтвердить, что база данных работает должным образом.
+
+## Метаданные
+
+Определяет пользовательские объекты и предоставляет GraphQL API (graphql/metadata).
+
+## Рабочее пространство
+
+Генерирует и обслуживает пользовательскую GraphQL схему на основе метаданных.
+
+### Структура каталога рабочей области
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+Корень каталога рабочей области включает `workspace.factory.ts`, файл, содержащий функцию `createGraphQLSchema`. Эта функция генерирует схему, специфичную для рабочей области, используя метаданные для адаптации схемы для индивидуальных рабочих областей. Разделением построения схемы и резолвера, мы используем функцию `makeExecutableSchema`, которая объединяет эти отдельные элементы.
+
+This strategy is not just about organization, but also helps with optimization, such as caching generated type definitions to enhance performance and scalability.
+
+### Workspace Schema builder
+
+Генерирует GraphQL схему и включает:
+
+#### Фабрики:
+
+Специализированные конструкторы для генерации связанных с GraphQL конструкций.
+
+* Фабрика типов переводит метаданные поля в типы GraphQL, используя `TypeMapperService`.
+* Фабрика определения типов создает объекты ввода или вывода GraphQL на основе `objectMetadata`.
+
+#### Типы GraphQL
+
+Включает перечисления, входы, объекты и скаляры и служит строительными блоками для построения схемы.
+
+#### Интерфейсы и определение объектов
+
+Содержит чертежи для GraphQL сущностей и включает как предопределенные, так и пользовательские типы, такие как `MONEY` или `URL`.
+
+#### Сервисы
+
+Содержит сервис, ответственный за ассоциацию FieldMetadataType с соответствующим скаляром GraphQL или модификаторами запроса.
+
+#### Хранилище
+
+Включает класс `TypeDefinitionsStorage`, содержащий переиспользуемые определения типов, предотвращая дублирование GraphQL типов.
+
+### Конструктор резолверов рабочей области
+
+Создает функции резолверов для запроса и изменения схемы GraphQL.
+
+Каждая фабрика в этом каталоге отвечает за создание отдельного типа резолвера, как, например, `FindManyResolverFactory`, предназначенной для адаптируемого применения в различных таблицах.
+
+### Выполнители запросов рабочей области
+
+Выполняет сгенерированные запросы в базе данных и анализирует результат.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/queue.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/queue.mdx
new file mode 100644
index 0000000000..28efd40865
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/queue.mdx
@@ -0,0 +1,41 @@
+---
+title: Очередь сообщений
+---
+
+Очереди позволяют выполнять асинхронные операции. Их можно использовать для выполнения фоновых задач, таких как отправка приветственного письма при регистрации.
+Каждый случай использования будет иметь собственный класс очереди, расширенный из `MessageQueueServiceBase`.
+
+В настоящее время мы поддерживаем только `bull-mq`[bull-mq](https://bullmq.io/) в качестве драйвера очереди.
+
+## Шаги для создания и использования новой очереди
+
+1. Добавьте имя очереди для вашей новой очереди в перечисление `MESSAGE_QUEUES`.
+2. Предоставьте фабричную реализацию очереди с именем очереди в качестве токена зависимости.
+3. Инжектируйте созданную вами очередь в необходимый модуль/сервис с именем очереди в качестве токена зависимости.
+4. Add worker class with token based injection just like producer.
+
+### Пример использования
+
+```ts
+класс Resolver {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {}
+
+ async onSomeAction() {
+ //бизнес логика
+ await this.queue.add(someData);
+ }
+}
+
+//асинхронный работник
+класс CustomWorker {
+ constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {
+ this.initWorker();
+ }
+
+ async initWorker() {
+ await this.queue.work(async ({ id, data }) => {
+ //логика работника
+ });
+ }
+}
+```
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..641fc79914
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,101 @@
+---
+title: Команды бекэнда
+---
+
+## Полезные команды
+
+Эти команды следует выполнять из папки packages/twenty-server.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### Первоначальная настройка
+
+```
+npx nx database:reset twenty-server # setup the database with dev seeds
+```
+
+### Запуск сервера
+
+```
+npx nx run twenty-server:start
+```
+
+### Lint
+
+```
+npx nx run twenty-server:lint # добавьте --fix для устранения ошибок линтера
+```
+
+### Тест
+
+```
+npx nx run twenty-server:test:unit # запуск модульных тестов
+npx nx run twenty-server:test:integration # запуск интеграционных тестов
+```
+
+Примечание: вы можете использовать `npx nx run twenty-server:test:integration:with-db-reset`, если необходимо сбросить базу данных перед выполнением интеграционных тестов.
+
+### Сброс базы данных
+
+If you want to reset and seed the database, you can run the following command:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Миграции
+
+#### Для объектов в схемах Core/Metadata (TypeORM)
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Для объектов Рабочего пространства
+
+Файлов миграций нет, миграции создаются автоматически для каждого рабочего пространства,
+хранятся в базе данных и применяются этой командой
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ Это удалит базу данных, переустановит миграции и семена.
+
+ Убедитесь, что создали резервную копию данных, которые хотите сохранить, прежде чем выполнять эту команду.
+
+
+## Технологический стек
+
+Для работы с серверной частью Twenty в основном использует NestJS.
+
+Prisma был первым ORM, который мы использовали. Но чтобы пользователи могли создавать собственные поля и объекты, использование более низкого уровня было более логичным, так как нам нужен был тонкий контроль. Теперь проект использует TypeORM.
+
+Вот как теперь выглядит стек технологий.
+
+**Ядро**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**База данных**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Интеграции сторонних решений**
+
+* [Sentry](https://sentry.io/welcome/) для отслеживания ошибок
+
+**Тестирование**
+
+* [Jest](https://jestjs.io/)
+
+**Инструменты**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Разработка**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/zapier.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/zapier.mdx
new file mode 100644
index 0000000000..a7df2dafc3
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/zapier.mdx
@@ -0,0 +1,83 @@
+---
+title: Приложение Zapier
+---
+
+Легко синхронизируйте Twenty с более чем 3000 приложениями с помощью [Zapier](https://zapier.com/). Автоматизируйте задачи, повышайте продуктивность и улучшайте ваши отношения с клиентами!
+
+## О Zapier
+
+Zapier — это инструмент, который позволяет автоматизировать рабочие процессы, соединяя приложения, которые ваша команда использует каждый день. The fundamental concept of Zapier is automation workflows, called Zaps, and include triggers and actions.
+
+Вы можете узнать больше о том, как работает Zapier [здесь](https://zapier.com/how-it-works).
+
+## Настройка
+
+### Шаг 1: Установите пакеты Zapier
+
+```bash
+cd packages/twenty-zapier
+
+yarn
+```
+
+### Шаг 2: Войдите через CLI
+
+Используйте свои учетные данные Zapier для входа с помощью CLI:
+
+```bash
+zapier login
+```
+
+### Step 3: Set environment variables
+
+В каталоге `packages/twenty-zapier` выполните:
+
+```bash
+cp .env.example .env
+```
+
+Запустите приложение локально, перейдите на [http://localhost:3000/settings/api-webhooks](http://localhost:3000/settings/api-webhooks) и сгенерируйте API ключ.
+
+Замените значение **YOUR_API_KEY** в файле `.env` сгенерированным вами API ключом.
+
+## Разработка
+
+
+ Make sure to run `yarn build` before any `zapier` command.
+
+
+### Тест
+
+```bash
+yarn test
+```
+
+### Lint
+
+```bash
+yarn format
+```
+
+### Отслеживайте и компилируйте при редактировании кода
+
+```bash
+yarn watch
+```
+
+### Проверьте ваше приложение Zapier
+
+```bash
+yarn validate
+```
+
+### Разверните ваше приложение Zapier
+
+```bash
+yarn deploy
+```
+
+### Список всех команд CLI Zapier
+
+```bash
+zapier
+```
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..22c5c3e80e
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Сообщение об ошибках
+
+Чтобы сообщить об ошибке, пожалуйста, [создайте задачу на GitHub](https://github.com/twentyhq/twenty/issues/new).
+
+Вы также можете попросить помощи на [Discord](https://discord.gg/cx5n4Jzs57).
+
+## Запросы на Новые Функции
+
+Если вы не уверены, что это ошибка, и вам кажется, что это ближе к запросу на новую функцию, то вам, вероятно, стоит [начать обсуждение вместо этого](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Перед началом
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..c0e17dd2b0
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,324 @@
+---
+title: Лучшие практики
+---
+
+Этот документ описывает лучшие практики, которых следует придерживаться при работе с фронтендом.
+
+## Управление состоянием
+
+React и Recoil отвечают за управление состоянием в коде.
+
+### Используйте `useRecoilState` для хранения состояния
+
+Полезно создавать столько атомов, сколько вам нужно для хранения состояния.
+
+
+ Лучше использовать дополнительные атомы, чем пытаться быть слишком кратким с передачей свойств.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default value',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Не используйте `useRef` для хранения состояния
+
+Избегайте использования `useRef` для хранения состояния.
+
+Если вы хотите сохранить состояние, вам следует использовать `useState` или `useRecoilState`.
+
+Смотрите [как управлять повторными рендерами](#managing-re-renders), если вы считаете, что вам нужен `useRef`, чтобы предотвратить их.
+
+## Управление повторными рендерами
+
+Управлять повторными рендерами в React может быть сложно.
+
+Вот некоторые правила, которые стоит соблюдать, чтобы избегать ненужных повторных рендеров.
+
+Помните, что вы всегда можете избежать повторных рендеров, если поймете причину их возникновения.
+
+### Работа на корневом уровне
+
+Избежать повторных рендеров в новых функциях стало проще, устранив их на корневом уровне.
+
+Сайдкар-компонент `PageChangeEffect` содержит всего один `useEffect`, который реализует всю логику при изменении страницы.
+
+Таким образом, вы знаете, что есть только одно место, которое может вызвать повторный рендер.
+
+### Всегда думайте дважды, прежде чем добавлять `useEffect` в ваш код
+
+Повторные рендеры часто вызываются ненужными `useEffect`.
+
+Подумайте, нужно ли вам использовать `useEffect`, или же вы можете перенести логику в функцию обработчика событий.
+
+Как правило, несложно перенести логику в функции `handleClick` или `handleChange`.
+
+Вы также можете найти их в библиотеках, таких как Apollo: `onCompleted`, `onError` и т. д.
+
+### Используйте дополнительный компонент для извлечения `useEffect` или логики получения данных
+
+Если вы считаете, что нужно добавить `useEffect` в корневой компонент, стоит рассмотреть возможность его извлечения в сайдкар-компонент.
+
+Вы можете применять то же самое для логики получения данных, с хуками Apollo.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Используйте состояния семейства Recoil и селекторы семейства Recoil
+
+Состояния семейства Recoil и селекторы — отличный способ избежать повторных рендеров.
+
+Они полезны, когда нужно хранить список элементов.
+
+### Не следует использовать `React.memo(MyComponent)`
+
+Избегайте использования `React.memo()`, так как это не решает причину повторного рендера, но разрывает цепочку рендера, что может привести к неожиданному поведению и усложнить рефакторинг кода.
+
+### Ограничьте использование `useCallback` или `useMemo`
+
+Часто это не нужно и делает код труднее читаемым и поддерживаемым для улучшения производительности, которую сложно заметить.
+
+## Console.logs
+
+`console.log` полезны во время разработки, предоставляя информацию в реальном времени о значениях переменных и потоке кода. Однако оставление их в коде для продакшена может привести к нескольким проблемам:
+
+1. **Производительность**: Избыточное логирование может повлиять на производительность, особенно в клиентских приложениях.
+
+2. **Безопасность**: Логирование конфиденциальных данных может раскрыть критическую информацию тем, кто может просматривать консоль браузера.
+
+3. **Чистота**: Заполнение консоли логами может скрыть важные предупреждения или ошибки, которые нужно увидеть разработчикам или инструментам.
+
+4. **Профессионализм**: Конечные пользователи или клиенты, проверяющие консоль и видящие множество логов, могут усомниться в качестве и обработке кода.
+
+Убедитесь, что все `console.logs` удалены перед загрузкой кода в продакшен.
+
+## Называние
+
+### Наименование переменных
+
+Названия переменных должны точно описывать их цель или функцию.
+
+#### Проблемы с универсальными именами
+
+Универсальные имена в программировании не идеальны, так как они не хватает определенности, что ведет к неясности и ухудшению читаемости кода. Такие имена не передают цель переменной или функции, делая трудным понимать намерение кода без более глубокого исследования. Это может привести к увеличению времени отладки, повышению вероятности ошибок и трудностям в поддержке и сотрудничестве. Между тем, описательные имена делают код самодокументирующимся и более простым для навигации, улучшая качество кода и продуктивность разработчиков.
+
+```tsx
+// ❌ Плохо, использует общее имя, которое неясно передает назначение или содержимое
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ Хорошо, использует описательное имя
+const [email, setEmail] = useState('');
+```
+
+#### Некоторые слова, которых стоит избегать в названиях переменных
+
+* dummy
+
+### Обработчики событий
+
+Названия обработчиков событий должны начинаться с `handle`, в то время как `on` используется как префикс для наименования событий в пропсах компонентов.
+
+```tsx
+// ❌ Плохо
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ Good
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Необязательные пропсы
+
+Избегайте передачи значения по умолчанию для необязательного пропса.
+
+**ПРИМЕР**
+
+Возьмите компонент `EmailField`, определенный ниже:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Использование**
+
+```tsx
+// ❌ Плохо, передача того же значения, что и значение по умолчанию, не добавляет ценности
+const Form = () => ;
+```
+
+```tsx
+// ✅ Хорошо, предполагается значение по умолчанию
+const Form = () => ;
+```
+
+## Компонент как пропсы
+
+Постарайтесь максимально передавать неинстанцированные компоненты как пропсы, чтобы дети могли самостоятельно определять, какие пропсы им нужно передать.
+
+Наиболее распространенный пример этого — иконки компонентов:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// В MyComponent
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+Чтобы React понял, что компонент является компонентом, нужно использовать PascalCase, чтобы потом инстанцировать его с ``
+
+## Сверление пропсов: минимизируйте его
+
+Сверление пропсов в контексте React — это практика передачи переменных состояния и их сеттеров через многие уровни компонентов, даже если промежуточные компоненты их не используют. Хотя иногда это необходимо, чрезмерное сверление пропсов может привести к:
+
+1. **Уменьшение читаемости**: Отслеживание происхождения пропса или мест, где он используется, может стать запутанным в глубоко вложенной структуре компонентов.
+
+2. **Трудности в обслуживании**: Изменения в структуре пропсов одного компонента могут потребовать изменений в нескольких компонентах, даже если они их не используют напрямую.
+
+3. **Снижение повторного использования компонентов**: Компонент, получающий много пропсов только для передачи их дальше, становится менее универсальным и сложным для повторного использования в разных контекстах.
+
+Если вы считаете, что чрезмерно используете сверление пропсов, обратите внимание на [лучшие практики управления состоянием](#state-management).
+
+## Импорт
+
+При импорте предпочтение стоит отдать указанным псевдонимам, а не полным или относительным путям.
+
+**Псевдонимы**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Использование**
+
+```tsx
+// ❌ Плохо, указывает полный относительный путь
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ Хорошо, используется указанный псевдоним
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Проверка схемы
+
+[Zod](https://github.com/colinhacks/zod) — это проверка схемы для нетипизированных объектов:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email must be a valid email'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Изменения с нарушением совместимости
+
+Всегда проводите тщательное ручное тестирование перед тем, как продолжить, чтобы гарантировать, что изменения не вызвали перебоев в других местах, поскольку тесты еще не были широко интегрированы.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..f6e53f3586
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Архитектура папок
+info: Подробное рассмотрение нашей архитектуры папок
+---
+
+In this guide, you will explore the details of the project directory structure and how it contributes to the organization and maintainability of Twenty.
+
+Следуя этому соглашению об архитектуре папок, легче находить файлы, связанные с конкретными функциями, и обеспечивать масштабируемость и поддерживаемость приложения.
+
+```
+front
+└───modules
+│ └───module1
+│ │ └───submodule1
+│ └───module2
+│ └───ui
+│ │ └───display
+│ │ └───inputs
+│ │ │ └───buttons
+│ │ └───...
+└───pages
+└───...
+```
+
+## Страницы
+
+Включает компоненты высокого уровня, определенные маршрутами приложения. Они импортируют более низкоуровневые компоненты из папки модулей (подробности ниже).
+
+## Модули
+
+Каждый модуль представляет собой функционал или группу функций, содержащий свои специфические компоненты, состояния и операционную логику.
+Все они должны следовать структуре ниже. Вы можете вложить модули в модули (называются подмодулями), и те же правила будут применяться.
+
+```
+module1
+ └───components
+ │ └───component1
+ │ └───component2
+ └───constants
+ └───contexts
+ └───graphql
+ │ └───fragments
+ │ └───queries
+ │ └───mutations
+ └───hooks
+ │ └───internal
+ └───states
+ │ └───selectors
+ └───types
+ └───utils
+```
+
+### Контексты
+
+Контекст — это способ передачи данных через дерево компонентов без необходимости передавать props вручную на каждом уровне.
+
+См. [React Context](https://react.dev/reference/react#context-hooks) для более подробной информации.
+
+### GraphQL
+
+Включает фрагменты, запросы и мутации.
+
+См. [GraphQL](https://graphql.org/learn/) для более подробной информации.
+
+* Фрагменты
+
+Фрагмент — это переиспользуемая часть запроса, которую можно использовать в разных местах. Используя фрагменты, легче избежать дублирования кода.
+
+См. [GraphQL Fragments](https://graphql.org/learn/queries/#fragments) для более подробной информации.
+
+* Запросы
+
+См. [GraphQL Queries](https://graphql.org/learn/queries/) для более подробной информации.
+
+* Мутации
+
+См. [GraphQL Mutations](https://graphql.org/learn/queries/#mutations) для более подробной информации.
+
+### Хуки
+
+См. [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks) для более подробной информации.
+
+### Состояния
+
+Содержит логику управления состоянием. [RecoilJS](https://recoiljs.org) этим управляет.
+
+* Селекторы: См. [RecoilJS Selectors](https://recoiljs.org/docs/basic-tutorial/selectors) для более подробной информации.
+
+Встроенное управление состоянием в React все еще управляет состоянием внутри компонента.
+
+### Утилиты
+
+Должны содержать только переиспользуемые чистые функции. В противном случае создайте пользовательские хуки в папке `hooks`.
+
+## Пользовательский интерфейс
+
+Содержит все переиспользуемые компоненты пользовательского интерфейса, используемые в приложении.
+
+Эта папка может содержать подкаталоги, такие как `data`, `display`, `feedback` и `input` для конкретных типов компонентов. Каждый компонент должен быть автономным и переиспользуемым, чтобы вы могли использовать его в разных частях приложения.
+
+Разделяя компоненты пользовательского интерфейса от других компонентов в папке `modules`, легче поддерживать согласованность дизайна и вносить изменения в пользовательский интерфейс, не затрагивая другие части (бизнес-логику) кодовой базы.
+
+## Интерфейс и зависимости
+
+Вы можете импортировать код других модулей из любого модуля, кроме папки `ui`. Это позволит упростить тестирование его кода.
+
+### Внутренний
+
+Каждая часть (хуки, состояния, ...) модуля может иметь внутреннюю папку, содержащую части, которые используются только внутри модуля.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..7402f21bdd
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,290 @@
+---
+title: Руководство по стилю
+---
+
+Этот документ включает правила, которые нужно соблюдать при написании кода.
+
+Цель заключается в обеспечении однородности кода, который будет легко читать и поддерживать.
+
+Для этого лучше быть немного более многословными, чем слишком краткими.
+
+Всегда держите в голове, что код читают чаще, чем пишут, особенно в проекте с открытым исходным кодом, где к нему может присоединиться кто угодно.
+
+There are a lot of rules that are not defined here, but that are automatically checked by linters.
+
+## React
+
+### Используйте функциональные компоненты.
+
+Всегда используйте функциональные компоненты TSX.
+
+Не используйте стандартный `import` с `const`, так как это сложнее для чтения и импорта с автозаполнением кода.
+
+```tsx
+// ❌ Плохо, сложнее читать, сложнее импортировать с автозаполнением кода
+const MyComponent = () => {
+ return Hello World
;
+};
+
+export default MyComponent;
+
+// ✅ Хорошо, легко читать, легко импортировать с автозаполнением кода
+export function MyComponent() {
+ return Hello World
;
+};
+```
+
+### Свойства
+
+Создайте тип пропсов и назовите его `(ComponentName)Props`, если нет необходимости экспортировать его.
+
+Используйте деструктуризацию пропсов.
+
+```tsx
+// ❌ Плохо, отсутствует тип
+export const MyComponent = (props) => Hello {props.name}
;
+
+// ✅ Хорошо, тип определен
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Hello {name}
;
+```
+
+#### Воздержитесь от использования `React.FC` или `React.FunctionComponent` для определения типов пропсов.
+
+```tsx
+/* ❌ - Плохо, определяет аннотации типов компонента с `FC`
+ * - С `React.FC`, компонент автоматически принимает проп children,
+ * даже если он не определен в типе пропс. Это может быть не всегда
+ * желательно, особенно если компонент не подразумевает рендеринг
+ * детей.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### Нет разворачивания пропсов одиночной переменной в JSX-элементах.
+
+Avoid using single variable prop spreading in JSX elements, like `{...props}`. Подобная практика часто приводит к менее читаемому и сложному в поддержке коду, так как непонятно, какие пропсы принимает компонент.
+
+```tsx
+/* ❌ - Плохо, распространяет одиночный пропс в базовый компонент
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Обоснование:
+
+* С первого взгляда становится яснее, какие пропсы передаются в коде, что делает его легче понятным и поддерживаемым.
+* Это помогает предотвратить жесткое связывание между компонентами через их пропсы.
+* Инструменты для анализа кода облегчают обнаружение опечаток или неиспользуемых пропсов при явном перечислении пропсов.
+
+## JavaScript
+
+### Используйте оператор нулевого слияния `??`
+
+```tsx
+// ❌ Плохо, может вернуть 'default', даже если значение равно 0 или ''
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ Хорошо, вернет 'default', только если значение равно null или undefined
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Используйте опциональную цепочку `?.`
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Используйте `type` вместо `interface`
+
+Всегда используйте `type` вместо `interface`, так как они почти всегда пересекаются, а `type` более гибок.
+
+```tsx
+// ❌ Плохо
+interface MyInterface {
+ name: string;
+}
+
+// ✅ Хорошо
+type MyType = {
+ name: string;
+};
+```
+
+### Используйте строковые литералы вместо перечислений.
+
+[Строковые литералы](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types) - это основной способ обработки значений, напоминающих перечисление, в TypeScript. Они легче расширяются с помощью Pick и Omit и обеспечивают лучшее взаимодействие с разработчиком, особенно с автозаполнением кода.
+
+Вы можете увидеть, почему TypeScript рекомендует избегать перечислений [здесь](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums).
+
+```tsx
+// ❌ Плохо, использует перечисление
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ Хорошо, использует строковый литерал
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL и внутренние библиотеки
+
+Вы должны использовать перечисления, которые генерирует кодогенератор GraphQL.
+
+Также лучше использовать перечисление при использовании внутренней библиотеки, чтобы она не требовала явного указания типа строкового литерала, не связанного с внутренним API.
+
+Пример:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Стилизация
+
+### Использование StyledComponents
+
+Стилизуйте компоненты с помощью [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Плохо
+Hello World
+```
+
+```tsx
+// ✅ Хорошо
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Добавляйте префикс "Styled" к стилизованным компонентам, чтобы отличать их от "реальных" компонентов.
+
+```tsx
+// ❌ Плохо
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ Хорошо
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Темизация
+
+Использование темы для большинства стилевых компонентов является предпочтительным подходом.
+
+#### Единицы измерения
+
+Избегайте использования значений `px` или `rem` напрямую в стилизованных компонентах. Необходимые значения обычно уже определены в теме, поэтому рекомендуется использовать тему для этих целей.
+
+#### Цвета
+
+Избегайте введения новых цветов; используйте существующую палитру из темы. Если палитра не соответствует, оставьте комментарий, чтобы команда могла это исправить.
+
+```tsx
+// ❌ Плохо, непосредственно указаны стилизованные значения без использования темы
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ Хорошо, использует тему
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Запрещение импорта типов
+
+Избегайте импорта типов. Чтобы поддерживать этот стандарт, ESLint проверяет и сообщает о любых нарушениях импорта типов. Это помогает сохранить согласованность и читаемость кода TypeScript.
+
+```tsx
+// ❌ Плохо
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Плохо
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ Хорошо
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Почему избегать импорта типов
+
+* **Согласованность**: Избегая импорта типов и используя единый подход для импорта как типов, так и значений, кодовая база остается согласованной в стиле импорта модулей.
+
+* **Читаемость**: Избегающий импорт типов улучшает читаемость кода, делая ясным, когда вы импортируете значения или типы. Это снижает двусмысленность и облегчает понимание назначения импортируемых символов.
+
+* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code.
+
+### Правило ESLint
+
+An ESLint rule, `@typescript-eslint/consistent-type-imports`, enforces the no-type import standard. Это правило создаст ошибки или предупреждения для всех нарушений импорта типов.
+
+Обратите внимание, что это правило касается редких крайних случаев, когда случаются непреднамеренные импорты типов. TypeScript itself discourages this practice, as mentioned in the [TypeScript 3.8 release notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). В большинстве случаев вам не нужно использовать импорты только типов.
+
+Чтобы гарантировать соответствие вашего кода этому правилу, убедитесь, что вы запускаете ESLint как часть вашего рабочего процесса разработки.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/ru/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..16c5b1327b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,333 @@
+---
+title: Локальная настройка
+description: Руководство для участников (или любопытных разработчиков), которые хотят запускать Twenty локально.
+---
+
+## Требования
+
+
+
+ Прежде чем установить и использовать Twenty, убедитесь, что у вас установлено следующее:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` не будет работать, используйте `yarn`. Yarn теперь поставляется в комплекте с Node.js, так что устанавливать его отдельно не нужно.
+ Нужно лишь выполнить `corepack enable`, чтобы активировать Yarn, если вы еще этого не сделали.
+
+
+
+
+ 1. Установите WSL
+ Откройте PowerShell от имени администратора и выполните:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Теперь должно появиться приглашение на перезагрузку компьютера. Если нет, перезагрузите его вручную.
+
+ После перезагрузки откроется окно PowerShell и установит Ubuntu. Это может занять некоторое время.
+ Появится запрос на создание имени пользователя и пароля для вашей установки Ubuntu.
+
+ 2. Установите и настройте git
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Your Name"
+
+ git config --global user.email "youremail@domain.com"
+ ```
+
+ 3. Установите nvm, node.js и yarn
+
+
+ Используйте `nvm`, чтобы установить правильную версию `node`. `.nvmrc` гарантирует, что все участники используют одну и ту же версию.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ Закройте и откройте снова терминал, чтобы использовать nvm. Затем выполните следующие команды.
+
+ ```bash
+
+ nvm install # устанавливает рекомендуемую версию node
+
+ nvm use # использовать рекомендуемую версию node
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Шаг 1: Клонирование с помощью Git
+
+Выполните следующую команду в терминале.
+
+
+
+ Если вы еще не настроили SSH ключи, вы можете узнать, как это сделать [здесь](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh).
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Шаг 2: Перейдите в корень
+
+```bash
+cd twenty
+```
+
+Все команды в следующих шагах следует выполнять из корня проекта.
+
+## Шаг 3: Настройка базы данных PostgreSQL
+
+
+
+ **Опция 1 (предпочтительно):** Чтобы настроить вашу базу данных локально:
+ Используйте следующую ссылку для установки Postgresql на вашу Linux машину: [Установка Postgresql](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Примечание: Возможно, вам потребуется добавить `sudo -u postgres` к команде перед `psql`, чтобы избежать ошибок с правами.
+
+ **Опция 2:** Если у вас установлен docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Опция 1 (предпочтительно):** Чтобы настроить вашу базу данных локально с помощью `brew`:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Вы можете проверить, запущен ли сервер PostgreSQL, выполнив:
+
+ ```bash
+ brew services list
+ ```
+
+ Установщик может не создать пользователя `postgres` по умолчанию при установке
+ через Homebrew на MacOS. Вместо этого он создает роль PostgreSQL, которая совпадает с вашим именем пользователя в MacOS
+ например, "john".
+ Чтобы проверить и создать пользователя `postgres`, при необходимости выполните следующие шаги:
+
+ ```bash
+ # Подключитесь к PostgreSQL
+ psql postgres
+ или
+ psql -U $(whoami) -d postgres
+ ```
+
+ Оказавшись в приглашении psql (postgres=#), выполните:
+
+ ```bash
+ # Список существующих ролей PostgreSQL
+ \du
+ ```
+
+ Вы увидите вывод, похожий на следующий:
+
+ ```bash
+ Role name | Attributes | Member of
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Если вы не видите роль `postgres` в списке, перейдите к следующему шагу.
+ Создайте роль `postgres` вручную:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Это создает роль суперпользователя с именем `postgres` с доступом для входа.
+
+ **Опция 2:** Если у вас установлен docker:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Все последующие шаги следует выполнять в терминале WSL (внутри вашей виртуальной машины)
+
+ **Опция 1:** Чтобы настроить вашу базу данных Postgresql локально:
+ Используйте следующую ссылку для установки Postgresql на вашу Linux виртуальную машину: [Установка Postgresql](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Примечание: Возможно, вам потребуется добавить `sudo -u postgres` к команде перед `psql`, чтобы избежать ошибок с правами.
+
+ **Опция 2:** Если у вас установлен docker:
+ Запуск Docker на WSL добавляет дополнительный уровень сложности.
+ Используйте эту опцию только если вы комфортно себя чувствуете с дополнительными шагами, включая включение [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Теперь вы можете получить доступ к базе данных по адресу [localhost:5432](localhost:5432), с пользователем `postgres` и паролем `postgres`.
+
+## Шаг 4: Настройка базы данных Redis (кэш)
+
+Twenty требует кэша Redis для обеспечения наилучшей производительности
+
+
+
+ **Опция 1:** Чтобы настроить Redis локально:
+ Используйте следующую ссылку для установки Redis на вашу Linux машину: [Установка Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Опция 2:** Если у вас установлен docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Опция 1 (предпочтительно):** Чтобы настроить Redis локально с помощью `brew`:
+
+ ```bash
+ brew install redis
+ ```
+
+ Запустите сервер redis:
+ `brew services start redis`
+
+ **Опция 2:** Если у вас установлен docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Опция 1:** Чтобы настроить Redis локально:
+ Используйте следующую ссылку для установки Redis на вашу Linux виртуальную машину: [Установка Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Опция 2:** Если у вас установлен docker:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Если вам нужен графический интерфейс клиента, мы рекомендуем [redis insight](https://redis.io/insight/) (доступна бесплатная версия)
+
+## Шаг 5: Настройка переменных окружения
+
+Используйте переменные окружения или файлы `.env` для настройки вашего проекта. More info [here](/l/ru/developers/self-host/capabilities/setup)
+
+Скопируйте `.env.example` файлы в `/front` и `/server`:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/ru/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Шаг 6: Установка зависимостей
+
+Чтобы собрать сервер Twenty и добавить данные в вашу базу данных, выполните следующую команду:
+
+```bash
+yarn
+```
+
+Обратите внимание, что `npm` или `pnpm` не будут работать
+
+## Шаг 7: Запуск проекта
+
+
+
+ В зависимости от вашего дистрибутива Linux, сервер Redis может быть запущен автоматически.
+ Если нет, проверьте [Руководство по установке Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) для вашего дистрибутива.
+
+
+
+ Redis должен уже работать. Если нет, выполните:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ В зависимости от вашей дистрибуции Linux, сервер Redis может быть запущен автоматически.
+ Если нет, проверьте [руководство по установке Redis](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) для вашего дистрибутива.
+
+
+
+Настройте вашу базу данных с помощью следующей команды:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Запустите сервер, рабочую программу и сервисы фронтенда:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+В качестве альтернативы, вы можете запустить все сервисы сразу:
+
+```bash
+npx nx start
+```
+
+## Шаг 8: Использовать Twenty
+
+**Frontend**
+
+Фронтенд Twenty будет работать на [http://localhost:3001](http://localhost:3001).
+Вы можете войти, используя учетную запись демо по умолчанию: `tim@apple.dev` (пароль: `tim@apple.dev`)
+
+**Backend**
+
+* Сервер Twenty будет работать на [http://localhost:3000](http://localhost:3000).
+* К GraphQL API можно получить доступ по адресу [http://localhost:3000/graphql](http://localhost:3000/graphql).
+* К REST API можно обратиться по адресу [http://localhost:3000/rest](http://localhost:3000/rest).
+
+## Устранение неполадок
+
+Если у вас возникли проблемы, проверьте [Устранение неполадок](/l/ru/developers/self-host/capabilities/troubleshooting) для получения решений.
diff --git a/packages/twenty-docs/l/ru/developers/contribute/contribute.mdx b/packages/twenty-docs/l/ru/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..71a5767583
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Обзор
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/ru/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/ru/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..b6b755cadf
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: API
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty разработан для удобства разработчиков и предлагает мощные API, которые адаптируются к вашей пользовательской модели данных. Мы предоставляем четыре различных типа API, чтобы удовлетворить различные интеграционные потребности.
+
+## Developer-First Approach
+
+Twenty generates APIs specifically for your data model:
+
+* **Длинные ID не требуются**: используйте названия объектов и полей прямо в конечных точках.
+* **Standard and custom objects treated equally**: Your custom objects get the same API treatment as built-in ones
+* **Выделенные конечные точки**: каждый объект и поле получают свою собственную конечную точку API.
+* **Пользовательская документация**: генерируется специально для модели данных вашего рабочего пространства.
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### Основной API
+
+Доступен на `/rest/` или `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Управление отношениями записей.
+
+### API метаданных
+
+Доступен на `/rest/metadata/` или `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Создание, изменение или удаление объектов и полей.
+* Настройка параметров рабочего пространства.
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Формат | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## Конечные точки API
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Аутентификация
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Create an API Key
+
+1. Перейдите в **Настройки → API и Вебхуки**
+2. Click **+ Create key**
+3. Настроить:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. Нажмите **Сохранить**
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. Перейдите в **Настройки → Роли**
+2. Click on the role to assign
+3. Откройте вкладку **Назначение**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/ru/user-guide/permissions-access/capabilities/permissions) for details.
+
+### Управление API-ключами
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Перейдите в **Настройки → API и Вебхуки**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Пакетные операции
+
+Both REST and GraphQL support batch operations:
+
+* **Размер пакета**: до 60 записей на запрос.
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Лимит | Значение |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/ru/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/ru/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..1e01ea6536
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Требования
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+Отсюда вы можете:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Аутентификация
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Примеры:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Устранение неполадок
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/ru/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/ru/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..f0d7b0d264
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Вебхуки
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Создать Webhook
+
+1. Перейдите в **Настройки → API и Вебхуки → Вебхуки**
+2. Нажмите **+ Создать вебхук**
+3. Enter your webhook URL (must be publicly accessible)
+4. Нажмите **Сохранить**
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Manage Webhooks
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## События
+
+Twenty sends webhooks for these event types:
+
+| Событие | Пример |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Поле | Описание |
+| --------------- | ------------------------------------------------ |
+| `событие` | What happened (e.g., `person.created`) |
+| `данные` | The full record that was created/updated/deleted |
+| `метка времени` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Валидация вебхуков
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Заголовок | Описание |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Метод | Направление | Use Case |
+| ---------------------------- | ----------- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/ru/developers/extend/extend.mdx b/packages/twenty-docs/l/ru/developers/extend/extend.mdx
new file mode 100644
index 0000000000..5b91b5a4fb
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Обзор
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/ru/developers/introduction.mdx b/packages/twenty-docs/l/ru/developers/introduction.mdx
new file mode 100644
index 0000000000..3902e2340e
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/ru/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/ru/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..8b07ae53f8
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Другие методы
+---
+
+
+ Этот документ поддерживается сообществом. Он может содержать ошибки.
+
+
+## Kubernetes через Terraform и Manifests
+
+Документация, поддерживаемая сообществом для развертывания Kubernetes, доступна [здесь](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s)
+
+### Coolify
+
+Разверните Twenty на серверах с использованием Coolify. (официальное изображение на Coolify будет вскоре доступно)
+
+[Документация Coolify](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Разверните Twenty на EasyPanel с использованием шаблона, поддерживаемого сообществом, ниже.
+
+[Развернуть на EasyPanel](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Разверните Twenty на серверах с Elest.io, используя ссылку ниже.
+
+[Развернуть на Elest.io](https://elest.io/open-source/twenty)
+
+### Twenty на Railway
+
+Разверните Twenty на Railway с использованием шаблона, поддерживаемого сообществом, ниже.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Twenty на Sealos
+
+Разверните Twenty на Sealos с использованием шаблона, поддерживаемого сообществом, ниже.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Другое
+
+Please feel free to Open a PR to add more Cloud Provider options.
diff --git a/packages/twenty-docs/l/ru/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/ru/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..f6955d32ae
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Click w/ Docker Compose
+---
+
+
+ Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/ru/developers/contribute/capabilities/local-setup).
+
+
+## Обзор
+
+Это руководство предоставляет пошаговые инструкции по установке и настройке приложения Twenty с помощью Docker Compose. Цель заключается в том, чтобы сделать процесс простым и избежать распространенных ошибок, которые могут привести к сбоям в настройке.
+
+**Важно:** изменяйте только те настройки, которые явно упоминаются в этом руководстве. Изменение других конфигураций может привести к проблемам.
+
+See docs [Setup Environment Variables](/l/ru/developers/self-host/capabilities/setup) for advanced configuration. Все переменные окружения должны быть задекларированы в файле docker-compose.yml на уровне сервера и / или рабочего потока в зависимости от переменной.
+
+## Системные требования
+
+* ОЗУ: Убедитесь, что в вашей среде не менее 2 ГБ ОЗУ. Недостаток памяти может вызвать сбой процессов.
+* Docker и Docker Compose: убедитесь, что оба установлены и обновлены.
+
+## Вариант 1: Скрипт с одной строкой
+
+Установите последнюю стабильную версию Twenty одной командой:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Для установки конкретной версии или ветки:
+
+```bash
+VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* Замените x.y.z на желаемый номер версии.
+* Замените branch-name на имя ветки, которую вы хотите установить.
+
+## Вариант 2: Ручные шаги
+
+Выполните следующие шаги для ручной настройки.
+
+### Шаг 1: Настройте файл среды
+
+1. **Создайте файл .env**
+
+ Скопируйте пример файла окружения в новый .env файл в вашем рабочем каталоге:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Создайте секретные токены**
+
+ Выполните следующую команду для генерации уникальной случайной строки:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Внимание:** держите это значение в секрете / не делитесь им.
+
+3. **Обновите файл `.env`**
+
+ Замените значение плейсхолдера в вашем файле .env на сгенерированный токен:
+
+ ```ini
+ APP_SECRET=first_random_string
+ ```
+
+4. **Установите пароль для Postgres**
+
+ Обновите значение `PG_DATABASE_PASSWORD` в файле .env, используя надежный пароль без специальных символов.
+
+ ```ini
+ PG_DATABASE_PASSWORD=my_strong_password
+ ```
+
+### Шаг 2: Получите файл Docker Compose
+
+Скачайте файл `docker-compose.yml` в ваш рабочий каталог:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Шаг 3: Запустите приложение
+
+Запустите Docker-контейнеры:
+
+```bash
+docker compose up -d
+```
+
+### Шаг 4: Доступ к приложению
+
+Если вы размещаете twentyCRM на своем компьютере, откройте ваш браузер и перейдите на [http://localhost:3000](http://localhost:3000).
+
+If you host it on a server, check that the server is running and that everything is ok with
+
+```bash
+curl http://localhost:3000
+```
+
+## Конфигурация
+
+### Открыть доступ к Twenty из внешней сети
+
+По умолчанию Twenty работает на `localhost` на порту `3000`. Чтобы получить доступ через внешний домен или IP-адрес, необходимо настроить `SERVER_URL` в вашем `.env` файле.
+
+#### Понимание `SERVER_URL`
+
+* **Протокол:** используйте `http` или `https` в зависимости от вашей настройки.
+ * Используйте `http`, если SSL не настроен.
+ * Используйте `https`, если SSL настроен.
+* **Домен/IP:** это имя домена или IP-адрес, где ваше приложение доступно.
+* **Порт:** указывайте номер порта, если вы не используете порты по умолчанию (`80` для `http`, `443` для `https`).
+
+### Требования к SSL
+
+SSL (HTTPS) требуется для правильной работы некоторых функций браузера. Хотя эти функции могут работать во время разработки на локальном компьютере (поскольку браузеры обрабатывают localhost иначе), правильная настройка SSL необходима при размещении Twenty на регулярном домене.
+
+Например, API буфера обмена может потребовать защищенный контекст - некоторые функции, такие как кнопки копирования в приложении, могут не работать без включения HTTPS.
+
+Мы настоятельно рекомендуем настроить Twenty за обратным прокси-сервером с прекращением SSL для оптимальной безопасности и функциональности.
+
+#### Настройка `SERVER_URL`
+
+1. **Определите ваш URL-адрес доступа**
+ * **Без обратного прокси (Прямой доступ):**
+
+ Если вы получаете доступ к приложению напрямую без использования обратного прокси:
+
+ ```ini
+ SERVER_URL=http://ваш-домен-или-ip:3000
+ ```
+
+ * **С обратным прокси (Стандартные порты):**
+
+ Если вы используете обратный прокси, такой как Nginx или Traefik, и у вас настроен SSL:
+
+ ```ini
+ SERVER_URL=https://ваш-домен-или-ip
+ ```
+
+ * **С обратным прокси (Не стандартные порты):**
+
+ Если вы используете нестандартные порты:
+
+ ```ini
+ SERVER_URL=https://ваш-домен-или-ip:ваш-порт
+ ```
+
+2. **Обновите файл `.env`**
+
+ Откройте ваш файл `.env` и обновите `SERVER_URL`:
+
+ ```ini
+ SERVER_URL=http(s)://ваш-домен-или-ip:ваш-порт
+ ```
+
+ **Примеры:**
+
+ * Прямой доступ без SSL:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * Доступ через домен с SSL:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **Перезапустите приложение**
+
+ Для применения изменений перезапустите контейнеры Docker:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Рассмотрения
+
+* **Конфигурация обратного прокси:**
+
+ Убедитесь, что ваш обратный прокси передаёт запросы на правильный внутренний порт (`3000` по умолчанию). Настройте завершение SSL и все необходимые заголовки.
+
+* **Настройки брандмауэра:**
+
+ Откройте необходимые порты в вашем брандмауэре для обеспечения внешнего доступа.
+
+* **Последовательность:**
+
+ The `SERVER_URL` must match how users access your application in their browsers.
+
+#### Сохранение данных
+
+* **Data Volumes:**
+
+ Конфигурация Docker Compose использует тома для сохранения данных базы данных и хранилища сервера.
+
+* **Stateless Environments:**
+
+ Если развёртывание осуществляется в бесстатном окружении (например, некоторых облачных сервисах), настройте внешнее хранилище для сохранения данных.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Устранение неполадок
+
+Если у вас возникли проблемы, проверьте [Устранение неполадок](/l/ru/developers/self-host/capabilities/troubleshooting) для получения решений.
diff --git a/packages/twenty-docs/l/ru/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/ru/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..8d308bc529
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,292 @@
+---
+title: Настройка
+---
+
+# Управление конфигурацией
+
+
+ **Устанавливаете впервые?** Следуйте [руководству по установке Docker Compose](/l/ru/developers/self-host/capabilities/docker-compose), чтобы запустить Twenty, затем вернитесь сюда для настройки.
+
+
+Twenty предлагает **два режима конфигурации**, чтобы соответствовать разным потребностям развертывания:
+
+**Доступ к панели администратора:** Только пользователи с правами администратора (`canAccessFullAdminPanel: true`) могут получить доступ к интерфейсу конфигурации.
+
+## 1. Конфигурация панели администратора (по умолчанию)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # по умолчанию
+```
+
+**Большая часть конфигурации происходит через UI** после установки:
+
+1. Получите доступ к вашему экземпляру Twenty (обычно `http://localhost:3000`)
+2. Перейдите в **Настройки / Панель администратора / Переменные конфигурации**
+3. Настройте интеграции, почту, хранилище и многое другое
+4. Изменения вступают в силу немедленно (в течение 15 секунд для многоконтейнерных развертываний)
+
+
+ **Многоконтейнерное развертывание:** при использовании конфигурации базы данных (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`) серверные и рабочие контейнеры читают из одной базы данных. Изменения в панели администратора влияют на оба контейнера автоматически, исключая необходимость дублирования переменных среды между контейнерами (за исключением инфраструктурных переменных).
+
+
+**Что вы можете настроить через панель администратора:**
+
+* **Аутентификация** - Google/Microsoft OAuth, настройки паролей
+* **Электронная почта** - настройки SMTP, шаблоны, верификация
+* **Хранилище** - конфигурация S3, пути локального хранения
+* **Интеграции** - Gmail, Google Calendar, сервисы Microsoft
+* **Рабочий процесс и Ограничения скорости** - лимиты выполнения, ограничение API
+* **И многое другое...**
+
+
+
+
+ Каждая переменная документирована с описаниями в вашей панели администратора в **Настройки → Панель администратора → Переменные конфигурации**.
+ Некоторые инфраструктурные настройки, такие как соединения с базой данных (`PG_DATABASE_URL`), URL сервера (`SERVER_URL`) и секреты приложения (`APP_SECRET`), могут быть настроены только через файл `.env`.
+
+ [Полная техническая ссылка →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Конфигурация только для среды
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Вся конфигурация управляется через файлы `.env`:**
+
+1. Установите `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` в своем `.env` файле
+2. Добавьте все переменные конфигурации в ваш файл `.env`
+3. Перезапустите контейнеры, чтобы изменения вступили в силу
+4. Панель администратора будет показывать текущие значения, но не сможет их изменить
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Интеграция Gmail и Google Calendar
+
+### Создайте проект в Google Cloud
+
+1. Перейдите в [Google Cloud Console](https://console.cloud.google.com/)
+2. Создайте новый проект или выберите существующий
+3. Включите следующие API:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [People API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### Настройте OAuth
+
+1. Перейдите к [Учётные данные](https://console.cloud.google.com/apis/credentials)
+2. Создайте OAuth 2.0 Client ID
+3. Добавьте эти URI перенаправления:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Настройка в Twenty
+
+1. Перейдите в **Настройки → Панель администратора → Переменные конфигурации**
+2. Найдите раздел **Google Auth**.
+3. Установите эти переменные:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Режим только для среды:** если вы установили `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, добавьте эти переменные в свой `.env` файл вместо этого.
+
+
+соответствующий исходный код](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Если ваше приложение находится в тестовом режиме
+
+Если ваше приложение находится в тестовом режиме, вам потребуется добавить тестовых пользователей в ваш проект.
+
+На [экране согласия OAuth](https://console.cloud.google.com/apis/credentials/consent) добавьте тестовых пользователей в раздел "Тестовые пользователи".
+
+## Интеграция Microsoft 365
+
+
+ Пользователи должны иметь [лицензию Microsoft 365](https://admin.microsoft.com/Adminportal/Home), чтобы иметь возможность использовать API Календаря и Сообщений. Они не смогут синхронизировать свою учетную запись в Twenty без нее.
+
+
+### Создайте проект в Microsoft Azure
+
+Вам потребуется создать проект в [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) и получить учетные данные.
+
+### Включите API
+
+На консоли Microsoft Azure включите следующие API в "Разрешениях":
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profile
+* Microsoft Graph: offline_access
+
+Примечание: «Mail.ReadWrite» и «Mail.Send» обязательны только если вы хотите отправлять письма с использованием наших действий рабочего процесса. Вы можете использовать «Mail.Read», если хотите получать только письма.
+
+### Авторизованные URI перенаправления
+
+Вам нужно добавить следующие URI перенаправления в ваш проект:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Настройка в Twenty
+
+1. Перейдите в **Настройки → Панель администратора → Переменные конфигурации**
+2. Найдите раздел **Microsoft Auth**.
+3. Установите эти переменные:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Режим только для среды:** если вы установили `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, добавьте эти переменные в свой `.env` файл вместо этого.
+
+
+### Configure scopes
+
+соответствующий исходный код](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'электронная почта'
+* 'профиль'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Если ваше приложение находится в тестовом режиме
+
+Если ваше приложение находится в тестовом режиме, вам потребуется добавить тестовых пользователей в ваш проект.
+
+Добавьте тестовых пользователей в раздел "Пользователи и группы".
+
+## Фоновые задания для Календаря и Сообщений
+
+После настройки интеграций Gmail, Google Calendar или Microsoft 365, вам необходимо запустить фоновые задания, синхронизирующие данные.
+
+Зарегистрируйте следующие повторяющиеся задания в вашем контейнере рабочего:
+
+```bash
+# из вашего контейнера рабочего
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## Конфигурация электронной почты
+
+1. Перейдите в **Настройки → Панель администратора → Переменные конфигурации**
+2. Найдите раздел **Электронной почты**.
+3. Настройте параметры вашего SMTP:
+
+
+
+ Вам потребуется предоставить [Пароль Приложения](https://support.google.com/accounts/answer/185833).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_email_address
+ * EMAIL_SMTP_PASSWORD='gmail_app_password'
+
+
+
+ Помните, что если у вас включена двухфакторная аутентификация, вам потребуется предоставить [пароль приложения](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_email_address
+ * EMAIL_SMTP_PASSWORD='office365_password'
+
+
+
+ **smtp4dev** - это поддельный SMTP почтовый сервер для разработки и тестирования.
+
+ * Запустите образ smtp4dev: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * Получите доступ к интерфейсу smtp4dev здесь: [http://localhost:8090](http://localhost:8090)
+ * Установите следующие переменные:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Режим только для среды:** если вы установили `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, добавьте эти переменные в свой `.env` файл вместо этого.
+
diff --git a/packages/twenty-docs/l/ru/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/ru/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..55bf978f90
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,227 @@
+---
+title: Устранение неполадок
+---
+
+## Устранение неполадок
+
+Если вы столкнулись с какой-либо проблемой при настройке окружения для разработки, обновлении вашего экземпляра или самостоятельном хостинге,
+вот некоторые решения общих проблем.
+
+### Самостоятельный хостинг
+
+#### Первая установка завершается с ошибкой `password authentication failed for user "postgres"`
+
+🚨 **ВАЖНО: Это решение ТОЛЬКО для новых установок** 🚨
+Если у вас уже есть экземпляр Twenty с производственными данными, **НЕ** следуйте этим шагам, так как они безвозвратно удалят вашу базу данных!
+
+Во время первой установки Twenty вы можете изменить пароль по умолчанию для базы данных.
+Пароль, который вы установили во время первой установки, навсегда сохраняется в объеме базы данных. Если вы позже попытаетесь изменить этот пароль в вашей конфигурации без удаления старого объема, возникнут ошибки аутентификации, так как база данных по-прежнему использует исходный пароль.
+
+⚠️ ПРЕДУПРЕЖДЕНИЕ: Следующие шаги ПОЛНОСТЬЮ УДАЛЯТ все данные базы данных! ⚠️
+Продолжайте, только если это новая установка без важной информации.
+
+Чтобы обновить `PG_DATABASE_PASSWORD`, вам нужно:
+
+```sh
+# Обновите PG_DATABASE_PASSWORD в .env
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR разрывы строк обнаружены [Windows]
+
+Это связано с разрывами строк Windows и конфигурацией git. Попробуйте выполнить:
+
+```
+git config --global core.autocrlf false
+```
+
+Затем удалите репозиторий и клонируйте его заново.
+
+#### Отсутствует схема метаданных
+
+Во время установки Twenty, вам нужно настроить базу данных postgres с правильными схемами, расширениями и пользователями.
+Если вы успешно выполнили эту настройку, в вашей базе данных должны быть схемы `default` и `metadata`.
+Если их нет, убедитесь, что у вас на компьютере не запущено более одного экземпляра postgres.
+
+#### Невозможно найти модуль 'twenty-emails' или его соответствующие определения типа.
+
+Вам нужно собрать пакет `twenty-emails` перед запуском инициализации базы данных с помощью `npx nx run twenty-emails:build`.
+
+#### Отсутствует пакет twenty-x
+
+Убедитесь, что вы запустили yarn в корневой директории, а затем выполните команду `npx nx server:dev twenty-server`. Если это по-прежнему не работает, попробуйте собрать отсутствующий пакет вручную.
+
+#### Lint on Save не работает
+
+Это должно работать из коробки с установленным расширением eslint. Если это не работает, попробуйте добавить это в настройки vscode (на уровне контейнера разработчика):
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### При запуске `npx nx start` или `npx nx start twenty-front` возникает ошибка нехватки памяти
+
+В `packages/twenty-front/.env` раскомментируйте `VITE_DISABLE_TYPESCRIPT_CHECKER=true` и `VITE_DISABLE_ESLINT_CHECKER=true`, чтобы отключить фоновые проверки, таким образом уменьшая количество необходимой оперативной памяти.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Например, если вы работаете на сервере, запускайте только `npx nx worker twenty-server`
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
+
+Решение проблемы - выполнить нижеуказанную команду в терминале или добавить её в профиль .bashrc, чтобы настроить автоматически:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+Флаг --max-old-space-size=8192 устанавливает верхний предел 8 ГБ для heap Node.js; использование этого значения зависит от потребностей приложения.
+Источник: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. В Twenty мы заметили, что некоторые расширения VScode потребляют много оперативной памяти, поэтому мы временно их отключаем.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### При запуске `npx nx start` в логах появляются странные [0] и [1]
+
+Это ожидаемо, так как команда `npx nx start` запускает несколько команд под капотом
+
+#### Электронные письма не отправляются
+
+В большинстве случаев это происходит из-за того, что `воркер` не работает в фоновом режиме. Попробуйте запустить
+
+```
+npx nx worker twenty-server
+```
+
+#### Не удается подключить свой аккаунт Microsoft 365
+
+В большинстве случаев это происходит из-за того, что ваш администратор не включил лицензию Microsoft 365 для вашего аккаунта. Проверьте [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Если вы получили код ошибки `AADSTS50020`, это, вероятно, означает, что вы используете личную учетную запись Microsoft. Это пока не поддерживается. Подробнее [здесь](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist).
+
+#### При запуске `yarn` появляются предупреждения в консоли
+
+Предупреждения информируют о добавлении дополнительных зависимостей, которые не указаны явно в `package.json`, поэтому, пока не появляются критичные ошибки, всё должно работать как ожидается.
+
+#### Когда пользователь получает доступ к странице входа, в логах появляется ошибка о несанкционированном доступе пользователя к рабочему пространству.
+
+Это ожидаемо, так как пользователь не авторизован при выходе из системы, поскольку его личность не проверена.
+
+#### Как проверить, работает ли ваш воркер?
+
+* Перейдите на [webhook-test.com](https://webhook-test.com/) и скопируйте **Ваш уникальный URL вебхука**.
+
+
+
+
+
+* Откройте приложение Twenty, перейдите в `/settings` и включите переключатель **Advanced** внизу слева на экране.
+* Создайте новый вебхук.
+* Вставьте **Ваш уникальный URL вебхука** в поле **Endpoint Url** в Twenty. Установите **Фильтры** на `Компании` и `Создано`.
+
+
+
+
+
+* Перейдите в `/objects/companies` и создайте новую запись компании.
+* Вернитесь на [webhook-test.com](https://webhook-test.com/) и проверьте, был ли получен новый **POST запрос**.
+
+
+
+
+
+* Если **POST запрос** получен, ваш воркер успешно работает. В противном случае, вам нужно устранить неполадки вашего воркера.
+
+#### Фронтэнд не запускается и выдает ошибку TS5042: Опция 'project' не может быть использована вместе с исходными файлами на командной строке
+
+Закомментируйте плагин checker в `packages/twenty-ui/vite-config.ts`, как показано в примере ниже
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Административная панель недоступна
+
+Выполните `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` в контейнере базы данных, чтобы получить доступ к административной панели.
+
+### 1-click Docker compose
+
+#### Не удается войти в систему
+
+Если не удается войти в систему после настройки:
+
+1. Выполните следующие команды:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Перезапустите контейнеры Docker:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Учтите, что команда database:reset полностью удалит вашу базу данных и создаст её заново.
+
+#### Проблемы подключения за обратным прокси
+
+Если вы запускаете Twenty за обратным прокси и испытываете проблемы с подключением:
+
+1. **Проверьте SERVER_URL:**
+
+ Убедитесь, что `SERVER_URL` в вашем файле `.env` соответствует вашему внешнему URL-адресу, включая `https`, если SSL включён.
+
+2. **Проверьте настройки обратного прокси:**
+
+ * Убедитесь, что ваш обратный прокси правильно перенаправляет запросы на сервер Twenty.
+ * Убедитесь, что заголовки, как `X-Forwarded-For` и `X-Forwarded-Proto`, корректно установлены.
+
+3. **Перезапустите службы:**
+
+ После внесения изменений перезапустите как обратный прокси, так и контейнеры Twenty.
+
+#### Ошибка при загрузке изображения - доступ запрещён
+
+Проблема решается сменой владельца папки данных на хосте с root на другого пользователя и группу.
+
+## Получение помощи
+
+Если вы столкнулись с проблемами, не охваченными в этом руководстве:
+
+* Проверьте логи:
+
+ Просмотрите логи контейнера на наличие сообщений об ошибках:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Поддержка сообщества:
+
+ Обратитесь к [сообществу Twenty](https://github.com/twentyhq/twenty/issues) или [каналам поддержки](https://discord.gg/cx5n4Jzs57) за помощью.
diff --git a/packages/twenty-docs/l/ru/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/ru/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..3021341cf2
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,381 @@
+---
+title: Руководство по обновлению
+---
+
+## Общие рекомендации
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Если вы использовали Docker Compose, выполните следующие шаги:
+
+1. В терминале на хосте, где работает Twenty, отключите Twenty: `docker compose down`.
+
+2. Обновите версию, изменив значение `TAG` в файле .env рядом с вашим docker-compose. ( Мы рекомендуем использовать версии `major.minor`, такие как `v0.53`. )
+
+3. Верните Twenty в сеть с `docker compose up -d`.
+
+Если вы хотите обновить свою инстанцию на несколько версий, например с v0.33.0 до v0.35.0, вам потребуется сделать это поэтапно, сначала с v0.33.0 до v0.34.0, затем с v0.34.0 до v0.35.0.
+
+**Убедитесь, что после каждой обновленной версии у вас есть не поврежденная резервная копия.**
+
+## Специфические для версии шаги обновления
+
+## v1.0
+
+Привет, Twenty v1.0! 🎉
+
+## v0.60
+
+### Улучшение производительности
+
+Все взаимодействия с метаданными API оптимизированы для повышения производительности, особенно для манипуляции метаданными объектов и операций создания рабочих пространств.
+
+Мы обновили стратегию кэширования, чтобы приоритетом были попадания кэша перед запросами к базе данных, что значительно улучшило производительность операций с метаданными API.
+
+Если после обновления у вас возникнут проблемы с запуском, возможно, потребуется очистить ваш кэш, чтобы синхронизировать его с последними изменениями. Запустите эту команду в вашем контейнере twenty-server:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Обновите вашу инстанцию Twenty для использования изображения v0.55
+
+Вам больше не нужно запускать никакие команды, новое изображение автоматически выполнит все необходимые миграции.
+
+### `User does not have permission` error
+
+Если после обновления вы столкнетесь с ошибками авторизации в большинстве запросов, возможно, потребуется очистить кэш для пересчета последних прав доступа.
+
+В вашем контейнере `twenty-server`, запустите:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Эта проблема специфична для данной версии Twenty и не должна требоваться для будущих обновлений.
+
+### v0.54
+
+Начиная с версии `0.53`, ручные действия не требуются.
+
+#### Отказ от схемы метаданных
+
+Мы объединили схему `metadata` в `core`, чтобы упростить извлечение данных из `TypeORM`.
+Мы объединили этап команды `migrate` в команду `upgrade`. Мы не рекомендуем запускать `migrate` вручную в ваших контейнерах серверов/рабочих.
+
+### Начиная с v0.53
+
+Начиная с `0.53`, обновление программно выполняется внутри `DockerFile`, это означает, что отныне вам больше не нужно запускать команды вручную.
+
+Убедитесь, что вы обновляете свою инстанцию последовательно, без пропуска основной версии (например, `0.43.3` на `0.44.0` допускается, но `0.43.1` на `0.45.0` нет), иначе это может привести к десинхронизации версии рабочего пространства, что может вызвать ошибку во время выполнения и отсутствовать функциональность.
+
+Чтобы проверить, правильно ли было мигрировано рабочее пространство, вы можете просмотреть его версию в базе данных в таблице `core.workspace`.
+
+Она всегда должна находиться в диапазоне текущей версии вашего инстанции Twenty `major.minor`, вы можете просмотреть версию инстанции в админ-панели (на `/settings/admin-panel`, доступна, если свойство `canAccessFullAdminPanel` вашего пользователя установлено на true в базе данных) или запустив `echo $APP_VERSION` в вашем контейнере `twenty-server`.
+
+Чтобы исправить десинхронизированную версию рабочего пространства, вам потребуется обновить его с соответствующей версии Twenty, следуя последовательному руководству по обновлению и так далее, пока он не достигнет желаемой версии.
+
+#### Удаление `auditLog`
+
+Мы удалили стандартный объект auditLog, что означает, что размер вашей резервной копии может значительно уменьшиться после этой миграции.
+
+### v0.51 до v0.52
+
+Обновите вашу инстанцию Twenty для использования изображения v0.52
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### У меня рабочее пространство заблокировано на версии между `0.52.0` и `0.52.6`.
+
+К сожалению, `0.52.0` и `0.52.6` были полностью удалены из dockerHub.
+Вам потребуется вручную обновить версию рабочего пространства до `0.51.0` в базе данных и обновить с использованием версии twenty `0.52.11`, следуя её руководству по обновлению.
+
+### v0.50 до v0.51
+
+Обновите вашу инстанцию Twenty для использования изображения v0.51
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0 до v0.50.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.50.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Модификация в docker-compose.yml
+
+Эта версия включает модификацию `docker-compose.yml`, чтобы предоставить сервису `worker` доступ к тому `server-local-data`.
+Обновите ваш локальный `docker-compose.yml` с [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml)
+
+### v0.43.0 до v0.44.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.44.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0 до v0.43.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.43.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+В этой версии мы также переключились на изображение postgres:16 в docker-compose.yml.
+
+#### (Вариант 1) Миграция базы данных
+
+Сохранение существующего изображения postgres-spilo приемлемо, но вам потребуется зафиксировать версию в вашем docker-compose.yml на 0.43.0.
+
+#### (Вариант 2) Миграция базы данных
+
+Если вы хотите мигрировать вашу базу данных на новое изображение postgres:16, следуйте этим шагам:
+
+1. Сделайте дамп вашей базы данных из старого контейнера postgres-spilo
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Убедитесь, что ваш файл дампа не пустой.
+
+2. Обновите ваш файл docker-compose.yml с использованием изображения postgres:16, как в файле [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml).
+
+3. Восстановите базу данных в новый контейнер postgres:16.
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0 до v0.42.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.42.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Переменные окружения**
+
+* Удалено: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Добавлено: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0 до v0.41.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.41.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Переменные окружения**
+
+* Удалено: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0 до v0.40.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.40.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Переменные окружения**
+
+* Добавлено: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0 до v0.35.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.35.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.35` заботится о миграции данных всех рабочих пространств.
+
+**Переменные окружения**
+
+* Мы заменили `ENABLE_DB_MIGRATIONS` на `DISABLE_DB_MIGRATIONS` (значение по умолчанию теперь `false`, вероятно, вам не потребуется ничего устанавливать)
+
+### v0.33.0 до v0.34.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.34.0
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.34` заботится о миграции данных всех рабочих пространств.
+
+**Переменные окружения**
+
+* Удалено: `FRONT_BASE_URL`
+* Добавлено: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Мы обновили способ обработки URL frontend.
+Теперь вы можете установить URL frontend, используя переменные `FRONT_DOMAIN`, `FRONT_PROTOCOL` и `FRONT_PORT`.
+Если FRONT_DOMAIN не установлен, URL frontend будет зависеть от `SERVER_URL`.
+
+### v0.32.0 до v0.33.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.33.0
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+Команда `yarn command:prod cache:flush` очистит кэш Redis.
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.33` заботится о миграции данных всех рабочих пространств.
+
+Начиная с этой версии, образ twenty-postgres для DB становится устаревшим, и вместо него используется twenty-postgres-spilo.
+Если вы хотите продолжать использовать изображение twenty-postgres, просто замените `twentycrm/twenty-postgres:${TAG}` на `twentycrm/twenty-postgres` в файле docker-compose.yml.
+
+### v0.31.0 до v0.32.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.32.0
+
+**Миграция схемы и данных**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.32` заботится о миграции данных всех рабочих пространств.
+
+**Переменные окружения**
+
+Мы обновили способ обработки соединения с Redis.
+
+* Удалено: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Добавлено: `REDIS_URL`
+
+Обновите ваш файл `.env` для использования новой переменной `REDIS_URL` вместо индивидуальных параметров подключения Redis.
+
+Мы также упростили способ обработки JWT токенов.
+
+* Удалено: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Добавлено: `APP_SECRET`
+
+Обновите ваш файл `.env` для использования новой переменной `APP_SECRET` вместо индивидуальных секрета токенов (вы можете использовать прежний секрет или сгенерировать новую случайную строку).
+
+**Подключенный Аккаунт**
+
+Если вы используете подключенный аккаунт для синхронизации ваших электронных писем и календарей Google, вам потребуется активировать [API людей](https://developers.google.com/people) на вашей консоли администратора Google.
+
+### v0.30.0 до v0.31.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.31.0
+
+**Миграция схемы и данных:**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.31` заботится о миграции данных всех рабочих пространств.
+
+### v0.24.0 до v0.30.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.30.0
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. Мы обновили [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) для этого.
+Убедитесь, что вы обновили свою конфигурацию и обновили переменные окружения соответственно:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Миграция схемы и данных:**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.30` заботится о миграции данных всех рабочих пространств.
+
+### v0.23.0 до v0.24.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.24.0
+
+Выполните следующие команды:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к структуре базы данных (схемы core и metadata)
+Команда `yarn command:prod upgrade-0.24` заботится о миграции данных всех рабочих пространств.
+
+### v0.22.0 до v0.23.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.23.0
+
+Выполните следующие команды:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к Базе данных.
+Команда `yarn command:prod upgrade-0.23` заботится о миграции данных, включая перенос активностей в задачи/заметки.
+
+### v0.21.0 до v0.22.0
+
+Обновите вашу инстанцию Twenty для использования изображения v0.22.0
+
+Выполните следующие команды:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+Команда `yarn database:migrate:prod` применяет миграции к Базе данных.
+Команда `yarn command:prod workspace:sync-metadata -f` синхронизирует определение стандартных объектов с таблицами метаданных и применит необходимые миграции к существующим рабочим пространствам.
+Команда `yarn command:prod upgrade-0.22` выполнит преобразование данных для адаптации к новым параметрам по умолчанию объекта defaultRequestInstrumentationOptions.
diff --git a/packages/twenty-docs/l/ru/developers/self-host/self-host.mdx b/packages/twenty-docs/l/ru/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..fce994c9de
--- /dev/null
+++ b/packages/twenty-docs/l/ru/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Обзор
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/ru/navigation.json b/packages/twenty-docs/l/ru/navigation.json
index ddedd98e51..ba75dd9567 100644
--- a/packages/twenty-docs/l/ru/navigation.json
+++ b/packages/twenty-docs/l/ru/navigation.json
@@ -1,40 +1,142 @@
{
"tabs": {
"userGuide": {
- "label": "Руководство пользователя",
+ "label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Начало работы"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Модель данных"
+ "label": "Модель данных",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "Основы CRM"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Представления"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "Рабочие процессы"
+ "label": "Рабочие процессы",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Нужна дополнительная помощь"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "Сотрудничество"
+ "ai": {
+ "label": "ИИ",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Интеграции и API"
+ "viewsPipelines": {
+ "label": "Представления и воронки",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Отчеты"
+ "dashboards": {
+ "label": "Панели управления",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Биллинг",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Настройки"
- },
- "pricing": {
- "label": "Цены"
- },
- "resources": {
- "label": "Ресурсы"
+ "label": "Настройки",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Разработчики"
},
- "devGettingStarted": {
- "label": "Начало работы",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Самостоятельный хостинг"
- },
- "apiAndWebhooks": {
- "label": "API и вебхуки"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Вклад",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Разработка интерфейса",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Разработка интерфейса",
"groups": {
- "display": {
- "label": "Отображение"
- },
- "feedback": {
- "label": "Обратная связь"
- },
- "input": {
- "label": "Ввод"
- },
- "navigation": {
- "label": "Навигация"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Отображение"
+ },
+ "feedback": {
+ "label": "Обратная связь"
+ },
+ "input": {
+ "label": "Ввод"
+ },
+ "navigation": {
+ "label": "Навигация"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Разработка серверной части"
}
}
- },
- "backendDevelopment": {
- "label": "Бэкенд разработка"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/ru/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/ru/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..07e6163a79
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Галочка
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Представляет успешное или завершенное действие.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ Расширяет `React.ComponentPropsWithoutRef<'div'>` и принимает все свойства обычного элемента `div`.
+
+
+
+## Анимированная галочка
+
+Представляет иконку галочки с дополнительной функцией анимации.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | ----------------- | ------ | -------------------------------- | ------------ |
+ | isAnimating | булево | Управляет анимацией галочки | ложь |
+ | цвет | строка | Цвет галочки | |
+ | Продолжительность | число | Длительность анимации в секундах | 0.5 секунды |
+ | размер | число | Размер галочки | 28 пикселей |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/ru/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..30cc7194e3
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Чип
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Визуальный элемент, который можно использовать как кликабельный или некликабельный контейнер с меткой, необязательными левым и правым компонентами и различными стилями для отображения меток и тегов.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ |
+ | linkToEntity | строка | Ссылка на объект |
+ | entityId | строка | Уникальный идентификатор для объекта |
+ | имя | строка | Имя объекта |
+ | pictureUrl | строка | s picture", |
+ | avatarType | Тип аватара | Тип аватара, который вы хотите отобразить. Есть два варианта: `округлый` и `квадратный` |
+ | вариант | `EntityChipVariant` enum | Вариант элемента чипа, который вы хотите отобразить. Есть два варианта: `обычный` и `прозрачный` |
+ | LeftIcon | ИконкаКомпонент | React-компонент, представляющий иконку. Отображается на левой стороне чипа |
+
+
+
+## Примеры
+
+### Прозрачный отключенный чип
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Отключенный чип с подсказкой
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Чип объекта
+
+Элемент, похожий на чип, для отображения информации об объекте.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------ |
+ | linkToEntity | строка | Ссылка на объект |
+ | entityId | строка | Уникальный идентификатор для объекта |
+ | имя | строка | Имя объекта |
+ | pictureUrl | строка | s picture", |
+ | avatarType | Тип аватара | Тип аватара, который вы хотите отобразить. Есть два варианта: `округлый` и `квадратный` |
+ | вариант | `EntityChipVariant` enum | Вариант элемента чипа, который вы хотите отобразить. Есть два варианта: `обычный` и `прозрачный` |
+ | LeftIcon | ИконкаКомпонент | React-компонент, представляющий иконку. Отображается на левой стороне чипа |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/ru/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..50a9b6a888
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: Иконки
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Список иконок, используемых в нашем приложении.
+
+## Иконки Tabler
+
+Мы используем иконки Tabler для React во всем приложении.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ You can import each icon as a component. Вот пример:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | -------- | ------ | --------------------------------- | ------------ |
+ | размер | число | Высота и ширина иконки в пикселях | 24 |
+ | цвет | строка | Цвет иконок | currentColor |
+ | обводка | число | Ширина обводки иконки в пикселях | 2 |
+
+
+
+## Пользовательские иконки
+
+В дополнение к иконкам Tabler, приложение использует несколько пользовательских иконок.
+
+### Иконка адресной книги
+
+Displays an address book icon.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | -------- | ----- | --------------------------------- | ------------ |
+ | размер | число | Высота и ширина иконки в пикселях | 24 |
+ | обводка | число | Ширина обводки иконки в пикселях | 2 |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/ru/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..b103b9431f
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Небольшой значок или «таблетка» для обозначения того, что скоро будет.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/ru/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/ru/twenty-ui/display/tag.mdx
new file mode 100644
index 0000000000..04e4ad4256
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/display/tag.mdx
@@ -0,0 +1,38 @@
+---
+title: Тег
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+Компонент для визуального категорирования или маркировки контента.
+
+
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ------- | -------------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | цвет | строка | Цвет тега. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` |
+ | текст | строка | Содержание тега |
+ | onClick | функция | Необязательная функция, вызываемая при нажатии пользователя на тег |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/block-editor.mdx
index cfd03c9d24..28d44ef4f5 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
Использует блочный текстовый редактор от [BlockNote](https://www.blocknotejs.org/), чтобы пользователи могли редактировать и просматривать блоки контента.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| Свойства | Тип | Описание |
-| -------- | ----------------- | --------------------------------------------- |
-| редактор | `BlockNoteEditor` | Экземпляр или конфигурация блочного редактора |
-
-
+
+ | Свойства | Тип | Описание |
+ | -------- | ----------------- | --------------------------------------------- |
+ | редактор | `BlockNoteEditor` | Экземпляр или конфигурация блочного редактора |
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..e58e625156
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Кнопки
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+Список кнопок и групп кнопок, использованных в приложении.
+
+## Кнопка
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------ | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Дополнительное имя класса для дополнительной стилизации |
+ | Иконка | `React.ComponentType` | Необязательный компонент иконки, отображаемый на кнопке |
+ | заголовок | строка | Текстовое содержимое кнопки |
+ | полнаяШирина | логическое | Определяет, должна ли кнопка занимать всю ширину контейнера |
+ | вариант | строка | Визуальный стиль кнопки. Включает опции `primary`, `secondary` и `tertiary` |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` |
+ | позиция | строка | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `right`, and `middle` |
+ | акцент | строка | Акцентный цвет кнопки. Включает опции: `default`, `blue`, и `danger` |
+ | скоро | булево | Указывает, отмечена ли кнопка как «скоро» (например, для предстоящих функций) |
+ | отключено | булево | Определяет, отключена кнопка или нет |
+ | фокус | булево | Определяет, имеет ли кнопка фокус |
+ | onClick | функция | Функция обратного вызова, которая срабатывает при нажатии пользователем на кнопку |
+
+
+
+## Группа кнопок
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | --------- | ------------------------------------------------------------------------------------------------------------- |
+ | вариант | строка | The visual style variant of the buttons within the group. Включает опции `primary`, `secondary`, и `tertiary` |
+ | размер | строка | Размер кнопок в группе. Has two options: `medium` and `small` |
+ | акцент | строка | Акцентный цвет кнопок в группе. Включает опции `default`, `blue` и `danger` |
+ | className | строка | Дополнительное имя класса для дополнительной стилизации |
+ | children | ReactNode | Массив элементов React, представляющих отдельные кнопки в группе |
+
+
+
+## Плавающая кнопка
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------ | --------------------- | ---------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | Иконка | `React.ComponentType` | Необязательный компонент иконки, отображаемый на кнопке |
+ | заголовок | строка | Текстовое содержимое кнопки |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` |
+ | позиция | строка | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `middle`, `right` |
+ | применить тень | булево | Определяет, применять ли тень к кнопке |
+ | применить размытие | булево | Определяет, применять ли размытие к кнопке |
+ | отключено | булево | Определяет, отключена ли кнопка |
+ | фокус | булево | Указывает, имеет ли кнопка фокус |
+
+
+
+## Группа плавающих кнопок
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | -------- | --------- | ---------------------------------------------------------------- | ------------ |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` | маленький |
+ | children | ReactNode | Массив элементов React, представляющих отдельные кнопки в группе | |
+
+
+
+## Плавающая кнопка с иконкой
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------ | --------------------- | -------------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | Иконка | `React.ComponentType` | Необязательный компонент иконки, отображаемый на кнопке |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` |
+ | позиция | строка | The position of the button in relation to its siblings. Options include: `standalone`, `left`, `right`, and `middle` |
+ | применить тень | булево | Определяет, применять ли тень к кнопке |
+ | применить размытие | булево | Определяет, применять ли размытие к кнопке |
+ | отключено | булево | Определяет, отключена ли кнопка |
+ | фокус | булево | Указывает, имеет ли кнопка фокус |
+ | onClick | функция | Функция обратного вызова, которая срабатывает при нажатии пользователем на кнопку |
+ | активен | булево | Определяет, находится ли кнопка в активном состоянии |
+
+
+
+## Группа плавающих кнопок с иконками
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ----------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` |
+ | кнопки с иконками | массив | Массив объектов, каждый из которых представляет собой кнопку с иконкой в группе. Каждый объект должен включать компонент иконки, который вы хотите отобразить на кнопке, функцию, которую вы хотите вызвать при нажатии на кнопку, и информацию о том, должна ли кнопка быть активной или нет. |
+
+
+
+## Light Button
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ----------------- | --------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | иконка | `React.ReactNode` | Иконка, которую вы хотите отобразить на кнопке |
+ | заголовок | строка | Текстовое содержимое кнопки |
+ | акцент | строка | Акцентный цвет кнопки. Options include: `secondary` and `tertiary` |
+ | активный | булево | Определяет, находится ли кнопка в активном состоянии |
+ | отключено | булево | Определяет, отключена ли кнопка |
+ | фокус | булево | Указывает, имеет ли кнопка фокус |
+ | onClick | функция | Функция обратного вызова, которая срабатывает при нажатии пользователем на кнопку |
+
+
+
+## Light Icon Button
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------- | --------------------- | --------------------------------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | идентификатор теста | строка | Идентификатор теста для кнопки |
+ | Иконка | `React.ComponentType` | Необязательный компонент иконки, отображаемый на кнопке |
+ | заголовок | строка | Текстовое содержимое кнопки |
+ | размер | строка | Размер кнопки. Есть два варианта: `small` и `medium` |
+ | акцент | строка | Акцентный цвет кнопки. Options include: `secondary` and `tertiary` |
+ | активный | булево | Определяет, находится ли кнопка в активном состоянии |
+ | отключено | булево | Определяет, отключена ли кнопка |
+ | фокус | булево | Указывает, имеет ли кнопка фокус |
+ | onClick | функция | Функция обратного вызова, которая срабатывает при нажатии пользователем на кнопку |
+
+
+
+## Главная кнопка
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------------------- | -------------------------------- | ----------------------------------------------------------------------------- |
+ | заголовок | строка | Текстовое содержимое кнопки |
+ | полнаяШирина | булево | Определяет, должна ли кнопка занимать всю ширину контейнера |
+ | вариант | строка | Визуальный стиль кнопки. Options include `primary` and `secondary` |
+ | скоро | булево | Указывает, отмечена ли кнопка как «скоро» (например, для предстоящих функций) |
+ | Иконка | `React.ComponentType` | Необязательный компонент иконки, отображаемый на кнопке |
+ | React `button` props | `React.ComponentProps<'button'>` | Все стандартные свойства кнопки HTML поддерживаются |
+
+
+
+## Круглая кнопка с иконкой
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------------------- | ----------------------------------------------- | -------- |
+ | Иконка | `React.ComponentType` | |
+ | React `button` props | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..ede9c1f18c
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: Флажок
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Используется, когда пользователю необходимо выбрать несколько значений из нескольких вариантов.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange function fired")}
+ onCheckedChange={() => console.log("onCheckedChange function fired")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------------- | ------- | -------------------------------------------------------------------------------------------- |
+ | checked | булево | Указывает, отмечен ли флажок |
+ | indeterminate | булево | Указывает, находится ли флажок в неопределенном состоянии (ни отмечен, ни снят) |
+ | onChange | функция | Функция обратного вызова, которую вы хотите вызвать при изменении состояния флажка |
+ | onCheckedChange | функция | Функция обратного вызова, которую вы хотите вызвать при изменении состояния `отмечено` |
+ | вариант | строка | The visual style variant of the box. Варианты включают: `primary`, `secondary`, и `tertiary` |
+ | размер | строка | Размер флажка. Has two options: `small` and `large` |
+ | форма | строка | Форма флажка. Имеет два варианта: `квадратная` и `округлая` |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/color-scheme.mdx
index efaea98ce0..59fec3adbf 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/input/color-scheme.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/color-scheme.mdx
@@ -4,7 +4,7 @@ image: /images/user-guide/fields/field.png
---
-
+
## Карточка цветовой схемы
@@ -12,33 +12,28 @@ image: /images/user-guide/fields/field.png
Представляет различные цветовые схемы и специально подходит для светлых и темных тем.
-
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
-```jsx
-import { ColorSchemeCard } from "twenty-ui/display";
-
-export const MyComponent = () => {
- return (
-
- );
-};
-```
-
-
-
-
-
-| Свойства | Тип | Описание | По умолчанию |
-| ----------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------- | ------------ |
-| вариант | строка | Вариант цветовой схемы. Варианты включают `Тёмный`, `Светлый`, и `Системный` | светлый |
-| выбран | boolean | Если `true`, отображает галочку, чтобы указать выбранную цветовую схему | |
-| дополнительные свойства | `React.ComponentPropsWithoutRef<'div'>` | Стандартные свойства HTML-элемента `div` | |
-
-
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | ----------------------- | --------------------------------------- | ---------------------------------------------------------------------------- | ------------ |
+ | вариант | строка | Вариант цветовой схемы. Варианты включают `Тёмный`, `Светлый`, и `Системный` | светлый |
+ | выбран | boolean | Если `true`, отображает галочку, чтобы указать выбранную цветовую схему | |
+ | дополнительные свойства | `React.ComponentPropsWithoutRef<'div'>` | Стандартные свойства HTML-элемента `div` | |
+
## Выбор цветовой схемы
@@ -46,28 +41,23 @@ export const MyComponent = () => {
Позволяет пользователям выбирать между различными цветовыми схемами.
-
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
-```jsx
-import { ColorSchemePicker } from "twenty-ui/display";
-
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-
-| Свойства | Тип | Описание |
-| -------- | ---------------- | ----------------------------------------------------------------------------------------------- |
-| значение | `Цветовая Схема` | Текущая выбранная цветовая схема |
-| onChange | функция | Функция обратного вызова, которую вы хотите вызвать, когда пользователь выбирает цветовую схему |
-
-
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+ | Свойства | Тип | Описание |
+ | -------- | ---------------- | ----------------------------------------------------------------------------------------------- |
+ | значение | `Цветовая Схема` | Текущая выбранная цветовая схема |
+ | onChange | функция | Функция обратного вызова, которую вы хотите вызвать, когда пользователь выбирает цветовую схему |
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/image-input.mdx
index 8c2e7591d1..b88e0dd115 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/input/image-input.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/image-input.mdx
@@ -4,34 +4,31 @@ image: /images/user-guide/objects/objects.png
---
-
+
Позволяет пользователям загружать и удалять изображение.
-
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
-```jsx
-import { ImageInput } from "@/ui/input/components/ImageInput";
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
-export const MyComponent = () => {
- return ;
-};
-```
-
-
-
-
-| Свойства | Тип | Описание |
-| ------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
-| изображение | строка | URL источника изображения |
-| onUpload | функция | Функция вызывается, когда пользователь загружает новое изображение. Она получает объект `File` в качестве параметра |
-| onRemove | функция | Функция вызывается, когда пользователь нажимает на кнопку удаления |
-| onAbort | функция | Функция вызывается, когда пользователь нажимает на кнопку отмены во время загрузки изображения |
-| isUploading | boolean | Указывает, загружается ли в данный момент изображение |
-| errorMessage | строка | Необязательное сообщение об ошибке для отображения под вводом изображения |
-| отключено | boolean | Если `true`, весь элемент ввода отключен и кнопки не кликабельны |
-
-
+
+ | Свойства | Тип | Описание |
+ | ------------ | ------- | ------------------------------------------------------------------------------------------------------------------- |
+ | изображение | строка | URL источника изображения |
+ | onUpload | функция | Функция вызывается, когда пользователь загружает новое изображение. Она получает объект `File` в качестве параметра |
+ | onRemove | функция | Функция вызывается, когда пользователь нажимает на кнопку удаления |
+ | onAbort | функция | Функция вызывается, когда пользователь нажимает на кнопку отмены во время загрузки изображения |
+ | isUploading | булево | Указывает, загружается ли в данный момент изображение |
+ | errorMessage | строка | Необязательное сообщение об ошибке для отображения под вводом изображения |
+ | отключено | булево | Если `true`, весь элемент ввода отключен и кнопки не кликабельны |
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..c90d4f46aa
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Радио
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Используется, когда пользователи могут выбрать только один вариант из серии вариантов.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------------- | -------------------- | --------------------------------------------------------------------------------------- |
+ | стиль | Свойства `React.CSS` | Дополнительные встроенные стили для компонента. |
+ | className | строка | Необязательный CSS-класс для дополнительного стилирования |
+ | checked | boolean | Indicates whether the radio button is checked |
+ | значение | строка | Метка или текст, связанные с радио-кнопкой. |
+ | onChange | функция | Функция вызывается при изменении выбранной радио-кнопки. |
+ | onCheckedChange | функция | The function called when the `checked` state of the radio button changes |
+ | размер | строка | Размер радио-кнопки. Options include: `large` and `small` |
+ | отключено | boolean | If `true`, the radio button is disabled and not clickable |
+ | позицияМетки | строка | Положение текста метки относительно радио-кнопки. Имеет два варианта: `left` и `right`. |
+
+
+
+## Группа Радио
+
+Объединяет связанные радио-кнопки.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------- | ----------------- | ---------------------------------------------------------------------------------- |
+ | значение | строка | Значение в настоящее время выбранной радио-кнопки. |
+ | onChange | функция | Функция обратного вызова, вызываемая при изменении радио-кнопки. |
+ | onValueChange | функция | Функция обратного вызова, вызываемая при изменении выбранного значения в группе. |
+ | children | `React.ReactNode` | Allows you to pass React components (such as Radio) as children to the Radio Group |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/select.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/select.mdx
index 6aadac4d47..115319fd9d 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/input/select.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/select.mdx
@@ -4,51 +4,48 @@ image: /images/user-guide/what-is-twenty/20.png
---
-
+
Позволяет пользователям выбирать значение из списка заранее определенных опций.
-
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
-```jsx
-import { RecoilRoot } from 'recoil';
-import { IconTwentyStar } from 'twenty-ui/display';
+ import { Select } from '@/ui/input/components/Select';
-import { Select } from '@/ui/input/components/Select';
+ export const MyComponent = () => {
-export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
- return (
-
-
-
- );
-};
+ ```
+
-```
-
-
-
-
-| Свойства | Тип | Описание |
-| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| className | строка | Необязательный CSS-класс для дополнительного стилирования |
-| отключено | boolean | При установке в `true`, отключается взаимодействие пользователя с компонентом |
-| метка | строка | Метка для описания назначения компонента `Выбрать` |
-| onChange | функция | Функция вызывается при изменении выбранных значений |
-| настройки | массив | Представляет доступные варианты для компонента `Выбранное`. Это массив объектов, где каждый объект имеет `value` (уникальный идентификатор), `label` (уникальный идентификатор) и необязательный `Icon` |
-| значение | строка | Представляет текущее выбранное значение. Оно должно соответствовать одному из значений `value` в массиве `options` |
-
-
+
+ | Свойства | Тип | Описание |
+ | --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | строка | Необязательный CSS-класс для дополнительного стилирования |
+ | disabled | булево | При установке в `true`, отключается взаимодействие пользователя с компонентом |
+ | метка | строка | Метка для описания назначения компонента `Выбрать` |
+ | onChange | функция | Функция вызывается при изменении выбранных значений |
+ | настройки | массив | Представляет доступные варианты для компонента `Выбранное`. Это массив объектов, где каждый объект имеет `value` (уникальный идентификатор), `label` (уникальный идентификатор) и необязательный `Icon` |
+ | значение | строка | Представляет текущее выбранное значение. Оно должно соответствовать одному из значений `value` в массиве `options` |
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/text.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..36d6c8b9c4
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Текст
+image: /images/user-guide/notes/notes_header.png
+---
+
+
+
+
+
+## Ввод текста
+
+Позволяет пользователям вводить и редактировать текст.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------ |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | метка | строка | Представляет метку для ввода |
+ | onChange | функция | Функция, вызываемая при изменении значения ввода |
+ | полнаяШирина | логическое | Указывает, должен ли ввод занимать 100% ширины |
+ | отключитьГорячиеКлавиши | логическое | Указывает, активированы ли горячие клавиши для ввода |
+ | ошибка | строка | Представляет сообщение об ошибке, которое будет отображаться. При наличии добавляет значок ошибки с правой стороны ввода |
+ | приНажатииКлавиши | функция | Вызывается, когда клавиша нажата, пока поле ввода сфокусировано. Получает `React.KeyboardEvent` в качестве аргумента |
+ | RightIcon | ИконкаКомпонент | Опциональный компонент иконки, отображаемый с правой стороны ввода |
+
+ Компонент также принимает другие свойства HTML элемента ввода.
+
+
+
+## Autosize Text Input
+
+Компонент ввода текста, автоматически регулирующий свою высоту в зависимости от содержимого.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------------- | ------- | ------------------------------------------------------------------------------------------------ |
+ | приПроверке | функция | Функция обратного вызова, которую вы хотите активировать при проверке ввода пользователем |
+ | минСтроки | число | Минимальное количество строк для текстовой области |
+ | заполнитель | строка | Текст подсказки, который вы хотите отобразить, когда текстовая область пуста |
+ | приФокусе | функция | Функция обратного вызова, которую вы хотите активировать, когда текстовая область получает фокус |
+ | вариант | строка | Вариант ввода. Опции включают: `по умолчанию`, `иконка` и `кнопка` |
+ | заголовокКнопки | строка | Название для кнопки (актуально только для варианта кнопки) |
+ | значение | строка | Начальное значение для текстовой области |
+
+
+
+## Текстовая Область
+
+Позволяет создавать многострочные вводы текста.
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | Свойства | Тип | Описание |
+ | ----------- | ---------- | -------------------------------------------------------------------------------- |
+ | отключено | логическое | Указывает, отключена ли текстовая область |
+ | минСтроки | число | Минимальное количество видимых строк для текстовой области. |
+ | onChange | функция | Функция обратного вызова, вызываемая при изменении содержимого текстовой области |
+ | заполнитель | строка | Placeholder text displayed when the text area is empty |
+ | значение | строка | Текущее значение текстовой области |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/ru/twenty-ui/input/toggle.mdx
index 1093111862..b32cb7dbd9 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/input/toggle.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/input/toggle.mdx
@@ -4,36 +4,33 @@ image: /images/user-guide/table-views/table.png
---
-
+
-
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
-```jsx
-import { Toggle } from "twenty-ui/input";
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
-export const MyComponent = () => {
- return (
- console.log('On Change event')}
- color="green"
- toggleSize = "medium"
- />
- );
-};
-```
-
-
-
-
-| Свойства | Тип | Описание | По умолчанию |
-| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------- |
-| значение | boolean | Текущее состояние переключателя | `ложь` |
-| onChange | функция | Функция обратного вызова, вызываемая при изменении состояния переключателя | |
-| цвет | строка | Цвет переключателя, когда он\ | имеет синий цвет |
-| размерПереключателя | строка | Размер переключателя, влияющий на высоту и ширину. Есть два варианта: `small` и `medium` | средний |
-
-
+
+ | Свойства | Тип | Описание | По умолчанию |
+ | ------------------- | ------- | ---------------------------------------------------------------------------------------------- | ---------------- |
+ | значение | булево | Текущее состояние переключателя | `ложь` |
+ | onChange | функция | Функция обратного вызова, вызываемая при изменении состояния переключателя | |
+ | цвет | строка | Цвет переключателя, когда он\ | имеет синий цвет |
+ | размерПереключателя | строка | Размер переключателя, влияющий на высоту и ширину. Имеет два варианта: `маленький` и `средний` | средний |
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/introduction.mdx b/packages/twenty-docs/l/ru/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..84120a8759
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Обзор
+description: Библиотека компонентов для Twenty CRM
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Компоненты
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/ru/twenty-ui/navigation/links.mdx
new file mode 100644
index 0000000000..6ffbca388a
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/navigation/links.mdx
@@ -0,0 +1,154 @@
+---
+title: Ссылки
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+## Contact Link
+
+Стилизованный компонент ссылки для отображения контактной информации.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+
+ import { ContactLink } from 'twenty-ui/navigation';
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log('Contact link clicked!', event);
+ };
+
+ return (
+
+
+ example@example.com
+
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ----------------- | --------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | href | строка | Целевой URL или путь для ссылки |
+ | onClick | функция | Функция обратного вызова, выполняемая при клике по ссылке |
+ | children | `React.ReactNode` | Содержимое, отображаемое внутри ссылки |
+
+
+
+## Raw Link
+
+Стилизованный компонент для отображения ссылок.
+
+
+
+ ```jsx
+ import { RawLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
+
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ----------------- | --------------------------------------------------------- |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+ | href | строка | Целевой URL или путь для ссылки |
+ | onClick | функция | Функция обратного вызова, выполняемая при клике по ссылке |
+ | children | `React.ReactNode` | Содержимое, отображаемое внутри ссылки |
+
+
+
+## Rounded Link
+
+Округло-стилизованная ссылка с компонентом Chip для ссылок.
+
+
+
+ ```jsx
+ import { RoundedLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
+
+ return (
+
+
+ Contact Us
+
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------- | ----------------- | --------------------------------------------------------- |
+ | href | строка | Целевой URL или путь для ссылки |
+ | children | `React.ReactNode` | Содержимое, отображаемое внутри ссылки |
+ | onClick | функция | Функция обратного вызова, выполняемая при клике по ссылке |
+
+
+
+## Ссылка на социальные сети
+
+Стилизованные социальные ссылки, с поддержкой различных типов, таких как URL, LinkedIn и X (или Twitter).
+
+
+
+ ```jsx
+ import { SocialLink } from "twenty-ui/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------- | ----------------- | --------------------------------------------------------------------- |
+ | href | строка | Целевой URL или путь для ссылки |
+ | children | `React.ReactNode` | Содержимое, отображаемое внутри ссылки |
+ | тип | строка | Тип социальных ссылок. Опции включают: `url`, `LinkedIn`, и `Twitter` |
+ | onClick | функция | Функция обратного вызова, выполняемая при клике по ссылке |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/ru/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..8c2beca464
--- /dev/null
+++ b/packages/twenty-docs/l/ru/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,428 @@
+---
+title: Пункт меню
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Универсальный пункт меню, предназначенный для использования в меню или списке навигации.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Пункт меню нажат!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Кнопка значка нажата!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------- | --------------- | ------------------------------------------------------------------------------------------ |
+ | LeftIcon | ИконкаКомпонент | Необязательная иконка слева, отображаемая перед текстом в пункте меню |
+ | акцент | строка | Указывает цвет акцента пункта меню. Варианты: `default`, `danger`, и `placeholder` |
+ | текст | строка | Текстовое содержание пункта меню |
+ | кнопки с иконками | массив | Массив объектов, представляющих дополнительные кнопки с иконками, связанные с пунктом меню |
+ | открытаПодсказка | булево | Управляет видимостью всплывающей подсказки, связанной с пунктом меню |
+ | идентификатор теста | строка | Атрибут data-testid для тестирования |
+ | onClick | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+
+
+
+## Варианты
+
+Различные варианты компонентов меню включают следующее:
+
+### Команда
+
+Командный стиль пункта меню в меню для указания сочетаний клавиш.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Команда нажата!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------------------- | ---------------- | --------------------------------------------------------------------- |
+ | LeftIcon | Компонент иконки | Необязательная левая иконка, отображаемая перед текстом в пункте меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | перваяГорячаяКлавиша | строка | Первая горячая клавиша, связанная с командой |
+ | втораяГорячаяКлавиша | строка | Вторая горячая клавиша, связанная с командой |
+ | выбрано | булево | Указывает, выбран ли пункт меню |
+ | onClick | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Перетаскиваемый
+
+Пункт меню, который можно перетаскивать, предназначен для использования в меню или списке, где элементы могут быть перетащены, и дополнительные действия могут быть выполнены через кнопки с иконками.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Пункт меню нажат!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ----------------------- | ---------------- | ------------------------------------------------------------------------------------------ |
+ | LeftIcon | Компонент иконки | Необязательная левая иконка, отображаемая перед текстом в пункте меню |
+ | акцент | строка | Цвет акцента пункта меню. It can either be `default`, `placeholder`, and `danger` |
+ | кнопки с иконками | массив | Массив объектов, представляющих дополнительные кнопки с иконками, связанные с пунктом меню |
+ | открытаПодсказка | булево | Управляет видимостью подсказки, связанной с пунктом меню |
+ | нажатие | функция | Функция обратного вызова, выполняемая при клике по ссылке |
+ | текст | строка | Текстовое содержание пункта меню |
+ | перетаскиваниеОтключено | булево | Указывает, отключено ли перетаскивание |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Множественный выбор
+
+Предоставляет способ реализации функционала множественного выбора с использованием ассоциированного флажка.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------------- | ---------------- | --------------------------------------------------------------------- |
+ | LeftIcon | Компонент иконки | Необязательная левая иконка, отображаемая перед текстом в пункте меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | выбрано | булево | Указывает, выбран ли пункт меню (отмечен) |
+ | onSelectChange | функция | Функция обратного вызова, вызываемая при изменении состояния флажка |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Множественный выбор с аватаром
+
+Элемент меню с множественным выбором, имеющий аватар, флажок для выбора и текстовое содержание.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="Первый вариант"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | -------------- | ----------- | ------------------------------------------------------------------- |
+ | аватар | `ReactNode` | Аватар или иконка, отображаемые слева от пункта меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | выбрано | булево | Указывает, выбран ли пункт меню (отмечен) |
+ | onSelectChange | функция | Функция обратного вызова, вызываемая при изменении состояния флажка |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Навигация
+
+Пункт меню с опциональной левой иконкой, текстовым содержанием и иконкой "стрелка вправо".
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Перейти на другую страницу");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ---------------- | --------------------------------------------------------------------- |
+ | LeftIcon | Компонент иконки | Необязательная левая иконка, отображаемая перед текстом в пункте меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | onClick | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Выбрать
+
+Выбираемый элемент меню, с опциональным левым содержанием (иконка и текст) и индикатором (иконкой "галочка") для отображения статуса выбора.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Пункт меню выбран");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ---------------- | --------------------------------------------------------------------- |
+ | LeftIcon | Компонент иконки | Необязательная левая иконка, отображаемая перед текстом в пункте меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | выбрано | булево | Указывает, выбран ли пункт меню (отмечен) |
+ | отключено | булево | Указывает, отключен ли пункт меню |
+ | hovered | булево | Указывает, наводится ли указатель на пункт меню |
+ | onClick | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Select Avatar
+
+Выбираемый элемент меню с аватаром, с опциональным левым содержанием (аватар и текст) и индикатором (иконка "галочка") для отображения статуса выбора.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Пункт меню выбран");
+ };
+
+ return (
+ }
+ text="Первый вариант"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------- | ----------- | -------------------------------------------------------------- |
+ | аватар | `ReactNode` | Аватар или иконка, отображаемые слева от пункта меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | выбрано | булево | Указывает, выбран ли пункт меню (отмечен) |
+ | отключено | булево | Указывает, отключен ли пункт меню |
+ | hovered | булево | Указывает, наводится ли указатель на пункт меню |
+ | идентификатор теста | строка | Атрибут data-testid для тестирования |
+ | нажатие | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
+
+### Select Color
+
+Выбираемый элемент меню с образцом цвета, для ситуаций, когда пользователям нужно выбрать цвет из меню.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Пункт меню выбран");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | цвет | строка | Цвет темы, который отображается как пример в пункте меню. Доступные варианты: `зелёный`, `бирюзовый`, `небесно-голубой`, `синий`, `фиолетовый`, `розовый`, `красный`, `оранжевый`, `жёлтый` и `серый`. |
+ | выбран | булево | Указывает, выбран ли пункт меню (отмечен) |
+ | отключен | булево | Указывает, отключен ли пункт меню |
+ | hovered | булево | Указывает, наведено ли в данный момент на пункт меню |
+ | вариант | строка | Вариант цветового образца. Это может быть либо `по умолчанию`, либо `конвейер`. |
+ | onClick | функция | Функция обратного вызова, вызываемая при нажатии на пункт меню |
+ | className | строка | Необязательное имя для дополнительной стилизации |
+
+
+
+### Переключить
+
+Элемент меню с переключателем для активации или деактивации определенной функции
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Свойства | Тип | Описание |
+ | ------------------- | --------------- | --------------------------------------------------------------------------------- |
+ | LeftIcon | ИконкаКомпонент | Необязательная иконка слева, отображаемая перед текстом в пункте меню |
+ | текст | строка | Текстовое содержание пункта меню |
+ | переключено | булево | Указывает, в каком состоянии находится переключатель, "включено" или "выключено". |
+ | onToggleChange | функция | Функция обратного вызова, вызываемая при изменении состояния переключателя |
+ | размерПереключателя | строка | Размер переключателя. It can be either \ |
+ | className | строка | Необязательное имя для дополнительного стилирования |
+
+
diff --git a/packages/twenty-docs/l/ru/twenty-ui/navigation/navigation-bar.mdx b/packages/twenty-docs/l/ru/twenty-ui/navigation/navigation-bar.mdx
index bc0b53718e..bce804ea49 100644
--- a/packages/twenty-docs/l/ru/twenty-ui/navigation/navigation-bar.mdx
+++ b/packages/twenty-docs/l/ru/twenty-ui/navigation/navigation-bar.mdx
@@ -4,49 +4,46 @@ image: /images/user-guide/table-views/table.png
---
-
+
Отображает панель навигации, содержащую несколько компонентов `NavigationBarItem`.
-
+
+ ```jsx
+ import { IconHome, IconUser, IconSettings } from '@tabler/icons-react';
+ import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar";
-```jsx
-import { IconHome, IconUser, IconSettings } from '@tabler/icons-react';
-import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar";
+ export const MyComponent = () => {
-export const MyComponent = () => {
+ const navigationItems = [
+ {
+ name: "Home",
+ Icon: IconHome,
+ onClick: () => console.log("Home clicked"),
+ },
+ {
+ name: "Profile",
+ Icon: IconUser,
+ onClick: () => console.log("Profile clicked"),
+ },
+ {
+ name: "Settings",
+ Icon: IconSettings,
+ onClick: () => console.log("Settings clicked"),
+ },
+ ];
- const navigationItems = [
- {
- name: "Home",
- Icon: IconHome,
- onClick: () => console.log("Home clicked"),
- },
- {
- name: "Profile",
- Icon: IconUser,
- onClick: () => console.log("Profile clicked"),
- },
- {
- name: "Settings",
- Icon: IconSettings,
- onClick: () => console.log("Settings clicked"),
- },
- ];
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| Свойства | Тип | Описание |
-| -------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| activeItemName | строка | Имя текущего активного элемента навигации |
-| items | массив | Массив объектов, представляющих каждый элемент навигации. Каждый объект содержит `name` элемента, компонент `Icon` для отображения и функцию `onClick`, которая вызывается при нажатии на элемент. |
-
-
+
+ | Свойства | Тип | Описание |
+ | -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | activeItemName | строка | Имя текущего активного элемента навигации |
+ | items | массив | Массив объектов, представляющих каждый элемент навигации. Каждый объект содержит `name` элемента, компонент `Icon` для отображения и функцию `onClick`, которая вызывается при нажатии на элемент. |
+
diff --git a/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..208f181001
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Обзор
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Описание |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/ru/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/ru/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..4c3d6d70dc
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Обзор
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Описание |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/ru/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..00d2b93596
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: Разрешения и контроль доступа
+description: Управляйте тем, к чему агенты ИИ могут получать доступ и что они могут изменять в вашем рабочем пространстве.
+---
+
+## Обзор
+
+Агенты ИИ соблюдают вашу существующую структуру разрешений. Это особенно важно для команд, которые хотят точно контролировать, к чему автоматизированные процессы ИИ могут получать доступ или что они могут изменять в своём рабочем пространстве.
+
+## Назначить роль агенту ИИ
+
+1. Перейдите в **Настройки → Роли**
+2. Нажмите на роль, которую вы хотите назначить
+3. Откройте вкладку **Назначение**
+4. В разделе **Агенты ИИ** нажмите **+ Назначить агенту ИИ**
+5. Выберите агента ИИ из списка
+6. Подтвердите назначение
+
+## Зачем назначать роли агентам ИИ?
+
+| Преимущество | Описание |
+| ---------------------------- | ------------------------------------------------------------------------------------------- |
+| **Безопасность** | Ограничьте данные, к которым агенты ИИ могут получать доступ или которые они могут изменять |
+| **Соответствие требованиям** | Обеспечьте, чтобы ИИ обрабатывал только необходимые ему данные |
+| **Контроль** | Предотвращайте непреднамеренные действия автоматизаций ИИ |
+| **Возможность аудита** | Отслеживайте, какие действия были выполнены каким агентом |
+
+
+ Для агентов ИИ, работающих в рамках рабочих процессов, назначение роли гарантирует, что агент не сможет получать доступ к данным или изменять их за пределами своей предназначенной области — даже если у рабочего процесса более широкие разрешения.
+
+
+## Связанные материалы
+
+* [Разрешения](/l/ru/user-guide/permissions-access/capabilities/permissions) — подробная информация о создании и управлении ролями
+* [Агенты ИИ](/l/ru/user-guide/ai/capabilities/ai-agents) — возможности ИИ в рабочих процессах
diff --git a/packages/twenty-docs/l/ru/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/ru/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/ai/overview.mdx b/packages/twenty-docs/l/ru/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..da6a65c261
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: ИИ
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## Что нового
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Сценарии использования:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. Перейдите в **Настройки → Роли**
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Будьте в курсе
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/ru/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/ru/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..d08a6fafc9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: Тарифные планы},{
+description: Узнайте о тарифных планах Twenty и о том, как переключаться между ними.
+---
+
+## Обзор
+
+Twenty предлагает гибкие тарифы для команд любого размера — независимо от того, предпочитаете ли вы облачный хостинг или самостоятельное размещение.
+
+## Облачные планы
+
+### Pro (облако)
+
+Для команд, готовых к масштабированию:
+
+* Все основные возможности CRM
+* Синхронизация почты и календаря
+* Рабочие процессы и автоматизация
+* Стандартная поддержка
+
+
+ Премиальные функции (SSO и разрешения на уровне записей) не входят в план Pro.
+
+
+### Организация (облако)
+
+Для крупных команд с расширенными потребностями:
+
+* Все, что есть в Pro
+* **Премиальные функции**: интеграция с SSO и разрешения на уровне записей
+* Приоритетная поддержка
+
+## Планы для самостоятельного размещения
+
+### Бесплатный (самостоятельное размещение)
+
+Размещайте Twenty на собственной инфраструктуре бесплатно:
+
+* Включены все возможности Pro
+* Поддержка сообщества через Discord
+* Полный контроль над вашими данными
+
+### Организация (самостоятельное размещение)
+
+Для команд, которым нужны премиальные функции при самостоятельном размещении:
+
+* Все возможности Pro
+* **Премиальные функции**: интеграция с SSO и разрешения на уровне записей
+* Поддержка от команды Twenty
+* Не требуется публиковать пользовательский код с открытым исходным кодом перед распространением
+
+## Премиальные функции
+
+Премиальные функции доступны только в планах «Организация» (облако или самостоятельное размещение):
+
+* **Интеграция с SSO**: единый вход через вашего поставщика идентификации
+* **Разрешения на уровне записей**: тонкая настройка управления доступом на уровне записей
+
+## Переключение планов
+
+### Переход на план «Организация»
+
+1. Перейдите в **Настройки → Оплата**
+2. Нажмите **Switch to Organization**
+3. Подтвердите обновление
+
+### Переход на Pro
+
+Свяжитесь со службой поддержки, чтобы понизить ваш план.
+
+### Переход на годовую оплату
+
+1. Перейдите в **Настройки → Оплата**
+2. Нажмите **Switch to Yearly**
+3. Экономьте с годовой оплатой
+
+### Переход на ежемесячную оплату
+
+Свяжитесь со службой поддержки, чтобы вернуться на ежемесячную оплату.
diff --git a/packages/twenty-docs/l/ru/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ru/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..d88dfc576d
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: Workflow Credits
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Обзор
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Ежемесячно | 5 million/month |
+| Ежегодно | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Использование кредита |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI prompts** (coming soon) | Variable based on usage |
+
+Credits are deducted in real-time when workflows execute.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. Перейдите в **Настройки → Оплата**
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Приобретение дополнительных кредитов
+
+Need more credits?
+
+1. Перейдите в **Настройки → Оплата**
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/ru/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/ru/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..0974e9ed01
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Цены
+
+
+
+ Да, вы можете использовать Twenty бесплатно при самостоятельном размещении. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Поддержка доступна через наше сообщество Discord.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ Мы не предлагаем бесплатные места. Стоимость рассчитывается на каждого пользователя, и каждый пользователь нуждается в лицензии для доступа к Twenty.
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`. Затем нажмите на `Переключить на Organization`.
+
+
+
+ Пожалуйста, свяжитесь с нашей командой напрямую через Поддержку, в данный момент нет простого способа сделать это через пользовательский интерфейс.
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`. Then click on `Switch to Yearly`.
+
+
+
+ Пожалуйста, свяжитесь с нашей командой напрямую через Поддержку, в данный момент нет простого способа сделать это через пользовательский интерфейс.
+
+
+
+ Вы найдете это в разделе `Настройки → Оплата`.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Each workflow action consumes credits based on its complexity:
+
+ * **Основные внутренние операции** (такие как поиск, обновление, создание записей) потребляют очень мало кредитов
+ * **Более сложные операции**, такие как узлы кода и запросы к внешним службам, потребляют больше кредитов
+ * **Запросы AI** (скоро будут) также будут потреблять больше кредитов в зависимости от использования
+
+ Credits are deducted in real-time when workflows execute. You can monitor your usage in **Settings → Billing** to track consumption and remaining credits.
+
+
+
+ Вы можете купить дополнительные кредиты в разделе `Настройки → Оплата`.
+
+
+
+## Биллинг
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`.
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`. Затем нажмите на `Просмотр сведений о платеже`. Там вы сможете добавить новый способ оплаты.
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`. Затем нажмите на `Просмотр сведений о платеже`. Там вы сможете изменить платежные данные.
+
+
+
+ Вы можете сделать это в разделе `Настройки → Оплата`. Затем нажмите на `Просмотр сведений о платеже`. Все ваши счета будут видны в нижней части экрана.
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/billing/overview.mdx b/packages/twenty-docs/l/ru/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..3609fd3581
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Биллинг
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| План | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/ru/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..29c7713ba8
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Календарь
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/ru/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Вкладка Календарь
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Люди**: просмотр всех встреч, запланированных с определенным контактом
+* **Компании**: просмотр всех встреч, связанных с компанией и её сотрудниками
+* **Возможности**: доступ к истории встреч, связанных с компанией, связанной с этой возможностью
+
+### Просмотр истории встреч
+
+1. **Перейти на запись**: перейдите на любую запись персоны, компании или возможности
+2. **Выберите вкладку Календарь**: нажмите на вкладку `Календарь` рядом с вкладкой Электронная почта
+3. **Просмотр истории встреч**: посмотрите все запланированные встречи и их подробности
+4. **Доступ к контексту встречи**: посмотрите участников встречи, время и связанную информацию
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Что синхронизируется
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Что не синхронизируется
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..18822a376a
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Примечание**: Чтобы подключить учетные записи электронной почты и настроить параметры синхронизации, посетите [Настройка электронной почты и календаря](/l/ru/user-guide/calendar-emails/overview).
+
+## Как работает интеграция электронной почты
+
+Twenty автоматически связывает письма из ваших подключенных почтовых ящиков с соответствующими записями CRM, сохраняя всю историю общения в одном месте.
+
+### Objects Where Emails Can Be Found
+
+Email conversations appear in three main objects:
+
+* **Люди**: просмотр всех писем, обмененных с определенным контактом
+* **Компании**: просмотр всех писем, связанных с компанией и её сотрудниками
+* **Возможности**: доступ к веткам электронной почты, связанным с компанией, связанной с этой возможностью. Ветки электронной почты от отдельных людей по этой возможности пока не отображаются.
+
+### Просмотр почтовых веток
+
+1. **Перейти на запись**: перейдите на любую запись персоны, компании или возможности
+2. **Выберите вкладку Электронная почта**: нажмите на вкладку `Электронная почта`, чтобы просмотреть синхронизированные письма
+3. **Откройте почтовую ветку**: нажмите на любое письмо, чтобы открыть и прочитать весь диалог
+4. **Просмотр истории**: прокрутите полную историю обмена электронными письмами с этим контактом
+
+
+
+## Что вы увидите
+
+### Просмотр ветки электронной почты
+
+Когда вы открываете ветку электронной почты, вы можете:
+
+* **Читать полные беседы**: просматривайте полный обмен электронными письмами
+* **View Participants**: See all people involved in the email thread
+* **Проверка меток времени**: узнавайте, когда было отправлено каждое письмо
+* **Доступ к контексту**: поймите полную историю общения
+
+### Видимость электронной почты
+
+В зависимости от настроек вашего почтового ящика, вы можете видеть:
+
+* **Полное содержимое**: полный текст и детали электронной почты
+* **Тема и метаданные**: тема, отправитель, получатель и метка времени
+* **Только метаданные**: основная информация без содержания письма
+
+## Поведение синхронизации электронной почты
+
+### Что синхронизируется
+
+* **Внешние письма**: все письма с контактами вне вашей организации
+* **Автоматическое связывание**: электронные письма связываются с существующими записями Людей и Компаний
+* **Несколько адресов**: письма с любого адреса связываются с той же контактной записью
+* **Обновления**: новые письма появляются в течение 5 минут
+
+### Что не синхронизируется
+
+* **Внутренние письма**: письма между коллегами (один и тот же домен) остаются частными
+* **Групповые письма**: списки рассылки и групповые письма исключены
+* **Исключенные папки**: папки, которые вы выбрали не синхронизировать (настроено в разделе Настройки → Аккаунты → Электронная почта)
+
+### Избирательная синхронизация папок (функция лаборатории)
+
+Управляйте, какие папки электронной почты синхронизируются с Twenty:
+
+1. Включите `Папку сообщений` в разделе Настройки → Релизы → Лаб
+2. Настройка папок в разделе Настройки → Аккаунты → Электронная почта
+3. Выберите конкретные папки для включения или исключения (Входящие, Отправленные, Архив, пользовательские папки)
+
+## Устранение неполадок с синхронизацией электронной почты
+
+### Общие проблемы синхронизации
+
+* **Задержки синхронизации**: письма появляются в течение 5 минут, но начальный импорт занимает больше времени
+* **Отсутствующие письма**: проверьте, если:
+ * Папки исключены в настройках Папки сообщений
+ * Автоматическое создание контактов отключено (письма требуют существующих записей в Twenty)
+ * Письмо от коллег (один и тот же домен) или списков рассылки
+ * Почтовый ящик все еще завершает начальную синхронизацию
+
+### Ограничения электронной почты
+
+* **Системные папки**: некоторые папки электронной почты могут быть недоступны для синхронизации
+* **Псевдонимы**: только настоящие почтовые ящики можно подключить (не псевдонимы электронной почты)
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..6ca449a8a9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/ru/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..cde9012dd5
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Объект | What You See |
+| --------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Компании** | All emails with anyone from that company (based on email domain) |
+| **Возможности** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Пользовательские объекты
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..074b1149ac
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Обзор
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. Перейдите в **Настройки → Аккаунты**
+2. Нажмите **Добавить аккаунт**
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..fcf073d0f3
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: Ограничение импорта писем},{
+description: Управляйте тем, какие письма импортируются в Twenty.
+---
+
+## Обзор
+
+По умолчанию Twenty синхронизирует все внешние письма из вашего подключённого почтового ящика. Вы можете ограничить импорт с помощью **выбора папок** и **настроек видимости**.
+
+## Способ 1: Выбор папок (рекомендуется)
+
+Управляйте, какие папки электронной почты синхронизируются с Twenty:
+
+1. Перейдите в **Настройки → Выпуски → Лаборатория**
+2. Включите **Папку сообщений**
+3. Вернитесь в **Настройки → Аккаунты**
+4. Выберите подключённую учётную запись электронной почты
+5. Выберите папки для синхронизации:
+
+| Папка | Описание |
+| -------------------------- | -------------------------------------- |
+| **Входящие** | Основные входящие письма |
+| **Отправленные** | Исходящие письма, которые вы отправили |
+| **Архив** | Архивированные сообщения |
+| **Пользовательские папки** | Любые нужные вам папки |
+
+6. Исключите папки, которые вы не хотите синхронизировать (Спам, Корзина, личные папки)
+
+Это даёт вам точный контроль над тем, какие письма отображаются в вашей CRM, без синхронизации всего.
+
+## Способ 2: Настройки автоматического создания контактов
+
+Управляйте тем, когда контакты создаются из писем:
+
+1. Перейдите в **Настройки → Аккаунты**
+2. Выберите подключённый почтовый ящик
+3. Выберите вариант:
+ * **Отключено**: Контакты не создаются, но письма всё равно синхронизируются с существующими контактами
+ * **Отправленные и полученные**: Создавать контакты из всех внешних писем
+ * **Только отправленные**: Создавать контакты только из писем, которые вы отправляете
+
+## Что всегда исключается
+
+Эти письма никогда не синхронизируются, независимо от настроек:
+
+* **Внутренние письма**: сообщения между коллегами (один и тот же домен)
+* **Групповые письма**: списки рассылки и групповые сообщения
+* **Спам/Корзина**: системные папки обычно исключаются
+
+## Важное замечание
+
+Мы не предоставляем адрес электронной почты CC для выборочной синхронизации. Используйте функцию выбора папок выше, чтобы добиться такого же уровня контроля.
diff --git a/packages/twenty-docs/l/ru/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/ru/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..7139ffa8da
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Connection Options
+
+### Google Account (Gmail & Google Calendar)
+
+1. Перейдите в **Настройки → Аккаунты**
+2. Нажмите **Добавить аккаунт**
+3. Select **Continue with Google**
+4. Авторизуйте Twenty на доступ к вашим Gmail и Google Календарю
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Ваши электронные письма и события календаря начнут автоматически синхронизироваться
+
+### Microsoft Account (Outlook & Microsoft Calendar)
+
+1. Перейдите в **Настройки → Аккаунты**
+2. Нажмите **Добавить аккаунт**
+3. Выберите **Продолжить с Microsoft**
+4. Авторизуйте Twenty на доступ к вашим Outlook и Microsoft Календарю
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. Ваши электронные письма и события календаря начнут автоматически синхронизироваться
+
+### SMTP/CalDAV Setup (Other Providers)
+
+Для других провайдеров электронной почты и календаря:
+
+1. Перейдите в **Настройки → Выпуски → Лаборатория**, чтобы включить функцию
+2. Вернитесь в **Настройки → Аккаунты**
+3. Настройте параметры SMTP для электронной почты
+4. Настройте параметры CalDAV для календаря
+5. Проверьте соединение
+
+### Несколько почтовых ящиков
+
+* **Неограниченное количество аккаунтов**: Подключайте несколько учетных записей электронной почты для каждого пользователя
+* **Управление аккаунтами**: Переключайтесь между разными почтовыми ящиками
+* **Настройки синхронизации**: Настройте различные параметры для каждого почтового ящика
+
+
+ Можно подключить только настоящие почтовые ящики (например, support@domain.com с собственным инбоксом). Электронные алиасы, которые перенаправляют на другой ящик, не могут быть подключены к Twenty.
+
+
+## Конфигурация электронной почты
+
+### Видимость сообщений
+
+Выберите различные уровни видимости для ваших электронных писем:
+
+* **Только метаданные**: Делитесь только базовой информацией (отправитель, получатель, дата, время)
+* **Тема и метаданные**: Делитесь строкой темы и метаданными
+* **Всё содержание письма**: Делитесь полным содержимым электронного письма, включая вложения
+
+### Автоматическое создание контактов
+
+* **Отключено**: Автоматическое создание контактов не производится
+* **Для отправленных и полученных сообщений**: Создайте контакты для всех внешних email-интеракций
+* **Только для отправленных сообщений**: Создайте контакты только для отправленных вами писем
+* **Примечание**: Внутренние электронные письма (тот же домен) никогда не синхронизируются для сохранения конфиденциальности
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Управляйте, какие электронные письма будут синхронизированы с выбором папок сообщений (Функция лаборатории)
+
+Управляйте, какие папки электронной почты синхронизируются с Twenty:
+
+1. Перейдите в **Настройки → Выпуски → Лаборатория** и включите **Папку сообщений**
+2. Вернитесь в **Настройки → Аккаунты** и выберите ваш подключенный аккаунт электронной почты
+3. Выберите папки для синхронизации:
+ * **Входящие**: Основные входящие письма
+ * **Отправленные**: Исходящие письма, которые вы отправили
+ * **Пользовательские папки**: Любые определенные папки, которые вы хотите включить
+ * **Исключение папок**: Пропускайте папки, такие как Спам, Корзина либо личные папки
+
+Это позволяет вам тщательно управлять, какие письма появятся в вашей CRM без синхронизации всего.
+
+**Что синхронизируется:**
+
+* **Внешние письма**: Все письма с внешними контактами из выбранных папок
+* **Внутренние письма**: Не синхронизируются (те же доменные письма остаются приватными)
+* **Вложения**: Будет доступно в H1 2026
+
+**Примечание**: Мы не предоставляем адрес электронной почты CC для выборочной синхронизации. Вместо этого используйте функцию папки сообщений выше для получения такого же уровня контроля над тем, какие письма синхронизируются с Twenty.
+
+## Конфигурация календаря
+
+### Видимость событий
+
+Выберите, что будет видно другим пользователям в вашем рабочем пространстве:
+
+* **Всё**: Подробности события будут доступны вашей команде
+* **Метаданные**: Только дата и участники будут видны вашей команде
+
+### Авто создание контактов для встреч
+
+* **Да**: Автоматически создавайте контакты для участников встречи, не находящихся в вашем CRM
+* **Нет**: Связывайте встречи только с существующими контактами
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Контролируйте, какие события будут синхронизированы
+
+* **Импорт встреч**: Автоматически импортируйте события в календаре
+* **Связь с контактами**: Связывайте встречи с записями о людях и компаниях
+
+**Что синхронизируется:**
+
+* **Встречи**: События в календаре с внешними участниками
+* **Связь с контактами**: События автоматически связаны с записями CRM
+* **Командные события**: Видимость общего календаря
+
+## Частота синхронизации
+
+**Обновления каждые 5 минут**: Данные по электронной почте и календарю синхронизируются автоматически каждые 5 минут после начального импорта.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Следующие шаги
+
+* [Mailbox capabilities](/l/ru/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/ru/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..cb5e021861
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Панели управления
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Обзор
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### Лучшие практики
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Избранное
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..bcecd65d40
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Виджеты
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Стилизация
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/ru/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/ru/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..bc40baba0f
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Пока нет. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/ru/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..307aa4cd1b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Панели управления
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Панели управления
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Вкладки
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Виджеты
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Сохранить
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## Лучшие практики
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Следующие шаги
+
+* [Widgets and visualizations](/l/ru/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/ru/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..c4e61a2e54
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Как это работает
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/ru/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/ru/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..f1ec553da5
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### Поля связи
+
+Please see our dedicated article: [Import Relations Between Objects](/l/ru/user-guide/data-migration/capabilities/import-relations)
+
+### Выбор полей
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..b23ff06244
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Поддерживаемые форматы файлов
+description: Форматы файлов, поддерживаемые для импорта данных в Twenty.
+---
+
+## Поддерживаемые форматы
+
+Twenty поддерживает три формата файлов для импорта:
+
+| Формат | Расширение | Заметки |
+| ---------------------- | ---------- | --------------------------------------- |
+| **CSV** | .csv | Рекомендуется, наибольшая совместимость |
+| **Excel** | .xlsx | Современный формат Excel |
+| **Excel (устаревший)** | .xls | Старый формат Excel |
+
+## Требования к файлам
+
+| Требование | Значение |
+| ----------------- | ------------------------------------------------- |
+| **Кодировка** | Рекомендуется UTF-8 |
+| **Лимит записей** | 10 000 записей на файл |
+| **Структура** | Первая строка должна содержать заголовки столбцов |
+| **Содержимое** | Один тип объекта в файле |
+
+## Лучшие практики CSV
+
+* **Разделитель**: используйте запятую (`,`) или точку с запятой (`;`)
+* **Квалификатор текста**: используйте двойные кавычки (`\"`) для текста, содержащего запятые
+* **Окончания строк**: поддерживаются оба варианта — Windows (CRLF) и Unix (LF)
+* **Пустые значения**: оставляйте ячейки пустыми, не используйте "NULL" или "N/A"
+
+## Лучшие практики Excel
+
+При экспорте из Excel:
+
+* Удалите формулы (экспортируйте только значения)
+* Удалите пустые строки в конце
+* Убедитесь, что нет объединённых ячеек
+* Используйте только первый лист
+
+## Большие наборы данных
+
+Для наборов данных более 10 000 записей:
+
+* Разбейте на несколько файлов
+* Или используйте [импорт через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api) для неограниченного количества записей
+
+Для очень больших миграций (100 000+ записей) API значительно быстрее и надёжнее, чем импорт CSV.
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..526539f861
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Обзор
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Пример**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Объект | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Компании** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **Участники рабочего пространства** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..3f1c612693
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Обзор
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Объект | Unique Fields |
+| ---------------------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Компании** | `id`, `domain` |
+| **Пользовательские объекты** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## Лучшие практики
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..a19114df10
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Обзор
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Сценарии использования:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/ru/developers/extend/capabilities/apis).
+
+### Разрешения
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### Поля связи
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/ru/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Следующие шаги
+
+* [How to Update Existing Records](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/ru/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..2b036f8c93
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Обзор
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Сообщение об ошибке | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Что вы увидите
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Что вы увидите
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### Электронная почта
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Домен
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Дата
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Телефон
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Пример |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Boolean
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Валюта
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Пример |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Число
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/ru/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Что вы увидите
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Что вы увидите
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/ru/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Что вы увидите
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### Связи
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Модель данных
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/ru/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/ru/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/ru/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..12e9350c8c
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Обзор
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Перед началом
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/ru/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Поле | Required? | Формат | Заметки |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Текст | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Число | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Ошибка | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Да! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Устранение неполадок
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/ru/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..5327805dff
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Обзор
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Перед началом
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Поле | Required? | Формат | Заметки |
+| --------------------- | ----------- | ----------------- | ------------------------- |
+| **Электронная почта** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Текст | |
+| **Last Name** | Recommended | Текст | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Текст | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Пример |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Формат | Пример |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Заметки |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| Электронная почта | **Электронная почта** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Телефон | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Ошибка | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Да! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Устранение неполадок
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/ru/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..7bbf238ffb
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Обзор
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Лимит | Значение |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Документация |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/ru/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/ru/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## Лучшие практики
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/ru/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Профессиональные услуги
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ru/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Да! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/ru/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..45ae22b978
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Обзор
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| Связь | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Компания | Люди |
+| Companies → Opportunities | Компания | Возможности |
+| People → Tasks | Person | Задачи |
+| People → Notes | Person | Заметки |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| ----------------------------------- | --------------------------------------------------------------- |
+| **Компании** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Участники рабочего пространства** | `id` (UUID), `email` (not name) |
+| **Пользовательские объекты** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Идентификатор | Формат | Пример |
+| ----------------- | -------------- | -------------------------------------- |
+| Домен | URL format | `https://acme.com` |
+| Электронная почта | Standard email | `john@acme.com` |
+| ID | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Да! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Вы можете либо:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Устранение неполадок
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/ru/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..a48b16e488
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: "Миграция с других CRM-систем "
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Обзор
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members**
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Пользовательские объекты
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| --------------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **Электронная почта** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Воссоздайте рабочие процессы
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/ru/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Распространенные проблемы и решения
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Послемиграционный контрольный список
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Конфигурация
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Нужна Помощь?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ru/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..5a14b3a7fd
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Миграция с локального на облако
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Обзор
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Компании
+2. Люди
+3. Возможности
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Пример:**
+
+До:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+После:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Представления
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### Рабочие процессы
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Интеграции
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Послемиграционный контрольный список
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Нужна Помощь?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/ru/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..60d3f0a1bb
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: Подготовьте файлы CSV},{
+description: Полное пошаговое руководство по форматированию ваших данных для импорта в Twenty.
+---
+
+## Обзор
+
+Это руководство проведет вас через подготовку файла CSV для успешного импорта. Следуйте этим шагам, чтобы избежать ошибок.
+
+## Шаг 1: Проверьте требования к файлу
+
+Прежде чем начать, убедитесь, что ваш файл соответствует этим требованиям:
+
+| Требование | Подробности |
+| ----------------------- | ------------------------ |
+| **Формат** | CSV, XLSX или XLS |
+| **Ограничение размера** | 10 000 записей на файл |
+| **Кодировка** | Рекомендуется UTF-8 |
+| **Структура** | Один тип объекта на файл |
+
+Для наборов данных более 10 000 записей разделите их на несколько файлов или используйте [импорт через API](/l/ru/user-guide/data-migration/how-tos/import-data-via-api).
+
+## Шаг 2: Скачайте образец файла
+
+**Это самый важный шаг.** Образец файла показывает точные названия столбцов и формат, который ожидает Twenty.
+
+1. Перейдите к объекту (Люди, Компании и т. д.)
+2. Нажмите **⋮** → **Импортировать записи**
+3. Нажмите **Скачать образец файла**
+4. Используйте этот файл как шаблон
+
+**Профессиональный совет:** Экспортируйте несколько существующих записей. Это даст вам реальные примеры того, как должны быть отформатированы данные, а названия столбцов будут сопоставлены автоматически во время импорта.
+
+## Шаг 3: Удалите повторяющиеся значения
+
+Twenty требует уникальности для некоторых полей. Дубликаты вызовут ошибки импорта.
+
+| Объект | Уникальные поля |
+| ---------------------------- | ------------------------------------------------------------ |
+| **Люди** | `id`, `email` |
+| **Компании** | `id`, `domain` |
+| **Пользовательские объекты** | `id`, а также любое поле, которое вы пометили как уникальное |
+
+**Перед импортом:**
+
+1. Отсортируйте таблицу по уникальному полю (email или домен)
+2. Удалите или объедините дублирующиеся строки
+3. Проверьте наличие дубликатов, которые уже существуют в Twenty
+
+**Записи, помеченные как удалённые, учитываются при проверке уникальности.** Записи в Командном меню → Просмотреть удалённые записи вызовут ошибки из‑за дубликатов. Удалите их окончательно или восстановите и обновите.
+
+## Шаг 4: Правильно отформатируйте каждый тип поля
+
+Разные типы полей требуют специфического формата. Полная справка:
+
+### Текстовые поля
+
+* Специальное форматирование не требуется
+* Начальные и конечные пробелы автоматически удаляются
+
+### Поля электронной почты
+
+* Должны быть в корректном формате email: `name@domain.com`
+* Должны быть уникальными (без дубликатов в файле и в Twenty)
+* Для дополнительных адресов используйте этот формат в столбце **Emails / Additional Emails**:
+
+```
+[\"jane@twenty.com\",\"jane.doe@twenty.com\"]
+```
+
+### Поля домена
+
+* **Рекомендуемый формат**: `https://domain.com`
+* Это соответствует формату, используемому синхронизацией почты/календаря (предотвращает дубликаты)
+* Заполните оба столбца:
+ * **Domain / Domain Label**: `domain.com`
+ * **Domain / Domain URL**: `https://domain.com`
+* Должны быть уникальными в вашем файле и в Twenty
+
+### Поля телефона
+
+Телефон — это **вложенное поле**, требующее нескольких столбцов:
+
+| Столбец | Пример |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Пример |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Выбор полей
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Следующие шаги
+
+Your file is ready! Now:
+
+* [Import Companies](/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..0edd3d0981
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Обзор
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Сценарии использования:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Как это работает
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Объект | Recommended | Alternative | Заметки |
+| ---------------------------- | ------------------- | ----------- | ---------------------------- |
+| **People** | `электронная почта` | `id` | Email is human-readable |
+| **Компании** | `домен` | `id` | Domain is human-readable |
+| **Пользовательские объекты** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Результат |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Результат | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Да! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## Лучшие практики
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Устранение неполадок
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/ru/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/ru/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/ru/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..5f225afcfd
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: Миграция данных},{
+description: Импортируйте и экспортируйте данные вашей CRM через файлы CSV или API.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Способы импорта
+
+Twenty поддерживает два основных способа импорта данных:
+
+| Метод | Лучше всего подходит | Ограничение объема |
+| -------------- | ------------------------------------------- | ---------------------- |
+| **Импорт CSV** | Стандартные миграции, регулярные обновления | 10 000 записей на файл |
+| **Импорт API** | Крупномасштабные миграции, автоматизация | Без ограничений |
+
+Для очень больших наборов данных (сотни тысяч записей) используйте API. Наши [партнеры по внедрению](/l/ru/user-guide/getting-started/capabilities/implementation-services) при необходимости помогут запустить эти скрипты.
+
+## Основы импорта CSV
+
+Вы можете импортировать данные для любого объекта, используя файлы CSV, XLSX или XLS. Каждый файл должен содержать **только один тип объекта** (например, только записи «Люди»).
+
+**Поля должны существовать до импорта.** Загрузка CSV создает записи, но не создает поля. Если вам нужны настраиваемые поля, сначала создайте их в разделе **Settings → Data Model**.
+
+### Шаги
+
+1. Перейдите к объекту, в который вы хотите импортировать данные
+2. Нажмите значок **⋮** в правом верхнем углу (это Командное меню) и выберите **Импорт записей**
+3. Скачайте шаблон файла, чтобы убедиться, что ваши данные в ожидаемом формате
+4. Загрузите подготовленный файл CSV
+5. Сопоставьте ваши столбцы с полями Twenty
+6. Просмотрите ошибки (выделены желтым) и исправьте их, редактируя прямо в интерфейсе
+7. Подтвердите импорт
+
+### Импорт связей между объектами
+
+Вы можете импортировать связи между объектами с помощью функции импорта CSV. Вам нужно ссылаться на связанный объект, используя уникальное поле этого объекта: `id`, `email` для «Люди» и участников рабочего пространства, `domain` для компаний, либо любое другое поле, помеченное как уникальное в модели данных для любого другого объекта.
+
+**Удаленные записи учитываются при проверке уникальности.** Мягко удаленные записи (видны в Командном меню → See deleted records) включаются в проверки уникальности. Если вы импортируете запись с тем же уникальным значением, что и у удаленной записи, удаленная запись будет восстановлена.
+
+
+ **Порядок импорта имеет значение!**
+
+ При импорте связанных объектов загружайте файлы в следующем порядке:
+
+ 1. Сначала **Компании** (сторона «один» в отношениях)
+ 2. **Люди** во вторую очередь (связаны с компаниями через companyId)
+ 3. **Возможности** в третью очередь (связаны с компаниями/людьми)
+ 4. **Пользовательские объекты** со связями — в последнюю очередь
+
+ Почему? Сторона «один» в связи типа «один-ко-многим» должна существовать, прежде чем вы сможете на нее ссылаться. Например, запись компании должна существовать до импорта человека с идентификатором этой компании.
+
+
+Обратитесь к [этой статье](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) за пошаговым руководством.
+
+## Экспорт данных
+
+Экспортируйте данные вашего рабочего пространства для резервного копирования, отчетности или миграции.
+
+### Шаги
+
+1. Перейдите к объекту, который вы хотите экспортировать
+2. Настройте представление с нужными столбцами
+3. Нажмите **⋮** → **Экспортировать представление**
+4. Сохраните файл CSV
+
+**Экспортируются только видимые столбцы.** Файл CSV будет содержать только столбцы, отображаемые в вашем текущем представлении. Добавьте или скройте столбцы перед экспортом, чтобы управлять тем, какие данные будут включены.
+
+**Ограничения экспорта**: до 20 000 записей за один экспорт.
+
+## Разрешения
+
+Импорт и экспорт данных требуют определенных разрешений:
+
+* **Импорт**: требуется разрешение "Import CSV"
+* **Экспорт**: требуется разрешение "Export CSV"
+
+Свяжитесь с администратором вашего рабочего пространства, если у вас нет этих разрешений.
+
+## Следующие шаги
+
+* [Подготовьте файлы CSV](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [Импорт связей между объектами](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Импорт через API для больших наборов данных](/l/ru/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..5f80eb8e5d
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Поля
+description: Разберитесь в роли полей и в том, как ими управлять.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## О полях
+
+Поля похожи на столбцы в электронной таблице. Они хранят различные типы данных, такие как текст, числа или даты. Поля могут быть стандартными (встроенными) или пользовательскими (те, которые вы создаете).
+
+### Стандартные Поля
+
+Стандартные поля встроены в Twenty для решения общих бизнес-задач.
+
+Например, `Имя` и `Фамилия` являются стандартными полями в объекте `Люди`. Они хранят текстовые данные для отдельных имен.
+
+Вы не можете удалить стандартные поля, но можете деактивировать их, если они вам не нужны.
+
+Вы также можете настраивать параметры стандартных полей типа `SELECT`, например параметры для поля `Stage` в «Сделках».
+
+
+
+### Пользовательские Поля
+
+Пользовательские поля можно добавлять к любому объекту. Вы можете хранить текст, числа, даты, выпадающие списки и многое другое. Используйте пользовательские поля для отслеживания информации, специфичной для вашего бизнеса.
+
+Например, пользовательское поле для SpaceX может быть `Статус Активности Ракеты`, указывающее, работает ли ракета.
+
+
+
+## Типы полей
+
+Twenty поддерживает различные типы полей:
+
+| Тип | Описание | Пример |
+| ------------------- | --------------------------------------------------------------------------------------- | --------------------------- |
+| Адрес | Структурированный адрес с улицей, городом, штатом/регионом, страной и почтовым индексом | Адрес офиса |
+| Массив | Список текстовых значений | Теги |
+| Булево | Флажок «истина/ложь» | Активен |
+| Валюта | Денежное значение с кодом валюты | Сумма сделки (USD) |
+| Дата | Значения дат | Дата закрытия |
+| Дата и время | Дата со временем | Время встречи |
+| Домен | Домен сайта (используется для компаний) | acme.com |
+| Электронная почта | Адреса электронной почты (основной + дополнительные) | Электронная почта контакта |
+| JSON | Структурированные данные JSON | Пользовательские метаданные |
+| Ссылки | URL-адреса с метками (основной + дополнительный) | Веб-сайт, LinkedIn |
+| Длинный текст | Многострочный текст | Описание, примечания |
+| Множественный выбор | Несколько вариантов из предопределенного списка | Теги, категории |
+| Число | Числовые значения (целые или десятичные) | Количество, оценка |
+| Телефон | Телефонные номера с кодом страны | Рабочий телефон |
+| Рейтинг | Рейтинг в звездах (1–5) | Приоритет, оценка |
+| Связь | Ссылки на записи в других объектах | Компания → Люди |
+| Выбрать | Один вариант из предопределенного списка | Этап, статус |
+| Текст | Однострочный текст | Имя, должность |
+
+## Создать пользовательское поле
+
+Чтобы добавить пользовательское поле к любому объекту, выполните следующие шаги:
+
+1. Перейдите в `Настройки` в левой боковой панели.
+2. Перейдите в `Модель Данных`, затем выберите объект, который хотите настроить.
+3. Продолжайте, нажав `Добавить Поле`.
+4. Выберите имя и тип поля, которые подходят вашим требованиям. Рассмотрите возможность добавления описания поля для лучшего понимания.
+
+Ваше новосозданное поле теперь доступно в приложении среди других полей. Чтобы отобразить его в конкретном представлении, откройте меню параметров, затем выберите `Поля`.
+
+
+
+**Быстрый способ:** Нажмите кнопку **+** в верхнем правом углу любой таблицы объектов, затем выберите `Настроить поля`. Это автоматически откроет настройки Модели Данных.
+
+
+
+## Деактивировать поле
+
+Вы можете деактивировать поле, чтобы скрыть его из приложения, не потеряв ваши данные. Считайте, что это что-то вроде скрытия поля, а не его удаления.
+
+Вот как это можно сделать:
+
+1. Найдите поле, которое вы хотите деактивировать, в настройках вашего объекта.
+
+2. Щелкните на три точки `⋮` рядом с полем, чтобы открыть меню.
+
+3. Выберите `Деактивировать` из выпадающего списка.
+
+
+
+Что происходит, когда вы деактивируете поле?
+
+1. **В приложении:** Поле исчезает, и вы не можете добавлять в него новые значения.
+
+2. **Существующие связи:** Если это реляционное поле, существующие связи остаются, но вы не можете создавать новые.
+
+3. **Доступ по API:** Вы все еще можете получить доступ к полю и его данным через API.
+
+Вы можете реактивировать Стандартные и Пользовательские Поля или выбрать их окончательное удаление.
+
+## Сделать поля уникальными
+
+Уникальность поля гарантирует, что разные записи не могут иметь одно и то же значение. Например, адреса электронной почты уникальны для каждого человека.
+
+Если вы получаете ошибку при установке уникальности, проверьте дублирующиеся значения в ваших данных (включая удаленные записи).
+
+## Лучшие практики в настройке полей
+
+### Именование и ограничения
+
+* **Имена в единственном и множественном числе должны различаться**: наш GraphQL API требует различных имен для мутаций
+* **Защищенные имена полей**: некоторые имена зарезервированы для использования системой (например, `Type`, `Application`)
+
+### Поля для валюты и телефона
+
+* **Валюта по умолчанию**: может быть настроена через модель данных
+* **Коды стран по умолчанию**: можно настроить для телефонных полей через модель данных
+
+### Выбор полей
+
+* **Можно выбрать стандартный вариант** для каждого поля Select
+
+### Записать текстовые поля
+
+* **Каждый объект имеет одно основное поле отображения**: Это поле отображается в крайнем левом столбце и представляет запись при ее связи с другими объектами. Это должно быть текстовое поле. Например, Люди используют `Имя` как основное поле, поэтому при связи человека с компанией вы увидите его имя во встраивании компании.
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..5decc8e052
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Объекты
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Стандартные объекты
+
+Стандартные объекты - это предварительно определенные сущности в вашем рабочем пространстве, которые помогут вам начать работу. Они являются частью общей модели данных, доступной всем пользователям Twenty. Вы можете использовать их как есть, настраивать их или деактивировать.
+
+
+
+### Люди
+
+Объект `People` хранит ваши контакты. Он включает в себя контактные данные и историю взаимодействия, чтобы вы могли видеть все ваши взаимодействия с клиентами в одном месте.
+
+### Компания
+
+Объект `Companies` хранит ваши бизнес-аккаунты. В него входят такие данные, как индустрия, размер и местоположение. Компания связана с объектами `People` и `Opportunities`.
+
+### Возможности
+
+Объект `Opportunities` хранит данные, связанные со сделками. Он отслеживает продвижение потенциальных продаж от поиска до закрытия, фиксируя этапы, размеры сделок, связанные учетные записи, и ожидаемую дату закрытия. Вы можете просмотреть вашу воронку продаж в виде канбана.
+
+### Заметки
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Задачи
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Пользовательские объекты
+
+Пользовательские объекты позволяют хранить информацию, уникальную для вашей организации, с которой стандартные объекты не справляются. Например, если вы SpaceX, вы можете создать пользовательский объект для Ракет и Запусков.
+
+
+
+### Creating a New Custom Object
+
+Чтобы создать новый пользовательский объект:
+
+1. Перейдите в Настройки в боковой панели слева.
+2. Under Workspace, go to Data model. Здесь вы сможете увидеть обзор всех ваших существующих Стандартных и Пользовательских объектов (как активных, так и отключенных).
+
+
+
+3. Нажмите на `+ Новый объект` вверху. Введите имя (как в единственном, так и во множественном числе), выберите значок и добавьте описание для вашего пользовательского объекта, а затем нажмите Сохранить (в правом верхнем углу). Используя Листинг как пример пользовательского объекта, единственное число будет "листинг", а множественное - "листинги", вместе с описанием, например, "Листинги, которые хозяева создали для показа своей собственности."
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## Лучшие практики
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..a10aef4c46
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: Поля связи
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. Нажмите **Сохранить**
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ----------- | --------- | ------------- |
+| Люди | Компании | Many-to-One |
+| Возможности | Компании | Many-to-One |
+| Возможности | Люди | Many-to-One |
+
+## Лучшие практики
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..91df751e2a
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/ru/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. Нажмите **Сохранить**
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/ru/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/ru/user-guide/data-model/capabilities/fields) — all field types explained
+* [Частые вопросы о модели данных](/l/ru/user-guide/data-model/how-tos/data-model-faq) — распространённые вопросы
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..869a48f8bc
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/ru/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. Нажмите **Сохранить**
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/ru/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/ru/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Объекты](/l/ru/user-guide/data-model/capabilities/objects) — стандартные и пользовательские объекты
+* [Частые вопросы о модели данных](/l/ru/user-guide/data-model/how-tos/data-model-faq) — распространённые вопросы
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..cf18df34a9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Перед началом
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/ru/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. Нажмите **Сохранить**
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/ru/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..85ede31e99
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Часто задаваемые вопросы о модели данных
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Управление объектами
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Пока нет. На данный момент последовательность объектов фиксирована, но эта функция планируется в будущем выпуске.
+
+
+
+ Все активные объекты отображаются в навигации. Вы можете деактивировать ненужные объекты через **Настройки → Модель данных**.
+
+
+
+## Возможности полей
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ Наш GraphQL API использует обе формы для различных операций:
+
+ * `createPerson` (единственное число) для действий с одной записью
+ * `createPeople` (множественное число) для массовых операций
+
+ Это создает ограничения, когда формы единственного и множественного числа совпадают, но улучшает опыт разработчика.
+
+
+
+ Определенные названия полей, такие как `Тип` или `Приложение`, зарезервированы для системного использования. Выбирайте альтернативные названия, такие как `Категория` или `Классификация`.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Поля-формулы появятся в **Q1 2026**. До тех пор вы можете использовать рабочие процессы для автоматического вычисления и обновления значений полей.
+
+
+
+ Вложенные поля появятся в **Q1 2026**. На данный момент вы можете использовать рабочие процессы для извлечения значений полей из связанных объектов. Например, чтобы отображать отрасль компании на записи Персоны, создайте пользовательское поле в Людях и используйте рабочий процесс для синхронизации значения.
+
+
+
+ Переупорядочивание полей будет доступно вместе с настраиваемыми макетами в **Q4 2025**. Currently, fields appear in alphabetical order.
+
+
+
+## Связи
+
+
+
+ Да! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/ru/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Доступ и разрешения
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Обратитесь к администратору вашего рабочего пространства. Доступ к модели данных обычно ограничен только администраторами.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Нужна дополнительная помощь?
+
+Check our [Implementation Services](/l/ru/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/ru/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/ru/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..1da94bd3a5
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Модель данных
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Модель данных — это структура, определяющая, как информация организована в вашей CRM. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Объекты
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Поля
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* Имя
+* Электронная почта
+* Телефон
+* Должность
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Записи
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Например:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Поля** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Каждый бизнес работает по-своему. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Они выходят за рамки одного поля, поскольку несут свои данные и связи.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Спросите себя:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Следующие шаги
+
+Once you've planned your data model:
+
+* [Как создать пользовательские объекты](/l/ru/user-guide/data-model/how-tos/create-custom-objects)
+* [Как создать пользовательские поля](/l/ru/user-guide/data-model/how-tos/create-custom-fields)
+* [Как создать поля связей](/l/ru/user-guide/data-model/how-tos/create-relation-fields)
+
+## Нужна Помощь?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/ru/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..3062d640a9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Glossary
+description: Ознакомьтесь с основными терминами, используемыми в Twenty.
+---
+
+## API
+
+API (интерфейс программирования приложений) позволяет подключать Twenty к другим программным системам и создавать пользовательские интеграции.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Меню команд
+
+Меню команд — это интерфейс быстрого доступа (открывается с помощью `Cmd + K` на Mac и `Ctrl + K` на Windows), который позволяет выполнять действия, создавать записи и эффективно перемещаться по рабочему пространству.
+
+## Компания и Люди
+
+CRM имеет два основных типа записей:
+
+* «Компания» представляет собой бизнес или организацию.
+* «Люди» представляют собой текущих и потенциальных клиентов вашей компании.
+
+## Пользовательские поля
+
+Пользовательские поля — это поля данных, которые вы создаете для сбора информации, специфичной для ваших бизнес-потребностей и процессов.
+
+## Модель данных
+
+Модель данных — это структура, которая определяет, как информация организована в вашей CRM, включая какие объекты существуют, их свойства (поля) и как они связаны друг с другом.
+
+## Избранное
+
+Избранное — это записи, которые вы пометили для быстрого доступа, они появляются в вашей боковой панели для мгновенной навигации к важным данным.
+
+## Поле
+
+Поле относится к определенной области, в которой хранится конкретная информация для объекта.
+
+## Интеграция
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Итератор
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Канбан
+
+Канбан — это визуальный способ отслеживания бизнес-процессов с использованием карточек и колонок. Каждая колонка представляет этап в вашем процессе (например: новые, в работе, выиграны, потеряны), и вы перемещаете записи через эти этапы по мере их продвижения.
+
+## Объект
+
+Объект — это структура данных, представляющая определенный тип сущности в вашей CRM (например, Люди, Компании или Возможности). Объекты могут быть стандартными (встроенными) или пользовательскими (созданными вами).
+
+## Возможности
+
+Возможности в Twenty CRM — это потенциальные сделки или продажи с аккаунтами или контактами.
+
+## Запись
+
+Запись указывает на экземпляр объекта, например, определенный аккаунт или контакт.
+
+## Поля связи
+
+Поля связи создают связи между различными объектами, позволяя связывать записи друг с другом (например, связывать Человека с Компанией).
+
+## Стандартные поля
+
+Стандартные поля — это предустановленные поля данных, которые включены в объекты по умолчанию и обеспечивают общую функциональность во всех рабочих пространствах.
+
+## Задачи
+
+Задачи в Twenty CRM — это назначенные действия, связанные с контактами, аккаунтами или возможностями.
+
+## Триггеры
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Представления
+
+Вы можете настраивать отображение своих записей, используя представления, устанавливая различные фильтры, макеты и параметры сортировки для каждого представления.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Вебхуки
+
+Вебхуки — это автоматизированные сообщения, отправляемые от Twenty в другие приложения при возникновении определенных событий, обеспечивая синхронизацию данных в реальном времени.
+
+## Рабочие процессы
+
+Рабочие процессы — это автоматизированные процессы, которые запускают действия на основе определенных условий, помогая автоматизировать повторяющиеся задачи и бизнес-процессы.
+
+## Рабочее пространство
+
+Рабочее пространство обычно представляет собой компанию, использующую Twenty. В нем хранятся все записи и данные, которые вы и участники вашей команды добавляете в Twenty.
+У него одно доменное имя — обычно то, которое ваша компания использует для адресов электронной почты сотрудников.
+
+## Участники рабочего пространства
+
+Участники рабочего пространства — это пользователи Twenty из вашей команды, которые имеют доступ к вашему рабочему пространству. Они могут быть назначены в качестве владельцев или ответственных за записи.
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..ac45ac56ec
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Услуги по внедрению
+description: Нужна ли вам помощь в начале работы или в создании сложных настроек, у нас есть решение.
+---
+
+## Пакеты внедрения
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Проектирование модели данных**: Разрабатывайте и создавайте свою собственную модель данных с объектами, полями и отношениями
+* **Миграция данных**: Переносите существующие данные из вашей текущей CRM в Twenty
+* **Создание рабочих процессов**: Создавайте пользовательские рабочие процессы для поддержки ваших бизнес-процессов
+
+## Партнеры по внедрению
+
+Работайте с сертифицированными партнерами Twenty для более сложных настроек и интеграций. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..6cc84aeca9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Что такое Twenty
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Видение
+
+Creating a good CRM is hard because it's a balancing act.
+Для каждого бизнеса требования кажутся простыми, но у всех потребности разные.
+The result is a CRM that's either too basic, or one that's attempting to be a jack-of-all-trades but ending up as a master of none.
+
+Сначала Twenty выглядит как большинство известных вам CRM: вы можете отслеживать сделки, организовывать контакты, управлять задачами и заметками.
+**Но что отличает его, так это наш подход к расширяемости. Мы создаем открытую платформу, которая предоставляет строительные блоки для решения уникальных бизнес-задач.**
+
+Мы отдаем предпочтение универсальным принципам и общим шаблонам, а не спискам функций.
+Мы не претендуем на знание всех ответов и вместо этого даем возможность пользователям найти то, что для них лучше всего.
+Открытый код является основой нашего подхода, обеспечивающей, что Twenty развивается вместе со своим сообществом и для своего сообщества.
+
+## Преимущества
+
+**Настраиваемый:** Спроектирован с учетом потребностей вашего бизнеса.
+
+**Ведётся сообществом:** Создан и поддерживается большим сообществом с открытым исходным кодом.
+
+**Экономичный:** Вы никогда не будете зависеть от поставщика, потому что всегда можете разместить его у себя.
+
+## Основные функции
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Узнать больше](/l/ru/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/ru/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Начните](/l/ru/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/ru/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/ru/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/ru/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/ru/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/ru/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Начать интеграцию](/l/ru/developers/extend/capabilities/apis).
+
+## Присоединяйтесь сейчас
+
+[Зарегистрируйтесь здесь](https://app.twenty.com) или [станьте участником на GitHub](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..f6a9f95fa1
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Каждый бизнес работает по-своему. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Это обеспечивает мгновенную отдачу и помогает вашей команде увидеть Twenty в действии с реальными данными. You can do so under Settings → Accounts.
+
+## 1. Настройте свою модель данных
+
+Twenty предлагает гибкость, необходимую для создания модели данных, которая наилучшим образом поддерживает вашу повседневную работу.
+Создавайте объекты и поля любого типа, включая отношения между различными объектами. Вы можете сделать это в разделе Настройки → Модель данных.
+Вот несколько советов:
+
+* **Вы не ограничены в количестве пользовательских полей и объектов.** Добавление пользовательских объектов и полей не приведет к повышению вашего тарифа. Добавление пользовательских объектов и полей не приведет к повышению вашего тарифа.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. Мы рекомендуем использовать их как можно чаще, добавляя поля для категоризации ваших записей, если это необходимо. Вот пример:
+ * Лучше всего использовать объект Люди для своих клиентов и партнеров, создавая поле в объекте Люди с именем `Тип Персоны`, а не создавать пользовательский объект Партнёр. Потому что вы не сможете получить доступ к электронной почте, обмененной с этим человеком из записей партнёра.
+ * Создайте разные представления в разделе Люди, одно для отображения партнёров и одно для отображения клиентов.
+* Two People cannot have the same email address. Две компании не могут использовать один и тот же домен.
+* Вы можете деактивировать стандартные поля и объекты, которые не хотите использовать.
+* Вы можете скрыть поля из представлений: не бойтесь создавать поля, вам не нужно будет показывать их все.
+
+Прочитайте [эту статью](/l/ru/user-guide/data-model/overview), чтобы узнать, как разработать свою модель данных.
+
+## 2. Принесите свои данные
+
+Перенос ваших существующих данных в Twenty дает вашей команде контекст с самого начала.
+
+### Подключите свою почту
+
+Если вы еще не сделали этого при создании рабочего пространства, подключите свой **аккаунт Google или Microsoft** в разделе Настройки → Учетные записи. Это позволяет Twenty:
+
+* Импортировать ваши сообщения и встречи
+* Автоматически создавать контакты на основе взаимодействий (опционально)
+* Сохранять историю общения видимой для вашей команды
+
+**Используете другого провайдера?**
+Вы можете добавить другую почту через SMTP или другой календарь через CalDAV. Вам нужно будет активировать эту функцию в разделе Настройки → Релизы → Лаб, а затем вернуться на вкладку Настройки → Учетные записи.
+
+### Импортировать данные через csv
+
+Используйте меню команд (`Cmd + K` или `Ctrl + K`), чтобы импортировать Людей, Компании, Возможности или любые пользовательские объекты с помощью CSV.
+
+**Ключевые рекомендации**:
+
+* Скачайте пример файла, чтобы понять ожидаемый формат
+* Ограничьте каждый файл 10k записями
+* Удалите дубликаты электронной почты для объектов Люди или дублирующиеся домены для Компаний
+* Проверьте и исправьте ошибки (выделены желтым цветом) перед импортом
+
+Прочитайте [эту статью](/l/ru/user-guide/data-migration/overview), чтобы узнать больше об импорте данных.
+
+## 3. Создайте своё первое представление
+
+Создание различных представлений является ключевым для того, чтобы сделать данные доступными для вашей команды.
+Вот как действовать:
+
+* **Добавьте или спрячьте столбцы**
+ Управляйте видимыми полями в данном представлении, щелкнув на Опции → Поля (справа вверху). Вы можете показать/скрыть поля оттуда.
+
+* **Измените порядок полей**
+ Измените порядок полей в данном представлении, щелкнув на Опции → Поля (справа вверху). Перетаскивайте поля, чтобы изменить их порядок.
+
+* **Отфильтруйте своё представление**
+ Сузьте круг отображаемых записей, используя фильтры справа вверху.
+
+* **Отсортируйте записи**
+ Упорядочьте отображаемые записи с помощью функции сортировки справа вверху или нажатием на название столбца.
+
+* **Выберите макет**
+ Вы можете переключиться на макет **Kanban** или список **Группировать по**, если объект имеет поле типа `Этап` или аналогичное select-тип поле.
+
+* **Сохраните своё представление как Избранное**
+ Это можно сделать с помощью выпадающего меню, отображающего различные представления.
+
+## Что дальше?
+
+Начните создавать автоматизацию, используя [рабочие процессы](/l/ru/user-guide/workflows/overview).
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..eeb2951c33
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Создать рабочее пространство
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Шаг 1: Регистрация
+
+1. Перейдите на [Twenty Sign Up](https://app.twenty.com).
+2. Выберите предпочтительный способ регистрации:
+ * **Продолжить с Google** для регистрации с учетной записью Google.
+ * **Продолжить с Microsoft** для регистрации с учетной записью Microsoft.
+ * Или, **Продолжить с электронной почтой** для регистрации по электронной почте.
+
+
+
+## Шаг 2: Выбор пробного периода
+
+Выберите один из двух пробных периодов:
+
+### 30 дней
+
+С кредитной картой
+
+### 7 дней
+
+Без кредитной карты
+
+Оба пробных периода включают:
+
+* Полный доступ
+* Неограниченное количество контактов
+* Интеграция электронной почты
+* Пользовательские объекты
+* API и Вебхуки
+
+Вы можете нажать на "Изменить план", чтобы выбрать другой план или интервал оплаты.
+
+
+
+## Шаг 3: Подтверждение платежа и настройка учетной записи
+
+После подтверждения оплаты через Stripe, вы перейдете к созданию рабочего пространства и профиля пользователя. Помните, что вы можете отменить подписку в любое время.
+
+## Поддержка
+
+По вопросам или за помощью обращайтесь в службу поддержки по адресу [contact@twenty.com](mailto:contact@twenty.com) или отправьте сообщение в [Discord](https://discord.gg/cx5n4Jzs57).
diff --git a/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..5daea4eaa4
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Быстрый обзор навигации по платформе и выполнению различных типов действий.
+---
+
+## Основная компоновка
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. Здесь происходит повседневная работа.
+Вы можете **просматривать, изменять, удалять записи** оттуда, а также **создавать новые представления**.
+
+
+
+## Панель навигации
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Переключайтесь между несколькими рабочими пространствами с помощью выпадающего меню или создайте новое рабочее пространство
+* Используйте строку поиска (нажмите `/`, чтобы быстро перейти к ней)
+* Откройте раздел «Настройки»
+* Have direct access to your **Favourites views**. Избранное уникально для каждого пользователя.
+* Переключайтесь между разными объектами
+* **Create automations** using workflows
+* Свяжитесь со службой поддержки и откройте наше руководство пользователя.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. Вы можете получить к нему доступ двумя способами:
+
+* **Клавиатурное сочетание**: Нажмите `Cmd + K` (Mac) или `Ctrl + K` (Windows)
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Создавать новые записи
+* **Импортировать и экспортировать данные в формате CSV**
+* Создавать новые представления
+* Получать доступ к удалённым записям (в Twenty поддерживаются мягкое и жёсткое удаление)
+* Просмотреть клавиатурные сочетания для быстрого доступа к объектам в вашем рабочем пространстве
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Представления
+
+Every object (like Opportunities or People) supports multiple views. Вы не ограничены в количестве представлений для объекта.
+
+Используйте выпадающее меню в верхнем левом углу основной компоновки, чтобы переключаться между различными представлениями. Например:
+
+* Используйте представление Kanban для отслеживания возможностей по стадиям
+* Используйте представление Group By для создания секций и повышения эффективности
+* Используйте фильтры, чтобы сосредоточиться на конкретных записях (например, лидах, созданных на прошлой неделе)
+* Сохраняйте отфильтрованные представления для повторного использования
+* Favourite views for fast access
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/ru/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Настройки
+
+Откройте раздел «Настройки» в левом верхнем углу, чтобы:
+
+* **Подключите свои аккаунты почты и календаря** для синхронизации электронной почты и календаря
+* Настройте свою модель данных: создавайте пользовательские объекты, поля и отношения
+* **Откройте песочницу API и настройте вебхуки**
+* **Управляйте разрешениями пользователей и контролем доступа к рабочему пространству**
+* Пригласите членов команды и управляйте ролями пользователей
+* Редактируйте свой профиль и параметры рабочего пространства
+* Настройте выставление счетов и отслеживайте использование кредитов рабочих процессов
+* Ознакомьтесь с последними выпусками и предстоящими функциями (на вкладке Releases → Lab)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/ru/user-guide/introduction.mdx b/packages/twenty-docs/l/ru/user-guide/introduction.mdx
new file mode 100644
index 0000000000..4ce4574416
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..fd277bc4a3
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: Разрешения
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Система разрешений Twenty позволяет вам контролировать доступ к трем основным областям:
+
+* **Объекты и поля**: Контролировать, кто может просматривать, редактировать или удалять записи и отдельные поля
+* **Настройки**: Управление доступом к конфигурации рабочего пространства и административным функциям
+* **Действия**: Контролировать общие действия рабочего пространства, такие как импорт данных или отправка писем
+
+## Создать роль
+
+Чтобы создать новую роль:
+
+1. Перейдите в **Настройки → Роли**
+2. В разделе **Все роли** нажмите **+ Создать роль**
+3. Введите имя роли
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Нажмите **Сохранить**, чтобы завершить
+
+## Удалить роль
+
+Чтобы удалить роль:
+
+1. Перейдите в **Настройки → Роли**
+2. Нажмите на роль, которую хотите удалить
+3. Откройте вкладку **Настройки**, затем нажмите **Удалить роль**
+4. Нажмите **Подтвердить** в модальном окне
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. Все роли, кроме **Администратора**, могут быть удалены. Всегда должен быть назначен хотя бы один участник на роль **Администратора**.
+
+
+## Назначение ролей участникам
+
+### Просмотр текущих назначений
+
+* Перейдите в **Настройки → Роли**
+* Просмотрите все роли и количество назначенных им участников
+* Просмотрите, какие роли у каких участников
+
+### Назначить роль участнику
+
+1. Перейдите в **Настройки → Роли**
+2. Нажмите на роль, которую вы хотите назначить
+3. Откройте вкладку **Назначение**
+4. Нажмите **+ Назначить участнику**
+5. Выберите участника рабочего пространства из списка
+6. Подтвердите назначение
+
+### Установить роль по умолчанию
+
+1. Перейдите в **Настройки → Роли**
+2. В разделе **Опции** найдите **Роль по умолчанию**
+3. Выберите, какую роль новые участники должны получать автоматически
+4. Новые участники рабочего пространства будут получать эту роль при присоединении
+
+
+ You can only assign roles to existing workspace members. Чтобы пригласить новых участников, используйте [Управление членами](/l/ru/user-guide/settings/capabilities/member-management).
+
+
+## Настроить разрешения
+
+Разрешения определяют, что каждая роль может получить доступ или изменить в вашем рабочем пространстве, включая объекты и записи рабочего пространства, настройки и действия.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Описание |
+| ------------------------------------------- | -------------------------------------- |
+| **Просмотр записей на всех объектах** | View records in lists and detail pages |
+| **Редактирование записей на всех объектах** | Modify existing records |
+| **Удаление записей на всех объектах** | Soft-delete records (can be restored) |
+| **Уничтожение записей на всех объектах** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Описание |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### Управление переопределениями разрешений
+
+To override inherited permissions:
+
+1. Нажмите **X**, чтобы удалить унаследованное правило
+2. Select the specific permissions you want
+3. Нажмите оранжевую **Отмена** (круглая стрелка), чтобы отменить изменения
+
+Когда закончите, нажмите **Завершить**, затем **Сохранить**, после чего вас перенаправит на страницу роли.
+
+### Разрешения для настроек рабочего пространства
+
+Контролируйте доступ к настройкам рабочего пространства двумя способами:
+
+* Переключатель **Все доступ к настройкам** для предоставления полного доступа
+* Или включите специальные разрешения (например, генерация API-ключей, предпочтения рабочего пространства, назначение ролей, настройка модели данных, настройки безопасности и управление Workflows)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Разрешения на действия в рабочем пространстве
+
+Контролируйте доступ к общим действиям рабочего пространства:
+
+* Переключатель **Все доступ к приложениям** для предоставления полных разрешений
+* Или включите индивидуальные действия, такие как **Отправить email**, **Импортировать CSV** и **Экспортировать CSV**
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. Перейдите в **Настройки → Роли**
+2. Нажмите на роль, которую вы хотите назначить
+3. Откройте вкладку **Назначение**
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Подтвердите назначение
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. Перейдите в **Настройки → Роли**
+2. Нажмите на роль, которую вы хотите назначить
+3. Откройте вкладку **Назначение**
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Подтвердите назначение
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..6a2c2ac3cf
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Требования
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. Go to **Settings → Members**
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## Лучшие практики
+
+### Безопасность
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Устранение неполадок
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Получение помощи
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/ru/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/ru/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..536439a1b1
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Роли
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## Разрешения
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. Перейдите в **Настройки → Роли**
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## Единая система идентификации
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/ru/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..1ba38b07e9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: Разрешения и доступ},{
+description: Управляйте ролями, разрешениями и контролем доступа в вашем рабочем пространстве.
+---
+
+
+
+
+
+Система разрешений Twenty позволяет контролировать, кто может получать доступ и изменять данные в вашем рабочем пространстве. Создавайте роли, назначайте разрешения и настраивайте SSO для безопасного доступа.
+
+## Что в этом разделе
+
+
+
+ Создавайте роли и настраивайте разрешения для объектов, полей и настроек.
+
+
+
+ Настройте единый вход (SSO) с вашим провайдером удостоверений.
+
+
+
+ Распространенные вопросы о ролях, разрешениях и SSO.
+
+
+
+## Ключевые возможности
+
+* **Доступ на основе ролей**: создавайте пользовательские роли с определенными разрешениями
+* **Разрешения для объектов**: контролируйте, кто может просматривать, редактировать или удалять записи
+* **Разрешения для полей**: ограничивайте доступ к конфиденциальным полям
+* **Разрешения для настроек**: управляйте доступом к конфигурации рабочего пространства
+* **Интеграция SSO**: настройте единый вход (SSO) для корпоративной безопасности (план Organization)
+
+## Быстрые ссылки
+
+* [Создать роль](/l/ru/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [Настроить SSO](/l/ru/user-guide/permissions-access/capabilities/sso-configuration)
+* [Управлять участниками команды](/l/ru/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..1982db3fd7
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## Домен рабочей области
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Настроить домен
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Утвержденные домены
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Добавить утвержденный домен доступа
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Сохранить
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Публичные домены
+
+Подготовьте полную и безопасную хостинг-среду на этих доменах.
+
+### Add Public Domain
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..37e4a3eefa
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Member Management
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Invite New Members
+
+### Using Email Invitation
+
+1. Go to **Settings → Members**
+2. Click **+ Invite**
+3. Enter the person's email address
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. Go to **Settings → Members**
+2. Скопируйте ссылку приглашения в рабочее пространство
+3. Поделитесь ссылкой с новыми участниками команды
+4. Они получат доступ после регистрации
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/ru/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Одобренные домены доступа
+
+Allow team members to join automatically based on their email domain:
+
+1. Перейдите в **Настройки → Домены**
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/ru/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/ru/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..b8ec5f2edf
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Настройки выпусков
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Функции Лаборатории
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Перейдите в **Настройки → Выпуски**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..ff8b7fbef6
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Настройки рабочей области
+description: Настройте название и брендинг вашей рабочей области.
+---
+
+Those are accessible under **Settings → General**.
+
+## Изображение рабочей области
+
+* **Загрузить лого**: Добавить пользовательский логотип рабочей области
+* **Поддерживаемые форматы**: файлы PNG, JPEG и GIF до 10MB
+* **Удалить**: Удалить текущий логотип рабочей области
+
+## Название рабочей области
+
+* **Название**: Измените отображаемое имя рабочей области
+* Это имя отображается для всех участников рабочей области
+
+## Опасная зона
+
+
+ Удаление вашей рабочей области навсегда удалит все данные и не может быть отменено. Все данные рабочей области будут потеряны навсегда, все участники мгновенно потеряют доступ, и это действие не может быть отменено.
+
+
+Чтобы удалить вашу рабочую область:
+
+1. Нажмите кнопку **Удалить рабочую область**
+2. Подтвердите удаление, когда будет предложено
+
+**Примечание**: Только администраторы рабочей области могут ее удалять.
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/ru/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..d2ffd71eb2
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Настройки FAQ
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Настройки рабочей области
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Изменения сохраняются автоматически
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Настройки профиля
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. Нажмите **Включить 2FA**
+ 4. Сканируйте QR-код с помощью вашего приложения аутентификатора
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. Нажмите **Удалить аккаунт**
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Опыт - Настройки
+
+
+
+ 1. Перейдите в **Настройки → Опыт**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Перейдите в **Настройки → Опыт**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Перейдите в **Настройки → Опыт**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Перейдите в **Настройки → Опыт**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. Перейдите в **Настройки → Аккаунты**
+ 2. Нажмите **Добавить аккаунт**
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. Перейдите в **Настройки → Аккаунты**
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Домены
+
+
+
+ Да! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Функции Лаборатории
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/settings/overview.mdx b/packages/twenty-docs/l/ru/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..7a037fb57c
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Настройки
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Перейдите в **Настройки → Опыт**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. Перейдите в **Настройки → Аккаунты**
+2. Нажмите **Добавить аккаунт**
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/ru/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. Go to **Settings → Members**
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Следующие шаги
+
+* [Workspace settings](/l/ru/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/ru/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/ru/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..9acd279a81
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Календарное представление
+description: Отображайте записи с полями даты в календаре.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/ru/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..93b48a347e
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Изменения сохраняются автоматически
+
+## Field Display by View Type
+
+### Table Views
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Kanban Views
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## Лучшие практики
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/ru/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/ru/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..7d0e315939
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| ---------- | -------------------------------------------------- |
+| Текст | Equals, Contains, Starts with, Ends with, Is empty |
+| Число | Equals, Greater than, Less than, Between, Is empty |
+| Дата | Equals, Before, After, Between, Is empty |
+| Выбрать | Equals, Is any of, Is empty |
+| Флажок | Is true, Is false |
+| Связь | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/ru/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/ru/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..6ff479a6a7
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Kanban Views
+
+Kanban views visually map out process flows, where each column stands for a distinct stage and each card represents a record.
+
+## Move Cards between Stages
+
+Каждая карта может перемещаться по мере прохождения рабочего процесса путем перетаскивания. Для продолжения удерживайте нажатие на карточке и переместите её в следующую стадию.
+
+
+
+## Add and Delete Stages
+
+Вы можете настроить ваш рабочий процесс в соответствии с вашими нуждами, используя стадии, которые представляют значение в поле выбора:
+
+### Добавить стадии
+
+To add a stage, access the Select field settings by navigating to Settings > Data Model, selecting your object, and then the field your Kanban board depends on.
+
+
+
+### Удалить стадии
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Вы можете настроить доску Канбан для отображения некоторых полей и скрытия других. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Вы также можете изменить порядок полей, удерживая имя поля и перетаскивая его туда, где хотите видеть.
+
+
+
+## Компактный Вид
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Описание |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## Лучшие практики
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..4c5ec1dce0
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Table Views
+description: Display your data in a spreadsheet-like list format.
+---
+
+## About Table Views
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Сценарии использования:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/ru/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..1d9e581327
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## Видимость представления
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Настройка | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Откройте представление
+2. Нажмите **Параметры → Видимость**
+3. Select **Workspace** or **Unlisted**
+
+
+ Для представлений по умолчанию "All [Object Name]" нельзя изменить видимость.
+
+
+## Rename a View
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с представлением
+3. Выберите **Изменить**
+4. Enter the new name
+
+## Change View Icon
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с представлением
+3. Выберите **Изменить**
+4. Click the icon to change it
+
+## Изменить порядок представлений
+
+Change the order views appear in the dropdown:
+
+1. Откройте выпадающее меню представления
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Избранное
+
+Закрепите часто используемые представления для быстрого доступа:
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с представлением
+3. Выберите **Добавить в избранное**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Удалить представление
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с представлением
+3. Выберите **Удалить**
+4. Подтвердите удаление
+
+
+ Удалённые представления невозможно восстановить.
+
+
+## Related
+
+* [Views Overview](/l/ru/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/ru/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..7c6b433e12
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Требования
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. Нажмите **Сохранить**
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Объект | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Возможности | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/ru/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..6ff01d5a14
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Требования
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. Нажмите **Сохранить**
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Завершено |
+
+## Related
+
+* [Kanban Views](/l/ru/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/ru/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..8a4725074c
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. Нажмите **Сохранить**
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Вариант | Описание |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Сохранить
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/ru/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..56db3503eb
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Ограничьте доступ к своему представлению
+description: Контролируйте, кто может видеть ваши настраиваемые представления.
+---
+
+Каждое представление (за исключением представлений по умолчанию "All [Object Name]") имеет собственную настройку видимости.
+
+## Шаги
+
+1. Откройте представление, доступ к которому вы хотите ограничить
+2. Нажмите **Параметры** в правом верхнем углу
+3. Нажмите **Видимость**
+4. Выберите **Не в списке**
+
+Теперь ваше представление видно только вам.
+
+## Параметры видимости
+
+| Настройка | Кто может видеть |
+| ------------------------ | ----------------------------------- |
+| **Рабочее пространство** | Все участники рабочего пространства |
+| **Не в списке** | Только вы |
+
+## Заметки
+
+* Представления по умолчанию "All [Object Name]" нельзя перевести в режим "Не в списке"
+* Представления в режиме "Не в списке" не отображаются в выпадающем списке представлений у других пользователей
+* Вы можете в любой момент изменить видимость обратно на "Рабочее пространство"
+
+## Связанные материалы
+
+* [Настройки представления](/l/ru/user-guide/views-pipelines/capabilities/view-settings) — все параметры настройки представления
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..01aae3e9af
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Этап | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## Лучшие практики
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/ru/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..d285f9b6d2
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Покажите ожидаемую сумму в вашей воронке продаж},{
+description: Рассчитывайте и отображайте взвешенные значения сделок на основе вероятности по этапам.
+---
+
+«Ожидаемая сумма» — вычисляемое значение: **Сумма × Вероятность**. Это помогает прогнозировать выручку, взвешивая сделки по вероятности их закрытия.
+
+
+ Это пример создания [Полей формул](/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields) с помощью рабочих процессов.
+
+
+В этом руководстве показана настройка пользовательских полей и рабочих процессов, необходимых для расчета и отображения ожидаемых сумм в вашей воронке.
+
+## Шаг 1: Создайте пользовательские поля
+
+В объекте «Сделки» вам нужны два пользовательских поля.
+
+### Создайте поле «Вероятность»
+
+1. Перейдите в **Настройки → Модель данных → Сделки**
+2. Нажмите **+ Добавить поле**
+3. Настроить:
+ * **Название**: Вероятность
+ * **Тип**: Число
+ * **Описание**: Вероятность в зависимости от этапа (0–100%)
+4. Нажмите **Сохранить**
+
+### Создайте поле «Ожидаемая сумма»
+
+1. Нажмите **+ Добавить поле**
+2. Настроить:
+ * **Название**: Ожидаемая сумма
+ * **Тип**: Валюта
+ * **Описание**: Вычисляется: Сумма × Вероятность
+3. Нажмите **Сохранить**
+
+### Необязательно: сделайте поля доступными только для чтения для пользователей
+
+Если вы не хотите, чтобы пользователи вручную редактировали эти вычисляемые поля:
+
+1. Перейдите в **Настройки → Роли**
+2. Выберите роль для настройки
+3. Найдите объект «Сделки»
+4. Установите поля **Вероятность** и **Ожидаемая сумма** как доступные только для чтения
+
+Это гарантирует, что обновлять эти значения смогут только рабочие процессы.
+
+## Шаг 2: Создайте рабочий процесс №1 — обновление вероятности при изменении этапа
+
+Этот рабочий процесс автоматически устанавливает «Вероятность», когда сделка переходит на новый этап.
+
+### Создайте рабочий процесс
+
+1. Перейдите в **Рабочие процессы**
+2. Нажмите **+ Новый рабочий процесс**
+3. Назовите его "Обновление вероятности при изменении этапа"
+
+### Настройте триггер
+
+1. Добавьте триггер **Запись создана или обновлена**
+2. Выберите **Сделки** в качестве объекта
+3. Фильтр: поле **Этап** обновлено
+
+### Добавьте ветки для каждого этапа
+
+Создайте ветку для каждого этапа с его вероятностью:
+
+| Этап | Вероятность |
+| ------------------- | ----------- |
+| Новый | 10% |
+| Проверенные | 25% |
+| Встреча | 40% |
+| Предложение | 60% |
+| Переговоры | 80% |
+| Закрыта — Выиграна | 100% |
+| Закрыта — Проиграна | 0% |
+
+
+ Чтобы создать новую ветку, щелкните правой кнопкой мыши на холсте рабочего процесса и нажмите **Новое действие**. Затем свяжите это действие с предыдущим узлом, перетащив стрелку от предыдущего узла к этому новому действию.
+
+
+Для каждого этапа:
+
+1. Добавьте узел **Фильтр**: Этап = [название этапа]
+2. Добавьте действие **Обновить запись**:
+ * Запись: инициировавшая срабатывание сделка
+ * Поле: Вероятность
+ * Значение: [вероятность для этого этапа]
+
+### Рассчитать «Ожидаемую сумму»
+
+После объединения веток:
+
+1. Добавьте узел **Фильтр**: поле Сумма не пусто
+2. Добавьте действие **Обновить запись**:
+ * Запись: инициировавшая срабатывание сделка
+ * Поле: Ожидаемая сумма
+ * Значение: Сумма × Вероятность
+
+## Шаг 3: Создайте рабочий процесс №2 — пересчет при изменении суммы
+
+Этот рабочий процесс обновляет «Ожидаемую сумму», когда изменяется «Сумма» сделки.
+
+### Создайте рабочий процесс
+
+1. Перейдите в **Рабочие процессы**
+2. Нажмите **+ Новый рабочий процесс**
+3. Назовите его "Пересчет «Ожидаемой суммы» при изменении «Суммы»"
+
+### Настройте триггер
+
+1. Добавьте триггер **Запись создана или обновлена**
+2. Выберите **Сделки** в качестве объекта
+3. Фильтр: поле **Сумма** обновлено
+
+### Добавьте логику
+
+1. Добавьте узел **Фильтр**: поле Сумма не пусто
+2. Добавьте действие **Обновить запись**:
+ * Запись: инициировавшая срабатывание сделка
+ * Поле: Ожидаемая сумма
+ * Значение: Сумма × Вероятность
+
+## Шаг 4: Отображение в вашей воронке
+
+Теперь покажите итоги по «Ожидаемой сумме» в вашем канбан-представлении:
+
+1. Откройте канбан-представление **Воронка продаж**
+2. Нажмите на **число** рядом с названием любого этапа в верхней части столбца
+3. Выберите **Сумма**
+4. Выберите **Ожидаемая сумма**
+
+Теперь каждый столбец показывает общую взвешенную сумму воронки для этого этапа.
+
+## Резюме
+
+| Компонент | Назначение |
+| -------------------------- | ------------------------------------------------------------------------------------ |
+| **Поле «Вероятность»** | Хранит вероятность выигрыша в зависимости от этапа |
+| **Поле «Ожидаемая сумма»** | Хранит значение «Сумма × Вероятность» |
+| **Рабочий процесс №1** | Обновляет «Вероятность» при изменении «Этапа», затем пересчитывает «Ожидаемую сумму» |
+| **Рабочий процесс №2** | Пересчитывает «Ожидаемую сумму» при изменении «Суммы» |
+| **Агрегация** | Отображает сумму поля «Ожидаемая сумма» по каждому этапу |
+
+## Связанные материалы
+
+* [Поля формул](/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields) — создавайте вычисляемые поля с помощью рабочих процессов
+* [Канбан-представления](/l/ru/user-guide/views-pipelines/capabilities/kanban-views) — агрегации столбцов
+* [Как создать пользовательские поля](/l/ru/user-guide/data-model/how-tos/create-custom-fields) — настройка полей
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..d067408425
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: Отслеживайте, сколько времени сделки находятся на каждом этапе},{
+description: Отслеживайте скорость сделок, фиксируя момент входа сделок на каждый этап.
+---
+
+
+ Это пример создания [полей формулы](/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields) с помощью рабочих процессов — в частности вычислений дат.
+
+
+Отслеживание моментов входа сделок на каждый этап помогает выявлять узкие места и измерять скорость сделок.
+
+В этом руководстве показано, как настроить пользовательские поля и рабочий процесс для автоматической фиксации момента перехода сделки на каждый этап и вычисления количества дней, проведённых на предыдущем этапе.
+
+## Шаг 1: Создайте пользовательские поля
+
+Для каждого этапа вам нужны два типа полей:
+
+* **Поля «Дата и время»**: фиксируют, когда сделка вошла на каждый этап
+* **Числовые поля**: хранят, сколько дней сделка провела на каждом этапе
+
+### Создайте поля «Последний вход»
+
+1. Перейдите в **Настройки → Модель данных → Сделки**
+2. Для каждого этапа нажмите **+ Добавить поле** и настройте:
+ * **Имя**: Последний вход в [название этапа] (например, «Последний вход — Новый», «Последний вход — Квалификация»)
+ * **Тип**: Дата и время
+ * **Описание**: Метка времени, когда сделка вошла на этот этап
+3. Нажмите **Сохранить**
+
+Создайте эти поля:
+
+* Последний вход — Новый
+* Последний вход — Квалификация
+* Последний вход — Встреча
+* Последний вход — Предложение
+* Последний вход — Переговоры
+* Последний вход — Закрыта — выиграна
+* Последний вход — Закрыта — проиграна
+
+### Создайте поля «Дней на этапе»
+
+1. Для каждого этапа нажмите **+ Добавить поле** и настройте:
+ * **Имя**: Дней на [название этапа] (например, «Дней на Новом», «Дней на Квалификации»)
+ * **Тип**: Число
+ * **Описание**: Количество дней, проведённых на этом этапе
+2. Нажмите **Сохранить**
+
+Создайте эти поля:
+
+* Дней на Новом
+* Дней на Квалификации
+* Дней на Встрече
+* Дней на Предложении
+* Дней на Переговорах
+
+
+ Поля «Дней на этапе» не нужны для этапов «Закрыта — выиграна» и «Закрыта — проиграна», так как это финальные этапы.
+
+
+### Необязательно: сделайте поля только для чтения
+
+Если вы не хотите, чтобы пользователи вручную редактировали эти вычисляемые поля:
+
+1. Перейдите в **Настройки → Роли**
+2. Выберите роль для настройки
+3. Найдите объект «Сделки»
+4. Сделайте поля «Последний вход» и «Дней на этапе» доступными только для чтения
+
+## Шаг 2: Создайте рабочий процесс
+
+Один рабочий процесс решает обе задачи:
+
+* Записывает метку времени при входе на новый этап
+* Вычисляет количество дней, проведённых на предыдущем этапе
+
+### Создайте рабочий процесс
+
+1. Перейдите в **Рабочие процессы**
+2. Нажмите **+ Новый рабочий процесс**
+3. Назовите его «Отслеживание времени по этапам»
+
+### Настройте триггер
+
+1. Добавьте триггер **Record Updated**
+2. Выберите **Сделки** как объект
+3. Фильтр: обновлено поле **Этап**
+
+### Добавьте ветви для каждого этапа
+
+
+ Чтобы создать новую ветвь, щёлкните правой кнопкой мыши на холсте рабочего процесса и нажмите **Новое действие**. Затем свяжите это действие с предыдущим узлом, перетащив стрелку от предыдущего узла к новому действию.
+
+
+---
+
+**Ветвь 1: Этап = Новый (первый этап)**
+
+Поскольку это первый этап, мы записываем только метку входа — предыдущего этапа для расчёта нет.
+
+1. Добавьте узел **Filter**: Этап = Новый
+2. Добавьте действие **Code**:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. Добавьте действие **Update Record**:
+ * Запись: инициировавшая триггер сделка
+ * Поле: Последний вход — Новый
+ * Значение: `now` из узла Code
+
+---
+
+**Ветвь 2: Этап = Квалификация**
+
+При переходе к «Квалификации» запишите время входа И рассчитайте дни, проведённые на «Новом».
+
+1. Добавьте узел **Filter**: Этап = Квалификация
+2. Добавьте действие **Code**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Настройте вход узла Code: сопоставьте `lastEnteredPreviousStage` с полем **Последний вход — Новый**
+4. Добавьте действие **Update Record**:
+ * Запись: инициировавшая триггер сделка
+ * Поля для обновления:
+ * Последний вход — Квалификация = `now`
+ * Дней на Новом = `daysInPreviousStage`
+
+---
+
+**Ветвь 3: Этап = Встреча**
+
+При переходе к «Встрече» запишите время входа И рассчитайте дни, проведённые на «Квалификации».
+
+1. Добавьте узел **Filter**: Этап = Встреча
+2. Добавьте действие **Code**:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Настройте вход узла Code: сопоставьте `lastEnteredPreviousStage` с полем **Последний вход — Квалификация**
+4. Добавьте действие **Update Record**:
+ * Запись: инициировавшая триггер сделка
+ * Поля для обновления:
+ * Последний вход — Встреча = `now`
+ * Дней на Квалификации = `daysInPreviousStage`
+
+---
+
+**Продолжите для оставшихся этапов:**
+
+| Этап | Записи | Вычисляет |
+| ------------------- | ------------------------------------ | ------------------- |
+| Предложение | Последний вход — Предложение | Дней на Встрече |
+| Переговоры | Последний вход — Переговоры | Дней на Предложении |
+| Закрыта — выиграна | Последний вход — Закрыта — выиграна | Дней на Переговорах |
+| Закрыта — проиграна | Последний вход — Закрыта — проиграна | Дней на Переговорах |
+
+Ветви не обязаны сходиться — каждая выполняется независимо, когда выполняется условие её этапа.
+
+## Шаг 3: Проанализируйте время на этапе
+
+Имея метки времени и количество дней, вы можете анализировать скорость сделок.
+
+### Создайте представление «Медленные сделки»
+
+1. Создайте табличное представление «Сделки»
+2. Добавьте столбцы: Название, Этап, Дней на [предыдущем этапе], Сумма
+3. Отсортируйте по полю «Дней на этапе» (по убыванию)
+4. Отфильтруйте по полю «Этап», чтобы сосредоточиться на одном этапе
+
+Сделки вверху провели больше всего времени на предыдущем этапе.
+
+### Используйте агрегации
+
+В канбан-представлении вашей воронки:
+
+1. Нажмите на число рядом с названием этапа
+2. Выберите **Среднее**
+3. Выберите поле «Дней на этапе»
+
+Это покажет среднее время, которое сделки проводят на каждом этапе.
+
+## Резюме
+
+| Компонент | Назначение |
+| ----------------------------- | ------------------------------------------------------- |
+| **Поля «Последний вход»** | Хранят момент входа сделки на каждый этап |
+| **Поля «Дней на этапе»** | Хранят количество дней, проведённых на каждом этапе |
+| **Рабочий процесс** | Записывает метку времени И вычисляет дни за один проход |
+| **Представления и агрегации** | Анализируйте скорость сделок и выявляйте узкие места |
+
+## Связанные материалы
+
+* [Рабочие процессы](/l/ru/user-guide/workflows/overview) — основы автоматизации
+* [Как создать пользовательские поля](/l/ru/user-guide/data-model/how-tos/create-custom-fields) — настройка полей
+* [Канбан-представления](/l/ru/user-guide/views-pipelines/capabilities/kanban-views) — агрегации
diff --git a/packages/twenty-docs/l/ru/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/ru/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..c04c3e5785
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Представления и воронки},{
+description: Узнайте, как создавать и управлять представлениями в Twenty.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Понимание представлений
+
+Представления — это сохранённые конфигурации, которые определяют, как отображаются ваши данные. У каждого представления могут быть:
+
+* **Макет**: таблица, канбан или календарь
+* **Фильтры**: какие записи показывать
+* **Сортировка**: как упорядочены записи
+* **Поля**: какие столбцы отображаются
+
+## Типы представлений
+
+### Табличное представление
+
+Представление по умолчанию в виде электронной таблицы, показывающее записи в строках с настраиваемыми столбцами.
+
+### Канбан-представление
+
+Визуальная доска, где записи отображаются карточками, организованными по этапам. Идеально для:
+
+* Воронки продаж
+* Отслеживание проектов
+* Любой рабочий процесс с определёнными этапами
+
+### Просмотр Календаря
+
+Отображайте записи с полями даты в календаре. Отлично подходит для:
+
+* Встречи и мероприятия
+* Крайние сроки и даты выполнения
+* Планирование по времени
+
+## Создание Просмотра
+
+Есть два способа создать новый просмотр.
+
+### Используйте выпадающее меню представлений
+
+1. Перейдите к любому объекту (Люди, Компании и т. д.)
+2. Нажмите название представления в левом верхнем углу (там показано текущее представление со стрелкой раскрытия)
+3. Нажмите **+ Добавить представление**
+4. Назовите представление и нажмите **Создать**
+5. Выберите макет (Таблица, Канбан или Календарь) в разделе **Параметры**
+6. При необходимости добавьте фильтры и сортировку
+7. Выберите, какие поля отображать, и измените их порядок
+8. Нажмите **Сохранить**
+
+
+
+### Начните с редактирования существующего представления
+
+1. Перейдите к любому объекту (Люди, Компании и т. д.)
+2. Выберите макет (Таблица, Канбан или Календарь) в разделе **Параметры** или при необходимости добавьте фильтры и сортировку
+3. Нажмите **Сохранить как новое представление**
+4. Назовите представление и нажмите **Создать**
+5. Продолжайте редактировать новое представление
+6. Нажмите **Обновить представление**, чтобы сохранить дополнительные настройки
+
+
+
+## Управление представлениями
+
+### Редактирование представления
+
+1. Выберите представление из выпадающего списка
+2. Внесите изменения (фильтры, сортировка, столбцы)
+3. Нажмите **Сохранить**, чтобы обновить представление
+
+### Переименовать представление или изменить его значок
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с названием представления
+3. Выберите **Изменить**
+4. Измените название или значок
+5. Нажмите **Сохранить**
+
+### Изменить порядок представлений
+
+1. Откройте выпадающее меню представления
+2. Нажмите и перетащите представление за его «ручку»
+3. Отпустите его в нужной позиции
+4. Новый порядок сохраняется автоматически
+
+### Добавить в избранное
+
+Закрепите часто используемые представления для быстрого доступа:
+
+1. Откройте выпадающее меню представления
+2. Нажмите меню **⋮** рядом с представлением
+3. Выберите **Добавить в избранное**
+4. Представление появится в разделе «Избранное»
+
+### Удалить представление
+
+1. Выберите представление для удаления
+2. Откройте выпадающее меню представления
+3. Нажмите меню **⋮** рядом с представлением
+4. Выберите **Удалить**
+5. Подтвердите удаление
+
+
+ Удалённые представления невозможно восстановить. Перед подтверждением убедитесь, что вы действительно хотите удалить представление.
+
+
+## Видимость представления
+
+Каждое представление (за исключением представлений по умолчанию "All [Object Name]") имеет собственную настройку видимости.
+
+Чтобы изменить видимость:
+
+1. Откройте представление
+2. Нажмите **Параметры → Видимость**
+3. Выберите:
+ * **Рабочая область**: видно всем участникам рабочей области
+ * **Не в списке**: видно только вам
+
+
+ Для представлений по умолчанию "All [Object Name]" нельзя изменить видимость.
+
+
+## Следующие шаги
+
+* [Табличные представления](/l/ru/user-guide/views-pipelines/capabilities/table-views)
+* [Канбан-представления](/l/ru/user-guide/views-pipelines/capabilities/kanban-views)
+* [Фильтры и сортировка](/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Настройки представления](/l/ru/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..e142c06ac0
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Требования
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Настройка**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Поле | Значение |
+| ----------- | ------------------------------------------ |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `Добро пожаловать в {{Your Company Name}}` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Тип триггера | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Настройка**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Настройка**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Настройка**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## Лучшие практики
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Устранение неполадок
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..da489cae8e
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## Лучшие практики
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..e8117253c2
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Пример |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Результат
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Описание |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Устранение неполадок
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## Лучшие практики
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..9a473abbe7
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: Действия рабочего процесса
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Действия определяют, что произойдет после срабатывания триггера. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Создать запись
+
+Добавляет новую запись в выбранный объект.
+
+**Настройка**:
+
+* Выберите целевой объект
+* Заполните обязательные и необязательные поля
+* Use data from previous steps or input values manually to populate fields
+
+**Вывод**: Данные вновь созданной записи доступны для использования на последующих шагах.
+
+### Обновление записи
+
+Изменяет существующую запись в выбранном объекте.
+
+
+
+**Настройка**:
+
+* Выберите целевой объект
+* Выберите конкретную запись для обновления.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Выберите поля для изменения и введите новые значения
+
+**Вывод**: Данные обновленной записи доступны для использования в последующих шагах.
+
+### Удаление записи
+
+Удаляет запись из выбранного объекта.
+
+**Настройка**:
+
+* Выберите целевой объект
+* Выберите конкретную запись для удаления
+
+**Вывод**: Данные удаленной записи остаются доступными для использования в последующих шагах.
+
+### Поиск записей
+
+Находит записи в выбранном объекте, используя условия фильтрации.
+
+**Настройка**:
+
+* Выберите объект для поиска
+* Установите критерии фильтра для сужения результатов
+* Настройте сортировку и ограничения
+
+**Вывод**: Возвращает записи, которые могут быть использованы в последующих шагах.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/ru/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Настройка**:
+
+* Выберите целевой объект
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Используйте данные из предыдущих шагов для заполнения полей
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Итератор
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Настройка**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Определите действия, которые нужно выполнить для каждой записи в цикле.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Фильтр
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Настройка**:
+
+* Select the record to filter
+* Определите условия фильтрации и критерии
+* Настройте, какие записи должны пройти через последующие шаги
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Тип | Описание |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Сценарии использования**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### Отправить письмо
+
+Отправляет email из вашего рабочего процесса. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Настройка**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Введите email-адрес получателя.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Установите строку темы.
+* Составьте текст сообщения. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Форма
+
+Выводит форму во время выполнения рабочего процесса для сбора информации от пользователя. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Для рабочих процессов с другими триггерами (запись создана, обновлена и т. д.) формы доступны только через интерфейс запуска рабочего процесса, и это не ожидаемый пользователем опыт. Центр уведомлений будет выпущен в 2026 году для полноценной поддержки форм в автоматизированных рабочих процессах.
+
+
+**Настройка**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Вывод**: ответы формы доступны для использования в последующих шагах.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Код
+
+Выполняет кастомный JavaScript в вашем рабочем процессе.
+
+**Настройка**:
+
+* Получайте доступ к переменным из предыдущих шагов. You can edit the variables names dynamically.
+
+
+
+* Напишите код JavaScript в редакторе
+* Возвращайте переменные для использования в последующих шагах
+* Проверяйте код непосредственно в шаге
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### HTTP-запрос
+
+Отправляет запрос внешнему API в рамках вашего рабочего процесса.
+
+
+
+**Настройка**:
+
+* Введите URL конечной точки API. Using parameters from previous steps is possible.
+* Выберите метод HTTP (GET, POST, PUT, PATCH, DELETE)
+* Добавьте необходимые заголовки и значения
+* Предоставьте пример ответа для предварительного просмотра структуры
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Настройка**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/ru/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/ru/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..da1c61c5f4
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: Ветви рабочего процесса},{
+description: Создавайте параллельные пути и условную логику в ваших рабочих процессах.
+---
+
+Ветви позволяют разделить рабочий процесс на несколько путей, которые могут выполняться одновременно или условно, в зависимости от ваших данных.
+
+
+
+## Как работают ветви
+
+Когда вы создаёте несколько соединений от одного узла, каждый путь становится ветвью. По умолчанию **все ветви выполняются параллельно** — они не ждут друг друга.
+
+## Создание ветвей
+
+### Добавить новую ветвь
+
+1. **Щёлкните правой кнопкой мыши по основному полотну** рабочего процесса (не по существующему узлу)
+2. Нажмите **Добавить узел**
+3. Выберите тип узла для новой ветви
+4. Перетащите стрелку от нижней части предыдущего шага к верхней части этого нового действия
+5. Повторите, чтобы добавить больше ветвей от того же узла
+
+
+ Каждая ветвь независима. Добавление ветви не влияет на другие существующие пути от этого узла.
+
+
+### Визуальный макет
+
+В редакторе рабочего процесса ветви отображаются как параллельные пути. Вы можете перетаскивать узлы, чтобы изменить визуальный макет, не влияя на выполнение.
+
+## Условные ветви
+
+Поскольку по умолчанию все ветви выполняются, используйте узлы **Фильтр**, чтобы контролировать, какие пути фактически выполняются:
+
+| Ветвь | Условие фильтра | Действие |
+| ----- | ------------------- | -------------------------------------------- |
+| A | Этап = "Выиграно" | Отправить поздравительное электронное письмо |
+| B | Этап = "Проиграно" | Создать задачу последующих действий |
+| С | Этап = "Переговоры" | Уведомить менеджера |
+
+1. Создавайте ветви от вашего триггера или действия
+2. Добавьте узел **Фильтр** как первый шаг каждой ветви
+3. Настройте каждый фильтр с взаимоисключающими условиями
+4. Добавьте свои действия после каждого фильтра
+
+Продолжит выполняться только та ветвь (ветви), где условие фильтра выполнено.
+
+## Объединение ветвей
+
+**Ветви не объединяются автоматически.** Каждая ветвь выполняется независимо, пока не завершится. У вас полная свобода в том, как с этим поступать:
+
+* **Вариант 1: Оставить ветви раздельно**
+ Каждая ветвь самостоятельно обрабатывает свои последующие действия. Это самый простой подход, когда ветвям не нужно сходиться.
+
+* **Вариант 2: Объединить ветви вручную**
+ При создании рабочего процесса вы можете вручную подключить несколько ветвей к одному последующему действию. Просто перетащите стрелки от конца каждой ветви к общему узлу.
+
+
+ Хотя вы можете использовать узел [Задержка](/l/ru/user-guide/workflows/capabilities/workflow-actions#delay) для приостановки выполнения, его пока нельзя настроить на ожидание "пока не завершится другая ветвь".
+
+
+## Связанные материалы
+
+* [Как использовать ветви в рабочих процессах](/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows) - Пошаговое руководство
+* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions) - Доступные действия, включая Фильтр
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..03d77b1f68
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: Workflow Credits
+description: Understand workflow credit consumption and management.
+---
+
+Workflow credits power your automations in Twenty. Понимание принципов их работы помогает оптимизировать затраты и эффективно управлять бюджетом автоматизации.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## How Credit Consumption Works
+
+Credits are consumed when workflows execute, not when you create them. Each workflow action consumes credits based on its complexity:
+
+### Потребление кредитов по типу действия
+
+* **Основные внутренние операции**: Очень низкое потребление кредитов
+ * Поиск записей
+ * Create Record
+ * Обновление записи
+ * Удаление записи
+ * Действия с формой
+
+* **Сложные операции**: Более высокое потребление кредитов
+ * Действия с кодом (выполнение JavaScript)
+ * HTTP-запросы к внешним сервисам
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Списание в реальном времени
+
+Credits are deducted in real-time as workflows execute. Это означает, что:
+
+* Черновые рабочие процессы не потребляют кредиты
+* Только активные, выполняемые рабочие процессы используют ваш кредитный лимит
+* Неудавшиеся рабочие процессы все равно потребляют кредиты за выполненные шаги
+
+## Управление кредитами
+
+### Проверить использование кредитов
+
+1. Перейдите в **Настройки → Оплата**
+2. Просмотрите текущее потребление кредитов и оставшийся баланс
+3. Отслеживайте шаблоны использования, чтобы оптимизировать ваши рабочие процессы
+
+### Приобретение дополнительных кредитов
+
+Если вам нужно больше кредитов, чем в вашем лимите плана:
+
+1. Перейдите в **Настройки → Оплата**
+2. Нажмите на опцию, чтобы приобрести дополнительные кредиты. Доступны пакеты разного размера.
+3. Кредиты добавляются к вашему текущему балансу
+
+## Лучшие практики
+
+* **Пакетная обработка**: Используйте массовые операции и действия с Итератором эффективно
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Оптимизируйте действия с кодом для повышения эффективности
+* Пакетные операции для снижения числа отдельных вызовов действий
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..1bca82980b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: Запуски рабочего процесса
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Статус | Описание |
+| --------------- | ------------------------------------------------------------------------ |
+| **Выполняется** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Недопустимый формат данных
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..01dffe86a0
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,135 @@
+---
+title: Триггеры рабочего процесса
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+Рабочие процессы всегда начинаются с единственного триггера, который определяет, когда должна выполняться автоматизация.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Участники рабочего пространства
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Запись создана
+
+Запускает рабочий процесс, когда новая запись создается в выбранном объекте (Люди, Компании, Возможности или любой пользовательский объект).
+
+**Настройка**: Выберите тип объекта для отслеживания новых записей.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Запись обновлена
+
+Запускает рабочий процесс, когда в существующую запись вносятся изменения.
+
+**Настройка**:
+
+* Выберите тип объекта
+* При необходимости укажите, какие поля отслеживать на предмет изменений
+
+## Запись обновлена или создана
+
+Запускает рабочий процесс, когда запись либо создается, либо обновляется в выбранном объекте.
+
+**Почему это важно**: Этот триггер особенно полезен, потому что записи, созданные разными методами, ведут себя по-разному:
+
+* **Импорт через API/CSV**: Записи создаются сразу со всеми заполненными полями
+* **Ручное создание**: Записи создаются сначала, затем поля добавляются в последующих обновлениях
+
+**Настройка**:
+
+* Выберите тип объекта для отслеживания
+* При необходимости укажите, какие поля отслеживать на предмет изменений
+* Рабочий процесс будет запускаться как при первоначальном создании, так и при последующих обновлениях
+
+## Запись удалена
+
+Запускает рабочий процесс при удалении записи из объекта.
+
+**Настройка**: Выберите тип объекта для отслеживания удалений.
+
+## Manual Trigger
+
+Запускает рабочий процесс, когда он инициируется пользователем. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Настройка доступности**: Выберите, как рабочий процесс должен обрабатывать выбор записи:
+
+* **Глобально**: Для запуска этого рабочего процесса запись не требуется. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Одиночная**: Выбранные записи будут переданы в ваш рабочий процесс. Это настроено для заданного объекта. Несколько записей могут быть выбраны до запуска рабочего процесса. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Групповая обработка**: Выбранные записи будут переданы в ваш рабочий процесс. Это настроено для заданного объекта. Несколько записей могут быть выбраны до запуска рабочего процесса. Рабочий процесс будет выполнен один раз, предоставляя весь список записей в качестве входных данных. This means the workflow needs to contain an [Iterator action](/l/ru/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Дополнительная настройка**:
+
+* Выберите целевой объект (для одиночной и групповой доступности)
+* Выберите значок команды для запуска рабочего процесса
+* Настройте размещение в навигационной панели (Закреплено или Не закреплено)
+
+**Методы доступа**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Пользовательская кнопка в верхней навигационной панели (если настроено)
+
+## Time-Based Trigger: On a Schedule
+
+Запускает рабочий процесс на регулярной основе, которую вы определяете.
+
+**Настройка**:
+
+* Выберите единицу времени (минуты, часы, дни)
+* Введите значение или используйте пользовательские cron-выражения для сложного планирования
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+Запускает рабочий процесс при получении GET или POST-запроса от внешнего сервиса.
+
+
+
+**Настройка**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ---------------------------- |
+| New leads need processing | Запись создана |
+| Data changes need sync | Запись обновлена |
+| Import/manual data handling | Запись обновлена или создана |
+| Cleanup after deletion | Запись удалена |
+| User-initiated action | Запуск вручную |
+| Recurring reports | По расписанию |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..400fc7e3f2
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: Версии рабочего процесса
+description: Управление версиями и черновиками рабочего процесса.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## О версиях
+
+Каждый раз, когда вы активируете рабочий процесс, создается новая версия. Это позволяет отслеживать изменения со временем и при необходимости возвращаться к предыдущим конфигурациям.
+
+## Статусы версий
+
+| Статус | Описание |
+| ----------------- | ---------------------------------------- |
+| **Черновик** | Редактируется, еще не опубликован |
+| **Активный** | Активная версия, реагирующая на триггеры |
+| **Деактивирован** | Ранее активная, но остановлена вручную |
+| **Архивирован** | Прошлые версии, сохраненные для истории |
+
+## Работа с черновиками
+
+Когда вы редактируете активный рабочий процесс, ваши изменения сохраняются как **черновик**. Активная версия продолжает работать, пока вы работаете над обновлениями.
+
+По завершении редактирования вы можете:
+
+* **Активировать**: опубликовать черновик как новую активную версию (предыдущая версия будет архивирована)
+* **Удалить**: удалить черновик и сохранить текущую активную версию
+
+## История версий
+
+### Просмотр прошлых версий
+
+1. Откройте рабочий процесс
+2. Нажмите вкладку **Версии**
+3. Просмотрите все предыдущие версии с временными метками
+
+### Восстановление версии
+
+1. Найдите версию, которую хотите восстановить
+2. Нажмите **Использовать как черновик**
+3. Версия копируется в новый черновик
+4. Внесите все необходимые изменения
+5. Активируйте, когда будете готовы
+
+## Лучшие практики
+
+### Управление версиями
+
+* Активируйте только когда готовы к использованию в продакшене
+* Вносите между версиями только значимые изменения
+* Документируйте существенные изменения в названиях или описаниях рабочих процессов
+* Тестируйте в режиме черновика перед активацией
+
+### Откат изменений
+
+* Если новая версия вызывает проблемы, восстановите предыдущую версию
+* Используйте историю версий, чтобы отслеживать, что изменилось
+* Всегда тестируйте восстановленные версии перед активацией
+
+## Распространенные рабочие процессы
+
+### Быстрое редактирование
+
+1. Внесите небольшие изменения в активный рабочий процесс
+2. Протестируйте в режиме черновика
+3. Активируйте новую версию
+
+### Существенная переработка
+
+1. Используйте предыдущую версию в качестве отправной точки
+2. Вносите существенные изменения в черновике
+3. Тщательно протестируйте все сценарии
+4. Активируйте, когда будете уверены
+
+### Откат
+
+1. Определите проблему в текущей версии
+2. Найдите последнюю рабочую версию в истории
+3. Нажмите **Использовать как черновик**
+4. Активируйте, чтобы восстановить прежнее поведение
+
+## Связанные материалы
+
+* [Начало работы с рабочими процессами](/l/ru/user-guide/workflows/overview)
+* [Запуски рабочих процессов](/l/ru/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..8a0a9fecc5
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Код |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Настройка | Значение |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Источник | Данные |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..fb7985f68b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Сохранить
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Поле | Значение |
+| -------------- | ---------------------------------------------------- |
+| **Object** | Люди |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..506c274341
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Настройка | Значение |
+| ------------- | --------------------------------- |
+| **Field** | Этап |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Настройка | Значение |
+| ------------ | ---------------------------------------- |
+| **Object** | Компания |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Настройка | Значение |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Действие | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Фильтр | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Код | Format data for invoicing API |
+| 5 | HTTP-запрос | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..9e2c410ea9
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Пример |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Поле | Значение |
+| ----------------- | ---------------------------------------------------- |
+| Имя | `{{trigger.body.firstName}}` |
+| Фамилия | `{{trigger.body.lastName}}` |
+| Электронная почта | `{{trigger.body.email}}` |
+| Компания | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..cb742e84cc
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Настроить:
+
+| Поле | Значение |
+| --------------------- | ------------------------------- |
+| **Object** | Компании |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Тип** | Клиент |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Владелец аккаунта** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Настроить:
+
+| Поле | Значение |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Задачи |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Настроить:
+
+| Поле | Значение |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Настроить:
+
+| Поле | Значение |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Проверить:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Триггер
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Действия
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..d93499f0a1
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Настроить:
+
+| Поле | Значение |
+| ---------- | ----------------------------------------------- |
+| **Object** | Возможности |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Поле | Значение |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..ee8391b43d
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Обзор
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Требования
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/ru/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/ru/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..89fa80e8ca
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Типичные случаи использования
+
+| Источник | Destination | Fields to Copy |
+| ----------- | ----------- | ------------------------------- |
+| Компания | Возможность | Industry, Company Size, ARR |
+| Person | Возможность | Email, Phone, Title |
+| Возможность | Компания | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Настройка
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Настройка
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Настройка
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/ru/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## Лучшие практики
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..08ccf282c8
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Типичные случаи использования
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Настройка
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Настройка
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Настройка
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Настройка
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## Лучшие практики
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Тестирование
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..124d70105e
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Обзор
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configure:
+
+| Поле | Значение |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..ecda0f686b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Профессиональные услуги
+description: Получите профессиональную помощь в создании сложных рабочих процессов и автоматизации от команды Twenty и сертифицированных партнеров.
+---
+
+## Когда вам нужна профессиональная помощь?
+
+Рассмотрите профессиональные услуги для:
+
+* Сложные интеграции с несколькими системами
+* Продвинутая бизнес-логика и правила автоматизации
+* Рабочие процессы массовой обработки данных
+* Разработка пользовательского API
+* Обучение команды и оптимизация рабочих процессов
+* Когда у вас нет внутренних ресурсов
+
+## Варианты услуг
+
+### Пакеты внедрения
+
+Получите помощь от нашей основной команды с нашими 4-часовыми [Пакетами внедрения](https://twenty.com/onboarding-packages):
+
+* **Workflow Creation**: Build custom workflows for your business processes
+* **Проектирование модели данных**: Оптимизируйте структуру данных для автоматизации рабочих процессов
+* **Миграция данных**: Импортируйте существующие данные с правильной интеграцией рабочих процессов
+
+### Партнеры по внедрению
+
+Работайте с сертифицированными партнерами для расширенных настроек. Свяжитесь с нами по адресу contact@twenty.com, чтобы соединиться с нашими [партнерами по внедрению](https://twenty.com/partners).
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..ff61163ba7
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: Устранение неполадок рабочего процесса
+description: Common workflow issues and how to resolve them.
+---
+
+## Распространенные проблемы и решения
+
+### Рабочий процесс не запускается
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Решения**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Решения**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Решения**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Решения**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Решения**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..9374798a7a
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Тип | Records Required | Запуски рабочего процесса |
+ | --- | ---------------- | ------------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/ru/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Примеры**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/ru/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Решения**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Лимит | Значение | Behavior |
+ | ----- | -------- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/ru/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/ru/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..3748e7ef5b
--- /dev/null
+++ b/packages/twenty-docs/l/ru/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: Рабочие процессы
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## Почему важны Workflows
+
+Twenty был создан, чтобы обеспечить максимальную гибкость для своих пользователей. Rather than forcing you to adapt your business processes to rigid, pre-built features, workflows enable you to build automations that create the CRM that best supports your unique business use cases.
+
+Workflows - это встроенная функция Twenty для создания этих автоматизаций. Они дают вам строительные блоки, чтобы создать именно то, что нужно вашему бизнесу, именно тогда, когда это необходимо.
+
+## Что я могу сделать с Workflows?
+
+Мы рекомендуем создавать автоматизации для двух основных целей:
+
+1. **Внутренние автоматизации для облегчения повседневной работы вашей команды**: Уменьшите количество ручных записей и повторяющихся задач, которые замедляют работу вашей команды.
+2. **Добавьте и извлеките данные из Twenty**: Подключите Twenty через API вызовы и вебхуки к вашей базе данных и другим инструментам.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## Лучшие практики рабочих процессов
+
+* **Edit step names**: Rename your workflow steps to clearly describe what each one does. Это поможет с поддержкой и упростит передачу коллегам
+* **Использование данных предыдущих шагов**: Вы можете использовать поля из записей, возвращаемых любым предыдущим шагом в вашем рабочем процессе
+* **Начинайте с простого**: Начинайте с базовых рабочих процессов и добавляйте сложность по мере того, как вы становитесь более уверенными в системе
+* **Планируйте прежде, чем строить**: Составьте карту логики своего рабочего процесса перед началом построения, чтобы избежать застревания на полпути
+
+## Следующие шаги
+
+* [Workflow Triggers](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/ru/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/best-practices-server.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/best-practices-server.mdx
new file mode 100644
index 0000000000..3d46c4e2fe
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/best-practices-server.mdx
@@ -0,0 +1,22 @@
+---
+title: En İyi Uygulamalar
+---
+
+Bu belge, arka uçta çalışırken uymanız gereken en iyi uygulamaları açıklar.
+
+## Modüler bir yaklaşım izleyin
+
+The backend follows a modular approach, which is a fundamental principle when working with NestJS. Kodunuzu temiz ve düzenli bir kod tabanı sağlamak için yeniden kullanılabilir modüllere ayırdığınızdan emin olun.
+Her modül belirli bir özellik veya işlevselliği kapsamalı ve iyi tanımlanmış bir kapsama sahip olmalıdır. Bu modüler yaklaşım, sorumlulukların net bir şekilde ayrılmasını sağlar ve gereksiz karmaşıklıkları ortadan kaldırır.
+
+## Expose services to use in modules
+
+Her zaman kod okunabilirliğini ve bakım yapılabilirliğini artıran, net ve tek bir sorumluluğa sahip hizmetler oluşturun. Hizmetlerin adlarını açıklayıcı ve tutarlı bir şekilde adlandırın.
+
+Diğer modüllerde kullanmak istediğiniz hizmetleri dışa açmalısınız. Hizmetleri diğer modüllere dışa açmak, NestJS'nin güçlü bağımlılık enjeksiyonu sistemi sayesinde mümkündür ve bileşenler arasında gevşek bağlılığı teşvik eder.
+
+## `any` tipini kullanmaktan kaçının
+
+Bir değişkeni `any` olarak tanımladığınızda, TypeScript'in tür denetleyicisi herhangi bir tür denetimi yapmaz ve değişkene herhangi bir türde değer atamanızı mümkün kılar. TypeScript, değere göre değişkenin türünü belirlemek için tür çıkarımı kullanır. `any` olarak tanımlandığında, TypeScript türü artık çıkaramaz. Bu, geliştirme sırasında türle ilgili hataları yakalamayı zorlaştırır, çalışma zamanı hatalarına yol açar ve kodun bakım yapılabilirliğini, güvenilirliğini ve başkaları tarafından anlaşılabilirliğini azaltır.
+
+Bu nedenle her şeyin bir türü olması gerekir. Bu yüzden, ad ve soyadı alanları olan yeni bir nesne oluşturuyorsanız, nesnenin yapısını tanımlayan ve ad ile soyadı alanlarını içeren bir arayüz veya tür tanımlamalısınız.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/custom-objects.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/custom-objects.mdx
new file mode 100644
index 0000000000..a81381ac2e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/custom-objects.mdx
@@ -0,0 +1,39 @@
+---
+title: Özel Nesneler
+---
+
+Nesneler, bir kuruluşa özgü verileri (kayıtlar, nitelikler ve değerler) saklamanıza olanak tanır. Twenty provides both standard and custom objects.
+
+Standart nesneler, tüm kullanıcılar için kullanılabilir bir dizi niteliğe sahip yerleşik nesnelerdir. Twenty'deki standart nesne örnekleri arasında Şirket ve Kişi yer alır. Standart nesneler, tüm Twenty kullanıcıları için de mevcut olan standart alanlara sahiptir, örneğin Şirket.görünenAd.
+
+Özel nesneler, kuruluşunuza özgü bilgileri depolamak için oluşturabileceğiniz nesnelerdir. Yerleşik değildir; çalışma alanınızdaki üyeler, standart nesnelerin uygun olmadığı bilgileri tutmak için özel nesneler oluşturabilir ve özelleştirebilir.
+
+## Üst Düzey Şema
+
+
+
+
+
+
+
+## Nasıl Çalışır
+
+Özel nesneler, nesnelerin şekli, adı ve türünü belirleyen meta veri tablolarından gelir. Tüm bu bilgiler, tablolar içeren meta veri şema veritabanında bulunur:
+
+* **VeriKaynağı**: Verinin nerede bulunduğuna dair detaylar.
+* **Nesne**: Nesneyi tarif eder ve bir Veri Kaynağı'na bağlanır.
+* **Alan**: Bir Nesnenin alanlarını özetler ve Nesneye bağlanır.
+
+Özel bir nesne eklemek için, çalışma alanı üyesi /metadata API'sini sorgulayacaktır. Bu, meta verileri uygun şekilde günceller ve meta verilere dayanarak bir GraphQL şeması hesaplar ve bunu daha sonra kullanmak üzere bir GQL önbelleğine kaydeder.
+
+
+
+
+
+
+
+Veri almak için süreç, /graphql uçnoktasına sorgular yapmayı ve bunları Sorgu Çözücü'den geçirmeyi içerir.
+
+
+
+
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
new file mode 100644
index 0000000000..7ffdd50bc4
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx
@@ -0,0 +1,125 @@
+---
+title: Klasör Mimarisi
+info: A detailed look into our server folder architecture
+---
+
+The backend directory structure is as follows:
+
+```
+server
+ └───ability
+ └───constants
+ └───core
+ └───database
+ └───decorators
+ └───filters
+ └───guards
+ └───health
+ └───integrations
+ └───metadata
+ └───workspace
+ └───utils
+```
+
+## Ability
+
+Defines permissions and includes handlers for each entity.
+
+## Decorators
+
+Defines custom decorators in NestJS for added functionality.
+
+See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.
+
+## Filtreler
+
+Includes exception filters to handle exceptions that might occur in GraphQL endpoints.
+
+## Guards
+
+See [guards](https://docs.nestjs.com/guards) for more details.
+
+## Health
+
+Includes a publicly available REST API (healthz) that returns a JSON to confirm whether the database is working as expected.
+
+## Meta Veriler
+
+Defines custom objects and makes available a GraphQL API (graphql/metadata).
+
+## İş Alanı
+
+Generates and serves custom GraphQL schema based on the metadata.
+
+### Workspace Directory Structure
+
+```
+workspace
+
+ └───workspace-schema-builder
+ └───factories
+ └───graphql-types
+ └───database
+ └───interfaces
+ └───object-definitions
+ └───services
+ └───storage
+ └───utils
+ └───workspace-resolver-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-builder
+ └───factories
+ └───interfaces
+ └───workspace-query-runner
+ └───interfaces
+ └───utils
+ └───workspace-datasource
+ └───workspace-manager
+ └───workspace-migration-runner
+ └───utils
+ └───workspace.module.ts
+ └───workspace.factory.spec.ts
+ └───workspace.factory.ts
+```
+
+The root of the workspace directory includes the `workspace.factory.ts`, a file containing the `createGraphQLSchema` function. This function generates workspace-specific schema by using the metadata to tailor a schema for individual workspaces. By separating the schema and resolver construction, we use the `makeExecutableSchema` function, which combines these discrete elements.
+
+This strategy is not just about organization, but also helps with optimization, such as caching generated type definitions to enhance performance and scalability.
+
+### Workspace Schema builder
+
+Generates the GraphQL schema, and includes:
+
+#### Factories:
+
+Specialised constructors to generate GraphQL-related constructs.
+
+* The type.factory translates field metadata into GraphQL types using `TypeMapperService`.
+* The type-definition.factory creates GraphQL input or output objects derived from `objectMetadata`.
+
+#### GraphQL Types
+
+Includes enumerations, inputs, objects, and scalars, and serves as the building blocks for the schema construction.
+
+#### Interfaces and Object Definitions
+
+Contains the blueprints for GraphQL entities, and includes both predefined and custom types like `MONEY` or `URL`.
+
+#### Services
+
+Contains the service responsible for associating FieldMetadataType with its appropriate GraphQL scalar or query modifiers.
+
+#### Storage
+
+Includes the `TypeDefinitionsStorage` class that contains reusable type definitions, preventing duplication of GraphQL types.
+
+### Workspace Resolver Builder
+
+Creates resolver functions for querying and mutating the GraphQL schema.
+
+Each factory in this directory is responsible for producing a distinct resolver type, such as the `FindManyResolverFactory`, designed for adaptable application across various tables.
+
+### Çalışma Alanı Sorgu Çalıştırıcı
+
+Veritabanında oluşturulan sorguları çalıştırır ve sonucu çözümleyip getirir.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/server-commands.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/server-commands.mdx
new file mode 100644
index 0000000000..9cea7095ba
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/server-commands.mdx
@@ -0,0 +1,101 @@
+---
+title: Backend Komutları
+---
+
+## Faydalı Komutlar
+
+Bu komutlar packages/twenty-server klasöründen çalıştırılmalıdır.
+From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
+
+### İlk Kurulum
+
+```
+npx nx database:reset twenty-server # setup the database with dev seeds
+```
+
+### Sunucuyu Başlatma
+
+```
+npx nx run twenty-server:start
+```
+
+### Kod Temizleme
+
+```
+npx nx run twenty-server:lint # pass --fix to fix lint errors
+```
+
+### Test
+
+```
+npx nx run twenty-server:test:unit # birim testleri çalıştır
+npx nx run twenty-server:test:integration # entegrasyon testlerini çalıştır
+```
+
+Not: Entegrasyon testlerini çalıştırmadan önce veritabanını sıfırlamanız gerekirse `npx nx run twenty-server:test:integration:with-db-reset` komutunu kullanabilirsiniz.
+
+### Veritabanını Sıfırlama
+
+Veritabanını sıfırlamak ve tohum yüklemek istiyorsanız, aşağıdaki komutu kullanabilirsiniz:
+
+```bash
+npx nx run twenty-server:database:reset
+```
+
+### Geçişler
+
+#### Core/Metadata şemalarında (TypeORM) nesneler için
+
+```bash
+npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
+```
+
+#### Çalışma Alanı Nesneleri İçin
+
+Çalışma alanı için geçiş dosyaları yoktur; her çalışma alanı için otomatik olarak oluşturulur,
+veritabanında depolanır ve bu komut ile uygulanır.
+
+```bash
+npx nx run twenty-server:command workspace:sync-metadata -f
+```
+
+
+ This will drop the database and re-run the migrations and seed.
+
+ Bu komutu çalıştırmadan önce saklamak istediğiniz verileri yedeklediğinizden emin olun.
+
+
+## Teknoloji Yığını
+
+Twenty, arka uç için öncelikle NestJS kullanır.
+
+Prisma, kullandığımız ilk ORM idi. Ancak, kullanıcıların özel alanlar ve özel nesneler oluşturmasına izin vermek için, ince ayar kontrolü gerektirdiği için alt düzey bir seviye daha mantıklı geldi. Proje şu anda TypeORM kullanmaktadır.
+
+İşte teknoloji yığını artık böyle görünüyor.
+
+**Çekirdek**
+
+* [NestJS](https://nestjs.com/)
+* [TypeORM](https://typeorm.io/)
+* [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
+
+**Veritabanı**
+
+* [Postgres](https://www.postgresql.org/)
+
+**Üçüncü Şahıs Entegrasyonları**
+
+* [Sentry](https://sentry.io/welcome/) hataları izlemek için
+
+**Test**
+
+* [Jest](https://jestjs.io/)
+
+**Araçlar**
+
+* [Yarn](https://yarnpkg.com/)
+* [ESLint](https://eslint.org/)
+
+**Geliştirme**
+
+* [AWS EKS](https://aws.amazon.com/eks/)
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/bug-and-requests.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/bug-and-requests.mdx
new file mode 100644
index 0000000000..415edcc7cd
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/bug-and-requests.mdx
@@ -0,0 +1,78 @@
+---
+title: Bugs, Requests & Pull Requests
+info: Report issues, request features, and contribute code
+---
+
+## Hataları Bildirme
+
+Bir hatayı bildirmek için lütfen [GitHub'da bir sorun oluşturun](https://github.com/twentyhq/twenty/issues/new).
+
+[Discord'da](https://discord.gg/cx5n4Jzs57) da yardım isteyebilirsiniz.
+
+## Özellik İstekleri
+
+Eğer bunun bir hata olmadığından emin değilseniz ve bir özellik isteğine daha yakın olduğunu düşünüyorsanız, muhtemelen [bunun yerine bir tartışma başlatmalısınız](https://github.com/twentyhq/twenty/discussions/new).
+
+## Submit a Pull Request
+
+Contributing code to Twenty starts with a pull request (PR).
+
+### Başlamadan Önce
+
+1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
+2. For new features, open an issue first to discuss
+3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
+
+### Fork and Clone
+
+1. Fork the repository on GitHub
+2. Clone your fork:
+
+```bash
+git clone https://github.com/YOUR_USERNAME/twenty.git
+cd twenty
+```
+
+3. Add upstream remote:
+
+```bash
+git remote add upstream https://github.com/twentyhq/twenty.git
+```
+
+### Create a Branch
+
+```bash
+git checkout -b feature/your-feature-name
+```
+
+Use descriptive branch names:
+
+* `feature/add-export-button`
+* `fix/login-redirect-issue`
+* `docs/update-api-guide`
+
+### Make Your Changes
+
+1. Write clean, well-documented code
+2. Follow existing code style
+3. Add tests for new functionality
+4. Update documentation if needed
+
+### Submit Your PR
+
+1. Push your branch:
+
+```bash
+git push origin feature/your-feature-name
+```
+
+2. Open a PR on GitHub
+3. Fill in the PR template
+4. Link related issues
+
+### PR Checklist
+
+* [ ] Code follows project style guidelines
+* [ ] Tests pass locally
+* [ ] Documentation is updated
+* [ ] PR description explains the changes
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
new file mode 100644
index 0000000000..aea7a4e0c9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx
@@ -0,0 +1,324 @@
+---
+title: En İyi Uygulamalar
+---
+
+Bu belge, ön yüz üzerinde çalışırken takip etmeniz gereken en iyi uygulamaları özetler.
+
+## Durum Yönetimi
+
+React ve Recoil, kod tabanında durumu yönetir.
+
+### Durumu depolamak için `useRecoilState` kullanın.
+
+Durumunuzu depolamak için ihtiyaç duyduğunuz kadar atom oluşturmak iyi bir uygulamadır.
+
+
+ It's better to use extra atoms than trying to be too concise with props drilling.
+
+
+```tsx
+export const myAtomState = atom({
+ key: 'myAtomState',
+ default: 'default değer',
+});
+
+export const MyComponent = () => {
+ const [myAtom, setMyAtom] = useRecoilState(myAtomState);
+
+ return (
+
+ setMyAtom(e.target.value)}
+ />
+
+ );
+}
+```
+
+### Durum saklamak için `useRef` kullanmayın.
+
+Durum saklamak için `useRef` kullanmaktan kaçının.
+
+Durum saklamak istiyorsanız, `useState` veya `useRecoilState` kullanmalısınız.
+
+Bazı yeniden render edilmelerin olmasını önlemek için `useRef`'e ihtiyacınız varmış gibi hissediyorsanız, [yeniden render yönetimi](#managing-re-renders) konusuna bakın.
+
+## Yeniden render yönetimi
+
+React'ta yeniden render'ları yönetmek zor olabilir.
+
+Gereksiz yeniden render'ları önlemek için izlenecek bazı kurallar burada.
+
+Yeniden render'ları **her zaman** önleyebileceğinizi unutmayın, olayların nedenini anlayarak.
+
+### Kök seviyesinde çalışın
+
+Yeni özelliklerde yeniden render'ları önlemek, onları kök seviyesinde ortadan kaldırarak artık kolaylaştı.
+
+`PageChangeEffect` yan bileşeni, sayfa değişikliği sırasında yürütülecek tüm mantığı içeren tek bir `useEffect` barındırır.
+
+Bu şekilde, yalnızca bir yerin yeniden render tetikleyebileceğini bilirsiniz.
+
+### Kod tabanına `useEffect` eklemeden önce iki kez düşünün.
+
+Yeniden render'lar çoğunlukla gereksiz `useEffect`'lerden kaynaklanır.
+
+`useEffect`'e ihtiyacınız olup olmadığını düşünmelisiniz ya da mantığı bir olay işleyici fonksiyonuna taşıyabilirsiniz.
+
+Genellikle mantığı `handleClick` veya `handleChange` gibi fonksiyonlara taşımayı kolay bulursunuz.
+
+Bunları `onCompleted`, `onError`, vb. gibi Apollo kitaplıklarında da bulabilirsiniz.
+
+### `useEffect` veya veri çekme mantığını çıkarmak için bir yan bileşen kullanın.
+
+Kök bileşenize bir `useEffect` eklemeniz gerektiğini hissediyorsanız, bunu bir yan bileşene çıkarmayı düşünmelisiniz.
+
+Aynısını Apollo kancaları ile veri çekme mantığı için de uygulayabilirsiniz.
+
+```tsx
+// ❌ Bad, will cause re-renders even if data is not changing,
+// because useEffect needs to be re-evaluated
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return {data}
;
+};
+
+export const App = () => (
+
+
+
+);
+```
+
+```tsx
+// ✅ Good, will not cause re-renders if data is not changing,
+// because useEffect is re-evaluated in another sibling component
+export const PageComponent = () => {
+ const [data, setData] = useRecoilState(dataState);
+
+ return {data}
;
+};
+
+export const PageData = () => {
+ const [data, setData] = useRecoilState(dataState);
+ const [someDependency] = useRecoilState(someDependencyState);
+
+ useEffect(() => {
+ if(someDependency !== data) {
+ setData(someDependency);
+ }
+ }, [someDependency]);
+
+ return <>>;
+};
+
+export const App = () => (
+
+
+
+
+);
+```
+
+### Recoil aile durumlarını ve recoil aile seçimcilerini kullanın.
+
+Recoil aile durumları ve seçimcileri, yeniden render'ları önlemenin harika bir yoludur.
+
+Bir öğe listesini saklamanız gerektiğinde kullanılabilirdir.
+
+### `React.memo(MyComponent)` kullanmamalısınız.
+
+`React.memo()` kullanmaktan kaçının çünkü bu yeniden render'ın nedenini çözmez, bunun yerine yeniden render zincirini kırar, bu da beklenmeyen davranışlara yol açabilir ve kodun yeniden faktör edilmesini çok zor hale getirebilir.
+
+### `useCallback` veya `useMemo` kullanımını sınırlayın.
+
+Genellikle gerekli değildir ve performans kazanımı farkedilemeyecek kadar az olduğu için kodun okunmasını ve bakımını zorlaştırır.
+
+## Console.log'lar
+
+`console.log` ifadeleri geliştirirken değerlidir, değişken değerleri ve kod akışı hakkında gerçek zamanlı yanıtlar sağlar. Ancak, üretim kodunda bırakmak çeşitli sorunlara yol açabilir:
+
+1. **Performans**: Aşırı loglama, özellikle istemci tarafı uygulamalarda çalışma zamanı performansını etkileyebilir.
+
+2. **Güvenlik**: Hassas verileri loglama, tarayıcı konsolunu inceleyen herkes için kritik bilgilerin açığa çıkmasına neden olabilir.
+
+3. **Temizlik**: Konsolu loglarla doldurmak, geliştiricilerin veya araçların görmesi gereken önemli uyarıları veya hataları gizleyebilir.
+
+4. **Profesyonellik**: Konsolu kontrol eden son kullanıcılar veya müşteriler, birçok log ifadesi gördüğünde kodun kalitesini ve detaycılığını sorgulayabilir.
+
+Kodunuzu üretime taşımadan önce tüm `console.log`ları kaldırdığınızdan emin olun.
+
+## İsimlendirme
+
+### Değişken Adlandırma
+
+Değişken adları değişkenin amacını veya işlevini doğru bir şekilde tanımlamalıdır.
+
+#### Genel adlar sorunu
+
+Programlamada genel adlar ideal değildir çünkü kesinlik eksikliği nedeniyle belirsizlik ve kod okunabilirliğinin azalmasına neden olabilir. Bu tür adlar, değişkenin veya fonksiyonun amacını iletmede başarısız olur, geliştiricilerin kodun amacını daha derin bir araştırma yapmadan anlamalarını zorlaştırır. Bu, artan hata ayıklama süresi, hatalara eğilimli olma ve bakım ve işbirliği zorluklarına yol açabilir. Öte yandan, açıklayıcı adlandırma, kodu kendi kendini açıklayıcı hale getirir ve gezilebilirliği artırarak kod kalitesini ve geliştirici verimliliğini artırır.
+
+```tsx
+// ❌ Kötü, amacı veya içeriği net bir şekilde ifade etmeyen genel bir ad kullanıyor
+const [value, setValue] = useState('');
+```
+
+```tsx
+// ✅ İyi, açıklayıcı bir ad kullanıyor
+const [email, setEmail] = useState('');
+```
+
+#### Değişken adlarında kaçınılması gereken bazı kelimeler
+
+* kukla
+
+### Olay işleyicileri
+
+Olay işleyici adları `handle` ile başlamalı, bileşen props'larında olayları adlandırmak için `on` bir ön ek olarak kullanılmaktadır.
+
+```tsx
+// ❌ Kötü
+const onEmailChange = (val: string) => {
+ // ...
+};
+```
+
+```tsx
+// ✅ İyi
+const handleEmailChange = (val: string) => {
+ // ...
+};
+```
+
+## Opsiyonel Props
+
+Opsiyonel bir prop için varsayılan değeri geçmekten kaçının.
+
+**ÖRNEK**
+
+Aşağıda tanımlanan `EmailField` bileşeni alın:
+
+```tsx
+type EmailFieldProps = {
+ value: string;
+ disabled?: boolean;
+};
+
+const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
+
+);
+```
+
+**Kullanım**
+
+```tsx
+// ❌ Kötü, varsayılan değerle aynı değeri geçmek hiçbir değer katmıyor
+const Form = () => ;
+```
+
+```tsx
+// ✅ İyi, varsayılan değeri kabul eder
+const Form = () => ;
+```
+
+## Bileşenleri props olarak geçirme
+
+Mümkün olduğunca, bileşenleri kendi içinde istemsiz geçen bileşenler olarak gönderin, böylece çocuklar hangi props'ları geçmeleri gerektiğine kendileri karar verebilirler.
+
+Bunun en yaygın örneği simge bileşenleridir:
+
+```tsx
+const SomeParentComponent = () => ;
+
+// MyComponent'te
+const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ )
+};
+```
+
+React'in bir bileşeni bileşen olarak anlaması için PascalCase kullanmalısınız, böylece daha sonra `` ile örnekleyebilirsiniz.
+
+## Prop Taşıma: Minimumda Tutun
+
+React bağlamında prop taşıma, durum değişkenlerini ve ayarlayıcılarını, aracı bileşenler kullanmasalar bile birçok bileşen katmanı aracılığıyla aktarma uygulamasına atıfta bulunur. Bazen gerekli olmakla birlikte, aşırı prop taşıma şu durumlara yol açabilir:
+
+1. **Azalan Okunabilirlik**: Bir prop'un nereden kaynaklandığını veya nerede kullanıldığını izlemek, derin bir şekilde iç içe geçmiş bir bileşen yapısında karışık hale gelebilir.
+
+2. **Maintenance Challenges**: Changes in one component's prop structure might require adjustments in several components, even if they don't directly use the prop.
+
+3. **Azalan Bileşen Yeniden Kullanılabilirliği**: Çok fazla props'u yalnızca aşağıya aktarma amacıyla alan bir bileşen, daha az genel amaçlı hale gelir ve farklı bağlamlarda yeniden kullanılması zorlaşır.
+
+Aşırı prop taşıma kullanıyorsanız, [durum yönetimi en iyi uygulamalarına](#state-management) bakın.
+
+## İçe Aktarımlar
+
+İçe aktarırken, tüm veya göreli yolları belirtmek yerine belirlenen takma adları tercih edin.
+
+**The Aliases**
+
+```js
+{
+ alias: {
+ "~": path.resolve(__dirname, "src"),
+ "@": path.resolve(__dirname, "src/modules"),
+ "@testing": path.resolve(__dirname, "src/testing"),
+ },
+}
+```
+
+**Kullanım**
+
+```tsx
+// ❌ Kötü, tüm göreli yolu belirtir
+import {
+ CatalogDecorator
+} from '../../../../../testing/decorators/CatalogDecorator';
+import {
+ ComponentDecorator
+} from '../../../../../testing/decorators/ComponentDecorator';
+```
+
+```tsx
+// ✅ İyi, belirlenen takma adları kullanır
+import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
+import { ComponentDecorator } from 'twenty-ui/testing';
+```
+
+## Şema Doğrulama
+
+[Zod](https://github.com/colinhacks/zod), tiplenmemiş nesneler için bir şema doğrulayıcıdır:
+
+```js
+const validationSchema = z
+ .object({
+ exist: z.boolean(),
+ email: z
+ .string()
+ .email('Email geçerli bir e-posta olmalıdır'),
+ password: z
+ .string()
+ .regex(PASSWORD_REGEX, 'Şifre en az 8 karakter içermelidir'),
+ })
+ .required();
+
+type Form = z.infer;
+```
+
+## Breaking Changes
+
+Testler henüz kapsamlı bir şekilde entegre edilmediği için, ilerlemeden önce yapılan değişikliklerin başka yerlerde bozulmalara neden olmadığından emin olmak için her zaman kapsamlı manuel testler yapın.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
new file mode 100644
index 0000000000..51a5952a60
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx
@@ -0,0 +1,109 @@
+---
+title: Klasör Mimarisi
+info: Klasör mimarimize detaylı bir bakış
+---
+
+In this guide, you will explore the details of the project directory structure and how it contributes to the organization and maintainability of Twenty.
+
+Bu klasör mimarisi kuralını izleyerek, belirli özelliklerle ilgili dosyaları bulmak kolaylaşır ve uygulamanın ölçeklenebilir ve bakımı yapılabilir olması sağlanır.
+
+```
+front
+└───modules
+│ └───module1
+│ │ └───submodule1
+│ └───module2
+│ └───ui
+│ │ └───display
+│ │ └───inputs
+│ │ │ └───buttons
+│ │ └───...
+└───pages
+└───...
+```
+
+## Sayfalar
+
+Uygulama rotaları tarafından tanımlanan üst düzey bileşenleri içerir. They import more low-level components from the modules folder (more details below).
+
+## Modüller
+
+Her modül, kendine özgü bileşenlerini, durumlarını ve iş mantığını içeren bir özellik ya da özellik grubu temsil eder.
+Hepsi aşağıdaki yapıyı takip etmelidir. Modüllerin içine modüller (alt modüller) yerleştirebilirsiniz ve aynı kurallar uygulanır.
+
+```
+module1
+ └───components
+ │ └───component1
+ │ └───component2
+ └───constants
+ └───contexts
+ └───graphql
+ │ └───fragments
+ │ └───queries
+ │ └───mutations
+ └───hooks
+ │ └───internal
+ └───states
+ │ └───selectors
+ └───types
+ └───utils
+```
+
+### Bağlamlar
+
+Bağlam, verileri her seviyede prop'ları elle aktarmak zorunda kalmadan bileşen ağacından aşağıya iletmenin bir yoludur.
+
+Daha fazla bilgi için [React Context](https://react.dev/reference/react#context-hooks) sayfasına bakın.
+
+### GraphQL
+
+Parçalar, sorgular ve mutasyonları içerir.
+
+Daha fazla bilgi için [GraphQL](https://graphql.org/learn/) sayfasına bakın.
+
+* Parçalar
+
+Bir parça, farklı yerlerde kullanabileceğiniz, bir sorgunun yeniden kullanılabilir bir parçasıdır. Parçaları kullanarak, kodun kopyalanmasını önlemek daha kolaydır.
+
+Daha fazla bilgi için [GraphQL Parçaları](https://graphql.org/learn/queries/#fragments) sayfasına bakın.
+
+* Sorgular
+
+Daha fazla bilgi için [GraphQL Sorgular](https://graphql.org/learn/queries/) sayfasına bakın.
+
+* Mutasyonlar
+
+Daha fazla bilgi için [GraphQL Mutasyonlar](https://graphql.org/learn/queries/#mutations) sayfasına bakın.
+
+### Kancalar
+
+Daha fazla bilgi için [Kancalar](https://react.dev/learn/reusing-logic-with-custom-hooks) sayfasına bakın.
+
+### Durumlar
+
+Durum yönetim mantığını içerir. [RecoilJS](https://recoiljs.org) bunu ele almaktadır.
+
+* Seçiciler: Daha fazla bilgi için [RecoilJS Seçiciler](https://recoiljs.org/docs/basic-tutorial/selectors) sayfasına bakın.
+
+React'ın yerleşik durum yönetimi, bir bileşen içinde hala durumu ele alır.
+
+### Yardımcılar
+
+Sadece yeniden kullanılabilir saf fonksiyonları içermelidir. Aksi takdirde, `hooks` klasöründe özel kancalar oluşturun.
+
+## Kullanıcı Arayüzü
+
+Uygulamada kullanılan tüm tekrar kullanılabilir UI bileşenlerini içerir.
+
+Bu klasör, belirli bileşen türleri için `data`, `display`, `feedback` ve `input` gibi alt klasörler içerebilir. Her bir bileşen, kendi içinde bağımsız ve yeniden kullanılabilir olmalı, böylece uygulamanın farklı kısımlarında kullanılabilir.
+
+UI bileşenlerini `modules` klasöründeki diğer bileşenlerden ayırarak, tutarlı bir tasarımı korumak ve kullanıcı arayüzünde değişiklikleri kod tabanının diğer bölümlerini (iş mantığı) etkilemeden yapmak daha kolaydır.
+
+## Arayüz ve bağımlılıklar
+
+Diğer modüllerin kodunu, `ui` klasörü hariç, herhangi bir modülden içe aktarabilirsiniz. Bu, kodunun test edilmesini kolaylaştıracaktır.
+
+### Dahili
+
+Bir modülün her bir parçası (kancalar, durumlar, ...) yalnızca modül içinde kullanılan kısımları içeren bir `internal` klasöre sahip olabilir.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/style-guide.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/style-guide.mdx
new file mode 100644
index 0000000000..df065b8b88
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/style-guide.mdx
@@ -0,0 +1,288 @@
+---
+title: Stil Rehberi
+---
+
+Bu belge, kod yazarken uyulması gereken kuralları içermektedir.
+
+Buradaki amaç, okunması ve bakımı kolay tutarlı bir kod tabanı oluşturmaktır.
+
+Bunun için, biraz daha ayrıntılı olmak, çok kısa olmaktan daha iyidir.
+
+Always keep in mind that people read code more often than they write it, specially on an open source project, where anyone can contribute.
+
+Burada tanımlanmayan, ancak linters tarafından otomatik olarak kontrol edilen birçok kural vardır.
+
+## React
+
+### Fonksiyonel bileşenler kullanın
+
+Her zaman TSX fonksiyonel bileşenlerini kullanın.
+
+Do not use default `import` with `const`, because it's harder to read and harder to import with code completion.
+
+```tsx
+// ❌ Kötü, okumak zor, kod tamamlama ile ithal etmek zor
+const MyComponent = () => {
+ return Merhaba Dünya
;
+};
+
+export default MyComponent;
+
+// ✅ İyi, okumak kolay, kod tamamlama ile ithal etmek kolay
+export function MyComponent() {
+ return Merhaba Dünya
;
+};
+```
+
+### Özellikler
+
+Create the type of the props and call it `(ComponentName)Props` if there's no need to export it.
+
+Use props destructuring.
+
+```tsx
+// ❌ Kötü, tür yok
+export const MyComponent = (props) => Merhaba {props.name}
;
+
+// ✅ İyi, tür
+type MyComponentProps = {
+ name: string;
+};
+
+export const MyComponent = ({ name }: MyComponentProps) => Merhaba {name}
;
+```
+
+#### Refrain from using `React.FC` or `React.FunctionComponent` to define prop types
+
+```tsx
+/* ❌ - Kötü, bileşen tür notlarını `FC` ile tanımlıyor
+ * - `React.FC` ile, bileşen prop türünde tanımlanmamış olsa bile bir `children` prop kabul eder
+ * Bu her zaman istenmeyen sonuçlara neden olabilir, özellikle bileşen çocukları render etmeyi düşünmüyorsa.
+ */
+const EmailField: React.FC<{
+ value: string;
+}> = ({ value }) => ;
+```
+
+```tsx
+/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
+ * component's props
+ * - This method doesn't automatically include the children prop. If
+ * you want to include it, you have to specify it in OwnProps.
+ */
+type EmailFieldProps = {
+ value: string;
+};
+
+const EmailField = ({ value }: EmailFieldProps) => (
+
+);
+```
+
+#### JSX Elemanlarında Tek Değişkenli Prop Yayılımından Kaçının
+
+JSX elemanlarında tek değişkenli prop yayılımını, örneğin `{...props}` kullanmaktan kaçının. Bu uygulama, bileşenin hangi prop'ları aldığını belirsizleştirdiği için okunması zor ve bakımı güç kodlara yol açar.
+
+```tsx
+/* ❌ - Kötü, tek değişkenli bir prop'un alttaki bileşene yayılmasını sağlar
+ */
+const MyComponent = (props: OwnProps) => {
+ return ;
+}
+```
+
+```tsx
+/* ✅ - Good, Explicitly lists all props
+ * - Enhances readability and maintainability
+ */
+const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
+ return ;
+};
+```
+
+Gerekçe:
+
+* İlk bakışta, hangi prop'ların kod tarafından geçirildiği daha açıktır, bu da anlamayı ve bakımı kolaylaştırır.
+* Prop'lar aracılığıyla bileşenler arasında sıkı bağlanmayı önlemeye yardımcı olur.
+* Linting araçları, prop'ları açıkça listelediğinizde yanlış yazılmış veya kullanılmayan prop'ları tanımlamayı kolaylaştırır.
+
+## JavaScript
+
+### Nullish-birleştirme operatörü `??` kullanın
+
+```tsx
+// ❌ Kötü, değer 0 veya '' olsa bile 'default' döndürebilir
+const value = process.env.MY_VALUE || 'default';
+
+// ✅ İyi, 'default' yalnızca değer null veya undefined olduğunda döner
+const value = process.env.MY_VALUE ?? 'default';
+```
+
+### Opsiyonel zincirleme `?.` kullanın
+
+```tsx
+// ❌ Bad
+onClick && onClick();
+
+// ✅ Good
+onClick?.();
+```
+
+## TypeScript
+
+### Use `type` instead of `interface`
+
+Always use `type` instead of `interface`, because they almost always overlap, and `type` is more flexible.
+
+```tsx
+// ❌ Kötü
+interface MyInterface {
+ name: string;
+}
+
+// ✅ İyi
+type MyType = {
+ name: string;
+};
+```
+
+### Use string literals instead of enums
+
+[String literalleri](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-types), TypeScript'te enum benzeri değerleri yönetmek için en iyi yöntemdir. Pick ve Omit ile genişletilmesi daha kolay olur ve özellikle kod tamamlama ile daha iyi bir geliştirici deneyimi sunarlar.
+
+TypeScript, enum'ların neden kaçınılması gereken bir seçenek olduğunu [burada](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums) açıklamaktadır.
+
+```tsx
+// ❌ Kötü, bir enum kullanıyor
+enum Color {
+ Red = "red",
+ Green = "green",
+ Blue = "blue",
+}
+
+let color = Color.Red;
+```
+
+```tsx
+// ✅ İyi, bir string literal kullanıyor
+
+let color: "red" | "green" | "blue" = "red";
+```
+
+#### GraphQL ve iç kütüphaneler
+
+GraphQL codegen tarafından üretilen enum'ları kullanmalısınız.
+
+Bir iç kütüphane kullanırken de bir enum kullanmak daha iyidir, böylece iç kütüphane, iç API ile ilgili olmayan bir string literal türü açmak zorunda kalmaz.
+
+Örnek:
+
+```TSX
+const {
+ setHotkeyScopeAndMemorizePreviousScope,
+ goBackToPreviousHotkeyScope,
+} = usePreviousHotkeyScope();
+
+setHotkeyScopeAndMemorizePreviousScope(
+ RelationPickerHotkeyScope.RelationPicker,
+);
+```
+
+## Şekil Verme
+
+### Use StyledComponents
+
+Style the components with [styled-components](https://emotion.sh/docs/styled).
+
+```tsx
+// ❌ Bad
+Hello World
+```
+
+```tsx
+// ✅ İyi
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+Styled bileşenleri, bunları "gerçek" bileşenlerden ayırt etmek için "Styled" önekiyle belirtin.
+
+```tsx
+// ❌ Kötü
+const Title = styled.div`
+ color: red;
+`;
+```
+
+```tsx
+// ✅ İyi
+const StyledTitle = styled.div`
+ color: red;
+`;
+```
+
+### Temalandırma
+
+Çoğu bileşen şekillendirmesi için temayı kullanmak tercih edilen bir yaklaşımdır.
+
+#### Ölçü birimleri
+
+Styled bileşenler içinde doğrudan `px` veya `rem` değerlerini kullanmaktan kaçının. Gerekli değerler genellikle temada tanımlanmıştır, bu nedenle bu amaçlar için temayı kullanmak önerilir.
+
+#### Renkler
+
+Yeni renkler eklemekten kaçının; Bunun yerine temadaki mevcut paleti kullanın. Palet uyum sağlamıyorsa, lütfen ekibin düzeltmesi için bir yorum bırakın.
+
+```tsx
+// ❌ Kötü, tema kullanmadan doğrudan stil değerleri belirtiyor
+const StyledButton = styled.button`
+ color: #333333;
+ font-size: 1rem;
+ font-weight: 400;
+ margin-left: 4px;
+ border-radius: 50px;
+`;
+```
+
+```tsx
+// ✅ İyi, temayı kullanıyor
+const StyledButton = styled.button`
+ color: ${({ theme }) => theme.font.color.primary};
+ font-size: ${({ theme }) => theme.font.size.md};
+ font-weight: ${({ theme }) => theme.font.weight.regular};
+ margin-left: ${({ theme }) => theme.spacing(1)};
+ border-radius: ${({ theme }) => theme.border.rounded};
+`;
+```
+
+## Enforcing No-Type Imports
+
+Tip ithalatlarından kaçının. Bu standardı uygulamak için bir ESLint kuralı, herhangi bir tip ithalatını kontrol eder ve raporlar. Bu, TypeScript kodunda tutarlılık ve okunabilirliği sağlamaya yardımcı olur.
+
+```tsx
+// ❌ Kötü
+import { type Meta, type StoryObj } from '@storybook/react';
+
+// ❌ Kötü
+import type { Meta, StoryObj } from '@storybook/react';
+
+// ✅ İyi
+import { Meta, StoryObj } from '@storybook/react';
+```
+
+### Neden Tip İthalatları Yok
+
+* **Tutarlılık**: Hem tip hem de değer ithalatları için tek bir yaklaşım kullanarak, kod tabanı modül import stilinde tutarlı kalır.
+
+* **Okunabilirlik**: İthalat türü olmadığında, değer veya tip ithal ettiğiniz zaman daha anlaşılır olur böylece kod okunabilirliği artırılır. Bu belirsizliği azaltır ve ithal edilen sembollerinin amacını anlamayı kolaylaştırır.
+
+* **Bakım Kolaylığı**: Kod tabanının bakımını kolaylaştırır çünkü geliştiriciler kodu incelerken veya değiştirirken yalnızca tip ithalatlarını tanımlayabilir ve bulabilirler.
+
+### ESLint Kuralı
+
+ESLint kuralı, `@typescript-eslint/consistent-type-imports`, tip ithalat standardını uygular. Bu kural, herhangi bir tip ithalat ihlali için hata veya uyarı üretir.
+
+Lütfen unutmayın ki bu kural, istemeden yapılan tip ithalatlarının gerçekleştiği nadir durumları özellikle ele alır. TypeScript itself discourages this practice, as mentioned in the [TypeScript 3.8 release notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). Çoğu durumda, yalnızca tip ithalatları kullanmanıza gerek yoktur.
+
+Kodunuzun bu kurala uygun olduğundan emin olmak için, geliştirme iş akışınızın bir parçası olarak ESLint'i çalıştırdığınızdan emin olun.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
new file mode 100644
index 0000000000..018be59827
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx
@@ -0,0 +1,58 @@
+---
+title: Figma ile Çalışma
+info: Learn how you can collaborate with Twenty's Figma
+---
+
+Figma, tasarımcılar ve geliştiriciler arasındaki iletişim engelini aşmaya yardımcı olan işbirliği odaklı bir arayüz tasarım aracıdır.
+Bu kılavuz, Figma ile nasıl işbirliği yapacağınızı açıklar.
+
+## Erişim
+
+1. **Access the shared link:** You can access the project's Figma file [here](https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twenty).
+2. **Oturum açın:** Henüz oturum açmadıysanız, Figma sizden oturum açmanızı isteyecektir.
+ Geliştirici modu ve ayrılmış bir çerçeveyi seçme yeteneği gibi ana özellikler yalnızca oturum açmış kullanıcılara sunulur.
+
+
+ Bir hesabınız olmadan etkili bir şekilde işbirliği yapamazsınız.
+
+
+## Figma yapısı
+
+On the left sidebar, you can access the different pages of Twenty's Figma. Bu şekilde organize edilmişlerdir:
+
+* **Bileşenler sayfası:** Bu, ilk sayfadır. Tasarımcı, tasarım dosyası boyunca kullanılan yeniden kullanılabilir tasarım öğelerini oluşturmak ve organize etmek için kullanır. Örneğin, düğmeler, simgeler, semboller veya diğer herhangi bir yeniden kullanılabilir bileşen. Bu, tasarımda tutarlılığı sağlamak amacıyla hizmet eder.
+* **Ana sayfa:** İkinci sayfa ana sayfadır ve projenin tam kullanıcı arayüzünü gösterir. You can press ***Play*** to use the full app prototype.
+* **Özellikler sayfaları:** Diğer sayfalar genellikle devam eden özelliklere adanmıştır. Uygulama veya web sitesinin belirli özelliklerinin veya modüllerinin tasarımlarını içerir. Genellikle hala devam etmektedirler.
+
+## Kullanışlı İpuçları
+
+Yalnızca-okuma erişimiyle tasarımı düzenleyemezsiniz, ancak tasarımları koda dönüştürmek için kullanışlı olan tüm özelliklere erişebilirsiniz.
+
+### Geliştirici modunu kullan
+
+Figma'nın Geliştirici Modu, tasarım ve geliştirme arasındaki boşluğu doldurarak, kolay tasarım gezintisi, etkili varlık yönetimi, verimli iletişim araçları, araç kutusu entegrasyonları, hızlı kod parçacıkları ve önemli katman bilgileri ile geliştiricilerin üretkenliğini arttırır. Geliştirici Modu hakkında daha fazla bilgiyi [buradan](https://www.figma.com/dev-mode/) öğrenebilirsiniz.
+
+Tasarım özelliklerini görmek, CSS kopyalamak ve varlıklara erişmek için araç çubuğunun sağ kısmında, "Geliştirici" moduna geçiş yapın.
+
+### Prototipi kullan
+
+Click on any element on the canvas and press the “Play” button at the top right edge of the interface to access the prototype view. Prototip modu, tasarımla nihai ürünmüş gibi etkileşim kurmanızı sağlar. Ekranlar arasındaki akışı gösterir ve düğmeler, bağlantılar veya menüler gibi arayüz öğelerinin etkileşim sırasında nasıl davrandığını gösterir.
+
+1. **Geçişler ve animasyonları anlama:** Prototip modunda, bir tasarımcı tarafından ekranlar veya UI öğeleri arasında eklenen herhangi bir geçişi veya animasyonu görebilir, geliştiricilere hedeflenen davranış ve stille ilgili net görsel talimatlar verir.
+2. **Uygulama açıklaması:** Bir prototip aynı zamanda belirsizlikleri azaltmaya da yardımcı olabilir. Geliştiriciler, belirli öğelerin işlevselliği veya görünümü hakkında daha iyi bir anlayış kazanmak adına onunla etkileşime geçebilirler.
+
+Figma platformunu öğrenmek ile ilgili daha kapsamlı detaylar ve rehberlik için resmi [Figma Dokümantasyonu](https://help.figma.com/hc/en-us) sayfasını ziyaret edebilirsiniz.
+
+### Mesafeleri ölç
+
+Select an element, hold `Option` key (Mac) or `Alt` key (Windows), then hover over another element to see the distance between them.
+
+### VSCode için Figma uzantısı (Önerilir)
+
+[Figma for VS Code](https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension) ile tasarım dosyalarını gezebilir ve inceleyebilir, tasarımcılarla işbirliği yapabilir, değişiklikleri takip edebilir ve uygulama hızını artırabilirsiniz - tüm bunları metin düzenleyicinizden ayrılmadan yapabilirsiniz.
+Önerilen uzantılarımızın bir parçasıdır.
+
+## İşbirliği
+
+1. **Yorumları Kullanarak:** Araç çubuğunun sol kısmındaki balon simgesine tıklayarak yorum yapma özelliğini kullanabilirsiniz.
+2. **İmleç sohbeti:** Figma'nın güzel bir özelliği İmleç sohbetidir. Eğer bir başkasının sizinle aynı anda Figma'yı kullandığını görürseniz, bir mesaj göndermek için Mac'te `;` tuşuna, Windows'ta ise `/` tuşuna basın.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/capabilities/local-setup.mdx b/packages/twenty-docs/l/tr/developers/contribute/capabilities/local-setup.mdx
new file mode 100644
index 0000000000..c7da325077
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/capabilities/local-setup.mdx
@@ -0,0 +1,331 @@
+---
+title: Yerel Kurulum
+description: Twenty'i yerel olarak çalıştırmak isteyen katkıda bulunanlar (veya meraklı geliştiriciler) için kılavuz.
+---
+
+## Ön Gereksinimler
+
+
+
+ Twenty'i yüklemeden ve kullanmadan önce bilgisayarınıza aşağıdakileri yüklediğinizden emin olun:
+
+ * [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ * [Node v24.5.0](https://nodejs.org/en/download)
+ * [yarn v4](https://yarnpkg.com/getting-started/install)
+ * [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)
+
+
+ `npm` çalışmaz, bunun yerine `yarn` kullanmalısınız. Yarn artık Node.js ile birlikte geliyor, bu yüzden ayrı bir yüklemeye gerek yoktur.
+ Eğer henüz yapmadıysanız Yarn'ı etkinleştirmek için sadece `corepack enable` komutunu çalıştırmanız gerekiyor.
+
+
+
+
+ 1. WSL Kurun
+ PowerShell'i Yönetici olarak açın ve çalıştırın:
+
+ ```powershell
+ wsl --install
+ ```
+
+ Şimdi bilgisayarınızı yeniden başlatmanız gerektiğine dair bir uyarı göreceksiniz. Eğer görmüyorsanız, manuel olarak yeniden başlatın.
+
+ Yeniden başladıktan sonra bir powershell penceresi açılacak ve Ubuntu yüklenecek. Bu biraz zaman alabilir.
+ Ubuntu kurulumunuz için bir kullanıcı adı ve şifre oluşturmanız gerektiğine dair bir uyarı göreceksiniz.
+
+ 2. git'i Yükleyin ve Yapılandırın
+
+ ```bash
+ sudo apt-get install git
+
+ git config --global user.name "Adınız"
+
+ git config --global user.email "emailiniz@alan.com"
+ ```
+
+ 3. nvm, node.js ve yarn'ı Yükleyin
+
+
+ Doğru `node` versiyonunu yüklemek için `nvm` kullanın. `.nvmrc` tüm katkıda bulunanların aynı versiyonu kullanmasını sağlar.
+
+
+ ```bash
+ sudo apt-get install curl
+
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
+ ```
+
+ nvm'i kullanmak için terminalinizi kapatıp yeniden açın. Sonra aşağıdaki komutları çalıştırın.
+
+ ```bash
+
+ nvm install # önerilen node versiyonunu yükler
+
+ nvm use # önerilen node versiyonunu kullan
+
+ corepack enable
+ ```
+
+
+
+---
+
+## Adım 1: Git Clone
+
+Terminalinizde aşağıdaki komutu çalıştırın.
+
+
+
+ SSH anahtarlarını henüz kurmadıysanız, bunu nasıl yapacağınızı [buradan](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh) öğrenebilirsiniz.
+
+ ```bash
+ git clone git@github.com:twentyhq/twenty.git
+ ```
+
+
+
+ ```bash
+ git clone https://github.com/twentyhq/twenty.git
+ ```
+
+
+
+## Adım 2: Kök Dizine Konuçlanın
+
+```bash
+cd twenty
+```
+
+Sonraki adımlardaki tüm komutları projenin kök dizininden çalıştırmalısınız.
+
+## Adım 3: Bir PostgreSQL Veritabanı Kurun
+
+
+
+ **Seçenek 1 (tercih edilen):** Veritabanınızı yerel olarak kurmak için:
+ Linux makinenize Postgresql yüklemek için şu bağlantıyı kullanın: [Postgresql Kurulumu](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Not: İzin hatalarından kaçınmak için `psql` komutundan önce `sudo -u postgres` eklemeniz gerekebilir.
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ **Seçenek 1 (tercih edilen):** Veritabanınızı `brew` ile yerel olarak kurmak için:
+
+ ```bash
+ brew install postgresql@16
+ export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
+ brew services start postgresql@16
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ PostgreSQL sunucusunun çalışıp çalışmadığını kontrol etmek için şu komutu çalıştırabilirsiniz:
+
+ ```bash
+ brew services list
+ ```
+
+ Yükleyici, MacOS'ta Homebrew ile yüklenirken varsayılan olarak `postgres` kullanıcısını oluşturmayabilir. Bunun yerine, macOS kullanıcı adınıza (ör. "john") uygun bir PostgreSQL rolü oluşturur.
+ Gerekiyorsa `postgres` kullanıcısını kontrol etmek ve oluşturtmak için şu adımları izleyin:
+
+ ```bash
+ # PostgreSQL'e Bağlan
+ psql postgres
+ or
+ psql -U $(whoami) -d postgres
+ ```
+
+ psql isteminde (postgres=#) şu komutu çalıştırın:
+
+ ```bash
+ # Mevcut PostgreSQL rollerini listeleyin
+ \du
+ ```
+
+ Şu benzer bir çıktı göreceksiniz:
+
+ ```bash
+ Rol adı | Özellikler | Üyesi olduğu
+ -----------+-------------+-----------
+ john | Superuser | {}
+ ```
+
+ Eğer listede bir `postgres` rolü görmüyorsanız, bir sonraki adıma geçin.
+ `postgres` rolünü manuel olarak oluşturun:
+
+ ```bash
+ CREATE ROLE postgres WITH SUPERUSER LOGIN;
+ ```
+
+ Bu, `postgres` adıyla giriş erişimi olan bir süper kullanıcı rolü oluşturur.
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+ Aşağıdaki tüm adımlar WSL terminalinde (sanallaştırma makineniz içinde) çalıştırılmalıdır.
+
+ **Seçenek 1:** Postgresql'i yerel olarak sağlamak için:
+ Linux sanal makinenize Postgresql yüklemek için şu bağlantıyı kullanın: [Postgresql Kurulumu](https://www.postgresql.org/download/linux/)
+
+ ```bash
+ psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
+ ```
+
+ Not: İzin hatalarından kaçınmak için `psql` komutundan önce `sudo -u postgres` eklemeniz gerekebilir.
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+ WSL üzerinde Docker çalıştırmak ek bir karmaşıklık katmanı ekler.
+ Yalnızca ek adımlar dahil olmak üzere extra karmaşıklık adımlarına aşinaysanız kullanın. [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl) etkinleştirmenizi içeren.
+
+ ```bash
+ make postgres-on-docker
+ ```
+
+
+
+Veritabanına [localhost:5432](localhost:5432) adresinden, kullanıcı `postgres` ve şifre `postgres` ile şimdi erişebilirsiniz.
+
+## Adım 4: Redis Veritabanı (önbellek) Kurun
+
+Twenty, en iyi performansı sağlamak için bir redis önbelleğe ihtiyaç duyar
+
+
+
+ **Seçenek 1:** Redis'i yerel olarak sağlamak için:
+ Linux makinenize Redis yüklemek için şu bağlantıyı kullanın: [Redis Kurulumu](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Seçenek 1 (tercih edilen):** Redis'i `brew` ile yerel olarak sağlamak için:
+
+ ```bash
+ brew install redis
+ ```
+
+ Redis sunucunuzu başlatın:
+ `brew services start redis`
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+ **Seçenek 1:** Redis'i yerel olarak sağlamak için:
+ Linux sanal makinenize Redis yüklemek için şu bağlantıyı kullanın: [Redis Kurulumu](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)
+
+ **Seçenek 2:** Eğer docker yüklüyse:
+
+ ```bash
+ make redis-on-docker
+ ```
+
+
+
+Bir İstemci GUI'ye ihtiyacınız varsa, [redis insight](https://redis.io/insight/) (ücretsiz sürüm mevcut) öneriyoruz.
+
+## Adım 5: Çevresel değişkenleri ayarlayın
+
+Projenizi yapılandırmak için çevresel değişkenler veya `.env` dosyaları kullanın. Daha fazla bilgi [burada](/l/tr/developers/self-host/capabilities/setup)
+
+`.env.example` dosyalarını `/front` ve `/server` içine kopyalayın:
+
+```bash
+cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
+cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
+```
+
+
+ **Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/tr/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
+
+
+## Step 6: Installing dependencies
+
+Twenty server'ı oluşturup veritabanınıza bazı veriler yerleştirmek için aşağıdaki komutu çalıştırın:
+
+```bash
+yarn
+```
+
+`npm` veya `pnpm` çalışmaz
+
+## Adım 7: Projeyi çalıştırma
+
+
+
+ Dağıtımınıza bağlı olarak, Redis sunucusu otomatik olarak başlatılabilir.
+ Değilse, dağıtımınız için [Redis Kurulum Kılavuzu](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) üzerinden kontrol edin.
+
+
+
+ Redis zaten çalışıyor olmalıdır. Değilse, şu komutu çalıştırın:
+
+ ```bash
+ brew services start redis
+ ```
+
+
+
+ Dağıtımınıza bağlı olarak, Redis sunucusu otomatik olarak başlatılabilir.
+ Değilse, dağıtımınız için [Redis Kurulum Kılavuzu](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) üzerinden kontrol edin.
+
+
+
+Veritabanınızı aşağıdaki komutla kurun:
+
+```bash
+npx nx database:reset twenty-server
+```
+
+Sunucuyu, çalışanı ve ön uç hizmetlerini başlatın:
+
+```bash
+npx nx start twenty-server
+npx nx worker twenty-server
+npx nx start twenty-front
+```
+
+Alternatif olarak, tüm hizmetleri aynı anda başlatabilirsiniz:
+
+```bash
+npx nx start
+```
+
+## Step 8: Use Twenty
+
+**Ön Uç**
+
+Twenty's frontend will be running at [http://localhost:3001](http://localhost:3001).
+Varsayılan demo hesabıyla giriş yapabilirsiniz: `tim@apple.dev` (şifre: `tim@apple.dev`)
+
+**Arka Uç**
+
+* Twenty's server will be up and running at [http://localhost:3000](http://localhost:3000)
+* GraphQL API'sine [http://localhost:3000/graphql](http://localhost:3000/graphql) adresinden erişebilirsiniz.
+* REST API'sine [http://localhost:3000/rest](http://localhost:3000/rest) adresinden ulaşabilirsiniz.
+
+## Sorun Giderme
+
+Herhangi bir sorunla karşılaşırsanız, çözümler için [Sorun Giderme](/l/tr/developers/self-host/capabilities/troubleshooting) sayfasına bakın.
diff --git a/packages/twenty-docs/l/tr/developers/contribute/contribute.mdx b/packages/twenty-docs/l/tr/developers/contribute/contribute.mdx
new file mode 100644
index 0000000000..30735e307a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/contribute/contribute.mdx
@@ -0,0 +1,32 @@
+---
+title: Contribute
+description: Contribute to Twenty's open-source development.
+---
+
+
+
+
+
+## Genel Bakış
+
+Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
+
+## Ways to Contribute
+
+* **Report bugs**: Help identify and document issues
+* **Submit features**: Propose and implement new functionality
+* **Improve documentation**: Make our docs clearer and more helpful
+* **Frontend development**: Work on the React-based UI
+* **Backend development**: Contribute to the NestJS server
+
+## Getting Started
+
+
+
+ Report issues or request features
+
+
+
+ Contribute to the UI
+
+
diff --git a/packages/twenty-docs/l/tr/developers/extend/capabilities/apis.mdx b/packages/twenty-docs/l/tr/developers/extend/capabilities/apis.mdx
new file mode 100644
index 0000000000..8e02d320f3
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/extend/capabilities/apis.mdx
@@ -0,0 +1,147 @@
+---
+title: API'ler
+description: Query and modify your CRM data programmatically using REST or GraphQL.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Twenty, geliştirici dostu olacak şekilde tasarlanmıştır ve özel veri modelinize uyum sağlayan güçlü API'ler sunar. Farklı entegrasyon ihtiyaçlarını karşılamak üzere dört farklı API türü sunuyoruz.
+
+## Öncelik Geliştiricide Yaklaşımı
+
+Twenty generates APIs specifically for your data model:
+
+* **Uzun kimlik numaralarına gerek yok**: Uç noktalarda nesne ve alan adlarınızı doğrudan kullanın
+* **Standart ve özel nesneler eşit şekilde ele alınır**: Özel nesneleriniz yerleşik olanlarla aynı API muamelesini görür.
+* **Özel uç noktalar**: Her nesne ve alan kendi API uç noktasına sahiptir
+* **Özel dokümantasyon**: Çalışma alanınızın veri modeli için özel olarak üretilmiştir.
+
+
+ Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
+
+
+## The Two API Types
+
+### Temel API
+
+Accessed on `/rest/` or `/graphql/`
+
+Work with your actual **records** (the data):
+
+* Create, read, update, delete People, Companies, Opportunities, etc.
+* Query and filter data
+* Kayıt ilişkilerini yönetin
+
+### Meta Veriler API
+
+Accessed on `/rest/metadata/` or `/metadata/`
+
+Manage your **workspace and data model**:
+
+* Nesne ve alanlar oluşturun, değiştirin veya silin
+* Çalışma alanı ayarlarını yapılandırın
+* Define relationships between objects
+
+## REST vs GraphQL
+
+Both Core and Metadata APIs are available in REST and GraphQL formats:
+
+| Biçim | Available Operations |
+| ----------- | ---------------------------------------------------------- |
+| **REST** | CRUD, batch operations, upserts |
+| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
+
+Choose based on your needs — both formats access the same data.
+
+## API Uç Noktaları
+
+| Environment | Base URL |
+| --------------- | ------------------------- |
+| **Cloud** | `https://api.twenty.com/` |
+| **Self-Hosted** | `https://{your-domain}/` |
+
+## Kimlik Doğrulama
+
+Every API request requires an API key in the header:
+
+```
+Authorization: Bearer YOUR_API_KEY
+```
+
+### Bir API Anahtarı Oluştur
+
+1. Go to **Settings → APIs & Webhooks**
+2. Click **+ Create key**
+3. Alanı Yapılandır:
+ * **Name**: Descriptive name for the key
+ * **Expiration Date**: When the key expires
+4. **Kaydet**'e tıklayın
+5. **Copy immediately** — the key is only shown once
+
+
+
+
+ Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
+
+
+### Assign a Role to an API Key
+
+For better security, assign a specific role to limit access:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Click on the role to assign
+3. **Atama** sekmesini açın
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key
+
+The key will inherit that role's permissions. See [Permissions](/l/tr/user-guide/permissions-access/capabilities/permissions) for details.
+
+### API Anahtarlarını Yönet
+
+**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
+
+**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
+
+## API Playground
+
+Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
+
+### Access the Playground
+
+1. Go to **Settings → APIs & Webhooks**
+2. Create an API key (required)
+3. Click on **REST API** or **GraphQL API** to open the playground
+
+### What You Get
+
+* **Interactive documentation**: Generated for your specific data model
+* **Live testing**: Execute real API calls against your workspace
+* **Schema explorer**: Browse available objects, fields, and relationships
+* **Request builder**: Construct queries with autocomplete
+
+The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
+
+## Toplu İşlemler
+
+Both REST and GraphQL support batch operations:
+
+* **Toplu boyut**: İstek başına 60 kayıt kadar
+* **Operations**: Create, update, delete multiple records
+
+**GraphQL-only features:**
+
+* **Batch Upsert**: Create or update in one call
+* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
+
+## Rate Limits
+
+API requests are throttled to ensure platform stability:
+
+| Limit | Değer |
+| -------------- | -------------------- |
+| **Requests** | 100 calls per minute |
+| **Batch size** | 60 records per call |
+
+
+ Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
+
diff --git a/packages/twenty-docs/l/tr/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/l/tr/developers/extend/capabilities/apps.mdx
new file mode 100644
index 0000000000..eb9d0fc640
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/extend/capabilities/apps.mdx
@@ -0,0 +1,522 @@
+---
+title: Twenty Apps
+description: Build and manage Twenty customizations as code.
+---
+
+
+ Apps are currently in alpha testing. The feature is functional but still evolving.
+
+
+## What Are Apps?
+
+Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
+
+**What you can do today:**
+
+* Define custom objects and fields as code (managed data model)
+* Build serverless functions with custom triggers
+* Deploy the same app across multiple workspaces
+
+**Coming soon:**
+
+* Custom UI layouts and components
+
+## Ön Gereksinimler
+
+* Node.js 24+ and Yarn 4
+* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
+
+## Getting Started
+
+Create a new app using the official scaffolder, then authenticate and start developing:
+
+```bash filename="Terminal"
+# Scaffold a new app
+npx create-twenty-app@latest my-twenty-app
+cd my-twenty-app
+
+# Authenticate using your API key (you'll be prompted)
+yarn auth
+
+# Start dev mode: automatically syncs local changes to your workspace
+yarn dev
+```
+
+Buradan şunları yapabilirsiniz:
+
+```bash filename="Terminal"
+# Add a new entity to your application (guided)
+yarn create-entity
+
+# Generate a typed Twenty client and workspace entity types
+yarn generate
+
+# Run a one‑time sync (instead of watch mode)
+yarn sync
+
+# Watch your application's functions logs
+yarn logs
+
+# Uninstall the application from the current workspace
+yarn uninstall
+
+# Display commands' help
+yarn help
+```
+
+See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
+
+## Project structure (scaffolded)
+
+When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
+
+* Copies a minimal base application into `my-twenty-app/`
+* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
+* Creates config files and scripts wired to the `twenty` CLI
+* Generates a default application config and a default function role
+
+A freshly scaffolded app looks like this:
+
+```text filename="my-twenty-app/"
+my-twenty-app/
+ package.json
+ yarn.lock
+ .gitignore
+ .nvmrc
+ .yarnrc.yml
+ .yarn/
+ releases/
+ yarn-4.9.2.cjs
+ install-state.gz
+ eslint.config.mjs
+ tsconfig.json
+ README.md
+ src/
+ application.config.ts
+ role.config.ts
+ // your entities, actions, and other app files
+```
+
+At a high level:
+
+* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
+* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
+* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
+* **.nvmrc**: Pins the Node.js version expected by the project.
+* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app’s TypeScript sources.
+* **README.md**: A short README in the app root with basic instructions.
+* **src/**: The main place where you define your application-as-code:
+ * `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See “Application config” below.
+ * `role.config.ts`: Default function role used by your serverless functions. See “Default function role” below.
+ * Future entities, actions/functions, and any supporting code you add.
+
+Later commands will add more files and folders:
+
+* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
+* `yarn create-entity` will add entity definition files under `src/` for your custom objects.
+
+## Kimlik Doğrulama
+
+The first time you run `yarn auth`, you'll be prompted for:
+
+* API URL (defaults to http://localhost:3000 or your current workspace profile)
+* API key
+
+Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace `.
+
+Örnekler:
+
+```bash filename="Terminal"
+# Login interactively (recommended)
+yarn auth
+
+# Use a specific workspace profile
+yarn auth --workspace my-custom-workspace
+```
+
+## Use the SDK resources (types & config)
+
+The twenty-sdk provides typed building blocks you use inside your app. Below are the key pieces you'll touch most often.
+
+### Defining objects
+
+Custom objects are regular TypeScript classes annotated with decorators from `twenty-sdk`. They live under `src/objects/` in your app and describe both schema and behavior for records in your workspace.
+
+Here is an example `postCard` object from the Hello World app:
+
+```typescript
+import { type Note } from '../../generated';
+
+import {
+ type AddressField,
+ Field,
+ FieldType,
+ type FullNameField,
+ Object,
+ OnDeleteAction,
+ Relation,
+ RelationType,
+ STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
+} from 'twenty-sdk';
+
+enum PostCardStatus {
+ DRAFT = 'DRAFT',
+ SENT = 'SENT',
+ DELIVERED = 'DELIVERED',
+ RETURNED = 'RETURNED',
+}
+
+@Object({
+ universalIdentifier: '54b589ca-eeed-4950-a176-358418b85c05',
+ nameSingular: 'postCard',
+ namePlural: 'postCards',
+ labelSingular: 'Post card',
+ labelPlural: 'Post cards',
+ description: ' A post card object',
+ icon: 'IconMail',
+})
+export class PostCard {
+ @Field({
+ universalIdentifier: '58a0a314-d7ea-4865-9850-7fb84e72f30b',
+ type: FieldType.TEXT,
+ label: 'Content',
+ description: "Postcard's content",
+ icon: 'IconAbc',
+ })
+ content: string;
+
+ @Field({
+ universalIdentifier: 'c6aa31f3-da76-4ac6-889f-475e226009ac',
+ type: FieldType.FULL_NAME,
+ label: 'Recipient name',
+ icon: 'IconUser',
+ })
+ recipientName: FullNameField;
+
+ @Field({
+ universalIdentifier: '95045777-a0ad-49ec-98f9-22f9fc0c8266',
+ type: FieldType.ADDRESS,
+ label: 'Recipient address',
+ icon: 'IconHome',
+ })
+ recipientAddress: AddressField;
+
+ @Field({
+ universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e',
+ type: FieldType.SELECT,
+ label: 'Status',
+ icon: 'IconSend',
+ defaultValue: `'${PostCardStatus.DRAFT}'`,
+ options: [
+ { value: PostCardStatus.DRAFT, label: 'Draft', position: 0, color: 'gray' },
+ { value: PostCardStatus.SENT, label: 'Sent', position: 1, color: 'orange' },
+ { value: PostCardStatus.DELIVERED, label: 'Delivered', position: 2, color: 'green' },
+ { value: PostCardStatus.RETURNED, label: 'Returned', position: 3, color: 'orange' },
+ ],
+ })
+ status: PostCardStatus;
+
+ @Relation({
+ universalIdentifier: 'c9e2b4f4-b9ad-4427-9b42-9971b785edfe',
+ type: RelationType.ONE_TO_MANY,
+ label: 'Notes',
+ icon: 'IconComment',
+ inverseSideTargetUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.note,
+ onDelete: OnDeleteAction.CASCADE,
+ })
+ notes: Note[];
+
+ @Field({
+ universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433',
+ type: FieldType.DATE_TIME,
+ label: 'Delivered at',
+ icon: 'IconCheck',
+ isNullable: true,
+ defaultValue: null,
+ })
+ deliveredAt?: Date;
+}
+```
+
+Key points:
+
+* The `@Object` decorator defines the object identity and labels used across the workspace; its `universalIdentifier` must be unique and stable across deployments.
+* Each `@Field` decorator defines a field on the object with a type, label, and its own stable `universalIdentifier`.
+* `@Relation` wires this object to other objects (standard or custom) and controls cascade behavior with `onDelete`.
+* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships, then generates object files similar to the `postCard` example.
+
+### Application config (application.config.ts)
+
+Every app has a single `application.config.ts` file that describes:
+
+* **Who the app is**: identifiers, display name, and description.
+* **How its functions run**: which role they use for permissions.
+* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
+
+When you scaffold a new app, you start with a minimal config:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My Twenty App',
+ description: 'My first Twenty app',
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+You can gradually extend this file as your app grows. For example, you can add an icon and application-scoped variables:
+
+```typescript
+import { type ApplicationConfig } from 'twenty-sdk';
+
+const config: ApplicationConfig = {
+ universalIdentifier: '',
+ displayName: 'My App',
+ description: 'What your app does',
+ icon: 'IconWorld', // Choose an icon by name
+ applicationVariables: {
+ DEFAULT_RECIPIENT_NAME: {
+ universalIdentifier: '',
+ description: 'Default recipient used by functions',
+ value: 'Jane Doe',
+ isSecret: false,
+ },
+ },
+ functionRoleUniversalIdentifier: '',
+};
+
+export default config;
+```
+
+Notes:
+
+* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
+* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
+* `functionRoleUniversalIdentifier` must match the role you define in `role.config.ts` (see below).
+
+#### Roles and permissions
+
+Applications can define roles that encapsulate permissions on your workspace’s objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app’s serverless functions.
+
+* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
+* The typed client will be restricted to the permissions granted to that role.
+* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
+
+##### Default function role (role.config.ts)
+
+When you scaffold a new app, the CLI also creates `src/role.config.ts`. This file exports the default role your serverless functions will use at runtime:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'My Twenty App default function role',
+ description: 'My Twenty App default function role',
+ canReadAllObjectRecords: true,
+ canUpdateAllObjectRecords: true,
+ canSoftDeleteAllObjectRecords: true,
+ canDestroyAllObjectRecords: false,
+};
+```
+
+The `universalIdentifier` of this role is automatically wired into `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
+
+* **role.config.ts** defines what the default function role can do.
+* **application.config.ts** points to that role so your functions inherit its permissions.
+
+As you move beyond the initial scaffold, you should tighten this role and make it explicit about what it can access. A more production-ready role might look closer to:
+
+```typescript
+import { PermissionFlag, type RoleConfig } from 'twenty-sdk';
+
+export const functionRole: RoleConfig = {
+ universalIdentifier: '',
+ label: 'Default function role',
+ description: 'Default role for function Twenty client',
+ canReadAllObjectRecords: false,
+ canUpdateAllObjectRecords: false,
+ canSoftDeleteAllObjectRecords: false,
+ canDestroyAllObjectRecords: false,
+ canUpdateAllSettings: false,
+ canBeAssignedToAgents: false,
+ canBeAssignedToUsers: false,
+ canBeAssignedToApiKeys: false,
+ objectPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ canReadObjectRecords: true,
+ canUpdateObjectRecords: true,
+ canSoftDeleteObjectRecords: false,
+ canDestroyObjectRecords: false,
+ },
+ ],
+ fieldPermissions: [
+ {
+ objectNameSingular: 'postCard',
+ fieldName: 'content',
+ canReadFieldValue: false,
+ canUpdateFieldValue: false,
+ },
+ ],
+ permissionFlags: ['APPLICATIONS'],
+};
+```
+
+Notes:
+
+* Start from the scaffolded role, then progressively restrict it following least‑privilege.
+* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
+* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
+* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
+
+### Serverless function config and entrypoint
+
+Each function exports a main handler and a config describing its triggers. You can mix multiple trigger types.
+
+```typescript
+// src/actions/create-new-post-card.ts
+import type {
+ FunctionConfig,
+ DatabaseEventPayload,
+ ObjectRecordCreateEvent,
+ CronPayload,
+} from 'twenty-sdk';
+import Twenty, { type Person } from '../generated';
+
+// main handler can accept parameters from route, cron, or database events
+export const main = async (
+ params:
+ | { name?: string }
+ | DatabaseEventPayload>
+ | CronPayload,
+) => {
+ const client = new Twenty(); // generated typed client
+ const name = 'name' in params
+ ? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
+ : 'Hello world';
+
+ const result = await client.mutation({
+ createPostCard: {
+ __args: { data: { name } },
+ id: true,
+ name: true,
+ },
+ });
+ return result;
+};
+
+export const config: FunctionConfig = {
+ universalIdentifier: '',
+ name: 'create-new-post-card',
+ timeoutSeconds: 2,
+ triggers: [
+ // Public HTTP route trigger '/s/post-card/create'
+ {
+ universalIdentifier: '',
+ type: 'route',
+ path: '/post-card/create',
+ httpMethod: 'GET',
+ isAuthRequired: false,
+ },
+ // Cron trigger (CRON pattern)
+ {
+ universalIdentifier: '',
+ type: 'cron',
+ pattern: '0 0 1 1 *',
+ },
+ // Database event trigger
+ {
+ universalIdentifier: '',
+ type: 'databaseEvent',
+ eventName: 'person.created',
+ },
+ ],
+};
+```
+
+Common trigger types:
+
+* route: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
+
+> e.g. `path: '/post-card/create',` -> call on `/s/post-card/create`
+
+* cron: Runs your function on a schedule using a CRON expression.
+* databaseEvent: Runs on workspace object lifecycle events
+
+> e.g. `person.created`
+
+You can create new functions in two ways:
+
+* **Scaffolded**: Run `yarn create-entity --path ` and choose the option to add a new function. This generates a starter file under `` with a `main` handler and a `config` block similar to the example above.
+* **Manual**: Create a new file and export `main` and `config` yourself, following the same pattern.
+
+### Generated typed client
+
+Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
+
+```typescript
+import Twenty from './generated';
+
+const client = new Twenty();
+const { me } = await client.query({ me: { id: true, displayName: true } });
+```
+
+The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
+
+#### Runtime credentials in serverless functions
+
+When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
+
+* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
+* `TWENTY_API_KEY`: Short‑lived key scoped to your application’s default function role.
+
+Notes:
+
+* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
+* The API key’s permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
+* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role’s universal identifier.
+
+### Hello World example
+
+Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
+
+## Manual setup (without the scaffolder)
+
+While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
+
+```bash filename="Terminal"
+yarn add -D twenty-sdk
+```
+
+Then add scripts like these:
+
+```json filename="package.json"
+{
+ "scripts": {
+ "auth": "twenty auth login",
+ "generate": "twenty app generate",
+ "dev": "twenty app dev",
+ "sync": "twenty app sync",
+ "uninstall": "twenty app uninstall",
+ "logs": "twenty app logs",
+ "create-entity": "twenty app add",
+ "help": "twenty --help"
+ }
+}
+```
+
+Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
+
+## Sorun Giderme
+
+* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
+* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
+* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
+* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
+
+Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
diff --git a/packages/twenty-docs/l/tr/developers/extend/capabilities/webhooks.mdx b/packages/twenty-docs/l/tr/developers/extend/capabilities/webhooks.mdx
new file mode 100644
index 0000000000..7f1d3591a9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/extend/capabilities/webhooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Webhooklar
+description: Receive real-time notifications when events occur in your CRM.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
+
+## Webhook oluştur
+
+1. **Ayarlar → API'ler ve Webhook'lar → Webhook'lar**'a gidin
+2. **+ Webhook oluştur**'a tıklayın
+3. Enter your webhook URL (must be publicly accessible)
+4. **Kaydet**'e tıklayın
+
+The webhook activates immediately and starts sending notifications.
+
+
+
+### Manage Webhooks
+
+**Edit**: Click the webhook → Update URL → **Save**
+
+**Delete**: Click the webhook → **Delete** → Confirm
+
+## Etkinlikler
+
+Twenty sends webhooks for these event types:
+
+| Etkinlik | Örnek |
+| ------------------ | ---------------------------------------------------------- |
+| **Record Created** | `person.created`, `company.created`, `note.created` |
+| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
+| **Record Deleted** | `person.deleted`, `company.deleted` |
+
+All event types are sent to your webhook URL. Event filtering may be added in future releases.
+
+## Payload Format
+
+Each webhook sends an HTTP POST with a JSON body:
+
+```json
+{
+ "event": "person.created",
+ "data": {
+ "id": "abc12345",
+ "firstName": "Alice",
+ "lastName": "Doe",
+ "email": "alice@example.com",
+ "createdAt": "2025-02-10T15:30:45Z",
+ "createdBy": "user_123"
+ },
+ "timestamp": "2025-02-10T15:30:50Z"
+}
+```
+
+| Alan | Açıklama |
+| --------------- | ------------------------------------------------ |
+| `etkinlik` | What happened (e.g., `person.created`) |
+| `veri` | The full record that was created/updated/deleted |
+| `zaman damgası` | When the event occurred (UTC) |
+
+
+ Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
+
+
+## Webhook Doğrulaması
+
+Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
+
+### Headers
+
+| Başlık | Açıklama |
+| ---------------------------- | --------------------- |
+| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
+| `X-Twenty-Webhook-Timestamp` | Request timestamp |
+
+### Validation Steps
+
+1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
+2. Create the string: `{timestamp}:{JSON payload}`
+3. Compute HMAC SHA256 using your webhook secret
+4. Compare with `X-Twenty-Webhook-Signature`
+
+### Example (Node.js)
+
+```javascript
+const crypto = require("crypto");
+
+const timestamp = req.headers["x-twenty-webhook-timestamp"];
+const payload = JSON.stringify(req.body);
+const secret = "your-webhook-secret";
+
+const stringToSign = `${timestamp}:${payload}`;
+const expectedSignature = crypto
+ .createHmac("sha256", secret)
+ .update(stringToSign)
+ .digest("hex");
+
+const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
+```
+
+## Webhooks vs Workflows
+
+| Yöntem | Yön | Use Case |
+| ---------------------------- | --- | ---------------------------------------------------------- |
+| **Webhooks** | OUT | Automatically notify external systems of any record change |
+| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
+| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
+
+For receiving external data, see [Set Up a Webhook Trigger](/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
diff --git a/packages/twenty-docs/l/tr/developers/extend/extend.mdx b/packages/twenty-docs/l/tr/developers/extend/extend.mdx
new file mode 100644
index 0000000000..091a81b040
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/extend/extend.mdx
@@ -0,0 +1,34 @@
+---
+title: Extend
+description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
+---
+
+
+
+
+
+## Genel Bakış
+
+Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
+
+## What You Can Do
+
+* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
+* **Webhooks**: Receive real-time notifications when events occur in Twenty
+* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
+
+## Getting Started
+
+
+
+ Connect to Twenty programmatically
+
+
+
+ Get notified of events in real-time
+
+
+
+ Build customizations as code (Alpha)
+
+
diff --git a/packages/twenty-docs/l/tr/developers/introduction.mdx b/packages/twenty-docs/l/tr/developers/introduction.mdx
new file mode 100644
index 0000000000..e52a11ba31
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/introduction.mdx
@@ -0,0 +1,23 @@
+---
+title: Getting Started
+description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Extend
+ Build integrations with APIs, webhooks, and custom apps.
+
+
+
+ Self-Host
+ Deploy and manage Twenty on your own infrastructure.
+
+
+
+ Contribute
+ Join our open-source community and contribute to Twenty.
+
+
diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/cloud-providers.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/cloud-providers.mdx
new file mode 100644
index 0000000000..75b843d264
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/cloud-providers.mdx
@@ -0,0 +1,45 @@
+---
+title: Diğer yöntemler
+---
+
+
+ This document is maintained by the community. It might contain issues.
+
+
+## Kubernetes'i Terraform ve Manifests ile kullanma
+
+Kubernetes dağıtımı için topluluk liderliğindeki dokümantasyona [buradan](https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8s) erişebilirsiniz.
+
+### Coolify
+
+Deploy Twenty on servers using Coolify. (Coolify üzerinde resmi görüntü yakında mevcut olacak)
+
+[Coolify dokümantasyonu](https://coolify.io/docs/get-started/introduction)
+
+### EasyPanel
+
+Deploy Twenty on EasyPanel with the community maintained template below.
+
+[EasyPanel'de Dağıt](https://easypanel.io/docs/templates/twenty)
+
+### Elest.io
+
+Deploy Twenty on servers with Elest.io using link below.
+
+[Elest.io'da Dağıt](https://elest.io/open-source/twenty)
+
+### Twenty on Railway
+
+Deploy Twenty on Railway with the community maintained template below.
+
+[](https://railway.com/deploy/nAL3hA)
+
+### Sealos'ta Twenty
+
+Aşağıdaki topluluk tarafından bakımı yapılan şablonla Twenty'yi Sealos'ta dağıtın.
+
+[](https://sealos.io/products/app-store/twenty)
+
+## Diğerleri
+
+Please feel free to Open a PR to add more Cloud Provider options.
diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/docker-compose.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/docker-compose.mdx
new file mode 100644
index 0000000000..04f6c462aa
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/docker-compose.mdx
@@ -0,0 +1,253 @@
+---
+title: 1-Tıklama ile Docker Compose
+---
+
+
+ Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/tr/developers/contribute/capabilities/local-setup).
+
+
+## Genel Bakış
+
+This guide provides step-by-step instructions to install and configure the Twenty application using Docker Compose. The aim is to make the process straightforward and prevent common pitfalls that could break your setup.
+
+**Important:** Only modify settings explicitly mentioned in this guide. Diğer yapılandırmaları değiştirmek sorunlara yol açabilir.
+
+See docs [Setup Environment Variables](/l/tr/developers/self-host/capabilities/setup) for advanced configuration. Tüm ortam değişkenleri, sunucu ve / veya işçi düzeyine bağlı olarak docker-compose.yml dosyasında ilan edilmelidir.
+
+## Sistem Gereksinimleri
+
+* RAM: Ortamınızda en az 2GB RAM bulunduğundan emin olun. Yetersiz bellek, işlemlerin çökmesine neden olabilir.
+* Docker & Docker Compose: Her ikisinin de yüklendiğinden ve güncel olduğundan emin olun.
+
+## Seçenek 1: Tek satırlık komut dosyası
+
+Tek bir komutla en son kararlı Twenty sürümünü yükleyin:
+
+```bash
+bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+Belirli bir sürüm veya dal yüklemek için:
+
+```bash
+VERSION=vx.y.z BRANCH=dal-adı bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
+```
+
+* x.y.z'yi istediğiniz sürüm numarasıyla değiştirin.
+* dal-adını yüklemek istediğiniz dal adıyla değiştirin.
+
+## Seçenek 2: Manuel adımlar
+
+Manuel kurulum için bu adımları uygulayın.
+
+### Adım 1: Çevre Dosyasını Kurun
+
+1. **.env Dosyasını Oluşturun**
+
+ Örnek çevre dosyasını, çalışma dizininizde yeni bir .env dosyasına kopyalayın:
+
+ ```bash
+ curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
+ ```
+
+2. **Gizli Jetonlar Oluşturun**
+
+ Run the following command to generate a unique random string:
+
+ ```bash
+ openssl rand -base64 32
+ ```
+
+ **Önemli:** Bu değeri gizli tutun / paylaşmayın.
+
+3. **`.env` Güncelleyin**
+
+ .env dosyanızdaki yer tutucu değeri oluşturulan jetonla değiştirin:
+
+ ```ini
+ APP_SECRET=birinci_rastgele_dize
+ ```
+
+4. **Postgres Şifresini Ayarlayın**
+
+ .env dosyasındaki `PG_DATABASE_PASSWORD` değerini özel karakter içermeyen güçlü bir şifre ile güncelleyin.
+
+ ```ini
+ PG_DATABASE_PASSWORD=benim_guclu_sifrem
+ ```
+
+### Adım 2: Docker Compose Dosyasını Edinin
+
+`docker-compose.yml` dosyasını çalışma dizininize indirin:
+
+```bash
+curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
+```
+
+### Adım 3: Uygulamayı Başlatın
+
+Docker konteynerlerini başlatın:
+
+```bash
+docker compose up -d
+```
+
+### Adım 4: Uygulamaya Erişin
+
+If you host twentyCRM on your own computer, open your browser and navigate to [http://localhost:3000](http://localhost:3000).
+
+Bir sunucuda barındırıyorsanız, sunucunun çalıştığını ve her şeyin yolunda olduğunu kontrol edin
+
+```bash
+curl http://localhost:3000
+```
+
+## Yapılandırma
+
+### Twenty'yi Dış Erişime Açma
+
+Varsayılan olarak, Twenty `localhost` üzerinde `3000` portunda çalışır. Harici bir alan adı veya IP adresi aracılığıyla erişim sağlamak için `.env` dosyanızda `SERVER_URL`'i yapılandırmanız gerekir.
+
+#### `SERVER_URL`'a Genel Bakış
+
+* **Protokol:** Yapılandırmanıza bağlı olarak `http` veya `https` kullanın.
+ * SSL ayarlamadıysanız `http` kullanın.
+ * SSL yapılandırıldıysa `https` kullanın.
+* **Alan Adı/IP:** Uygulamanızın erişilebilir olduğu alan adı veya IP adresi.
+* **Port:** Varsayılan portları kullanmıyorsanız, port numarasını ekleyin (`80` `http` için, `443` `https` için).
+
+### SSL Gereksinimleri
+
+Belirli tarayıcı özelliklerinin düzgün çalışabilmesi için SSL (HTTPS) gereklidir. Bu özellikler yerel geliştirme sırasında çalışabilirken (tarayıcılar localhost'u farklı şekilde ele alır), Twenty'yi düzenli bir alanda barındırırken uygun bir SSL kurulumu gereklidir.
+
+Örneğin, panoya kopyalama API'si güvenli bir bağlam gerektirebilir - uygulama boyunca kopyalama düğmeleri gibi bazı özellikler HTTPS etkinleştirilmediğinde çalışmayabilir.
+
+Optimum güvenlik ve işlevsellik için Twenty'nin SSL sonlandırma ile bir ters proxy arkasında ayarlanmasını şiddetle öneririz.
+
+#### `SERVER_URL`'ı Yapılandırma
+
+1. **Erişim URL'nizi Belirleyin**
+ * **Ters Proxy Olmadan (Doğrudan Erişim):**
+
+ Uygulamaya doğrudan bir ters proxy olmadan erişiyorsanız:
+
+ ```ini
+ SERVER_URL=http://alan-adiniz-veya-ip:3000
+ ```
+
+ * **Ters Proxy ile (Standart Portlar):**
+
+ Nginx veya Traefik gibi bir ters proxy kullanıyorsanız ve SSL yapılandırıldıysa:
+
+ ```ini
+ SERVER_URL=https://alan-adiniz-veya-ip
+ ```
+
+ * **Ters Proxy ile (Özel Portlar):**
+
+ Standart olmayan portlar kullanıyorsanız:
+
+ ```ini
+ SERVER_URL=https://alan-adiniz-veya-ip:ozel-port
+ ```
+
+2. **`.env` Dosyasını Güncelleyin**
+
+ `.env` dosyanızı açın ve `SERVER_URL`'i güncelleyin:
+
+ ```ini
+ SERVER_URL=http(s)://alan-adiniz-veya-ip:portunuz
+ ```
+
+ **Örnekler:**
+
+ * SSL olmadan doğrudan erişim:
+ ```ini
+ SERVER_URL=http://123.45.67.89:3000
+ ```
+ * SSL ile alan adı aracılığıyla erişim:
+ ```ini
+ SERVER_URL=https://mytwentyapp.com
+ ```
+
+3. **Uygulamayı Yeniden Başlatın**
+
+ For changes to take effect, restart the Docker containers:
+
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+#### Considerations
+
+* **Reverse Proxy Configuration:**
+
+ Ensure your reverse proxy forwards requests to the correct internal port (`3000` by default). Configure SSL termination and any necessary headers.
+
+* **Güvenlik Duvarı Ayarları:**
+
+ Dış erişime izin vermek için güvenlik duvarınızdaki gerekli portları açın.
+
+* **Tutarlılık:**
+
+ `SERVER_URL`, kullanıcıların uygulamanıza tarayıcıları ile nasıl eriştiği ile eşleşmelidir.
+
+#### Süreklilik
+
+* **Veri Hacimleri:**
+
+ Docker Compose yapılandırması, veritabanı ve sunucu depolama için verileri kalıcı kılmak adına hacimler kullanmaktadır.
+
+* **Durumsuz Ortamlar:**
+
+ Eğer durumsuz bir ortama (örneğin, bazı bulut hizmetleri) dağıtım yapıyorsanız, verilerin kalıcılığını sağlamak için harici depolama yapılandırın.
+
+## Backup and Restore
+
+Regular backups protect your CRM data from loss.
+
+### Create a Database Backup
+
+```bash
+docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
+```
+
+### Automate Daily Backups
+
+Add to your crontab (`crontab -e`):
+
+```bash
+0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
+```
+
+### Restore from Backup
+
+1. Stop the application:
+
+```bash
+docker compose stop twenty-server twenty-front
+```
+
+2. Restore the database:
+
+```bash
+docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
+```
+
+3. Restart services:
+
+```bash
+docker compose up -d
+```
+
+### Backup Best Practices
+
+* **Test restores regularly** — verify backups actually work
+* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
+* **Encrypt sensitive data** — protect backups with encryption
+* **Retain multiple copies** — keep daily, weekly, and monthly backups
+
+## Sorun Giderme
+
+Herhangi bir sorunla karşılaşırsanız, çözümler için [Sorun Giderme](/l/tr/developers/self-host/capabilities/troubleshooting) sayfasına bakın.
diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/setup.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/setup.mdx
new file mode 100644
index 0000000000..bffc61b662
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/setup.mdx
@@ -0,0 +1,293 @@
+---
+title: Kurulum
+---
+
+# Konfigürasyon Yönetimi
+
+
+ **First time installing?** Follow the [Docker Compose installation guide](/l/tr/developers/self-host/capabilities/docker-compose) to get Twenty running, then return here for configuration.
+
+
+Twenty offers **two configuration modes** to suit different deployment needs:
+
+**Yönetici paneli erişimi:** Yalnızca yönetici ayrıcalıklarına sahip kullanıcılar (`canAccessFullAdminPanel: true`) konfigürasyon arayüzüne erişebilir.
+
+## 1. Yönetici Paneli Konfigürasyonu (Varsayılan)
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # varsayılan
+```
+
+**Çoğu konfigürasyon, kurulumdan sonra arayüz üzerinden gerçekleştirilir**:
+
+1. Twenty örneğinize erişin (genellikle `http://localhost:3000`)
+2. **Ayarlar / Yönetici Paneli / Konfigürasyon Değişkenleri** yoluna gidin
+3. Configure integrations, email, storage, and more
+4. Changes take effect immediately (within 15 seconds for multi-container deployments)
+
+
+ **Multi-Container Deployments:** When using database configuration (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), both server and worker containers read from the same database. Admin panel changes affect both automatically, eliminating the need to duplicate environment variables between containers (except for infrastructure variables).
+
+
+**Yönetici paneli aracılığıyla yapılandırabileceğiniz:**
+
+* **Kimlik Doğrulama** - Google/Microsoft OAuth, şifre ayarları
+* **E-posta** - SMTP ayarları, şablonlar, doğrulama
+* **Storage** - S3 configuration, local storage paths
+* **Entegrasyonlar** - Gmail, Google Calendar, Microsoft hizmetleri
+* **İş Akışı ve Hız Limiti** - Yürütme sınırları, API daraltma
+* **Ve daha fazlası...**
+
+
+
+
+ Her bir değişken, yönetici panelinizde **Ayarlar → Yönetici Paneli → Konfigürasyon Değişkenleri** altında açıklamalarla belgelenir.
+ Veritabanı bağlantıları (`PG_DATABASE_URL`), sunucu URL'leri (`SERVER_URL`) ve uygulama gizli anahtarları (`APP_SECRET`) gibi bazı altyapı ayarları yalnızca `.env` dosyası aracılığıyla yapılandırılabilir.
+
+ [Tam teknik referans →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
+
+
+## 2. Environment-Only Configuration
+
+```bash
+IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
+```
+
+**Tüm konfigürasyon `.env` dosyaları aracılığıyla yönetilir:**
+
+1. Set `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` in your `.env` file
+2. Tüm konfigürasyon değişkenlerini `.env` dosyanıza ekleyin
+3. Değişikliklerin etkin olması için kapları yeniden başlatın
+4. Admin panel will show current values but cannot modify them
+
+## Multi-Workspace Mode
+
+By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
+
+### Single-Workspace Mode (Default)
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=false # default
+```
+
+* One workspace per Twenty instance
+* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
+* New signups are disabled after the first workspace is created
+* Simple URL structure: `https://your-domain.com`
+
+### Enabling Multi-Workspace Mode
+
+```bash
+IS_MULTIWORKSPACE_ENABLED=true
+DEFAULT_SUBDOMAIN=app # default value
+```
+
+Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
+
+**Key differences from single-workspace mode:**
+
+* Multiple workspaces can be created on the same instance
+* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
+* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
+* No automatic admin privileges — first user in each workspace is a regular user
+* Workspace-specific settings like subdomain and custom domain become available in workspace settings
+
+
+ **Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
+
+
+### DNS Configuration for Multi-Workspace
+
+When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
+
+```
+*.your-domain.com -> your-server-ip
+```
+
+This enables automatic subdomain routing for new workspaces without manual DNS configuration.
+
+### Restricting Workspace Creation
+
+In multi-workspace mode, you may want to limit who can create new workspaces:
+
+```bash
+IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
+```
+
+When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
+
+## Gmail ve Google Takvim Entegrasyonu
+
+### Google Cloud Projesi Oluştur
+
+1. [Google Cloud Konsolu](https://console.cloud.google.com/) adresine gidin
+2. Yeni bir proje oluşturun veya mevcut bir projeyi seçin
+3. Bu API'leri etkinleştirin:
+
+* [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
+* [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
+* [Kişiler API](https://console.cloud.google.com/apis/library/people.googleapis.com)
+
+### OAuth'u Yapılandır
+
+1. [Kimlik Bilgileri](https://console.cloud.google.com/apis/credentials) sayfasına gidin
+2. OAuth 2.0 İstemci Kimliği Oluştur
+3. Bu yönlendirme URI'lerini ekleyin:
+ * `https://{your-domain}/auth/google/redirect` (for SSO)
+ * `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
+
+### Twenty'de Yapılandır
+
+1. **Ayarlar → Yönetici Paneli → Konfigürasyon Değişkenleri** bölümüne gidin
+2. **Google Auth** bölümünü bulun
+3. Bu değişkenleri ayarlayın:
+ * `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
+ * `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
+ * `AUTH_GOOGLE_CLIENT_ID={client-id}`
+ * `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
+ * `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
+ * `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
+
+
+ **Çevre-yalnızca modu:** `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ayarlarsanız, bu değişkenleri `.env` dosyanıza ekleyin.
+
+
+**Gerekli kapsamlar** (otomatik yapılandırılmış):
+[İlgili kaynak kodunu görün](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
+
+* `https://www.googleapis.com/auth/calendar.events`
+* `https://www.googleapis.com/auth/gmail.readonly`
+* `https://www.googleapis.com/auth/profile.emails.read`
+
+### Uygulamanız test modunda ise
+
+Uygulamanız test modunda ise, projenize test kullanıcıları eklemeniz gerekecek.
+
+[OAuth onay ekranı](https://console.cloud.google.com/apis/credentials/consent) altında "Test kullanıcılar" bölümüne test kullanıcılarınızı ekleyin.
+
+## Microsoft 365 Entegrasyonu
+
+
+ Kullanıcıların Takvim ve Mesajlaşma API'sini kullanabilmesi için bir [Microsoft 365 Lisansı](https://admin.microsoft.com/Adminportal/Home) olması gerekir. Biri olmadan hesaplarını Twenty'de eşitleyemeyecekler.
+
+
+### Microsoft Azure'da bir proje oluştur
+
+[Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) platformunda bir proje oluşturmanız ve kimlik bilgilerini almanız gerekecek.
+
+### API'leri etkinleştir
+
+Microsoft Azure Konsolunda "İzinler" altında aşağıdaki API'leri etkinleştirin:
+
+* Microsoft Graph: Mail.ReadWrite
+* Microsoft Graph: Mail.Send
+* Microsoft Graph: Calendars.Read
+* Microsoft Graph: User.Read
+* Microsoft Graph: openid
+* Microsoft Graph: email
+* Microsoft Graph: profil
+* Microsoft Graph: offline_access
+
+Not: "Mail.ReadWrite" ve "Mail.Send" yalnızca iş akışı eylemleri kullanarak e-posta göndermek istiyorsanız gereklidir. Yalnızca e-posta almak istiyorsanız "Mail.Read" kullanabilirsiniz.
+
+### Yetkili yönlendirme URI'leri
+
+Projenize aşağıdaki yönlendirme URI'lerini eklemeniz gerekir:
+
+* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
+* `https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+### Twenty'de Yapılandır
+
+1. **Ayarlar → Yönetici Paneli → Konfigürasyon Değişkenleri** bölümüne gidin
+2. **Microsoft Auth** bölümünü bulun
+3. Bu değişkenleri ayarlayın:
+ * `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
+ * `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_ENABLED=true`
+ * `AUTH_MICROSOFT_CLIENT_ID={client-id}`
+ * `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
+ * `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
+ * `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
+
+
+ **Çevre-yalnızca modu:** `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ayarlarsanız, bu değişkenleri `.env` dosyanıza ekleyin.
+
+
+### Kapsamları yapılandır
+
+[İlgili kaynak kodunu görün](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
+
+* 'openid'
+* 'e-posta'
+* 'profil'
+* 'offline_access'
+* 'Mail.ReadWrite'
+* 'Mail.Send'
+* 'Calendars.Read'
+
+### Uygulamanız test modunda ise
+
+Uygulamanız test modunda ise, projenize test kullanıcıları eklemeniz gerekecek.
+
+Test kullanıcılarınızı "Kullanıcılar ve gruplar" bölümüne ekleyin.
+
+## Takvim ve Mesajlaşma için Arka Plan İşleri
+
+Gmail, Google Takvim veya Microsoft 365 entegrasyonlarını yapılandırdıktan sonra, verileri senkronize edecek arka plan işlerini başlatmanız gerekir.
+
+İşçi kabınızdaki aşağıdaki tekrarlanan işleri kaydedin:
+
+```bash
+# from your worker container
+yarn command:prod cron:messaging:messages-import
+yarn command:prod cron:messaging:message-list-fetch
+yarn command:prod cron:calendar:calendar-event-list-fetch
+yarn command:prod cron:calendar:calendar-events-import
+yarn command:prod cron:messaging:ongoing-stale
+yarn command:prod cron:calendar:ongoing-stale
+yarn command:prod cron:workflow:automated-cron-trigger
+```
+
+## E-posta Yapılandırması
+
+1. **Ayarlar → Yönetici Paneli → Konfigürasyon Değişkenleri** bölümüne gidin
+2. **E-posta** bölümünü bulun
+3. SMTP ayarlarınızı yapılandırın:
+
+
+
+ [Uygulama Parolası](https://support.google.com/accounts/answer/185833) sağlamanız gerekecek.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.gmail.com
+ * EMAIL_SMTP_PORT=465
+ * EMAIL_SMTP_USER=gmail_e-posta_adresi
+ * EMAIL_SMTP_PASSWORD='gmail_uygulama_parolası'
+
+
+
+ 2FA etkinleştirilmişse, [Uygulama Parolası](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9) sağlamanız gerekeceğini unutmayın.
+
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=smtp.office365.com
+ * EMAIL_SMTP_PORT=587
+ * EMAIL_SMTP_USER=office365_e-posta_adresi
+ * EMAIL_SMTP_PASSWORD='office365_parola'
+
+
+
+ **smtp4dev**, geliştirme ve test için sahte bir SMTP e-posta sunucusudur.
+
+ * smtp4dev imajını çalıştırın: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
+ * smtp4dev kullanıcı arayüzüne şu adresten erişin: [http://localhost:8090](http://localhost:8090)
+ * Aşağıdaki değişkenleri ayarlayın:
+ * EMAIL_DRIVER=smtp
+ * EMAIL_SMTP_HOST=localhost
+ * EMAIL_SMTP_PORT=2525
+
+
+
+
+ **Çevre-yalnızca modu:** `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ayarlarsanız, bu değişkenleri `.env` dosyanıza ekleyin.
+
diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx
new file mode 100644
index 0000000000..87d0d9d5d3
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx
@@ -0,0 +1,226 @@
+---
+title: Sorun Giderme
+---
+
+## Sorun Giderme
+
+Geliştirme ortamını kurarken, sürüm yükseltirken veya kendi sunucunuzda barındırırken herhangi bir sorunla karşılaşırsanız, işte yaygın sorunlar için bazı çözümler.
+
+### Kendi Kendine Barındırma
+
+#### First install results in `password authentication failed for user "postgres"`
+
+🚨 **ÖNEMLİ: Bu çözüm SADECE yeni kurulumlar için GEÇERLİDİR** 🚨
+Mevcut bir Twenty örneğiniz varsa ve üretim verileri varsa, bu adımları **TAKİP ETMEYİN**, çünkü bu veritabanınızı kalıcı olarak silecektir!
+
+Twenty'yi ilk kez kurarken, varsayılan veritabanı parolasını değiştirmek isteyebilirsiniz.
+İlk kurulum sırasında belirlediğiniz parola, veritabanı hacminde kalıcı olarak depolanır. Daha sonra bu parolayı yapılandırmanızda, eski hacmi kaldırmadan değiştirmeye çalışırsanız, kimlik doğrulama hataları alırsınız çünkü veritabanı hala orijinal parolayı kullanmaktadır.
+
+⚠️ WARNING: Following steps will PERMANENTLY DELETE all database data! ⚠️
+Bu yalnızca önemli veri içermeyen yeni kurulumlar için geçerlidir.
+
+`PG_DATABASE_PASSWORD` güncellemek için:
+
+```sh
+# .env içinde PG_DATABASE_PASSWORD'i güncelleyin
+docker compose down --volumes
+docker compose up -d
+```
+
+#### CR satır sonları bulundu [Windows]
+
+Bu Windows'un satır sonu karakterleri ve git yapılandırmasından kaynaklanmaktadır. Deneyin:
+
+```
+git config --global core.autocrlf false
+```
+
+Ardından depoyu silin ve tekrar klonlayın.
+
+#### Eksik meta veri şeması
+
+Twenty kurulumu sırasında, postgres veritabanınızı doğru şemalar, uzantılar ve kullanıcılarla hazırlamanız gerekir.
+Bu hazırlığı başarıyla tamamlarsanız, veritabanınızda `varsayılan` ve `meta veri` şemalarına sahip olmalısınız.
+Eğer yoksa, bilgisayarınızda birden fazla postgres örneği çalışmadığından emin olun.
+
+#### Modül 'twenty-emails' veya buna karşılık gelen tür açıklamaları bulunamıyor.
+
+`twenty-emails` paketini veritabanını `npx nx run twenty-emails:build` ile başlatmadan önce derlemeniz gerekiyor.
+
+#### Eksik twenty-x paketi
+
+Kök dizinde yarn çalıştırdığınızdan ve ardından `npx nx server:dev twenty-server` çalıştırdığınızdan emin olun. Bu hala çalışmıyorsa eksik paketi manuel olarak derlemeyi deneyin.
+
+#### Kaydettiğinde lint çalışmıyor
+
+Bu, kurulu eslint uzantısıyla kutudan çıktığı anda çalışmalıdır. Bu işe yaramazsa, vscode ayarınıza (geliştirme konteyner kapsamında) bunu eklemeyi deneyin:
+
+```
+"editor.codeActionsOnSave": {
+
+ "source.fixAll.eslint": "explicit"
+
+}
+```
+
+#### `npx nx start` veya `npx nx start twenty-front` çalıştırırken, bellek hatası verildi
+
+`packages/twenty-front/.env` içinde `VITE_DISABLE_TYPESCRIPT_CHECKER=true` ve `VITE_DISABLE_ESLINT_CHECKER=true`'i açarak arka plan kontrollerini devre dışı bırakın, böylece gerekli RAM miktarını azaltın.
+
+**If it does not work:**
+Run only the services you need, instead of `npx nx start`. Örneğin, sunucuda çalışıyorsanız yalnızca `npx nx worker twenty-server` çalıştırın.
+
+**If it does not work:**
+If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
+
+`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
+
+Geçici çözüm, aşağıdaki komutu terminalde çalıştırmak veya otomatik olarak kurulum yapmak için .bashrc profilinize eklemektir:
+
+`export NODE_OPTIONS="--max-old-space-size=8192"`
+
+\--max-old-space-size=8192 bayrağı, Node.js yığını için 8GB'lık üst sınır ayarlar; kullanım uygulama talebiyle ölçeklenir.
+Referans: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
+
+**If it does not work:**
+Investigate which processes are taking you most of your machine RAM. Twenty'de bazı VScode uzantılarının çok fazla RAM aldığını fark ettik, bu yüzden onları geçici olarak devre dışı bırakıyoruz.
+
+**If it does not work:**
+Restart your machine helps to clean up ghost processes.
+
+#### `npx nx start` çalıştırırken günlüklerde garip [0] ve [1] var
+
+Bu, `npx nx start` komutunun kaputun altında daha fazla komut çalıştırması nedeniyle bekleniyor.
+
+#### E-postalar gönderilmiyor
+
+Most of the time, it's because the `worker` is not running in the background. Çalıştırmayı deneyin
+
+```
+npx nx worker twenty-server
+```
+
+#### Microsoft 365 hesabıma bağlanamıyorum
+
+Çoğu zaman yöneticiniz hesabınıza Microsoft 365 Lisansı sağlamadığından kaynaklanır. Denetleyin [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
+
+Bir `AADSTS50020` hata kodu alırsanız, muhtemelen kişisel bir Microsoft hesabı kullanıyorsunuzdur. Bu henüz desteklenmiyor. Daha fazla bilgi [burada](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
+
+#### `yarn` çalıştırırken konsolda uyarılar beliriyor
+
+Uyarılar, `package.json`'da açıkça belirtilmeyen ek bağımlılıkları çekildiğini bildiriyor, bu yüzden kritik bir hata çıkmadığı sürece her şey beklendiği gibi çalışmalıdır.
+
+#### Kullanıcı giriş sayfasına eriştiğinde, günlüklerde çalışma alanına erişmeye çalışan yetkisiz kullanıcı hatası beliriyor
+
+Bu, kullanıcı giriş yapmadığında yetkisiz olduğundan ve kimliği doğrulanmadığından beklenen bir durumdur.
+
+#### Çalışanınızın çalışıp çalışmadığını nasıl kontrol edersiniz?
+
+* [webhook-test.com](https://webhook-test.com/) adresine gidin ve **Benzersiz Webhook URL'nizi** kopyalayın.
+
+
+
+
+
+* Twenty uygulamanızı açın, `/settings` sayfasına gidin ve ekranın sol alt köşesinde bulunan **Gelişmiş** seçeneğini etkinleştirin.
+* Yeni bir webhook oluşturun.
+* **Benzersiz Webhook URL'nizi** Twenty'deki **Endpoint URL** alanına yapıştırın. **Filtreleri** `Şirketler` ve `Oluşturuldu` olarak ayarlayın.
+
+
+
+
+
+* `/objects/companies` sayfasına gidin ve yeni bir şirket kaydı oluşturun.
+* [webhook-test.com](https://webhook-test.com/) adresine geri dönün ve yeni bir **POST isteği** alınıp alınmadığını kontrol edin.
+
+
+
+
+
+* Bir **POST isteği** alıyorsanız, çalışanınız başarıyla çalışıyor demektir. Aksi halde, çalışanınızı sorun giderme yapmanız gerekir.
+
+#### Ön uç başlatılamıyor ve TS5042 hatası döndürüyor: Seçenek 'project' komut satırında kaynak dosyalarla birleştirilemez
+
+Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
+
+```
+plugins: [
+ react({ jsxImportSource: '@emotion/react' }),
+ tsconfigPaths(),
+ svgr(),
+ dts(dtsConfig),
+ // checker(checkersConfig),
+ wyw({
+ include: [
+ '**/OverflowingTextWithTooltip.tsx',
+ '**/Chip.tsx',
+ '**/Tag.tsx',
+ '**/Avatar.tsx',
+ '**/AvatarChip.tsx',
+ ],
+ babelOptions: {
+ presets: ['@babel/preset-typescript', '@babel/preset-react'],
+ },
+ }),
+ ],
+```
+
+#### Yönetim paneline erişilemiyor
+
+Veritabanı konteynerinde `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` komutunu çalıştırarak yönetim paneline erişim sağlayın.
+
+### 1-click Docker compose
+
+#### Giriş Yapılamıyor
+
+Kurulumdan sonra giriş yapamıyorsanız:
+
+1. Aşağıdaki komutları çalıştırın:
+ ```bash
+ docker exec -it twenty-server-1 yarn
+ docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
+ ```
+2. Docker konteynerlerini yeniden başlatın:
+ ```bash
+ docker compose down
+ docker compose up -d
+ ```
+
+Note the database:reset command will completely erase your database and recreate it from scratch.
+
+#### Ters Proxy'nin Arkasında Bağlantı Sorunları
+
+Eğer Twenty'yi ters proxy'nin arkasında çalıştırıyorsanız ve bağlantı sorunları yaşıyorsanız:
+
+1. **SERVER_URL'yi doğrulayın:**
+
+ `.env` dosyanızdaki `SERVER_URL`'nin dış erişim URL'nizle eşleştiğinden, SSL etkinse `https`'i de içerdiğinden emin olun.
+
+2. **Ters Proxy Ayarlarını Kontrol Edin:**
+
+ * Ters proxy'nizin Twenty sunucusuna talepleri düzgün bir şekilde yönlendirdiğinden emin olun.
+ * `X-Forwarded-For` ve `X-Forwarded-Proto` gibi başlıkların doğru şekilde ayarlandığından emin olun.
+
+3. **Servisleri Yeniden Başlatın:**
+
+ Değişiklik yaptıktan sonra hem ters proxy'yi hem de Twenty konteynerlerini yeniden başlatın.
+
+#### Resim yüklerken hata - izin reddedildi
+
+Veri klasörünün sahipliğini ana bilgisayarda root'tan başka bir kullanıcıya ve gruba geçirmek bu sorunu çözer.
+
+## Yardım Almak
+
+Bu kılavuzda ele alınmayan sorunlarla karşılaşırsanız:
+
+* Günlükleri Kontrol Edin:
+
+ Hata mesajları için konteyner günlüklerine bakın:
+
+ ```bash
+ docker compose logs
+ ```
+
+* Topluluk Desteği:
+
+ [Twenty topluluğuna](https://github.com/twentyhq/twenty/issues) veya [destek kanallarına](https://discord.gg/cx5n4Jzs57) yardım için ulaşın.
diff --git a/packages/twenty-docs/l/tr/developers/self-host/capabilities/upgrade-guide.mdx b/packages/twenty-docs/l/tr/developers/self-host/capabilities/upgrade-guide.mdx
new file mode 100644
index 0000000000..4cba079822
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/capabilities/upgrade-guide.mdx
@@ -0,0 +1,374 @@
+---
+title: Yükseltme rehberi
+---
+
+## Genel kılavuzlar
+
+**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
+
+To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
+
+Docker Compose kullandıysanız, aşağıdaki adımları izleyin:
+
+1. Yirmi'nin çalıştığı sunucuda bir terminalde, Twenty'yi kapatın: `docker compose down`
+
+2. Sürümü yükseltmek için .env dosyanızdaki `TAG` değerini değiştirin. ( `v0.53` gibi `major.minor` sürümler tüketmenizi öneririz )
+
+3. Twenty'yi `docker compose up -d` ile tekrar çevrimiçi hale getirin.
+
+If you want to upgrade your instance by few versions, e.g. from v0.33.0 to v0.35.0, you have to upgrade your instance sequentially, in this example from v0.33.0 to v0.34.0, then from v0.34.0 to v0.35.0.
+
+**Her bir yükseltme sonrasında bozulmamış bir yedeğiniz olduğundan emin olun.**
+
+## Version-specific upgrade steps
+
+## v1.0
+
+Merhaba Twenty v1.0! 🎉
+
+## v0.60
+
+### Performans İyileştirmeleri
+
+Tüm meta veri API etkileşimleri, özellikle nesne meta verisi manipülasyonu ve çalışma alanı oluşturma işlemleri için daha iyi performans sağlanacak şekilde optimize edilmiştir.
+
+We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations.
+
+Yükseltme sonrasında herhangi bir çalıştırma sorunu yaşarsanız, önbelleğinizi temizlemeniz gerekebilir, böylece en son değişikliklerle senkronize olmuş olur. twenty-server konteynerınızda bu komutu çalıştırın:
+
+```bash
+yarn command:prod cache:flush
+```
+
+### v0.55
+
+Twenty örneğinizi v0.55 görüntüsünü kullanacak şekilde yükseltin
+
+Artık hiçbir komut çalıştırmanız gerekmeyecek, yeni görüntü gerekli tüm migrasyonları otomatik olarak yapacaktır.
+
+### `User does not have permission` error
+
+Yükseltme sonrası çoğu istekte yetkilendirme hatalarıyla karşılaşırsanız, en son izinleri yeniden hesaplamak için önbelleğinizi temizlemeniz gerekebilir.
+
+`twenty-server` konteynerinizde şu komutu çalıştırın:
+
+```bash
+yarn command:prod cache:flush
+```
+
+Bu sorun, bu Twenty sürümüne özgüdür ve gelecekteki yükseltmeler için gerekli olmamalıdır.
+
+### v0.54
+
+`0.53` sürümünden itibaren, manuel işlem gerekmiyor.
+
+#### Meta veri şeması kullanımının kaldırılması
+
+Veri alımını basitleştirmek için `metadata` şemasını `core` şemasına birleştirdik.
+`yükseltme` komutu içindeki `migrate` komut adımını birleştirdik. Sunucu/işçi konteynerlarınızın herhangi birinde `migrate` komutunu elle çalıştırmanızı önermiyoruz.
+
+### v0.53'ten itibaren
+
+`0.53` sürümünden itibaren, yükseltme `DockerFile` içinde programatik olarak yapılmaktadır, bu nedenle artık hiçbir komutu manuel olarak çalıştırmanız gerekmemektedir.
+
+Make sure to keep upgrading your instance sequentially, without skipping any major version (e.g. `0.43.3` to `0.44.0` is allowed, but `0.43.1` to `0.45.0` isn't), else could lead to workspace version desynchronization that could result in runtime error and missing functionality.
+
+Bir çalışma alanının doğru şekilde taşınıp taşımadığını kontrol etmek için veritabanındaki `core.workspace` tablosundaki sürümünü inceleyebilirsiniz.
+
+Her zaman, mevcut Twenty örneğinizin `major.minor` sürüm aralığında olması gerekir, örnek sürümünüzü yönetici panelinde (veritabanında `canAccessFullAdminPanel` özelliği true olarak ayarlandığında `settings/admin-panel` altında bulunabilir) veya `twenty-server` konteynerinizde `echo $APP_VERSION` çalıştırarak görüntüleyebilirsiniz.
+
+Senkronsuz bir çalışma alanı sürümünü düzeltmek için, ilgili yükseltme kılavuzunu izleyerek, istenen sürüme ulaşana kadar sıralı şekilde yükseltmeniz gerekecektir.
+
+#### `auditLog` kaldırılması
+
+AuditLog standart nesnesini kaldırdık, bu da bu geçişten sonra yedekleme boyutunuzun önemli ölçüde azalabileceği anlamına gelir.
+
+### v0.51'den v0.52'ye
+
+Twenty sürümünüzü v0.52 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### I have a workspace blocked in version between `0.52.0` and `0.52.6`
+
+Maalesef, `0.52.0` ve `0.52.6` tamamen dockerHub'dan kaldırıldı.
+Veritabanında çalışma alanı sürümünüzü manuel olarak `0.51.0` olarak güncelleyip, yukarıdaki yükseltme kılavuzunu takip ederek Twenty sürümü `0.52.11` ile yükseltmeniz gerekecek.
+
+### v0.50'den v0.51'e
+
+Twenty sürümünüzü v0.51 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.44.0'dan v0.50.0'a
+
+Twenty sürümünüzü v0.50.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+#### Docker-compose.yml mutasyonu
+
+Bu sürüm, `worker` hizmetine `server-local-data` hacmine erişim vermek için bir `docker-compose.yml` mutasyonu içerir.
+Yerel `docker-compose.yml` dosyanızı [v0.50.0 docker-compose.yml](https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.yml) ile güncelleyin
+
+### v0.43.0'dan v0.44.0'a
+
+Twenty sürümünüzü v0.44.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+### v0.42.0'dan v0.43.0'a
+
+Twenty sürümünüzü v0.43.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade
+```
+
+Bu sürümde ayrıca docker-compose.yml içinde postgres:16 görüntüsüne geçiş yaptık.
+
+#### (Seçenek 1) Veri tabanı geçişi
+
+Mevcut postgres-spilo görüntüsünü korumak uygundur, ancak sürümü docker-compose.yml dosyanızda 0.43.0 olarak dondurmanız gerekecektir.
+
+#### (Seçenek 2) Veri tabanı geçişi
+
+Veri tabanınızı yeni postgres:16 görüntüsüne geçirmek istiyorsanız, lütfen bu adımları izleyin:
+
+1. Eski postgres-spilo konteynerinden veritabanınızı dökün
+
+```
+docker exec -it twenty-db-1 sh
+pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
+exit
+docker cp twenty-db-1:/home/postgres/databases_backup.sql .
+```
+
+Yedekleme dosyanızın boş olmadığından emin olun.
+
+2. docker-compose.yml dosyanızı postgres:16 görüntüsü ile kullanacak şekilde yükseltin [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) dosyasında belirtildiği gibi güncelleyin.
+
+3. Veri tabanını yeni postgres:16 konteynerine geri yükleyin
+
+```
+docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
+docker exec -it twenty-db-1 sh
+psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
+exit
+```
+
+### v0.41.0'dan v0.42.0'ye
+
+Twenty sürümünüzü v0.42.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.42
+```
+
+**Çevre Değişkenleri**
+
+* Kaldırıldı: `FRONT_PORT`, `FRONT_PROTOCOL`, `FRONT_DOMAIN`, `PORT`
+* Eklendi: `FRONTEND_URL`, `NODE_PORT`, `MAX_NUMBER_OF_WORKSPACES_DELETED_PER_EXECUTION`, `MESSAGING_PROVIDER_MICROSOFT_ENABLED`, `CALENDAR_PROVIDER_MICROSOFT_ENABLED`, `IS_MICROSOFT_SYNC_ENABLED`
+
+### v0.40.0'dan v0.41.0'e
+
+Twenty sürümünüzü v0.41.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.41
+```
+
+**Çevre Değişkenleri**
+
+* Kaldırıldı: `AUTH_MICROSOFT_TENANT_ID`
+
+### v0.35.0'dan v0.40.0'a
+
+Twenty sürümünüzü v0.40.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.40
+```
+
+**Çevre Değişkenleri**
+
+* Eklendi: `IS_EMAIL_VERIFICATION_REQUIRED`, `EMAIL_VERIFICATION_TOKEN_EXPIRES_IN`, `WORKFLOW_EXEC_THROTTLE_LIMIT`, `WORKFLOW_EXEC_THROTTLE_TTL`
+
+### v0.34.0'dan v0.35.0'a
+
+Twenty sürümünüzü v0.35.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.35
+```
+
+`yarn database:migrate:prod` komutu, veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.35` tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+**Çevre Değişkenleri**
+
+* `ENABLE_DB_MIGRATIONS` ile `DISABLE_DB_MIGRATIONS`'ı değiştirdik (varsayılan değer artık `false`, muhtemelen bir şey ayarlamanız gerekmez)
+
+### v0.33.0'dan v0.34.0'a
+
+Twenty örneğinizi v0.34.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.34
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.34`, tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+**Çevre Değişkenleri**
+
+* Kaldırıldı: `FRONT_BASE_URL`
+* Eklendi: `FRONT_DOMAIN`, `FRONT_PROTOCOL`, `FRONT_PORT`
+
+Ön yüz URL'sini ele alma şeklimizi güncelledik.
+Artık `FRONT_DOMAIN`, `FRONT_PROTOCOL` ve `FRONT_PORT` değişkenlerini kullanarak ön yüz URL'sini ayarlayabilirsiniz.
+FRONT_DOMAIN ayarlanmazsa, ön yüz URL'si `SERVER_URL`'ye geri dönecektir.
+
+### v0.32.0'dan v0.33.0'a
+
+Twenty örneğinizi v0.33.0 görüntüsünü kullanacak şekilde yükseltin
+
+```
+yarn command:prod cache:flush
+yarn database:migrate:prod
+yarn command:prod upgrade-0.33
+```
+
+`yarn command:prod cache:flush` komutu Redis önbelleğini temizler.
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.33` tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+Bu sürümden itibaren, DB için twenty-postgres görüntüsü kullanımdan kalktı ve yerine twenty-postgres-spilo kullanılıyor.
+Twenty-postgres görüntüsünü kullanmaya devam etmek istiyorsanız, docker-compose.yml dosyasında `twentycrm/twenty-postgres:${TAG}`i `twentycrm/twenty-postgres` ile değiştirin.
+
+### v0.31.0'dan v0.32.0'ya
+
+Twenty örneğinizi v0.32.0 görüntüsünü kullanacak şekilde yükseltin
+
+**Şema ve veri migrasyonu**
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.32
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.32` tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+**Çevre Değişkenleri**
+
+Redis bağlantısını ele alma şeklimizi güncelledik.
+
+* Kaldırıldı: `REDIS_HOST`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`
+* Eklendi: `REDIS_URL`
+
+Çevre dosyanızı ayrı ayrı Redis bağlantı parametreleri yerine yeni `REDIS_URL` değişkenini kullanacak şekilde güncelleyin.
+
+JWT tokenlarını ele alma şeklimizi de basitleştirdik.
+
+* Kaldırıldı: `ACCESS_TOKEN_SECRET`, `LOGIN_TOKEN_SECRET`, `REFRESH_TOKEN_SECRET`, `FILE_TOKEN_SECRET`
+* Eklendi: `APP_SECRET`
+
+`.env` dosyanızı, ayrı ayrı güvenlik bilgileri yerine yeni `APP_SECRET` değişkenini kullanacak şekilde güncelleyin (önceden kullandığınız aynı güvenlik bilgilerini kullanabilir veya yeni bir rastgele dizgi üretebilirsiniz)
+
+**Bağlı Hesap**
+
+Google hesaplarınızı senkronize etmek için bir bağlı hesap kullanıyorsanız, Google Yönetici konsolunuzda [People API](https://developers.google.com/people) etkinleştirilmelidir.
+
+### v0.30.0'dan v0.31.0'e
+
+Twenty örneğinizi v0.31.0 görüntüsünü kullanacak şekilde yükseltin
+
+**Şema ve veri migrasyonu**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.31
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.31` tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+### v0.24.0'dan v0.30.0'a
+
+Twenty sürümünüzü v0.30.0 görüntüsünü kullanacak şekilde yükseltin
+
+**Breaking change**:
+To enhance performances, Twenty now requires redis cache to be configured. [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml) dosyamızı bu durumu yansıtacak şekilde güncelledik.
+Yapılandırmanızı güncellediğinizden ve ortam değişkenlerinizi uygun şekilde güncellediğinizden emin olun:
+
+```
+REDIS_HOST={your-redis-host}
+REDIS_PORT={your-redis-port}
+CACHE_STORAGE_TYPE=redis
+```
+
+**Şema ve veri migrasyonu**:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.30
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve meta veri şemaları) migrasyonları uygulayacaktır. `yarn command:prod upgrade-0.30` tüm çalışma alanlarının veri migrasyonunu sağlar.
+
+### v0.23.0'dan v0.24.0'a
+
+Twenty sürümünüzü v0.24.0 görüntüsünü kullanacak şekilde yükseltin
+
+Aşağıdaki komutları çalıştırın:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.24
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına (çıkış ve metadata şemaları) migrasyonları uygular. `yarn command:prod upgrade-0.24`, tüm çalışma alanlarının veri göçünü ele alır.
+
+### v0.22.0'dan v0.23.0'a
+
+Twenty sürümünüzü v0.23.0 görüntüsünü kullanacak şekilde yükseltin
+
+Aşağıdaki komutları çalıştırın:
+
+```
+yarn database:migrate:prod
+yarn command:prod upgrade-0.23
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına göçleri uygular.
+`yarn command:prod upgrade-0.23` veri göçünü yönetir, etkinlikleri görev/nota aktarımı da dahil.
+
+### v0.21.0'dan v0.22.0'a
+
+Twenty sürümünüzü v0.22.0 görüntüsünü kullanacak şekilde yükseltin
+
+Aşağıdaki komutları çalıştırın:
+
+```
+yarn database:migrate:prod
+yarn command:prod workspace:sync-metadata -f
+yarn command:prod upgrade-0.22
+```
+
+`yarn database:migrate:prod` komutu veritabanı yapısına göçleri uygular.
+The `yarn command:prod workspace:sync-metadata -f` command will sync the definition of standard objects to the metadata tables and apply to required migrations to existing workspaces.
+The `yarn command:prod upgrade-0.22` command will apply specific data transformations to adapt to the new object defaultRequestInstrumentationOptions.
diff --git a/packages/twenty-docs/l/tr/developers/self-host/self-host.mdx b/packages/twenty-docs/l/tr/developers/self-host/self-host.mdx
new file mode 100644
index 0000000000..b37cfee983
--- /dev/null
+++ b/packages/twenty-docs/l/tr/developers/self-host/self-host.mdx
@@ -0,0 +1,30 @@
+---
+title: Self-Host
+description: Deploy and manage Twenty on your own infrastructure.
+---
+
+
+
+
+
+## Genel Bakış
+
+Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
+
+## Why Self-Host?
+
+* **Data ownership**: Keep all CRM data on your own servers
+* **Compliance**: Meet regulatory requirements for data residency
+* **Customization**: Full access to modify and extend the platform
+
+## Getting Started
+
+
+
+ Quick setup with Docker
+
+
+
+ Deploy on AWS, GCP, or Azure
+
+
diff --git a/packages/twenty-docs/l/tr/navigation.json b/packages/twenty-docs/l/tr/navigation.json
index f1d02a4453..1b83b05304 100644
--- a/packages/twenty-docs/l/tr/navigation.json
+++ b/packages/twenty-docs/l/tr/navigation.json
@@ -3,38 +3,140 @@
"userGuide": {
"label": "User Guide",
"groups": {
- "gettingStarted": {
- "label": "Getting Started"
+ "discoverTwenty": {
+ "label": "Discover Twenty",
+ "groups": {
+ "gettingStartedCapabilities": {
+ "label": "Capabilities"
+ },
+ "gettingStartedHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"dataModel": {
- "label": "Veri modeli"
+ "label": "Veri modeli",
+ "groups": {
+ "dataModelCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataModelHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "crmEssentials": {
- "label": "CRM Temelleri"
+ "dataMigration": {
+ "label": "Data Migration",
+ "groups": {
+ "dataMigrationCapabilities": {
+ "label": "Capabilities"
+ },
+ "dataMigrationHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "views": {
- "label": "Görünümler"
+ "calendarEmails": {
+ "label": "Calendar & Emails",
+ "groups": {
+ "calendarEmailsCapabilities": {
+ "label": "Capabilities"
+ },
+ "calendarEmailsHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"workflows": {
- "label": "İş Akışları"
+ "label": "İş Akışları",
+ "groups": {
+ "workflowsCapabilities": {
+ "label": "Capabilities"
+ },
+ "workflowsHowTos": {
+ "label": "How-Tos",
+ "groups": {
+ "crmAutomations": {
+ "label": "CRM Automations"
+ },
+ "connectToOtherTools": {
+ "label": "Connect to Other Tools"
+ },
+ "advancedConfigurations": {
+ "label": "Advanced Configurations"
+ },
+ "needMoreHelp": {
+ "label": "Daha Fazla Yardım mı İhtiyacınız Var"
+ }
+ }
+ }
+ }
},
- "collaboration": {
- "label": "İşbirliği"
+ "ai": {
+ "label": "AI",
+ "groups": {
+ "aiCapabilities": {
+ "label": "Capabilities"
+ },
+ "aiHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "integrationsApi": {
- "label": "Integrations & API"
+ "viewsPipelines": {
+ "label": "Views & Pipelines",
+ "groups": {
+ "viewsPipelinesCapabilities": {
+ "label": "Capabilities"
+ },
+ "viewsPipelinesHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
- "reporting": {
- "label": "Raporlama"
+ "dashboards": {
+ "label": "Gösterge Panelleri",
+ "groups": {
+ "dashboardsCapabilities": {
+ "label": "Capabilities"
+ },
+ "dashboardsHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "permissionsAccess": {
+ "label": "Permissions & Access",
+ "groups": {
+ "permissionsAccessCapabilities": {
+ "label": "Capabilities"
+ },
+ "permissionsAccessHowTos": {
+ "label": "How-Tos"
+ }
+ }
+ },
+ "billing": {
+ "label": "Faturalandırma",
+ "groups": {
+ "billingCapabilities": {
+ "label": "Capabilities"
+ },
+ "billingHowTos": {
+ "label": "How-Tos"
+ }
+ }
},
"settings": {
- "label": "Ayarlar"
- },
- "pricing": {
- "label": "Fiyatlandırma"
- },
- "resources": {
- "label": "Kaynaklar"
+ "label": "Ayarlar",
+ "groups": {
+ "settingsCapabilities": {
+ "label": "Capabilities"
+ },
+ "settingsHowTos": {
+ "label": "How-Tos"
+ }
+ }
}
}
},
@@ -44,48 +146,58 @@
"developersGroup": {
"label": "Geliştiriciler"
},
- "devGettingStarted": {
- "label": "Getting Started",
+ "extend": {
+ "label": "Extend",
"groups": {
- "selfHosting": {
- "label": "Self-Hosting"
- },
- "apiAndWebhooks": {
- "label": "API and Webhooks"
+ "extendCapabilities": {
+ "label": "Capabilities"
}
}
},
- "contributing": {
- "label": "Katkıda Bulunma",
+ "selfHost": {
+ "label": "Self-Host",
"groups": {
- "frontendDevelopment": {
- "label": "Frontend Geliştirme",
+ "selfHostCapabilities": {
+ "label": "Capabilities"
+ }
+ }
+ },
+ "contribute": {
+ "label": "Contribute",
+ "groups": {
+ "contributeCapabilities": {
+ "label": "Capabilities",
"groups": {
- "twentyUi": {
- "label": "Twenty UI",
+ "frontendDevelopment": {
+ "label": "Frontend Geliştirme",
"groups": {
- "display": {
- "label": "Görüntüle"
- },
- "feedback": {
- "label": "Geri Bildirim"
- },
- "input": {
- "label": "Girdi"
- },
- "navigation": {
- "label": "Gezinme"
+ "twentyUi": {
+ "label": "Twenty UI",
+ "groups": {
+ "display": {
+ "label": "Görüntüle"
+ },
+ "feedback": {
+ "label": "Geri Bildirim"
+ },
+ "input": {
+ "label": "Girdi"
+ },
+ "navigation": {
+ "label": "Gezinme"
+ }
+ }
}
}
+ },
+ "backendDevelopment": {
+ "label": "Backend Geliştirme"
}
}
- },
- "backendDevelopment": {
- "label": "Backend Geliştirme"
}
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/app-tooltip.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/app-tooltip.mdx
new file mode 100644
index 0000000000..75831a633f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/app-tooltip.mdx
@@ -0,0 +1,78 @@
+---
+title: App Tooltip
+image: /images/user-guide/tips/light-bulb.png
+---
+
+
+
+
+
+Kullanıcı bir öğeyle etkileşimde bulunduğunda ek bilgi gösteren kısa bir mesaj.
+
+
+
+ ```jsx
+ import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
+
+ export const MyComponent = () => {
+ return (
+ <>
+
+ Müşteri Bilgileri
+
+
+ >
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | dize | Ek stil tanımlamaları için isteğe bağlı CSS sınıfı |
+ | anchorSelect | CSS seçici | Tooltip'in bağlantı elementi için seçici (tooltip'i tetikleyen öğe) |
+ | içerik | dize | Tooltip içinde göstermek istediğiniz içerik |
+ | delayHide | sayı | İmleç bağlantıdan ayrıldıktan sonra tooltip'in gizlenmesi için beklenen süre (saniye) |
+ | offset | sayı | Tooltip'in konumlandırılması için piksel cinsinden ofset |
+ | noArrow | boolean | `doğru` ise, tooltip'teki oku gizler |
+ | isOpen | boolean | `doğru` ise, tooltip varsayılan olarak açıktır |
+ | place | `react-tooltip`'dan `PlacesType` string | Tooltip'in yerleşimini belirtir. Değerler şunları içerir: `alt`, `sol`, `sağ`, `üst`, `üst-başlangıç`, `üst-bitiş`, `sağ-başlangıç`, `sağ-bitiş`, `alt-başlangıç`, `alt-bitiş`, `sol-başlangıç` ve `sol-bitiş` |
+ | positionStrategy | `react-tooltip`'dan `PositionStrategy` string | Tooltip'in pozisyon stratejisi. Has two values: `absolute` and `fixed` |
+
+
+
+## Tooltip ile Taşan Metin
+
+Taşan metinleri ele alır ve metin taştığında bir tooltip gösterir.
+
+
+
+ ```jsx
+ import { OverflowingTextWithTooltip } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ const crmTaskDescription =
+ 'Müşterinin son ürün sorgusuyla ilgili takip edin. Fiyatlandırma seçeneklerini tartışın, herhangi bir endişeyi giderin ve ek ürün bilgisi sağlayın. Gelecekteki referanslar için görüşmenin detaylarını CRM'ye kaydedin.';
+
+ return ;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ---- | ------------------------------------------------- |
+ | metin | dize | Taşan metin alanında göstermek istediğiniz içerik |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/checkmark.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/checkmark.mdx
new file mode 100644
index 0000000000..f469622171
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/checkmark.mdx
@@ -0,0 +1,58 @@
+---
+title: Onay işareti
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Başarılı veya tamamlanmış bir işlemi temsil eder.
+
+
+
+ ```jsx
+ import { Checkmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ `React.ComponentPropsWithoutRef<'div'>` öğesini genişletir ve normal bir `div` elemanının tüm özelliklerini kabul eder.
+
+
+
+## Animasyonlu Onay İşareti
+
+Animasyon özelliği eklenmiş bir onay işareti simgesini temsil eder.
+
+
+
+ ```jsx
+ import { AnimatedCheckmark } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ----------- | ------- | -------------------------------------------------------- | ---------- |
+ | isAnimating | boolean | Onay işaretinin animasyonlu olup olmadığını kontrol eder | yanlış |
+ | renk | dize | Onay işaretinin rengi | |
+ | süre | sayı | Animasyonun süresi, saniye cinsinden | 0.5 saniye |
+ | boyut | sayı | Onay işaretinin boyutu | 28 piksel |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/chip.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/chip.mdx
new file mode 100644
index 0000000000..ff0642c7ae
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/chip.mdx
@@ -0,0 +1,138 @@
+---
+title: Çip
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+A visual element that you can use as a clickable or non-clickable container with a label, optional left and right components, and various styling options to display labels and tags.
+
+
+
+ ```jsx
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------ | ---------------------------------- | ------------------------------------------------------------------------------------- |
+ | linkToEntity | dize | Varlığın bağlantısı |
+ | entityId | dize | Varlık için benzersiz tanımlayıcı |
+ | i̇sim | dize | Varlığın adı |
+ | resimUrl | dize | s resim"," |
+ | avatarTürü | Avatar Türü | Göstermek istediğiniz avatarın türü. İki seçenek var: `yuvarlak` ve `kare` |
+ | varyant | `EntityChipVariant` numaralandırma | Göstermek istediğiniz varlık çipinin varyantı. İki seçenek var: `düzenli` ve `şeffaf` |
+ | Sol Simge | IconComponent | Bir simgeyi temsil eden bir React bileşeni. Çipin sol tarafında görüntülenir |
+
+
+
+## Örnekler
+
+### Şeffaf Devre Dışı Çip
+
+```jsx
+import { Chip } from 'twenty-ui/components';
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+
+```
+
+
+
+### Araç İpucuyla Devre Dışı Çip
+
+```jsx
+import { Chip } from "twenty-ui/components";
+
+export const MyComponent = () => {
+ return (
+
+ );
+};
+```
+
+## Varlık Çipi
+
+Bir varlık hakkında bilgi göstermek için bir Çip benzeri öğe.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+ import { IconTwentyStar } from 'twenty-ui/display';
+ import { Chip } from 'twenty-ui/components';
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------ | ---------------------------------- | ------------------------------------------------------------------------------------- |
+ | linkToEntity | dize | Varlığın bağlantısı |
+ | entityId | dize | Varlık için benzersiz tanımlayıcı |
+ | i̇sim | dize | Varlığın adı |
+ | resimUrl | dize | s resim"," |
+ | avatarTürü | Avatar Türü | Göstermek istediğiniz avatarın türü. İki seçenek var: `yuvarlak` ve `kare` |
+ | varyant | `EntityChipVariant` numaralandırma | Göstermek istediğiniz varlık çipinin varyantı. İki seçenek var: `düzenli` ve `şeffaf` |
+ | Sol Simge | IconComponent | Bir simgeyi temsil eden bir React bileşeni. Çipin sol tarafında görüntülenir |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx
new file mode 100644
index 0000000000..9ad3eaf040
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx
@@ -0,0 +1,73 @@
+---
+title: İkonlar
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+A list of icons used throughout our app.
+
+## Tabler Icons
+
+We use Tabler icons for React throughout the app.
+
+
+
+
+
+ ```
+ yarn add @tabler/icons-react
+ ```
+
+
+
+ Her bir ikonu bir bileşen olarak içe aktarabilirsiniz. İşte bir örnek:
+
+
+
+ ```jsx
+ import { IconArrowLeft } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ---------- | ----- | ----------------------------------------- | ------------ |
+ | boyut | sayı | İkonun piksel cinsinden boyu ve genişliği | 24 |
+ | renk | metin | İkonların rengi | currentColor |
+ | kontur | sayı | İkonun piksel cinsinden kontur kalınlığı | 2 |
+
+
+
+## Özel İkonlar
+
+In addition to Tabler icons, the app also uses some custom icons.
+
+### İkon Adres Defteri
+
+Displays an address book icon.
+
+
+
+ ```jsx
+ import { IconAddressBook } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ---------- | ---- | ----------------------------------------- | ---------- |
+ | boyut | sayı | İkonun piksel cinsinden boyu ve genişliği | 24 |
+ | kontur | sayı | İkonun piksel cinsinden kontur kalınlığı | 2 |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/soon-pill.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/soon-pill.mdx
new file mode 100644
index 0000000000..4beee600ab
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/soon-pill.mdx
@@ -0,0 +1,18 @@
+---
+title: Soon Pill
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+A small badge or "pill" to indicate something is coming soon.
+
+```jsx
+import { SoonPill } from "@/ui/display/pill/components/SoonPill";
+
+export const MyComponent = () => {
+ return ;
+};
+```
diff --git a/packages/twenty-docs/l/tr/twenty-ui/display/tag.mdx b/packages/twenty-docs/l/tr/twenty-ui/display/tag.mdx
new file mode 100644
index 0000000000..0343cd20c1
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/display/tag.mdx
@@ -0,0 +1,38 @@
+---
+title: Etiket
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+İçeriği görsel olarak kategorize etmek veya etiketlemek için bileşen.
+
+
+
+ ```jsx
+ import { Tag } from "@/ui/display/tag/components/Tag";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |
+ | className | dize | Ek stil için isteğe bağlı isim |
+ | renk | dize | Etiketin rengi. Options include: `green`, `turquoise`, `sky`, `blue`, `purple`, `pink`, `red`, `orange`, `yellow`, `gray` |
+ | metin | dize | Etiketin içeriği |
+ | onClick | function | Kullanıcı etikete tıkladığında çağrılan isteğe bağlı fonksiyon |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/block-editor.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/block-editor.mdx
index d385618473..cdbbb7a2a9 100644
--- a/packages/twenty-docs/l/tr/twenty-ui/input/block-editor.mdx
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/block-editor.mdx
@@ -4,31 +4,28 @@ image: /images/user-guide/api/api.png
---
-
+
Kullanıcıların içerik bloklarını düzenleyip görüntüleyebilmeleri için [BlockNote](https://www.blocknotejs.org/) tarafından sağlanan blok tabanlı zengin metin düzenleyici kullanır.
-
+
+ ```jsx
+ import { useBlockNote } from "@blocknote/react";
+ import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
-```jsx
-import { useBlockNote } from "@blocknote/react";
-import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
+ export const MyComponent = () => {
+ const BlockNoteEditor = useBlockNote();
-export const MyComponent = () => {
- const BlockNoteEditor = useBlockNote();
+ return ;
+ };
+ ```
+
- return ;
-};
-```
-
-
-
-
-| Özellikler | Tür | Açıklama |
-| ----------- | ----------------- | ------------------------------------------- |
-| düzenleyici | `BlockNoteEditor` | Blok düzenleyici örneği veya yapılandırması |
-
-
+
+ | Özellikler | Tür | Açıklama |
+ | ----------- | ----------------- | ------------------------------------------- |
+ | düzenleyici | `BlockNoteEditor` | Blok düzenleyici örneği veya yapılandırması |
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/buttons.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/buttons.mdx
new file mode 100644
index 0000000000..f4201cfe8e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/buttons.mdx
@@ -0,0 +1,439 @@
+---
+title: Düğmeler
+image: /images/user-guide/views/filter.png
+---
+
+
+
+
+
+Uygulamada kullanılan düğme ve düğme gruplarının bir listesi.
+
+## Düğme
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | --------------------- | ---------------------------------------------------------------------------------------------------- |
+ | sınıfAdı | string | Ek stil için isteğe bağlı sınıf adı |
+ | Simge | `React.ComponentType` | Düğme içerisinde görüntülenen isteğe bağlı bir simge bileşeni |
+ | başlık | dize | Düğmenin metin içeriği |
+ | tamGenişlik | boolean | Düğmenin konteynerinin tüm genişliğine yayılması gerekip gerekmediğini tanımlar |
+ | varyant | dize | Düğmenin görsel stil varyantı. Seçenekler `primary`, `secondary` ve `tertiary` içerir |
+ | boyut | dize | Düğmenin boyutu. İki seçenek vardır: `küçük` ve `orta` |
+ | pozisyon | dize | Düğmenin, kardeşlerine göre konumu. Seçenekler şunları içerir: `tek başına`, `sol`, `sağ` ve `orta` |
+ | vurgula | dize | Düğmenin vurgu rengi. Seçenekler şunları içerir: `varsayılan`, `mavi`, ve `tehlike` |
+ | yakında | boolean | Düğmenin "yakında" olarak işaretlenip işaretlenmediğini gösterir (örneğin, yaklaşan özellikler için) |
+ | devre dışı | boolean | Düğmenin devre dışı olup olmadığını belirtir |
+ | odak | boolean | Düğmenin odaklanmış olup olmadığını belirler |
+ | tıklandığında | fonksiyon | Kullanıcı düğmeye tıkladığında tetikleyen bir geri çağırma fonksiyonu |
+
+
+
+## Düğme Grubu
+
+
+
+ ```jsx
+ import { Button } from "@/ui/input/button/components/Button";
+ import { ButtonGroup } from "@/ui/input/button/components/ButtonGroup";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+ console.log("click")}
+ />
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | --------- | ----------------------------------------------------------------------------------------------------- |
+ | varyant | dize | Grup içindeki düğmelerin görsel stil varyantı. Seçenekler `primary`, `secondary` ve `tertiary` içerir |
+ | boyut | dize | Grup içindeki düğmelerin boyutu. İki seçenek vardır: `orta` ve `küçük` |
+ | vurgula | metin | Grup içindeki düğmelerin vurgu rengi. Seçenekler `varsayılan`, `mavi` ve `tehlike` içerir |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı sınıf adı |
+ | çocuklar | ReactNode | Grup içindeki bireysel düğmeleri temsil eden bir dizi React elemanı |
+
+
+
+## Yüzer Düğme
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | --------------------- | --------------------- | ------------------------------------------------------------------------------------------------- |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı ad |
+ | Simge | `React.ComponentType` | Düğme içinde görüntülenen isteğe bağlı bir simge bileşeni |
+ | başlık | dize | Düğmenin metin içeriği |
+ | boyut | dize | Düğmenin boyutu. İki seçenek vardır: `küçük` ve `orta` |
+ | pozisyon | dize | Düğmenin, kardeşlerine göre konumu. Seçenekler şunları içerir: `tek başına`, `sol`, `orta`, `sağ` |
+ | gölgeUygula | boolean | Bir düğmeye gölge uygulayıp uygulamamayı belirler |
+ | bulanıklaştırmaUygula | boolean | Düğmeye bulanıklaştırma efekti uygulayıp uygulamamayı belirler |
+ | devre dışı | boolean | Düğmenin devre dışı olup olmadığını belirler |
+ | odak | boolean | Düğmenin odaklanmış olup olmadığını gösterir |
+
+
+
+## Yüzer Düğme Grubu
+
+
+
+ ```jsx
+ import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
+ import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ---------- | --------- | ------------------------------------------------------------------- | ---------- |
+ | boyut | dize | Düğmenin boyutu. İki seçenek vardır: `küçük` ve `orta` | küçük |
+ | çocuklar | ReactNode | Grup içindeki bireysel düğmeleri temsil eden bir dizi React elemanı | |
+
+
+
+## Yüzer Simge Düğmesi
+
+
+
+ ```jsx
+ import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ isActive={true}
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------- |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı ad |
+ | Simge | `React.ComponentType` | Düğme içinde görüntülenen isteğe bağlı bir simge bileşeni |
+ | boyut | dize | Düğmenin boyutu. İki seçenek vardır: `küçük` ve `orta` |
+ | pozisyon | dize | Düğmenin, kardeşlerine göre konumu. Seçenekler şunları içerir: `tek başına`, `sol`, `sağ`, ve `orta` |
+ | gölgeUygula | boolean | Bir düğmeye gölge uygulayıp uygulamamayı belirler |
+ | bulanıklaştırmaUygula | boolean | Düğmeye bulanıklaştırma efekti uygulayıp uygulamamayı belirler |
+ | devre dışı | boolean | Düğmenin devre dışı olup olmadığını belirler |
+ | odak | boolean | Düğmenin odaklanmış olup olmadığını gösterir |
+ | tıklandığında | fonksiyon | Kullanıcı düğmeye tıkladığında tetikleyen bir geri çağırma fonksiyonu |
+ | etkin | boolean | Düğmenin etkin bir durumda olup olmadığını belirler |
+
+
+
+## Yüzer Simge Düğme Grubu
+
+
+
+ ```jsx
+ import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
+ import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ const iconButtons = [
+ {
+ Icon: IconClipboardText,
+ onClick: () => console.log("Button 1 clicked"),
+ isActive: true,
+ },
+ {
+ Icon: IconCheckbox,
+ onClick: () => console.log("Button 2 clicked"),
+ isActive: true,
+ },
+ ];
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı ad |
+ | boyut | dize | Düğmenin boyutu. İki seçenek vardır: `küçük` ve `orta` |
+ | simgeDüğmeler | dizi | Her biri gruptaki bir simge düğmesini temsil eden nesnelerin bir dizisi. Her bir nesne, düğmede görüntülemek istediğiniz simge bileşenini, kullanıcı düğmeye tıkladığında çağırmak istediğiniz fonksiyonu ve düğmenin etkin olup olmadığını içermelidir. |
+
+
+
+## Işık Düğmesi
+
+
+
+ ```jsx
+ import { LightButton } from "@/ui/input/button/components/LightButton";
+
+ export const MyComponent = () => {
+ return console.log('click')}
+ />;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | ----------------- | --------------------------------------------------------------------- |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı ad |
+ | simge | `React.ReactNode` | Düğmede görüntülemek istediğiniz simge |
+ | başlık | dize | Düğmenin metin içeriği |
+ | vurgula | dize | Düğmenin vurgu rengi. Options include: `secondary` and `tertiary` |
+ | aktif | boolean | Düğmenin etkin bir durumda olup olmadığını belirler |
+ | devre dışı | boolean | Düğmenin devre dışı olup olmadığını belirler |
+ | odak | boolean | Düğmenin odakta olup olmadığını belirtir |
+ | tıklandığında | fonksiyon | Kullanıcı düğmeye tıkladığında tetiklenen bir geri çağırma fonksiyonu |
+
+
+
+## Işık Simge Düğmesi
+
+
+
+ ```jsx
+ import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+ console.log("click")}
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | --------------------- | --------------------------------------------------------------------- |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı ad |
+ | testId | dize | Düğme için test tanımlayıcısı |
+ | Simge | `React.ComponentType` | Düğme içinde görüntülenen isteğe bağlı bir simge bileşeni |
+ | başlık | dize | Düğmenin metin içeriği |
+ | boyut | dize | Düğmenin boyutu. İki seçeneği vardır: `küçük` ve `orta` |
+ | vurgula | dize | Düğmenin vurgu rengi. Options include: `secondary` and `tertiary` |
+ | aktif | boolean | Düğmenin etkin durumda olup olmadığını belirler |
+ | devre dışı | boolean | Düğmenin devre dışı olup olmadığını belirler |
+ | odak | boolean | Düğmenin odakta olup olmadığını belirtir |
+ | tıklandığında | fonksiyon | Kullanıcı düğmeye tıkladığında tetiklenen bir geri çağırma fonksiyonu |
+
+
+
+## Ana Düğme
+
+
+
+ ```jsx
+ import { MainButton } from "@/ui/input/button/components/MainButton";
+ import { IconCheckbox } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------- |
+ | başlık | dize | Düğmenin metin içeriği |
+ | tamGenişlik | boolean | Düğmenin konteynerinin tüm genişliğini kaplayıp kaplamayacağını tanımlar |
+ | varyant | dize | Düğmenin görsel stil varyantı. Options include `primary` and `secondary` |
+ | yakında | boolean | Düğmenin "yakında" (örneğin gelecek özellikler için) olarak işaretlenip işaretlenmediğini belirtir |
+ | Simge | `React.ComponentType` | Düğme içinde görüntülenen isteğe bağlı bir simge bileşeni |
+ | React `düğme` özellikleri | `React.ComponentProps<'button'>` | Tüm standart HTML düğme özellikleri desteklenir |
+
+
+
+## Yuvarlak Simge Düğmesi
+
+
+
+ ```jsx
+ import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
+ import { IconSearch } from "@tabler/icons-react";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------------------- | ----------------------------------------------- | -------- |
+ | Simge | `React.ComponentType` | |
+ | React `düğme` özellikleri | `React.ButtonHTMLAttributes` | |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/checkbox.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/checkbox.mdx
new file mode 100644
index 0000000000..6dd94195ae
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/checkbox.mdx
@@ -0,0 +1,44 @@
+---
+title: Kontrol Kutusu
+image: /images/user-guide/tasks/tasks_header.png
+---
+
+
+
+
+
+Bir kullanıcı birden fazla seçeneği seçmek istediğinde kullanılır.
+
+
+
+ ```jsx
+ import { Checkbox } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+ console.log("onChange işlevi çalıştırıldı")}
+ onCheckedChange={() => console.log("onCheckedChange işlevi çalıştırıldı")}
+ variant="primary"
+ size="small"
+ shape="squared"
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | --------------- | -------- | --------------------------------------------------------------------------------------------- |
+ | işaretli | boolean | Kontrol kutusunun işaretli olup olmadığını gösterir |
+ | belirsiz | boolean | Kontrol kutusunun belirsiz bir durumda olup olmadığını gösterir (ne işaretli ne de işaretsiz) |
+ | onChange | function | The callback function you want to trigger when the checkbox state changes |
+ | onCheckedChange | function | `checked` durumu değiştiğinde tetiklemek istediğiniz geri çağırma işlevi |
+ | varyant | metin | Kutunun görsel stil varyantı. Seçenekler şunları içerir: `primary`, `secondary` ve `tertiary` |
+ | boyut | string | Kontrol kutusunun boyutu. Has two options: `small` and `large` |
+ | şekil | dize | Kontrol kutusunun şekli. İki seçenek vardır: `squared` ve `rounded` |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/color-scheme.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/color-scheme.mdx
new file mode 100644
index 0000000000..615640c43e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/color-scheme.mdx
@@ -0,0 +1,63 @@
+---
+title: Renk Şeması
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+## Color Scheme Card
+
+Farklı renk şemalarını temsil eder ve açık ve koyu temalar için özel olarak tasarlanmıştır.
+
+
+
+ ```jsx
+ import { ColorSchemeCard } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ---------------- | --------------------------------------- | --------------------------------------------------------------------------------------- | ---------- |
+ | variant | string | The color scheme variant. Seçenekler arasında `Koyu`, `Açık` ve `Sistem` bulunmaktadır. | aydınlık |
+ | seçili | boolean | Eğer `true` ise, seçilen renk şemasını belirtmek için bir onay işareti görüntüler. | |
+ | additional props | `React.ComponentPropsWithoutRef<'div'>` | Standart HTML `div` öğe özellikleri | |
+
+
+
+## Color Scheme Picker
+
+Kullanıcıların farklı renk şemaları arasında seçim yapmasına olanak tanır.
+
+
+
+ ```jsx
+ import { ColorSchemePicker } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ------------- | ---------------------------------------------------------------------------- |
+ | değer | `Renk Şeması` | Şu anda seçili olan renk şeması |
+ | onChange | fonksiyon | The callback function you want to trigger when a user selects a color scheme |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/icon-picker.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/icon-picker.mdx
new file mode 100644
index 0000000000..2a64b2eaa7
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/icon-picker.mdx
@@ -0,0 +1,52 @@
+---
+title: Simge Seçici
+image: /images/user-guide/github/github-header.png
+---
+
+
+
+
+
+Kullanıcıların bir listeden simge seçmesine olanak tanıyan bir açılır menü tabanlı simge seçici.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import React, { useState } from "react";
+ import { IconPicker } from "@/ui/input/components/IconPicker";
+
+ export const MyComponent = () => {
+
+ const [selectedIcon, setSelectedIcon] = useState("");
+ const handleIconChange = ({ iconKey, Icon }) => {
+ console.log("Seçilen Simge:", iconKey);
+ setSelectedIcon(iconKey);
+ };
+
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | --------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
+ | devre dışı | boolean | `true` ayarlandığında simge seçiciyi devre dışı bırakır. |
+ | onChange | function | The callback function triggered when the user selects an icon. `iconKey` ve `Icon` özellikleri olan bir nesne alır |
+ | selectedIconKey | dize | Başlangıçta seçilen simgenin anahtarı |
+ | onClickOutside | function | Callback function triggered when the user clicks outside the dropdown |
+ | onClose | fonksiyon | Callback function triggered when the dropdown is closed |
+ | onOpen | fonksiyon | Callback function triggered when the dropdown is opened |
+ | variant | dize | Tıklanabilir simgenin görsel stil varyantı. Seçenekler şunları içerir: `primary`, `secondary` ve `tertiary` |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/image-input.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/image-input.mdx
new file mode 100644
index 0000000000..d03b97b08d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/image-input.mdx
@@ -0,0 +1,34 @@
+---
+title: Resim Girişi
+image: /images/user-guide/objects/objects.png
+---
+
+
+
+
+
+Kullanıcıların bir resim yüklemesine ve kaldırmasına olanak tanır.
+
+
+
+ ```jsx
+ import { ImageInput } from "@/ui/input/components/ImageInput";
+
+ export const MyComponent = () => {
+ return ;
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ----------- | -------- | ----------------------------------------------------------------------------------- |
+ | resim | dize | Resim kaynağı URL’si |
+ | onUpload | function | Yeni bir resim yüklendiğinde çağrılan işlev. `File` nesnesini parametre olarak alır |
+ | onRemove | function | Kullanıcı, kaldırma düğmesine tıkladığında çağrılan fonksiyon |
+ | onAbort | function | Kullanıcı, yükleme sırasında iptale tıkladığında çağrılan fonksiyon |
+ | yükleniyor | boolean | Bir resmin şu anda yüklenip yüklenmediğini gösterir |
+ | hata mesajı | string | Resim girişi altında görüntülenmesi gereken isteğe bağlı hata mesajı |
+ | devre dışı | boolean | `true` ise, tüm giriş devre dışıdır ve butonlara tıklanamaz |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/radio.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/radio.mdx
new file mode 100644
index 0000000000..9f6d9d77d7
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/radio.mdx
@@ -0,0 +1,97 @@
+---
+title: Radyo
+image: /images/user-guide/create-workspace/workspace-cover.png
+---
+
+
+
+
+
+Kullanıcıların bir dizi seçenekte yalnızca bir seçeneği seçebildiği durumlarda kullanılır.
+
+
+
+ ```jsx
+ import { Radio } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const handleRadioChange = (event) => {
+ console.log("Radio button changed:", event.target.checked);
+ };
+
+ const handleCheckedChange = (checked) => {
+ console.log("Checked state changed:", checked);
+ };
+
+
+ return (
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | --------------- | ----------------------- | ------------------------------------------------------------------------------- |
+ | stil | `React.CSS` özellikleri | Bileşen için ek satır içi stiller |
+ | sınıfAdı | dize | Ek stil tanımlamaları için isteğe bağlı CSS sınıfı |
+ | işaretli | boolean | Indicates whether the radio button is checked |
+ | değer | dize | Radyo butonuyla ilişkili etiket veya metin |
+ | onChange | fonksiyon | Seçili radyo butonu değiştirildiğinde çağrılan fonksiyon |
+ | onCheckedChange | fonksiyon | `checked` durumu değiştiğinde çağrılan fonksiyon |
+ | boyut | dize | Radyo butonunun boyutu. Seçenekler: `büyük` ve `küçük` |
+ | devre dışı | boolean | Eğer `true` ise, radyo butonu devre dışı bırakılır ve tıklanamaz |
+ | etiketPozisyonu | dize | Etiket metninin radyo butonuna göre konumu. İki seçeneği vardır: `sol` ve `sağ` |
+
+
+
+## Radyo Grubu
+
+İlişkili radyo düğmelerini birlikte gruplar.
+
+
+
+ ```jsx
+ import React, { useState } from "react";
+ import { Radio, RadioGroup } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ const [selectedValue, setSelectedValue] = useState("Option 1");
+
+ const handleChange = (event) => {
+ setSelectedValue(event.target.value);
+ };
+
+ return (
+
+
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | ----------------- | ----------------------------------------------------------------------------------- |
+ | değer | dize | Şu anda seçili radyo butonunun değeri |
+ | onChange | fonksiyon | Radyo butonu değiştirildiğinde tetiklenen geri çağırım fonksiyonu |
+ | onValueChange | fonksiyon | Grup içindeki seçili değer değiştiğinde tetiklenen geri çağırım fonksiyonu. |
+ | çocuklar | `React.ReactNode` | Radyo Grubu'na çocuklar olarak Radyo gibi React bileşenlerini iletmenize izin verir |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/select.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/select.mdx
index 15d82abcf4..cd58eb2858 100644
--- a/packages/twenty-docs/l/tr/twenty-ui/input/select.mdx
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/select.mdx
@@ -4,51 +4,48 @@ image: /images/user-guide/what-is-twenty/20.png
---
-
+
Kullanıcılara önceden tanımlanmış seçeneklerden bir değer seçme olanağı tanır.
-
+
+ ```jsx
+ import { RecoilRoot } from 'recoil';
+ import { IconTwentyStar } from 'twenty-ui/display';
-```jsx
-import { RecoilRoot } from 'recoil';
-import { IconTwentyStar } from 'twenty-ui/display';
+ import { Select } from '@/ui/input/components/Select';
-import { Select } from '@/ui/input/components/Select';
+ export const MyComponent = () => {
-export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
- return (
-
-
-
- );
-};
+ ```
+
-```
-
-
-
-
-| Özellikler | Tür | Açıklama |
-| ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| sınıfAdı | metin | Ek stil tanımlamaları için isteğe bağlı CSS sınıfı |
-| devre dışı | boolean | `true` olarak ayarlandığında, kullanıcının bileşenle etkileşimini devre dışı bırakır |
-| etiket | metin | `Seç` bileşeninin amacını açıklamak için etiket |
-| onChange | function | Seçilen değerler değiştiğinde çağrılan fonksiyon |
-| seçenekler | dizi | `Seç` bileşeni için mevcut seçenekleri temsil eder. Her bir nesnenin bir `değer` (benzersiz tanımlayıcı), `etiket` (benzersiz tanımlayıcı) ve isteğe bağlı bir `Simge` içeren nesneler dizisidir |
-| değer | metin | Şu anda seçili olan değeri temsil eder. `options` dizisindeki `değer` özelliklerinden birine eşit olmalıdır. |
-
-
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+ | className | dize | Ek stil tanımlamaları için isteğe bağlı CSS sınıfı |
+ | devre dışı | boolean | `true` olarak ayarlandığında, kullanıcının bileşenle etkileşimini devre dışı bırakır |
+ | etiket | dize | `Seç` bileşeninin amacını açıklamak için etiket |
+ | onChange | function | Seçilen değerler değiştiğinde çağrılan fonksiyon |
+ | seçenekler | array | `Seç` bileşeni için mevcut seçenekleri temsil eder. Her bir nesnenin bir `değer` (benzersiz tanımlayıcı), `etiket` (benzersiz tanımlayıcı) ve isteğe bağlı bir `Simge` içeren nesneler dizisidir |
+ | değer | string | Şu anda seçili olan değeri temsil eder. `options` dizisindeki `değer` özelliklerinden birine eşit olmalıdır. |
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/text.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/text.mdx
new file mode 100644
index 0000000000..a7ce81e98e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/text.mdx
@@ -0,0 +1,137 @@
+---
+title: Metin
+image: /images/user-guide/notes/notes_header.png
+---
+
+
+
+
+
+## Metin Girişi
+
+Kullanıcıların metin girmelerine ve düzenlemelerine izin verir.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { TextInput } from "@/ui/input/components/TextInput";
+
+ export const MyComponent = () => {
+ const handleChange = (text) => {
+ console.log("Input changed:", text);
+ };
+
+ const handleKeyDown = (event) => {
+ console.log("Key pressed:", event.key);
+ };
+
+ return (
+
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | -------------- | ------------- | ---------------------------------------------------------------------------------------------------------- |
+ | sınıfAdı | string | Ek stil için isteğe bağlı isim |
+ | etiket | string | Giriş için etiketi temsil eder |
+ | onChange | function | Giriş değeri değiştiğinde çağrılan fonksiyon |
+ | tamGenişlik | boolean | Girişin genişliği %100 kaplaması gerekip gerekmediğini belirtir |
+ | disableHotkeys | boolean | Giriş için kısayol tuşlarının etkinleştirilip etkinleştirilmediğini belirtir |
+ | hata | dize | Gösterilecek hata mesajını temsil eder. Sağ kenarda bir hata simgesi ekler |
+ | onKeyDown | fonksiyon | Giriş alanı odaklandığında bir tuşa basıldığında çağrılır. Bir `React.KeyboardEvent`'i argüman olarak alır |
+ | RightIcon | IconComponent | Girişin sağ tarafında görüntülenen isteğe bağlı ikon bileşeni |
+
+ Bileşen ayrıca diğer HTML giriş elemanının özelliklerini kabul eder.
+
+
+
+## Otomatik Boyutlandırma Metin Girişi
+
+Metni içeriğe göre otomatik olarak ayarlayan metin giriş bileşeni.
+
+
+
+ ```jsx
+ import { RecoilRoot } from "recoil";
+ import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
+
+ export const MyComponent = () => {
+ return (
+
+ console.log("onValidate function fired")}
+ minRows={1}
+ placeholder="Write a comment"
+ onFocus={() => console.log("onFocus function fired")}
+ variant="icon"
+ buttonTitle
+ value="Task: "
+ />
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ----------- | --------- | ------------------------------------------------------------------------------ |
+ | onValidate | fonksiyon | Kullanıcı girişi doğruladığında tetiklemek istediğiniz geri çağırma fonksiyonu |
+ | minRows | sayı | Metin alanı için minimum satır sayısı |
+ | yer tutucu | dize | Metin alanı boşken göstermek istediğiniz yer tutucu metin |
+ | onFocus | fonksiyon | Metin alanı odaklandığında tetiklemek istediğiniz geri çağırma fonksiyonu |
+ | varyant | dize | Girişin varyantı. Seçenekler şunları içerir: `varsayılan`, `ikon` ve `buton` |
+ | buttonTitle | dize | Buton varyantı için geçerli sadece buton başlığı |
+ | değer | dize | Metin alanı için başlangıç değeri |
+
+
+
+## Metin Alanı
+
+Çok satırlı metin girişleri oluşturmanızı sağlar.
+
+
+
+ ```jsx
+ import { TextArea } from "@/ui/input/components/TextArea";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | --------- | ---------------------------------------------------------------------- |
+ | devre dışı | boolean | Metin alanının devre dışı olup olmadığını belirtir |
+ | minRows | sayı | Metin alanı için görünen minimum satır sayısı. |
+ | onChange | fonksiyon | Metin alanının içeriği değiştiğinde tetiklenen geri çağırma fonksiyonu |
+ | yer tutucu | metin | Metin alanı boşken görüntülenen yer tutucu metin |
+ | değer | metin | Metin alanının mevcut değeri |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/input/toggle.mdx b/packages/twenty-docs/l/tr/twenty-ui/input/toggle.mdx
new file mode 100644
index 0000000000..97869c86d1
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/input/toggle.mdx
@@ -0,0 +1,36 @@
+---
+title: Toggle
+image: /images/user-guide/table-views/table.png
+---
+
+
+
+
+
+
+
+ ```jsx
+ import { Toggle } from "twenty-ui/input";
+
+ export const MyComponent = () => {
+ return (
+ console.log('On Change event')}
+ color="green"
+ toggleSize = "medium"
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | ---------- | --------- | ------------------------------------------------------------------------------------------------------- | ------------ |
+ | değer | boolean | Geçiş butonunun mevcut durumu | `yanlış` |
+ | onChange | fonksiyon | Callback function triggered when the toggle state changes | |
+ | renk | metin | Color of the toggle when it\ | mavi renktir |
+ | toggleSize | metin | Geçiş butonunun boyutu, hem yüksekliği hem de genişliği etkiler. İki seçeneği vardır: `küçük` ve `orta` | orta |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/introduction.mdx b/packages/twenty-docs/l/tr/twenty-ui/introduction.mdx
new file mode 100644
index 0000000000..5f1098adf7
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/introduction.mdx
@@ -0,0 +1,30 @@
+---
+title: Genel Bakış
+description: Twenty CRM için bileşen kütüphanesi
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+## Bileşenler
+
+
+
+ Display
+ Display components for showing information visually
+
+
+
+ Feedback
+ Feedback components for user notifications
+
+
+
+ Input
+ Input components for user interaction
+
+
+
+ Navigation
+ Navigation components for user interface
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/navigation/breadcrumb.mdx b/packages/twenty-docs/l/tr/twenty-ui/navigation/breadcrumb.mdx
new file mode 100644
index 0000000000..c8ddf6501b
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/navigation/breadcrumb.mdx
@@ -0,0 +1,41 @@
+---
+title: Breadcrumb
+image: /images/user-guide/fields/field.png
+---
+
+
+
+
+
+Renders a breadcrumb navigation bar.
+
+
+
+ ```jsx
+ import { BrowserRouter } from "react-router-dom";
+ import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
+
+ export const MyComponent = () => {
+ const breadcrumbLinks = [
+ { children: "Ana Sayfa", href: "/" },
+ { children: "Kategori", href: "/category" },
+ { children: "Alt Kategori", href: "/category/subcategory" },
+ { children: "Geçerli Sayfa" },
+ ];
+
+ return (
+
+
+
+ )
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ----------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | className | dize | Ek stil için isteğe bağlı sınıf adı |
+ | bağlantılar | dizi | Her biri bir gezinme çubuğu bağlantısını temsil eden nesneler dizisi. Her nesne, bağlantının metin içeriğini tanımlayan bir `children` özelliğine ve isteğe bağlı olarak tıklanan bağlantının gidilecek URL'sini belirten bir `href` özelliğine sahiptir. |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/navigation/links.mdx b/packages/twenty-docs/l/tr/twenty-ui/navigation/links.mdx
new file mode 100644
index 0000000000..b2df26f90f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/navigation/links.mdx
@@ -0,0 +1,154 @@
+---
+title: Bağlantılar
+image: /images/user-guide/what-is-twenty/20.png
+---
+
+
+
+
+
+## Contact Link
+
+İletişim bilgilerini görüntülemek için stilize edilmiş bir bağlantı bileşeni.
+
+
+
+ ```jsx
+ import { BrowserRouter as Router } from 'react-router-dom';
+
+ import { ContactLink } from 'twenty-ui/navigation';
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log('Contact link clicked!', event);
+ };
+
+ return (
+
+
+ example@example.com
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ----------------- | ----------------------------------------------------- |
+ | sınıfAdı | string | Ek stil için isteğe bağlı isim |
+ | href | string | Bağlantı için hedef URL veya yol |
+ | onClick | function | Bağlantıya tıklandığında tetiklenecek callback işlevi |
+ | çocuklar | `React.ReactNode` | Bağlantının içinde görüntülenecek içerik |
+
+
+
+## Ham Bağlantı
+
+Bağlantılar için stilize edilmiş bir bağlantı bileşeni.
+
+
+
+ ```jsx
+ import { RawLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
+
+ return (
+
+
+ Bizimle İletişime Geçin
+
+
+ );
+ };
+
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ----------------- | ----------------------------------------------------- |
+ | className | string | Ek stil için isteğe bağlı isim |
+ | href | string | Bağlantı için hedef URL veya yol |
+ | onClick | function | Bağlantıya tıklandığında tetiklenecek callback işlevi |
+ | çocuklar | `React.ReactNode` | Bağlantının içinde görüntülenecek içerik |
+
+
+
+## Yuvarlak Bağlantı
+
+Yuvarlak stil ile Chip bileşeni olan bir bağlantı.
+
+
+
+ ```jsx
+ import { RoundedLink } from "/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ const handleLinkClick = (event) => {
+ console.log("Contact link clicked!", event);
+ };
+
+ return (
+
+
+ Bizimle İletişime Geçin
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ----------------- | ----------------------------------------------------- |
+ | href | dize | Bağlantı için hedef URL veya yol |
+ | çocuklar | `React.ReactNode` | Bağlantının içinde görüntülenecek içerik |
+ | onClick | fonksiyon | Bağlantıya tıklandığında tetiklenecek callback işlevi |
+
+
+
+## Sosyal Bağlantı
+
+URL'ler, LinkedIn ve X (veya Twitter) gibi çeşitli sosyal bağlantı türleri için desteklenen stilize edilmiş sosyal bağlantılar.
+
+
+
+ ```jsx
+ import { SocialLink } from "twenty-ui/navigation";
+ import { BrowserRouter as Router } from "react-router-dom";
+
+ export const MyComponent = () => {
+ return (
+
+
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ----------------- | ------------------------------------------------------------------------------- |
+ | href | string | Bağlantı için hedef URL veya yol |
+ | çocuklar | `React.ReactNode` | Bağlantının içinde görüntülenecek içerik |
+ | tür | string | Sosyal bağlantı türü. Seçenekler şunları içerir: `url`, `LinkedIn` ve `Twitter` |
+ | onClick | function | Bağlantıya tıklandığında tetiklenecek callback işlevi |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/navigation/menu-item.mdx b/packages/twenty-docs/l/tr/twenty-ui/navigation/menu-item.mdx
new file mode 100644
index 0000000000..dbc377b74c
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/navigation/menu-item.mdx
@@ -0,0 +1,427 @@
+---
+title: Menü Öğesi
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+
+
+
+
+Bir menü veya navigasyon listesinde kullanılmak üzere tasarlanmış çok yönlü bir menü öğesi.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItem } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menu item clicked!", event);
+ };
+
+ const handleButtonClick = (event) => {
+ console.log("Icon button clicked!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------- | ------------- | --------------------------------------------------------------------------------------------- |
+ | Sol Simge | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | vurgula | dize | Menü öğesinin vurgu rengini belirtir. Options include: `default`, `danger`, and `placeholder` |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | simgeDüğmeler | dizi | Menü öğesiyle ilgili ek simge düğmelerini temsil eden nesnelerin dizisi |
+ | isTooltipOpen | boolean | Menü öğesiyle ilgili ipucu açıklamasının görünürlüğünü kontrol eder |
+ | testId | string | Test amaçları için data-testid özelliği |
+ | tıklandığında | fonksiyon | Menü öğesi tıklandığında tetiklenen geri çağırma işlevi |
+ | sınıfAdı | dize | Ek stil için isteğe bağlı isim |
+
+
+
+## Varyantlar
+
+Menü öğesi bileşeninin farklı varyantları şunları içerir:
+
+### Komut
+
+Klavye kısayollarını belirtmek için bir menü içinde komut tarzı bir menü öğesi.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemCommand } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleCommandClick = () => {
+ console.log("Komut tıklandı!");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ------------ | ------------- | ----------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | firstHotKey | dize | Komutla ilişkilendirilmiş ilk klavye kısayolu |
+ | secondHotKey | dize | Komutla ilişkilendirilmiş ikinci klavye kısayolu |
+ | isSelected | boolean | Menü öğesinin seçilip seçilmediğini veya vurgulanıp vurgulanmadığını belirtir |
+ | onClick | fonksiyon | Menü öğesi tıklandığında tetiklenen geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Draggable
+
+A draggable menu item component designed to be used in a menu or list where items can be dragged, and additional actions can be performed through icon buttons.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { IconAlertCircle } from "@tabler/icons-react";
+ import { MenuItemDraggable } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleMenuItemClick = (event) => {
+ console.log("Menü öğesi tıklandı!", event);
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | -------------- | ------------- | ------------------------------------------------------------------------ |
+ | LeftIcon | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | accent | dize | Menü öğesinin vurgu rengi. `default`, `placeholder` ve `danger` olabilir |
+ | iconButtons | dizi | Menü öğesiyle ilgili ek simge düğmelerini temsil eden nesnelerin dizisi |
+ | isTooltipOpen | boolean | Menü öğesiyle ilgili ipucu açıklamasının görünürlüğünü kontrol eder |
+ | onClick | fonksiyon | Bağlantıya tıklandığında tetiklenecek callback işlevi |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | isDragDisabled | boolean | Sürükleme işleminin devre dışı olup olmadığını belirtir |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Çoklu Seçim
+
+Bir onay kutusu ile birlikte çoklu seçim işlevselliği sağlanır.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemMultiSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | -------------- | ------------- | ---------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | selected | boolean | Menü öğesinin seçilip seçilmediğini (işaretlenip işaretlenmediğini) belirtir |
+ | onSelectChange | fonksiyon | Onay kutusu durumu değiştiğinde tetiklenen geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Çoklu Seçim Avatar
+
+Bir avatar, bir seçim için onay kutusu ve metin içeriği ile bir çoklu seçim menü öğesi.
+
+
+
+ ```jsx
+ import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ return (
+ }
+ text="İlk Seçenek"
+ selected={false}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | -------------- | ----------- | ---------------------------------------------------------------------------- |
+ | avatar | `ReactNode` | Menü öğesinin sol tarafında görüntülenecek avatar veya simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | selected | boolean | Menü öğesinin seçilip seçilmediğini (işaretlenip işaretlenmediğini) belirtir |
+ | onSelectChange | fonksiyon | Onay kutusu durumu değiştiğinde tetiklenen geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Gezin
+
+İsteğe bağlı bir sol simge, metin içeriği ve sağda bir ok simgesi sunan bir menü öğesi.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemNavigate } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleNavigation = () => {
+ console.log("Başka bir sayfaya yönlendirin");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ------------- | --------------------------------------------------------- |
+ | LeftIcon | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | onClick | fonksiyon | Menü öğesi tıklandığında tetiklenecek geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Seç
+
+Seçilebilir bir menü öğesi, isteğe bağlı sol içerik (simgeler ve metin) ve seçili durum için bir gösterge (kontrol simgesi) içerir.
+
+
+
+ ```jsx
+ import { IconBell } from "@tabler/icons-react";
+ import { MenuItemSelect } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Menü öğesi seçildi");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ------------- | ---------------------------------------------------------------------------- |
+ | LeftIcon | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | selected | boolean | Menü öğesinin seçilip seçilmediğini (işaretlenip işaretlenmediğini) belirtir |
+ | devre dışı | boolean | Menü öğesinin devre dışı bırakılıp bırakılmadığını belirtir |
+ | hovered | boolean | Menü öğesinin üzerine gelinip gelinmediğini belirtir |
+ | onClick | fonksiyon | Menü öğesi tıklandığında tetiklenecek geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Seç Avatar
+
+Bir avatar ve seçilmiş durum için gösterge (kontrol simgesi) ile beraber isteğe bağlı sol içerik (avatar ve metin) içeren bir seçilebilir menü öğesi.
+
+
+
+ ```jsx
+ import { MenuItemSelectAvatar } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const imageUrl =
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
+
+ const handleSelection = () => {
+ console.log("Menü öğesi seçildi");
+ };
+
+ return (
+ }
+ text="İlk Seçenek"
+ selected={true}
+ disabled={false}
+ hovered={false}
+ testId="menu-item-test"
+ onClick={handleSelection}
+ className
+ />
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ----------- | -------------------------------------------------------------- |
+ | avatar | `ReactNode` | Menü öğesinin sol tarafında gösterilecek avatar veya simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | seçili | boolean | Menü öğesinin seçili (işaretli) olup olmadığını gösterir |
+ | devre dışı | boolean | Menü öğesinin devre dışı olup olmadığını gösterir |
+ | hovered | boolean | Menü öğesinin şu anda üzerinden geçilip geçilmediğini gösterir |
+ | testId | dize | Test amaçları için data-testid özelliği |
+ | onClick | fonksiyon | Menü öğesi tıklandığında tetiklenen geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Renk Seçimi
+
+Kullanıcıların bir menüden renk seçmelerini istediğiniz senaryolar için renk örneğiyle birlikte seçilebilir bir menü öğesi.
+
+
+
+ ```jsx
+ import { MenuItemSelectColor } from "twenty-ui/display";
+
+ export const MyComponent = () => {
+ const handleSelection = () => {
+ console.log("Menü öğesi seçildi");
+ };
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+ | renk | dize | Menü öğesinde örnek olarak gösterilecek tema rengi. Seçenekler: `yeşil`, `turkuaz`, `gökyüzü`, `mavi`, `mor`, `pembe`, `kırmızı`, `turuncu`, `sarı`, ve `gri` |
+ | seçili | boolean | Menü öğesinin seçili (işaretli) olup olmadığını gösterir |
+ | devre dışı | boolean | Menü öğesinin devre dışı olup olmadığını gösterir |
+ | hovered | boolean | Menü öğesinin şu anda üzerinden geçilip geçilmediğini gösterir |
+ | varyant | dize | Renk örneğinin varyantı. Ya `varsayılan` ya da `pipeline` olabilir |
+ | onClick | fonksiyon | Menü öğesi tıklandığında tetiklenen geri çağırma işlevi |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
+
+### Toggle
+
+A menu item with an associated toggle switch to allow users to enable or disable a specific feature
+
+
+
+ ```jsx
+ import { IconBell } from '@tabler/icons-react';
+
+ import { MenuItemToggle } from 'twenty-ui/display';
+
+ export const MyComponent = () => {
+
+ return (
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | -------------- | ------------- | -------------------------------------------------------------------------- |
+ | Sol Simge | IconComponent | Metin öncesinde görüntülenen isteğe bağlı bir sol simge |
+ | metin | dize | Menü öğesinin metin içeriği |
+ | toggled | boolean | Açma/kapatma anahtarının açık veya kapalı konumda olup olmadığını gösterir |
+ | onToggleChange | fonksiyon | Açma/kapatma anahtarı durumu değiştiğinde tetiklenen geri çağırma işlevi |
+ | toggleSize | dize | Anahtar değiştirme düğmesinin boyutu. It can be either \ |
+ | className | dize | Ek stil için isteğe bağlı isim |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/navigation/step-bar.mdx b/packages/twenty-docs/l/tr/twenty-ui/navigation/step-bar.mdx
new file mode 100644
index 0000000000..a0e8b5b1af
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/navigation/step-bar.mdx
@@ -0,0 +1,34 @@
+---
+title: Adım Çubuğu
+image: /images/user-guide/api/api.png
+---
+
+
+
+
+
+Numaralandırılmış adımlar dizisi boyunca ilerlemeyi gösterir, aktif adımı vurgular. It renders a container with steps, each represented by the `Step` component.
+
+
+
+ ```jsx
+ import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
+
+ export const MyComponent = () => {
+ return (
+
+ Adım 1
+ Adım 2
+ Adım 3
+
+ );
+ };
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama |
+ | ---------- | ---- | --------------------------------------------------------------------------------------------- |
+ | activeStep | sayı | Şu anda aktif adımın indeksidir. Hangi adımın görsel olarak vurgulanması gerektiğini belirler |
+
+
diff --git a/packages/twenty-docs/l/tr/twenty-ui/progress-bar.mdx b/packages/twenty-docs/l/tr/twenty-ui/progress-bar.mdx
new file mode 100644
index 0000000000..775906fe7a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/twenty-ui/progress-bar.mdx
@@ -0,0 +1,49 @@
+---
+title: Geri Bildirim
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+İlerlemeyi veya geri sayımı belirtir ve sağdan sola doğru hareket eder.
+
+
+
+ ```jsx
+ import { ProgressBar } from "twenty-ui/feedback";\n\nexport const MyComponent = () => {\n return (\n \n );\n};
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | --------------- | ------- | --------------------------------------------------------------------------------------------- | ---------- |
+ | süre | sayı | İlerleme çubuğunun toplam animasyon süresi milisaniye cinsindendir. | 3 |
+ | gecikme | sayı | İlerleme çubuğu animasyonunun başlamasındaki gecikme milisaniye cinsindendir. | 0 |
+ | easing | dize | Easing function for the progress bar animation | easeInOut |
+ | çubukYüksekliği | sayı | Çubuğun piksel cinsinden yüksekliği | 24 |
+ | çubukRengi | metin | Çubuğun rengi | gray80 |
+ | otomatikBaşlat | boolean | Eğer `doğru` ise, bileşen montajlandığında ilerleme çubuğu animasyonu otomatik olarak başlar. | `doğru` |
+
+
+
+## Dairesel İlerleme Çubuğu
+
+Bir görevin ilerlemesini gösterir, genellikle yükleme ekranlarında veya kullanıcılara devam eden işlemleri bildirmek istediğiniz alanlarda kullanılır.
+
+
+
+ ```jsx
+ import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar";\n\nexport const MyComponent = () => {\n return ;\n};
+ ```
+
+
+
+ | Özellikler | Tür | Açıklama | Varsayılan |
+ | -------------- | ----- | ------------------------------------ | ------------ |
+ | boyut | sayı | Dairesel ilerleme çubuğunun boyutu | 50 |
+ | çubukGenişliği | sayı | İlerleme çubuğu çizgisinin genişliği | 5 |
+ | çubukRengi | metin | İlerleme çubuğunun rengi | currentColor |
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-agents.mdx b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-agents.mdx
new file mode 100644
index 0000000000..10fcf97e4c
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-agents.mdx
@@ -0,0 +1,34 @@
+---
+title: AI Agents
+description: Integrate AI capabilities directly into your automation workflows.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Genel Bakış
+
+Integrate AI capabilities directly into your automation workflows for intelligent data processing and decision-making.
+
+## Capabilities
+
+| Feature | Açıklama |
+| ------------------- | ------------------------------------------------ |
+| **AI actions** | Add AI-powered steps to any workflow |
+| **Data enrichment** | Automatically enhance records with external data |
+| **Classification** | Categorize records based on content analysis |
+| **Summarization** | Generate summaries from text fields |
+| **Custom prompts** | Define exactly how AI processes your data |
+
+## Use Cases
+
+* **Lead scoring**: Automatically score and prioritize inbound leads
+* **Data cleanup**: Standardize company names and contact information
+* **Email drafts**: Generate follow-up emails based on meeting notes
+* **Record routing**: Assign records to the right team member based on content
+
+## Related
+
+* [Workflows Overview](/l/tr/user-guide/workflows/overview) — automation basics
+* [AI Permissions](/l/tr/user-guide/ai/capabilities/permissions-access-control) — access control for AI agents
diff --git a/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-chatbot.mdx b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-chatbot.mdx
new file mode 100644
index 0000000000..2cc5003a8b
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-chatbot.mdx
@@ -0,0 +1,41 @@
+---
+title: AI Chatbot
+description: An intelligent assistant that helps you interact with your CRM data using natural language.
+---
+
+
+ This feature is in development and will be available in beta soon.
+
+
+## Genel Bakış
+
+An intelligent assistant that helps you interact with your CRM data using natural language.
+
+## Capabilities
+
+| Feature | Açıklama |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| **Natural language queries** | Ask questions in plain English instead of building filters |
+| **Full data access** | Query records, relationships, and metrics across your workspace |
+| **Page context** | Reference "this company" or "this opportunity" based on your current view |
+| **Conversational** | Follow-up questions maintain context from previous queries |
+
+## Example Interactions
+
+### Finding Records
+
+* "Show me all opportunities over $50,000"
+* "Find contacts I haven't emailed in 2 weeks"
+* "List companies in the healthcare industry"
+
+### Getting Insights
+
+* "What's my total pipeline value?"
+* "How many deals closed last month?"
+* "Which stage has the most stuck opportunities?"
+
+### Using Page Context
+
+* "Summarize my interactions with this person" (on a contact page)
+* "What opportunities are linked to this company?" (on a company page)
+* "When was this deal last updated?" (on an opportunity page)
diff --git a/packages/twenty-docs/l/tr/user-guide/ai/capabilities/permissions-access-control.mdx b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/permissions-access-control.mdx
new file mode 100644
index 0000000000..380ea23b1a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/ai/capabilities/permissions-access-control.mdx
@@ -0,0 +1,35 @@
+---
+title: İzinler ve Erişim Denetimi
+description: Çalışma alanınızda yapay zekâ ajanlarının nelere erişebileceğini ve neleri değiştirebileceğini kontrol edin.
+---
+
+## Genel Bakış
+
+Yapay zekâ ajanları mevcut izin yapınıza uyar. Bu, özellikle çalışma alanlarında otomatikleştirilmiş yapay zekâ süreçlerinin tam olarak nelere erişebileceğini veya neleri değiştirebileceğini kontrol etmek isteyen ekipler için önemlidir.
+
+## Bir Yapay Zekâ Ajanına Rol Atama
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Atamak istediğiniz role tıklayın
+3. **Atama** sekmesini açın
+4. **Yapay Zekâ Ajanları** altında, **+ Yapay zekâ ajanına ata** seçeneğine tıklayın
+5. Listeden yapay zekâ ajanını seçin
+6. Atamayı onaylayın
+
+## Yapay Zekâ Ajanlarına Neden Rol Atamalısınız?
+
+| Fayda | Açıklama |
+| --------------------- | ------------------------------------------------------------------------------- |
+| **Güvenlik** | Yapay zekâ ajanlarının erişebileceği veya değiştirebileceği verileri sınırlayın |
+| **Uyumluluk** | Yapay zekânın yalnızca ihtiyaç duyduğu verileri işlemesini sağlayın |
+| **Kontrol** | Yapay zekâ otomasyonlarının istenmeyen işlemlerini önleyin |
+| **Denetlenebilirlik** | Hangi eylemlerin hangi ajan tarafından gerçekleştirildiğini izleyin |
+
+
+ İş akışları içinde çalışan yapay zekâ ajanları için, rol ataması, iş akışının daha geniş izinleri olsa bile, ajanın amaçlanan kapsamı dışındaki verilere erişememesini veya onları değiştirememesini sağlar.
+
+
+## İlgili
+
+* [İzinler](/l/tr/user-guide/permissions-access/capabilities/permissions) — rolleri oluşturma ve yönetme hakkında ayrıntılı bilgiler
+* [Yapay Zekâ Ajanları](/l/tr/user-guide/ai/capabilities/ai-agents) — iş akışlarında yapay zekâ yetenekleri
diff --git a/packages/twenty-docs/l/tr/user-guide/ai/how-tos/ai-faq.mdx b/packages/twenty-docs/l/tr/user-guide/ai/how-tos/ai-faq.mdx
new file mode 100644
index 0000000000..774eae15c4
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/ai/how-tos/ai-faq.mdx
@@ -0,0 +1,29 @@
+---
+title: AI FAQ
+description: Frequently asked questions about AI features in Twenty.
+---
+
+
+
+ AI features are currently in development and will be released in beta soon. Stay tuned for updates!
+
+
+
+ We're building two main AI capabilities:
+
+ 1. **AI Chatbot**: A context-aware assistant that can access your Twenty data and help you with queries
+ 2. **AI Agents in Workflows**: Intelligent automation that can process data, make decisions, and execute tasks within your workflows
+
+
+
+ AI agents will operate under the permission system. You can assign specific roles to AI agents under **Settings → Roles**, giving you full control over what data they can access and what actions they can perform.
+
+
+
+ AI actions will consume workflow credits based on the complexity of the task and the AI model used. More details will be available when the features launch.
+
+
+
+ Initially, Twenty will use built-in AI models. Support for custom or external AI models may be added in future releases based on user feedback.
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/ai/overview.mdx b/packages/twenty-docs/l/tr/user-guide/ai/overview.mdx
new file mode 100644
index 0000000000..6cc6ffe4d3
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/ai/overview.mdx
@@ -0,0 +1,62 @@
+---
+title: AI
+description: AI-powered features coming soon to Twenty.
+---
+
+
+
+
+
+## Neler Geliyor?
+
+Twenty is building AI capabilities to help your team work smarter. We're focusing on two major areas:
+
+### 1. AI Chatbot
+
+A conversational assistant that understands your context and has access to all your Twenty data.
+
+**Key capabilities:**
+
+* **Full data access**: Query any record, relationship, or metric in your workspace
+* **Page context awareness**: Reference "this company" or "this opportunity" based on where you are in Twenty
+* **Natural language**: Ask questions and get answers without navigating menus
+
+**Example prompts:**
+
+* "What opportunities are closing this month?"
+* "Which deals have been in Negotiation for more than 30 days?"
+* "Summarize my interactions with this person"
+
+### 2. AI Agents in Workflows
+
+Extend your workflows with AI-powered actions and autonomous agents.
+
+**Key capabilities:**
+
+* **AI actions**: Use AI to enrich data, classify records, generate summaries, and more
+* **Autonomous agents**: Let agents execute multi-step tasks within a workflow
+* **Custom prompts**: Define exactly how AI should process your data
+
+**Kullanım alanları:**
+
+* Automatically categorize inbound leads
+* Enrich company data from public sources
+* Generate follow-up email drafts based on meeting notes
+* Score opportunities based on engagement patterns
+
+## Permissions and Access Control
+
+AI agents will be managed through the existing permissions system:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Configure which data each AI agent can access
+3. Set read/write permissions per object
+
+This ensures AI agents respect your data governance policies and only access what they need.
+
+## Güncel Kalın
+
+We'll update this section as AI features become available. In the meantime:
+
+* Follow our [GitHub](https://github.com/twentyhq/twenty) for development updates
+* Join our [Discord](https://discord.gg/twenty) to share feedback and feature requests
diff --git a/packages/twenty-docs/l/tr/user-guide/billing/capabilities/pricing-plans.mdx b/packages/twenty-docs/l/tr/user-guide/billing/capabilities/pricing-plans.mdx
new file mode 100644
index 0000000000..56a6bbbf02
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/billing/capabilities/pricing-plans.mdx
@@ -0,0 +1,79 @@
+---
+title: Fiyatlandırma Planları
+description: Twenty'nin fiyatlandırma planlarını ve bunlar arasında nasıl geçiş yapacağınızı öğrenin.
+---
+
+## Genel Bakış
+
+İster bulut barındırma ister kendi kendine barındırmayı tercih edin, Twenty her ölçekte ekibe uyacak esnek fiyatlandırma sunar.
+
+## Bulut Planları
+
+### Pro (Bulut)
+
+Büyümeye hazır ekipler için:
+
+* Tüm temel CRM özellikleri
+* E-posta ve takvim senkronizasyonu
+* İş akışları ve otomasyonlar
+* Standart destek
+
+
+ Premium özellikler (SSO ve satır düzeyi izinler) Pro planına dahil değildir.
+
+
+### Kuruluş (Bulut)
+
+Gelişmiş ihtiyaçları olan daha büyük ekipler için:
+
+* Pro'daki her şey
+* **Premium özellikler**: SSO entegrasyonu ve satır düzeyi izinler
+* Öncelikli destek
+
+## Kendi Kendine Barındırılan Planlar
+
+### Ücretsiz (Kendi Kendine Barındırılan)
+
+Twenty'yi kendi altyapınızda hiçbir ücret ödemeden barındırın:
+
+* Tüm Pro özellikleri dahildir.
+* Discord üzerinden topluluk desteği
+* Verileriniz üzerinde tam kontrol
+
+### Kuruluş (Kendi Kendine Barındırılan)
+
+Kendi kendine barındırma yaparken premium özelliklere ihtiyaç duyan ekipler için:
+
+* Tüm Pro özellikleri
+* **Premium özellikler**: SSO entegrasyonu ve satır düzeyi izinler
+* Twenty ekibinden destek
+* Dağıtmadan önce özel kodu açık kaynak olarak yayınlama zorunluluğu yoktur.
+
+## Premium Özellikler
+
+Premium özellikler yalnızca Kuruluş planlarında (Bulut veya Kendi Kendine Barındırılan) kullanılabilir:
+
+* **SSO entegrasyonu**: Kimlik sağlayıcınızla Tek Oturum Açma
+* **Satır düzeyi izinler**: Kayıt düzeyinde ayrıntılı erişim denetimi
+
+## Planlar Arasında Geçiş
+
+### Kuruluşa Yükselt
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. **Kuruluşa Geç** düğmesine tıklayın
+3. Yükseltmeyi onayla
+
+### Pro'ya Düşür
+
+Planınızı düşürmek için destek ekibiyle iletişime geçin.
+
+### Yıllığa Geç
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. **Yıllığa geç** düğmesine tıklayın
+3. Yıllık faturalamayla tasarruf edin
+
+### Aylığa Geçiş Yap
+
+Aylık faturalamaya geri dönmek için destek ekibiyle iletişime geçin.
diff --git a/packages/twenty-docs/l/tr/user-guide/billing/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/tr/user-guide/billing/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..d6cf7b6957
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/billing/capabilities/workflow-credits.mdx
@@ -0,0 +1,49 @@
+---
+title: İş Akışı Kredileri
+description: Understanding workflow credits, consumption, and how to purchase more.
+---
+
+## Genel Bakış
+
+Credits power your workflow automations in Twenty. Every workflow action consumes credits based on its complexity.
+
+## Credit Allocation
+
+Credits are based on your billing cycle, not your plan:
+
+| Billing Cycle | Credits |
+| ------------- | --------------- |
+| Aylık | 5 million/month |
+| Yıllık | 50 million/year |
+
+
+ The 5 million monthly credits are designed to empower you to run automations without worrying about costs. For most workflows using standard actions, this is more than enough. You'll only need additional credits when running advanced code nodes or AI-powered features.
+
+
+## Credit Consumption
+
+Different actions consume different amounts of credits:
+
+| Action Type | Kredi Kullanımı |
+| ------------------------------------------------------- | ----------------------- |
+| **Basic operations** (search, update, create records) | Minimal |
+| **Complex operations** (code nodes, external API calls) | More credits |
+| **AI istemleri** (yakında geliyor) | Variable based on usage |
+
+Krediler, iş akışları yürütülürken gerçek zamanlı olarak düşer.
+
+## Monitoring Usage
+
+Track your credit consumption:
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. View your current usage and remaining credits
+3. Monitor trends to plan for additional credits if needed
+
+## Ek Kredi Satın Alma
+
+Need more credits?
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. Click on the option to purchase additional credit packs
+3. Select the amount you need
diff --git a/packages/twenty-docs/l/tr/user-guide/billing/how-tos/billing-faq.mdx b/packages/twenty-docs/l/tr/user-guide/billing/how-tos/billing-faq.mdx
new file mode 100644
index 0000000000..45c415d36e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/billing/how-tos/billing-faq.mdx
@@ -0,0 +1,86 @@
+---
+title: Billing FAQ
+description: Frequently asked questions about Twenty pricing and billing.
+---
+
+## Fiyatlandırma
+
+
+
+ Evet, Twenty'yi kendi sunucunuzda ücretsiz kullanabilirsiniz. You will get access to everything included in the Pro (Cloud) plan, except the support from our core-team. Destek, Discord topluluğumuz üzerinden erişilebilir.
+
+ If you want to self-host and need the Premium features (SSO and row-level permissions), you can choose the paid Organization (Self-Hosted) license. This also includes support from the Twenty team and removes the requirement to publish custom code as open-source before distributing.
+
+
+
+ Premium features are only available on the Organization plans (Cloud or Self-Hosted):
+
+ * **SSO integration**: Single Sign-On with your identity provider
+ * **Row-level permissions**: Fine-grained access control at the record level
+
+
+
+ Ücretsiz koltuk sunmuyoruz. Fiyatlandırma kullanıcı başınadır ve her kullanıcının Twenty'e erişebilmesi için bir lisansa ihtiyacı vardır.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz. Ardından `Yıllık'a Geç` seçeneğine tıklayın.
+
+
+
+ Bu işlemi şimdilik kullanıcı arayüzü üzerinden kolayca yapmanın bir yolu yoktur, lütfen ekibimize Destek üzerinden doğrudan ulaşın.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz. Ardından `Kuruluşa Geç` seçeneğine tıklayın.
+
+
+
+ Bu işlemi şimdilik kullanıcı arayüzü üzerinden kolayca yapmanın bir yolu yoktur, lütfen ekibimize Destek üzerinden doğrudan ulaşın.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında bulabilirsiniz.
+
+
+
+ The number of credits depends on your billing cycle, not your plan:
+
+ * **Monthly subscriptions**: 5 million credits per month
+ * **Yearly subscriptions**: 50 million credits per year
+
+
+
+ Her iş akışı eylemi, karmaşıklığına göre kredi tüketir:
+
+ * **Temel iç operasyonlar** (arama, kaydetme, kayıt oluşturma gibi) çok az kredi tüketir
+ * **Daha karmaşık işlemler** olan kod düğümleri ve harici servis talepleri daha fazla kredi tüketir
+ * **AI istemleri** (yakında geliyor!) de kullanımına göre daha fazla kredi tüketecektir
+
+ Krediler, iş akışları yürütülürken gerçek zamanlı olarak düşer. Kullanımınızı **Ayarlar → Faturalama** altında izleyerek tüketim ve kalan kredileri takip edebilirsiniz.
+
+
+
+ Ekstra kredileri `Ayarlar → Faturalama` altında satın alabilirsiniz.
+
+
+
+## Faturalandırma
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz. Ardından `Fatura detaylarını görüntüle` seçeneğine tıklayın. Orada yeni bir ödeme yöntemi ekleyebileceksiniz.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz. Ardından `Fatura detaylarını görüntüle` seçeneğine tıklayın. Orada fatura bilgilerini düzenleyebilirsiniz.
+
+
+
+ Bunu `Ayarlar → Faturalama` altında yapabilirsiniz. Ardından `Fatura detaylarını görüntüle` seçeneğine tıklayın. Ekranın alt kısmında tüm faturalarınızı göreceksiniz.
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/billing/overview.mdx b/packages/twenty-docs/l/tr/user-guide/billing/overview.mdx
new file mode 100644
index 0000000000..d5fba9a2a9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/billing/overview.mdx
@@ -0,0 +1,45 @@
+---
+title: Faturalandırma
+description: Understand Twenty pricing and manage your subscription.
+image: /images/user-guide/setup/pricing.png
+---
+
+
+
+
+
+Twenty offers flexible pricing plans to fit your team's needs. Manage your subscription, track workflow credits, and access invoices all from **Settings → Billing**.
+
+## What's in this section
+
+
+
+ Learn about Twenty's pricing plans and what's included.
+
+
+
+ Frequently asked questions about pricing and billing.
+
+
+
+## At a glance
+
+| Plan | Key Features |
+| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| **Free (Self-Hosted)** | All Pro features, community support |
+| **Pro (Cloud)** | Everything apart from the Premium features (SSO and row-level permissions), standard support |
+| **Organization (Cloud)** | All from Pro + the Premium features (SSO and row-level permissions), priority support |
+| **Organization (Self-Hosted)** | All from Pro + the Premium features (SSO, row-level permissions), Twenty team support, not required to publish your custom code as open-source before distributing |
+
+## Quick answers
+
+**Where do I manage billing?**
+Go to **Settings → Billing** to view your plan, update payment methods, and access invoices.
+
+**Can I use Twenty for free?**
+Yes! Self-host Twenty and get all Pro features at no cost.
+
+**How do I upgrade?**
+Go to **Settings → Billing** and click **Switch to Organization** or **Switch to Yearly**.
+
+For more questions, see the [Billing FAQ](/l/tr/user-guide/billing/how-tos/billing-faq).
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/calendar.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/calendar.mdx
new file mode 100644
index 0000000000..18c73c5889
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/calendar.mdx
@@ -0,0 +1,43 @@
+---
+title: Takvim
+description: Understanding calendar integration features in Twenty.
+---
+
+**Note**: To connect your calendar and configure sync settings, visit [Email & Calendar Setup](/l/tr/user-guide/calendar-emails/overview).
+
+## How Calendar Integration Works
+
+Twenty automatically syncs your calendar events and links them to the relevant CRM records, giving you a complete view of your meeting history with contacts and companies.
+
+## Takvim Sekmesi
+
+Next to the Emails tab on records, you'll find a `Calendar` tab that contains the history of meetings scheduled with the record.
+
+### Available For
+
+* **Kişiler**: Belirli bir kişi ile planlanan tüm toplantıları görüntüleyin
+* **Şirketler**: Bir şirket ve çalışanları ile ilgili tüm toplantıları görün
+* **Fırsatlar**: Bu fırsatla bağlantılı şirkete ait toplantı geçmişine erişin
+
+### Toplantı Geçmişini Görüntüleme
+
+1. **Bir Kayıt Gezinin**: Herhangi bir Kişi, Şirket veya Fırsat kaydına gidin
+2. **Takvim Sekmesini Seçin**: E-postalar sekmesinin yanında `Takvim` sekmesine tıklayın
+3. **Toplantı Geçmişinde Gezin**: Planlanan tüm toplantıları ve detaylarını inceleyin
+4. **Toplantı Bağlamına Erişim**: Toplantı katılımcılarını, saatlerini ve ilgili bilgileri görün
+
+## Visibility Settings
+
+Calendar data follows the same visibility settings as emails, ensuring consistent privacy controls across both communication channels.
+
+## Ne Senkronize Edilir
+
+* **External Meetings**: All meetings with contacts outside your organization
+* **Automatic Linking**: Meetings connect to existing People and Company records based on attendee email addresses
+* **Meeting Details**: Subject, time, duration, and participants
+* **Updates**: New calendar events sync automatically
+
+## Ne Senkronize Edilmez
+
+* **Internal Meetings**: Meetings with only colleagues (same domain) remain private
+* **Private Events**: Events marked as private in your calendar
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/mailbox.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/mailbox.mdx
new file mode 100644
index 0000000000..79131a7e14
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/mailbox.mdx
@@ -0,0 +1,85 @@
+---
+title: Mailbox
+description: Understanding email integration features in Twenty.
+---
+
+**Note**: To connect your email accounts and configure sync settings, visit [Email & Calendar Setup](/l/tr/user-guide/calendar-emails/overview).
+
+## E-posta Entegrasyonu Nasıl Çalışır
+
+Twenty, bağlı posta kutularınızdaki e-postaları ilgili CRM kayıtlarına otomatik olarak bağlar, tüm iletişim geçmişini tek bir yerde tutar.
+
+### Objects Where Emails Can Be Found
+
+E-posta görüşmeleri üç ana objede görünür:
+
+* **Kişiler**: Belirli bir kişi ile karşılıklı tüm e-postaları görüntüleyin
+* **Şirketler**: Bir şirket ve çalışanlarıyla ilgili tüm e-postaları görün
+* **Fırsatlar**: Bu fırsatla bağlantılı şirkete ait e-posta dizilerine erişin. Bireylerin fırsat üzerindeki e-posta dizileri henüz gösterilmemektedir.
+
+### E-posta Dizilerini Görüntüleme
+
+1. **Bir Kayıt Gezinin**: Herhangi bir Kişi, Şirket veya Fırsat kaydına gidin
+2. **E-postalar Sekmesini Seçin**: Senkronize edilmiş e-postaları görüntülemek için `E-postalar` sekmesine tıklayın
+3. **Bir E-posta Dizisi Açın**: Herhangi bir e-postaya tıklayarak tam görüşmeyi açın ve okuyun
+4. **Geçmişte Gezin**: O kişiyle yaptığınız tüm e-posta geçmişini kaydırarak inceleyin
+
+
+
+## Görecekleriniz
+
+### E-posta Dizisi Görünümü
+
+Bir e-posta dizisini açtığınızda şunları yapabilirsiniz:
+
+* **Tüm Görüşmeleri Okuyun**: Tam e-posta alışverişini görün
+* **Katılımcıları Görüntüleyin**: E-posta dizisinde yer alan tüm kişileri görün
+* **Zaman Damgalarını Kontrol Edin**: Her e-postanın tam olarak ne zaman gönderildiğini bilin
+* **Access Context**: Understand the full communication history
+
+### E-posta Görünürlüğü
+
+Posta kutunuzun ayarlarına bağlı olarak, şunları görebilirsiniz:
+
+* **Tam İçerik**: Tam e-posta metni ve detayları
+* **Konu + Meta Veriler**: Konu satırı, gönderen, alıcı ve zaman damgası
+* **Yalnızca Meta Veriler**: E-posta içeriği olmadan temel bilgiler
+
+## E-posta Senkronizasyon Davranışı
+
+### Ne Senkronize Edilir
+
+* **Dış E-postalar**: Kuruluşunuz dışındaki kişilerle yapılan tüm e-postalar
+* **Otomatik Bağlantı**: E-postalar mevcut Kişi ve Şirket kayıtlarına bağlanır
+* **Birden Çok Adres**: Herhangi bir adresten gelen e-postalar aynı kişi kaydına bağlanır
+* **Güncellemeler**: Yeni e-postalar 5 dakika içinde görünür
+
+### Ne Senkronize Edilmez
+
+* **Dahili E-postalar**: Meslektaşlar arasında (aynı alan adı) yapılmış e-postalar gizli kalır
+* **Grup E-postaları**: Dağıtım listeleri ve grup e-postaları hariç tutulur
+* **Dışlanan Klasörler**: Eşitlememeyi seçtiğiniz klasörler (Ayarlar → Hesaplar → E-posta altında yapılandırılır)
+
+### Seçimli Klasör Senkronizasyonu (Lab Özelliği)
+
+Hangi e-posta klasörlerinin Twenty ile senkronize edileceğini kontrol edin:
+
+1. Ayarlarda `Mesaj Klasörü` etkinleştirin → Yayınlar → Lab
+2. Ayarlar → Hesaplar → E-posta altında klasörleri yapılandırın
+3. Belirli klasörleri dahil et veya hariç tut (Gelen Kutusu, Gönderilenler, Arşiv, özel klasörler)
+
+## E-posta Senkronizasyonunu Sorun Giderme
+
+### Yaygın Senkronizasyon Sorunları
+
+* **Senkronizasyon Gecikmeleri**: E-postalar 5 dakika içinde görünür, ancak ilk ithalatlar daha uzun sürebilir
+* **Eksik Mailler**: Şu durumları kontrol edin:
+ * Klasörler Mesaj Klasörü ayarlarında hariç tutulmuş
+ * Otomatik kişi oluşturma devre dışı (e-postaların zaten var olan Twenty kayıtlarına ihtiyacı var)
+ * E-posta iş arkadaşlarından (aynı alan adı) veya grup listelerinden gelmektedir
+ * Posta kutusu hala ilk senkronizasyonu tamamlıyor
+
+### E-posta Kısıtlamaları
+
+* **Sistem Klasörleri**: Bazı e-posta klasörleri senkronizasyon için mevcut olmayabilir
+* **Takma Adlar**: Sadece gerçek posta kutuları bağlanabilir (e-posta takma adları değil)
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
new file mode 100644
index 0000000000..edee83875d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx
@@ -0,0 +1,28 @@
+---
+title: Can I Book Meetings from Twenty?
+description: Information about booking meetings directly from Twenty.
+---
+
+## Current Status
+
+**No, Twenty does not currently support booking meetings directly from the platform.**
+
+Twenty's calendar integration is designed to **sync and display** your existing calendar events, not to create new ones. All meeting scheduling should be done through your native calendar application (Google Calendar, Microsoft Outlook, etc.).
+
+## What You Can Do
+
+* **View meeting history** on People, Companies, and Opportunities records
+* **See upcoming meetings** with contacts in your CRM
+* **Track meeting context** alongside email communications
+* **Auto-create contacts** from meeting participants
+
+## How to Schedule Meetings
+
+1. Use your native calendar app (Google Calendar, Outlook, etc.)
+2. Create the meeting as you normally would
+3. The meeting will automatically sync to Twenty within 5 minutes
+4. View the meeting on the relevant CRM records
+
+## Future Plans
+
+Meeting creation from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
new file mode 100644
index 0000000000..6485411709
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx
@@ -0,0 +1,44 @@
+---
+title: Can I Send Emails from Twenty?
+description: Information about sending emails directly from Twenty.
+---
+
+## Current Status
+
+Twenty's email integration is designed to **sync and display** your email history. Emails cannot be composed or sent directly from Twenty's interface.
+
+When you view an email thread on a record page and click **Reply**, you'll be redirected to the original thread in your mailbox (Gmail, Outlook, etc.). This is where you compose and send your reply.
+
+## What You Can Do Today
+
+* **View email history** on People, Companies, and Opportunities records
+* **Read full email threads** with contacts in your CRM
+* **Track communication context** alongside calendar events
+* **Auto-create contacts** from email interactions
+* **Reply via redirect** — click Reply to jump to your mailbox
+
+## Sending Emails via Workflows
+
+While you can't send emails manually from Twenty, you **can send emails automatically using Workflows**. This is useful for:
+
+* Automated follow-ups
+* Notifications to contacts
+* Triggered communications based on record changes
+
+Emails sent via workflows go through your connected mailbox account.
+
+→ Learn about the [Send Email action](/l/tr/user-guide/workflows/capabilities/workflow-actions#send-email)
+
+## Email Sequences and Newsletters
+
+For email sequences and newsletters, we recommend using workflows to connect Twenty to a dedicated email marketing tool.
+
+
+ Mass emails should not be sent directly from your mailbox to protect your domain reputation. Use a dedicated tool for bulk communications.
+
+
+→ See [How to send emails from workflows](/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows) for setup instructions
+
+## Future Plans
+
+Native email composition from within Twenty is on our roadmap. Join our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to share your use case and help prioritize this feature.
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
new file mode 100644
index 0000000000..20fe5ca850
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx
@@ -0,0 +1,35 @@
+---
+title: Can I Track Email Activity on All Objects?
+description: Understanding email activity tracking across different objects.
+---
+
+## Supported Objects
+
+Email activity is currently available on **three standard objects**:
+
+| Nesne | What You See |
+| ------------- | ---------------------------------------------------------------- |
+| **People** | All emails exchanged with that specific contact |
+| **Şirketler** | All emails with anyone from that company (based on email domain) |
+| **Fırsatlar** | Emails related to the company linked to the opportunity |
+
+## Why Only These Objects?
+
+People, Companies, and Opportunities are the core relationship objects where email context adds the most value. Email threads are automatically linked based on:
+
+* **Email address** → matched to People records
+* **Email domain** → matched to Company records
+* **Company relation** → linked to Opportunities
+
+## Özel Nesneler
+
+**Email tracking is not available on custom objects** at this time.
+
+If you need email context on a custom object, consider:
+
+* Using a relation field to link your custom object to People or Companies
+* Viewing email history on the linked People/Company record
+
+## Future Plans
+
+Extending email visibility to custom objects is being considered. Share your use case on our [GitHub discussions](https://github.com/twentyhq/twenty/discussions) to help prioritize this feature.
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
new file mode 100644
index 0000000000..f9ede7fb9e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx
@@ -0,0 +1,42 @@
+---
+title: Connect Several Mailboxes per User
+description: Connect multiple email accounts for a single user.
+---
+
+## Genel Bakış
+
+Twenty supports **unlimited email accounts per user**. This is useful if you manage multiple inboxes, such as:
+
+* Personal work email + shared team inbox
+* Multiple client-facing email addresses
+* Different email accounts for different roles
+
+## How to Add Multiple Mailboxes
+
+1. **Ayarlar → Hesaplar** sekmesine gidin.
+2. **Hesap ekle** butonuna tıklayın.
+3. Connect your additional Google or Microsoft account
+4. Configure sync settings for this mailbox
+5. Repeat for each mailbox you want to connect
+
+## Managing Multiple Accounts
+
+Each connected mailbox has its own settings:
+
+* **Email visibility**: Choose what teammates can see
+* **Contact auto-creation**: Enable/disable per mailbox
+* **Folder selection**: Choose which folders to sync (Lab feature)
+
+## How Emails Appear
+
+Emails from all your connected mailboxes are synced to Twenty and appear on:
+
+* **People records**: Based on the contact's email address
+* **Company records**: Based on the email domain
+* **Opportunities**: Based on the linked company
+
+Each email shows which mailbox it was sent from/received to, so you can track which account was used for each communication.
+
+## Important Notes
+
+Only true mailboxes can be connected. Email aliases that forward to another mailbox cannot be connected separately—they'll sync through the main mailbox.
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
new file mode 100644
index 0000000000..c5db7745a0
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx
@@ -0,0 +1,53 @@
+---
+title: I Don't See Emails on Records
+description: Troubleshooting missing emails on records.
+---
+
+## Common Reasons
+
+### 1. Initial Sync Still in Progress
+
+Email sync takes time, especially for large mailboxes.
+
+* **Calendar sync**: Completes in minutes
+* **Email sync**: Can take several hours for large mailboxes
+
+**Solution**: Wait up to a few hours for the initial import to complete.
+
+### 2. Contact Doesn't Exist in Twenty
+
+Emails only appear on existing People records. If the contact wasn't created yet:
+
+* Enable **Contact Auto-Creation** in your mailbox settings
+* Or manually create the Person record first
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and enable contact auto-creation.
+
+### 3. Internal Emails Are Excluded
+
+Emails between colleagues (same email domain) are never synced to maintain privacy.
+
+**Solution**: This is expected behavior. Only external emails are synced.
+
+### 4. Email Is from a Group or Distribution List
+
+Group emails and distribution lists are excluded from sync.
+
+**Solution**: This is expected behavior.
+
+### 5. Folder Not Selected for Sync
+
+If you're using the Message Folder feature, some folders might be excluded.
+
+**Solution**: Go to **Settings → Accounts**, select your mailbox, and check folder sync settings.
+
+### 6. Wrong Email Address on Record
+
+The Person record might have a different email address than the one used in the email.
+
+**Solution**: Add the correct email address to the Person record.
+
+## Still Not Working?
+
+1. Try disconnecting and reconnecting your mailbox
+2. Contact support if issues persist
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
new file mode 100644
index 0000000000..5f02175d32
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx
@@ -0,0 +1,52 @@
+---
+title: İçe Aktarılan E-postaları Sınırla
+description: Hangi e-postaların Twenty'ye içe aktarılacağını kontrol edin.
+---
+
+## Genel Bakış
+
+Varsayılan olarak, Twenty bağlı posta kutunuzdan tüm harici e-postaları senkronize eder. **Klasör seçimi** ve **görünürlük ayarlarını** kullanarak içe aktarılanları sınırlayabilirsiniz.
+
+## Yöntem 1: Klasör Seçimi (Önerilen)
+
+Hangi e-posta klasörlerinin Twenty ile senkronize edileceğini kontrol edin:
+
+1. **Ayarlar → Sürümler → Lab** bölümüne gidin
+2. **Mesaj Klasörü**nü etkinleştirin
+3. **Ayarlar → Hesaplar**'a geri dönün.
+4. Bağlı e-posta hesabınızı seçin
+5. Hangi klasörlerin senkronize edileceğini seçin:
+
+| Klasör | Açıklama |
+| ------------------ | ----------------------------- |
+| **Gelen Kutusu** | Ana gelen e-postalar |
+| **Gönderilenler** | Gönderdiğiniz e-postalar |
+| **Arşiv** | Arşivlenen mesajlar |
+| **Özel Klasörler** | İstediğiniz belirli klasörler |
+
+6. Senkronize edilmesini istemediğiniz klasörleri hariç tutun (Spam, Çöp Kutusu, kişisel klasörler)
+
+Bu, her şeyi senkronize etmeden CRM'inizde hangi e-postaların görüneceği üzerinde hassas kontrol sağlar.
+
+## Yöntem 2: Kişi Otomatik Oluşturma Ayarları
+
+Kişilerin e-postalardan ne zaman oluşturulacağını kontrol edin:
+
+1. **Ayarlar → Hesaplar** sekmesine gidin.
+2. Bağlı posta kutunuzu seçin
+3. Bir seçenek seçin:
+ * **Devre Dışı**: Kişi oluşturulmaz, ancak e-postalar mevcut kişilerle yine de senkronize edilir
+ * **Gönderilen ve Alınan**: Tüm harici e-postalardan kişiler oluşturun
+ * **Yalnızca Gönderilen**: Yalnızca gönderdiğiniz e-postalardan kişiler oluşturun
+
+## Her Zaman Hariç Tutulanlar
+
+Ayarlar ne olursa olsun bu e-postalar asla senkronize edilmez:
+
+* **Dahili e-postalar**: Meslektaşlar arasındaki mesajlar (aynı alan adı)
+* **Grup e-postaları**: Dağıtım listeleri ve grup mesajları
+* **Spam/Çöp Kutusu**: Sistem klasörleri genellikle hariç tutulur
+
+## Önemli Not
+
+Seçici senkronizasyon için bir CC e-posta adresi sağlamıyoruz. Aynı düzeyde kontrol sağlamak için yukarıdaki klasör seçimi özelliğini kullanın.
diff --git a/packages/twenty-docs/l/tr/user-guide/calendar-emails/overview.mdx b/packages/twenty-docs/l/tr/user-guide/calendar-emails/overview.mdx
new file mode 100644
index 0000000000..82bf40d6ee
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/calendar-emails/overview.mdx
@@ -0,0 +1,132 @@
+---
+title: Calendar & Emails
+description: Connect your email and calendar accounts to Twenty.
+image: /images/user-guide/emails/emails_header.png
+---
+
+
+
+
+
+## Bağlantı Seçenekleri
+
+### Google Hesabı (Gmail & Google Takvim)
+
+1. **Ayarlar → Hesaplar** sekmesine gidin.
+2. **Hesap ekle** butonuna tıklayın.
+3. **Google ile Devam Et** seçeneğini seçin.
+4. Twenty'nin Gmail ve Google Takvim hesabınıza erişmesine izin verin.
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. E-postalarınız ve takvim etkinlikleriniz otomatik olarak senkronize edilmeye başlayacaktır.
+
+### Microsoft Hesabı (Outlook & Microsoft Takvim)
+
+1. **Ayarlar → Hesaplar** sekmesine gidin.
+2. **Hesap ekle** butonuna tıklayın.
+3. **Microsoft ile Devam Et** seçeneğini seçin.
+4. Twenty'nin Outlook ve Microsoft Takvim hesabınıza erişmesine izin verin.
+5. Configure email sync settings (visibility, auto-creation) → click **Next**
+6. Configure calendar sync settings (visibility, auto-creation) → click **Add Account**
+7. E-postalarınız ve takvim etkinlikleriniz otomatik olarak senkronize edilmeye başlayacaktır.
+
+### SMTP/CalDAV Ayarları (Diğer Sağlayıcılar)
+
+Diğer e-posta ve takvim sağlayıcıları için:
+
+1. Özelliği etkinleştirmek için **Ayarlar → Yayınlar → Lab** bölümüne gidin.
+2. **Ayarlar → Hesaplar**'a geri dönün.
+3. E-posta için SMTP ayarlarını yapılandırın
+4. Takvim için CalDAV ayarlarını yapılandırın
+5. Bağlantıyı test edin
+
+### Birden Fazla Posta Kutusu
+
+* **Sınırsız Hesaplar**: Her kullanıcı için birden fazla e-posta hesabı bağlayın
+* **Hesap Yönetimi**: Farklı posta kutuları arasında geçiş yapın
+* **Senkronizasyon Ayarları**: Her posta kutusu için farklı ayarlar yapılandırın
+
+
+ Yalnızca gerçek posta kutuları bağlanabilir (ör. support@domain.com kendi gelen kutusu ile). Başka bir posta kutusuna yönlendirilen e-posta takma adları Twenty'ye bağlanamaz.
+
+
+## E-posta Yapılandırması
+
+### Mesaj Görünürlüğü
+
+E-postalarınız için farklı görünürlük seviyeleri seçin:
+
+* **Yalnızca Meta Veriler**: Sadece temel bilgileri paylaşın (gönderen, alıcı, tarih, saat)
+* **Konu ve Meta Veriler**: Konu satırını meta verilerle birlikte paylaşın
+* **Tüm E-posta İçeriği**: Ekler dahil tüm e-posta içeriğini paylaşın
+
+### Otomatik Kişi Oluşturma
+
+* **Devre Dışı**: Otomatik kişi oluşturma yok
+* **Gönderilen ve alınan mesajlar için**: Tüm dış e-posta etkileşimleri için kişiler oluşturun
+* **Yalnızca gönderilen mesajlar için**: Yalnızca gönderdiğiniz e-postalar için kişi oluşturun
+* **Not**: Gizliliği korumak için dahili e-postalar (aynı etki alanı) asla senkronize edilmez
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Mesaj Klasörü Seçimi (Lab Özelliği) ile hangi e-postaların senkronize edileceğini kontrol edin
+
+Hangi e-posta klasörlerinin Twenty ile senkronize edileceğini kontrol edin:
+
+1. **Ayarlar → Yayınlar → Lab** sekmesine gidin ve **Mesaj Klasörü** özellikleri etkinleştirin
+2. **Ayarlar → Hesaplar**'a dönün ve bağlı e-posta hesabınızı seçin
+3. Hangi klasörlerin senkronize edileceğini seçin:
+ * **Gelen Kutusu**: Ana gelen e-postalar
+ * **Gönderilenler**: Gönderdiğiniz çıkış e-postaları
+ * **Özel Klasörler**: Eklemek istediğiniz belli klasörler
+ * **Klasörleri Hariç Tut**: Spam, Çöp, ya da kişisel klasörleri atlayın
+
+Bu, her şeyi senkronize etmeden CRM'inizde hangi e-postaların görüneceği üzerinde hassas kontrol sağlar.
+
+**Neler Senkronize Edilir:**
+
+* **Dış E-postalar**: Seçilen klasörlerden dış iletişimlere sahip tüm e-postalar
+* **Dahili E-postalar**: Senkronize edilmez (aynı etki alanı e-postaları özel kalır)
+* **Ekler**: 2026 Yılında Gelecek
+
+**Not**: Selektif senkronizasyon için bir CC e-posta adresi sağlamıyoruz. Bunun yerine, Twenty ile hangi e-postaların senkronize edileceği konusunda aynı kontrol seviyesini elde etmek için yukarıdaki Mesaj Klasörü özelliğini kullanın.
+
+## Takvim Yapılandırması
+
+### Etkinlik Görünürlüğü
+
+Çalışma alanınızdaki diğer kullanıcılar için hangi bilgilerin görünür olacağını seçin:
+
+* **Her Şey**: Tüm etkinlik ayrıntıları ekibinizle paylaşılacaktır
+* **Meta Veriler**: Yalnızca tarih ve katılımcılar ekibinizle paylaşılacaktır
+
+### Toplantılar için Otomatik Kişi Oluşturma
+
+* **Evet**: CRM'inizde bulunmayan toplantı katılımcıları için otomatik olarak kişiler oluşturun
+* **Hayır**: Yalnızca mevcut kişilerle toplantıları bağlantılandırın
+
+When enabled, contacts are automatically linked to their Company records based on their email domain. If the company doesn't exist yet, Twenty creates it for you.
+
+### Hangi etkinliklerin senkronize edileceğini kontrol edin
+
+* **Toplantı İçe Aktarma**: Takvim etkinliklerini otomatik olarak içe aktarın
+* **Kişi Bağlantısı**: Toplantıları Kişi ve Şirket kayıtlarına bağlayın
+
+**Neler Senkronize Edilir:**
+
+* **Toplantılar**: Dış katılımcıları olan takvim etkinlikleri
+* **Kişi Bağlantısı**: Etkinlikler otomatik olarak CRM kayıtlarına bağlanır
+* **Takım Etkinlikleri**: Paylaşılan takvim görünürlüğü
+
+## Senkronizasyon Sıklığı
+
+**Her 5 dakikada bir güncellenir**: Hem e-posta hem de takvim verileri ilk içe aktarmadan 5 dakika sonra otomatik olarak senkronize edilir.
+
+
+ **Initial sync timing**: Calendar sync completes quickly (usually within minutes), while email sync takes longer for large mailboxes—up to a few hours depending on volume. Don't worry if you see contacts from calendar events appearing before your email contacts; this is normal behavior.
+
+
+## Sonraki Adımlar
+
+* [Mailbox capabilities](/l/tr/user-guide/calendar-emails/capabilities/mailbox)
+* [Troubleshoot missing emails](/l/tr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)
diff --git a/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/dashboards.mdx b/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/dashboards.mdx
new file mode 100644
index 0000000000..3ec537a69d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/dashboards.mdx
@@ -0,0 +1,74 @@
+---
+title: Gösterge Panelleri
+description: Create and organize dashboards with tabs to visualize your CRM data.
+---
+
+## Genel Bakış
+
+Dashboards in Twenty are organized in a hierarchy: **Dashboards → Tabs → Widgets**. Each dashboard can contain multiple tabs, and each tab contains widgets (charts, numbers, iFrames).
+
+## Creating a Dashboard
+
+1. Go to **Dashboards** in the navigation
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Start adding tabs and widgets
+
+## Working with Tabs
+
+Tabs help you organize your dashboard into logical sections.
+
+### Creating Tabs
+
+1. In edit mode, click **+ Add Tab**
+2. Name your tab (e.g., "Pipeline Overview", "Team Performance")
+3. Add widgets to the tab
+
+### Duplicating Tabs
+
+1. Click on the tab you want to duplicate
+2. Click the **Duplicate** button in the side panel
+
+## Dashboard Layout
+
+### Arranging Widgets
+
+* Drag and drop to position
+* Resize for emphasis
+* Group related charts together
+
+### Duplicating a Dashboard
+
+1. Exit edit mode (view mode only)
+2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+3. Select **Duplicate dashboard**
+
+### En İyi Uygulamalar
+
+* **Logical flow**: Arrange from overview to detail
+* **Visual hierarchy**: Larger charts for key metrics
+* **Consistent styling**: Use matching colors and fonts
+
+## Visibility & Access
+
+### Dashboard Visibility
+
+Dashboards are visible to everyone who has access to your Twenty workspace. There is no private dashboard option at the moment.
+
+### Favoriler
+
+You can add dashboards to your favorites for quick access. This is a personal setting—your favorites are not visible to other users.
+
+To add a dashboard to favorites, open the dashboard and click the star icon.
+
+### Timezone Behavior
+
+Dashboards currently display data based on the timezone of the user viewing them. This means the same dashboard may show different metrics for team members in different regions (e.g., APAC vs. US).
+
+
+ **Coming soon**: We will add the ability to set a specific timezone for a dashboard, so all users see consistent data regardless of their location.
+
+
+
+ **Coming soon**: Dashboard-level filters will allow you to apply filters across all widgets at once, making it faster to explore your data.
+
diff --git a/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/widgets.mdx b/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/widgets.mdx
new file mode 100644
index 0000000000..47acdc0046
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/widgets.mdx
@@ -0,0 +1,131 @@
+---
+title: Widget'lar
+description: Explore the widget types and visualization options in Twenty.
+---
+
+## Available Widgets
+
+Twenty provides various widget types to visualize your CRM data.
+
+### Bar Charts
+
+Display data as horizontal or vertical bars.
+
+**Best for:**
+
+* Comparing values across categories
+* Showing rankings
+* Tracking metrics by time period
+
+**Example uses:**
+
+* Deals by stage
+* Revenue by sales rep
+* Contacts added per month
+
+
+ **Display limits**: Bar charts can show a maximum of 100 bars (horizontal) or 50 bars (vertical). If you see the warning "Undisplayed data: max X bars per chart", add filters to narrow down your data or change the grouping (e.g., group by week instead of days).
+
+
+### Pie Charts
+
+Show proportions of a whole.
+
+**Best for:**
+
+* Showing composition or distribution
+* Comparing parts to whole
+* Highlighting major segments
+
+**Example uses:**
+
+* Deal distribution by source
+* Contact breakdown by industry
+* Pipeline composition by owner
+
+### Line Charts
+
+Display trends over time.
+
+**Best for:**
+
+* Tracking changes over time
+* Identifying trends
+* Comparing multiple metrics
+
+**Example uses:**
+
+* Monthly deal count trend
+* Revenue growth over quarters
+* Activity levels over time
+
+### Number Metrics
+
+Display single key values prominently.
+
+**Best for:**
+
+* Highlighting KPIs
+* Showing totals or averages
+* Quick status checks
+
+**Example uses:**
+
+* Total pipeline value
+* Number of open opportunities
+* Conversion rate
+
+**Advanced options:**
+
+* **Ratio**: For Select fields, calculate ratios between values. Go to **Data on display** → select your field → enable the **Ratio** option.
+* **Prefix & Suffix**: Add custom text before or after the number (e.g., "$" prefix or "%" suffix) for better readability.
+
+### iFrames
+
+Embed external tools and content directly in your dashboard.
+
+**Best for:**
+
+* Displaying external reports or dashboards
+* Integrating third-party sales tools
+* Showing live content from other systems
+
+**Example uses:**
+
+* Metrics from your Support tool
+* Metrics from your dialer
+* Live content from your Sales sequence tool
+
+
+ **Coming soon**: Gauge charts and tables are not yet available but are on our roadmap.
+
+
+## Configuring Widgets
+
+### Data Source
+
+1. Select the object to visualize (Opportunities, People, etc.)
+2. Choose the metric to display (count, sum, average)
+3. Apply filters to focus on specific data
+
+### Grouping
+
+Group data by:
+
+* Fields (stage, owner, industry)
+* Time periods (day, week, month, quarter)
+* Custom segments
+
+### Şekil Verme
+
+Customize your charts with:
+
+* Colors and themes
+* Labels and legends
+* Size and positioning
+
+### Duplicating Widgets
+
+1. Click on the widget
+2. Open **Options**
+3. Click **Duplicate widget**
diff --git a/packages/twenty-docs/l/tr/user-guide/dashboards/how-tos/dashboards-faq.mdx b/packages/twenty-docs/l/tr/user-guide/dashboards/how-tos/dashboards-faq.mdx
new file mode 100644
index 0000000000..31f34a8777
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/dashboards/how-tos/dashboards-faq.mdx
@@ -0,0 +1,59 @@
+---
+title: Dashboards FAQ
+description: Frequently asked questions about dashboards in Twenty.
+---
+
+
+
+ No, dashboards are currently visible to everyone with access to your Twenty workspace. Private dashboards are not yet available.
+
+
+
+ Dashboards currently display data based on the viewer's timezone. If you're in different regions (e.g., APAC vs. US), you may see slightly different numbers for the same dashboard. We're working on adding a timezone setting per dashboard to ensure consistent data across teams.
+
+
+
+ Exporting dashboards is not available at the moment. This feature is on our roadmap.
+
+
+
+ No, sharing dashboards with users outside your Twenty workspace (non-Twenty users) is not currently supported.
+
+
+
+ Open the dashboard you want to favorite, then click the star icon. Favorites are personal—they won't affect other users.
+
+
+
+ * **Tabs** organize your dashboard into sections (like pages within the dashboard)
+ * **Widgets** are the individual visualizations (charts, numbers, iFrames) within each tab
+
+ Structure: Dashboard → Tabs → Widgets
+
+
+
+ Bar charts have display limits: 100 bars for horizontal charts, 50 for vertical. If your data exceeds this, add filters to narrow down the results or change the grouping (e.g., group by week instead of day).
+
+
+
+ Dashboard-level filters are not available yet, but this feature is on our roadmap. Currently, you need to apply filters to each widget individually.
+
+
+
+ Henüz değil. Gauge charts and tables are on our roadmap and will be added in a future release.
+
+
+
+ 1. Make sure you're in view mode (not editing)
+ 2. Open the command bar with **Cmd + K** (or **Ctrl + K** on Windows)
+ 3. Select **Duplicate dashboard**
+
+
+
+ Widgets update automatically as your CRM data changes:
+
+ * Real-time updates for most metrics
+ * Use the refresh button for a manual update if needed
+ * Historical data is preserved for trend analysis
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/dashboards/overview.mdx b/packages/twenty-docs/l/tr/user-guide/dashboards/overview.mdx
new file mode 100644
index 0000000000..addc76157b
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/dashboards/overview.mdx
@@ -0,0 +1,79 @@
+---
+title: Gösterge Panelleri
+description: Learn the basics of reporting and dashboards in Twenty.
+image: /images/user-guide/reporting/pie-chart.png
+---
+
+
+
+
+
+## Understanding Dashboards
+
+Dashboards in Twenty provide a visual way to track your key performance metrics and gain insights from your CRM data.
+
+
+
+## Key Concepts
+
+### Gösterge Panelleri
+
+A dashboard is a collection of tabs that display your CRM data at a glance. You can create multiple dashboards for different purposes:
+
+* Sales performance
+* Team activity
+* Pipeline health
+* Custom metrics
+
+### Sekmeler
+
+Tabs allow you to organize your dashboard into sections. Each tab contains one or more widgets.
+
+### Widget'lar
+
+Widgets are individual visualizations that display specific data. Types include:
+
+* Bar charts
+* Pie charts
+* Line charts
+* Number metrics
+* iFrames
+
+
+ **Current limitations**:
+
+ * Exporting dashboards and sharing with external users (non-Twenty users) are not available at the moment.
+ * Gauge charts and tables are not yet available.
+
+
+## Getting Started
+
+### Creating Your First Dashboard
+
+1. Navigate to the **Dashboards** section
+2. Click **+ New Dashboard**
+3. Give your dashboard a name
+4. Add tabs to organize your content
+5. Add widgets to display your data
+6. Kaydet
+
+### Adding Widgets
+
+1. Open a tab on your dashboard
+2. Click **+ Add Widget**
+3. Select the widget type
+4. Choose the data source (object)
+5. Configure the widget settings
+6. Save and view your widget
+
+## En İyi Uygulamalar
+
+* **Start simple**: Begin with a few key metrics and add more over time
+* **Focus on actionable data**: Display metrics that drive decisions
+* **Regular review**: Check your dashboards regularly to spot trends
+* **Share with team**: Make dashboards visible to relevant team members
+
+## Sonraki Adımlar
+
+* [Widgets and visualizations](/l/tr/user-guide/dashboards/capabilities/widgets)
+* [Dashboards FAQ](/l/tr/user-guide/dashboards/how-tos/dashboards-faq)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/error-handling.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/error-handling.mdx
new file mode 100644
index 0000000000..77a53b35ec
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/error-handling.mdx
@@ -0,0 +1,76 @@
+---
+title: Error Handling & Validation
+description: Review and fix import errors directly in the UI before confirming.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Pre-Import Validation
+
+After uploading your file and mapping fields, Twenty validates your data **before** importing. This allows you to catch and fix errors without affecting your existing data.
+
+## Nasıl Çalışır
+
+1. **Upload** your CSV file
+2. **Map** your columns to Twenty fields
+3. **Review** the potential errors highlighted in yellow
+4. **Fix errors** directly in the UI
+5. **Confirm** the import
+
+
+
+## Error Display
+
+Rows with issues are highlighted in **yellow**. You can:
+
+* **Edit the cell directly** to fix the error
+* **Remove the row** to skip it entirely
+
+This inline editing saves time—no need to go back to your spreadsheet, fix errors, and re-upload.
+
+## Common Error Types
+
+### Duplicate Values
+
+**Cause**: A unique field (email, domain) already exists in Twenty or appears twice in your file.
+
+**Fix**:
+
+* Edit the duplicate value in the import UI
+* Remove one of the duplicate rows
+
+See [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints) for more details on how uniqueness is enforced.
+
+### Invalid Format
+
+**Cause**: Data doesn't match the expected format (e.g., invalid email, wrong date format).
+
+**Fix**: Edit the cell to use the correct format.
+
+See [Field Mapping](/l/tr/user-guide/data-migration/capabilities/field-mapping) for the expected format of each field type.
+
+### Missing Required Fields
+
+**Cause**: A required field is empty.
+
+**Fix**: Enter a value in the required field or remove the row.
+
+### Relation Not Found
+
+**Cause**: The referenced record doesn't exist (e.g., a Company domain that wasn't imported).
+
+**Fix**:
+
+* Import the parent records first
+* Or correct the reference value
+
+See [Import Relations](/l/tr/user-guide/data-migration/capabilities/import-relations) for the correct import order and how to link records.
+
+## Tips for Fewer Errors
+
+1. **Download the template** to see expected format prior to importing your file
+2. **Clean your data** in the spreadsheet first
+3. **Import files in correct order** to import relations (Companies → People → Opportunities)
+4. **Test with small batches** before full import
+5. **Check for duplicates** before uploading
+6. **Limit the size of your file to 10,000 records** per file
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/field-mapping.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/field-mapping.mdx
new file mode 100644
index 0000000000..b5a8eb5df5
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/field-mapping.mdx
@@ -0,0 +1,198 @@
+---
+title: Field Mapping
+description: How field mapping works during data import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## How Field Mapping Works
+
+When you upload a file, Twenty analyzes your columns and attempts to match them to existing fields.
+
+### Automatic Mapping
+
+Twenty tries to match columns based on:
+
+* Column header names (exact or similar matches)
+* Data type detection (dates, numbers, emails)
+* Common field patterns
+
+**Quick tip:** Export a few rows from the object you want to import. The exported file will have the exact column names Twenty expects, making automatic mapping seamless during import.
+
+### Manual Mapping Options
+
+For each column, you can:
+
+* **Map to a field**: Select the matching Twenty field from a dropdown
+* **Do not map**: Skip the column entirely (data won't be imported)
+
+**Fields must exist before import.** The import creates records, not fields. Create custom fields under **Settings → Data Model** before importing.
+
+## Field Type Compatibility
+
+All field types available in the Data Model are supported for import.
+
+You can also import `id` values to either assign a specific ID to new records or update existing ones.
+
+
+
+## Data Format Requirements
+
+**Some fields have special syntax.** We recommend downloading the sample file before preparing your import to see the expected syntax for each field type.
+
+### Address Fields
+
+Address is a nested field with multiple columns. Some can be left empty.
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Array Fields
+
+Use the following format:
+
+```
+["value1","value2"]
+```
+
+### Boolean Fields
+
+Use `TRUE` or `FALSE` (uppercase) - not `true` or `false`
+
+### Currency Fields
+
+Currency is a nested field with two columns that **both must be filled**:
+
+* **Amount / Amount**: The numeric value (e.g., `1234.56`)
+* **Amount / Currency**: The currency code (e.g., `USD`, `EUR`)
+
+### Date Fields
+
+Supported formats:
+
+* `YYYY-MM-DD` (recommended)
+* `MM/DD/YYYY`
+* `DD/MM/YYYY`
+* ISO 8601 format
+
+### Domain Fields
+
+* It is recommended to use the format `https://domain.com` to avoid creating duplicates, as this is the format used for Companies created by the mailbox and calendar synchronizations
+* A `Domain Label` and `Domain URL` can be filled: best practice is to fill `domain.com` in the label and `https://domain.com` in the url
+* Domains must be unique within the Companies object
+* **Domains must be unique within the file to import**
+
+### Email Fields
+
+* Must be valid email format
+* Emails must be unique within the People object
+* **Emails must be unique within the file to import**
+* For additional emails: use **Emails / Primary Email** for the main email, and **Emails / Additional Emails** with this format:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Id Fields
+
+Specifying an `id` during import is optional. Twenty auto-generates one if not provided.
+
+Use cases for mapping an `id` column:
+
+* **Set a specific ID**: Choose the UUID for newly created records
+* **Update existing records**: Match against existing records to update them instead of creating duplicates. In that case, it is recommended to not map the other unique fields: mapping only one unique field ensures a smoother import.
+
+If you provide an `id`, it must be in UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### Links Fields
+
+Similar to Domain fields:
+
+* Fill both the label and URL columns: **Links / Link URL** and **Links / Link Label**
+* Use full URL format: `https://example.com`
+* For secondary links, use **Links / Secondary Links** column with this format:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### Multi-Select Fields
+
+Use the **API names** (not the display labels) in the following format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+
+ **Import overwrites, it does not add.**
+
+ If a record already has `VALUE2` and `VALUE3` selected, and you import `["VALUE1"]`, the record will only have `VALUE1` after import. The previous selections are replaced, not merged.
+
+
+### Number Fields
+
+* Numbers only
+* Decimals use period: `1234.56`
+* No thousands separators
+
+### Phone Fields
+
+Phone is a nested field with multiple columns that **must be filled**
+
+* **Phones / Primary Phone Number**: The phone number (e.g., `4159095555`)
+* **Phones / Primary Phone Country Code**: Country code (e.g., `US`)
+* **Phones / Primary Phone Calling Code**: Dialing code (e.g., `+1`)
+
+### Rating Fields
+
+Use the API name format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, `RATING_5`
+
+### İlişki Alanları
+
+Please see our dedicated article: [Import Relations Between Objects](/l/tr/user-guide/data-migration/capabilities/import-relations)
+
+### Seçim Alanları
+
+Use the **API name** of the option (not the display label):
+
+```
+VALUE1
+```
+
+See [here](#finding-api-names-for-select-fields) where to find the API names.
+New select options will not be created automatically by the import. They must be added under **Settings → Data Model** before importing.
+
+### Text Fields
+
+* No special formatting required
+* Leading/trailing spaces are trimmed
+
+## Finding API Names
+
+For Select, Multi-Select, and Array fields with predefined options, you must use the **API names**, not the display labels.
+
+### How to Find API Names
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at the bottom right of the settings page)
+4. View the API name for each option
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/file-formats.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/file-formats.mdx
new file mode 100644
index 0000000000..8f84468baf
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/file-formats.mdx
@@ -0,0 +1,48 @@
+---
+title: Desteklenen Dosya Biçimleri
+description: Twenty'de veri içe aktarma için desteklenen dosya biçimleri.
+---
+
+## Desteklenen Biçimler
+
+Twenty, içe aktarma için üç dosya biçimini destekler:
+
+| Biçim | Uzantı | Notlar |
+| ---------------- | ------ | ------------------- |
+| **CSV** | .csv | Önerilen, en uyumlu |
+| **Excel** | .xlsx | Modern Excel biçimi |
+| **Excel (Eski)** | .xls | Eski Excel biçimi |
+
+## Dosya Gereksinimleri
+
+| Gereksinim | Değer |
+| ---------------- | ---------------------------------------- |
+| **Kodlama** | UTF-8 önerilir |
+| **Kayıt sınırı** | Dosya başına 10.000 kayıt |
+| **Yapı** | İlk satır sütun başlıklarını içermelidir |
+| **İçerik** | Dosya başına bir nesne türü |
+
+## CSV için En İyi Uygulamalar
+
+* **Ayraç**: Virgül (`,`) veya noktalı virgül (`;`) kullanın
+* **Metin sınırlayıcısı**: Virgül içeren metinler için çift tırnak (`"`) kullanın
+* **Satır sonları**: Windows (CRLF) veya Unix (LF) her ikisi de desteklenir
+* **Boş değerler**: Hücreleri boş bırakın, "NULL" veya "N/A" kullanmayın
+
+## Excel için En İyi Uygulamalar
+
+Excel'den dışa aktarırken:
+
+* Formülleri kaldırın (yalnızca değerleri dışa aktarın)
+* Sondaki boş satırları silin
+* Birleştirilmiş hücre olmadığından emin olun
+* Yalnızca ilk sayfayı kullanın
+
+## Büyük Veri Kümeleri
+
+10.000 kayıttan büyük veri kümeleri için:
+
+* Birden fazla dosyaya bölün
+* Veya sınırsız kayıt için [API içe aktarma](/l/tr/user-guide/data-migration/how-tos/import-data-via-api) kullanın
+
+Çok büyük geçişler (100.000+ kayıt) için API, CSV içe aktarmadan önemli ölçüde daha hızlı ve daha güvenilirdir.
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/import-relations.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/import-relations.mdx
new file mode 100644
index 0000000000..dfc48073de
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/import-relations.mdx
@@ -0,0 +1,148 @@
+---
+title: Import Relations Between Objects
+description: Import relationships between records via CSV.
+---
+
+## Genel Bakış
+
+Twenty supports importing relationships between objects during CSV import. This allows you to link records (e.g., attach People to Companies) as part of your data migration.
+
+**Currently supported for import**: One-to-many relations pointing to a single object type on each side (e.g., People → Companies). Relations pointing to multiple object types are not yet supported in import/export.
+
+## How Relations Work in Twenty
+
+### One to Many / Many to One
+
+Twenty supports standard relations where one record links to many others:
+
+* **One Company → Many People**: A company can have multiple employees, but each person belongs to one company
+* **One Company → Many Opportunities**: A company can have multiple deals, but each opportunity belongs to one company
+
+### Relations That Can Point to Multiple Object Types
+
+Some relations can connect to different types of objects. This works in two ways:
+
+**Pattern 1: Many records linking to one record each from different object types**
+
+Several Notes, Tasks, or Activities can each be attached to multiple object types at once:
+
+* **Notes** can be linked to one Person, one Company, and one Opportunity simultaneously
+* **Tasks** can be linked to one Person, one Company, and one Opportunity simultaneously
+
+Here, the Notes/Tasks are on the "many" side. Each links to one record per object type.
+
+
+
+**Pattern 2: One record receiving links from many records of different object types**
+
+A Project can receive links from multiple records across different object types:
+
+* **A Project** can have many People linked to it, many Companies linked to it, and many Notes attached to it
+
+Here, the Project is on the "one" side. Multiple records from different objects can all link to the same Project.
+
+
+
+
+ **Import/Export limitation**: Relations that point to multiple object types (like Notes → People/Companies/Opportunities) are **not yet supported** in CSV import or export.
+
+ * **Import**: Only one-to-many relations pointing to a single object type on each side can be imported
+ * **Export**: Columns for relations pointing to multiple object types are currently left empty
+
+ This is on our roadmap.
+
+
+### What's Not Supported Today
+
+**Many to Many relations** are not yet available. For example, you cannot currently create a relation where:
+
+* Many People are linked to many Projects
+
+Many to Many relations are planned for H1 2026.
+
+## Linking Records During Import
+
+**Reminder**: Only one-to-many relations pointing to a single object type can be imported (e.g., People → Companies). Relations pointing to multiple object types (e.g., Notes → People/Companies/Opportunities) are not yet supported.
+
+### Step 1: Identify the "One" and "Many" Sides
+
+First, determine which object is on the "one" side and which is on the "many" side of the relationship.
+
+**Example**:
+
+* **Company** is the "one" side (one company has many employees)
+* **People** is the "many" side (each person belongs to one company)
+
+### Step 2: Ensure the "One" Side Records Exist
+
+Before importing the "many" side, the "one" side records must already exist in Twenty.
+
+* Import or create the "one" side records first (e.g., Companies)
+* Validate their unique identifier. This can be:
+ * The `id` (Twenty's UUID)
+ * A field set as unique (e.g., `domain` for Companies, or an external ID from your previous system)
+
+The import will fail if a reference is made to a record that does not exist.
+
+### Step 3: Prepare Your CSV File
+
+Add a column in your "many" side CSV file that references the "one" side record.
+
+**Example**: For a People CSV file linking to Companies:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important**:
+
+* The value must **exactly match** the unique field on the Company record
+* For domains, use the **Domain URL** (e.g., `https://acme.com`), not the Domain Label
+* Map only **one** unique identifier per relation: this leads to a smoother import
+
+### Step 4: Ensure the Relation Field Exists
+
+Before uploading your file, make sure the relation field exists between your objects.
+
+If it doesn't exist:
+
+1. Go to **Settings → Data Model**
+2. Select your object (e.g., People)
+3. Create a relation field pointing to the target object (e.g., Company)
+
+### Step 5: Upload and Map the Relation
+
+1. Upload your CSV file via the import UI
+2. In the field mapping step, find your relation column (e.g., `companyDomain`)
+3. Map it to the relation field (e.g., Company)
+4. Twenty will automatically link each record to the matching parent
+
+### Available Unique Fields for Relations
+
+| Nesne | Unique Fields Available |
+| ------------------------------------- | --------------------------------------- |
+| **Şirketler** | `id`, `domain`, any custom unique field |
+| **People** | `id`, `email`, any custom unique field |
+| **İş Alanı Üyeleri** | `id`, `email` (not name) |
+| **Other standard and custom objects** | `id`, any field marked as unique |
+
+**Linking to Workspace Members**: When the relation points to Workspace Members (your team logging into Twenty), reference them by their **email address**, not their name.
+
+We recommend using `domain` for Companies and `email` for People, as these are human-readable and easy to maintain in spreadsheets.
+
+**Reminder**: Soft-deleted records (visible under Command Menu → See deleted records) count toward uniqueness criteria. If you import a record with the same unique value as a deleted record, the deleted record will be restored. See [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints) for more details.
+
+## Import Order Rule
+
+
+ **Always import the "one" side first!**
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (linked to Companies)
+ 3. **Opportunities** third (linked to Companies/People)
+ 4. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
new file mode 100644
index 0000000000..d6cd408035
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints.mdx
@@ -0,0 +1,72 @@
+---
+title: Uniqueness Constraints
+description: How Twenty enforces data uniqueness during import.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Genel Bakış
+
+Twenty enforces uniqueness on certain fields to prevent duplicate records and ensure data integrity. Understanding these constraints is essential for successful imports.
+
+## Default Unique Fields
+
+| Nesne | Unique Fields |
+| ----------------- | ---------------------- |
+| **People** | `id`, `email` |
+| **Şirketler** | `id`, `domain` |
+| **Özel nesneler** | `id` only (by default) |
+
+The `id` field is Twenty's internal identifier, auto-generated for each record. It uses UUID format (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`).
+
+## Custom Unique Fields
+
+You can define additional unique fields under **Settings → Data Model**:
+
+1. Go to **Settings → Data Model**
+2. Select the object
+3. Click on a field
+4. Enable **Unique** in field settings
+
+### Use Cases for Custom Unique Fields
+
+* **External IDs**: Store IDs from other systems (Salesforce ID, HubSpot ID)
+* **Business identifiers**: Employee numbers, customer codes
+* **Alternative contact info**: LinkedIn profile, phone number
+
+The field name `id` is reserved for Twenty's internal ID. Use a different name like `externalId` or `legacyId` for external identifiers.
+
+## Import Behavior
+
+### Creating New Records
+
+If a unique field value doesn't exist, a new record is created.
+
+### Updating Existing Records
+
+If a unique field value matches an existing record, that record is **updated** with the new data.
+To **update existing records**, it is recommended to **only match one unique field**.
+
+### Soft-Deleted Records
+
+
+ **Deleted records count toward uniqueness.**
+
+ Soft-deleted records (visible under Command Menu → See deleted records) are included in uniqueness checks. If you import a record with the same unique value as a deleted record, the deleted record will be **restored** with the new data.
+
+
+## Duplicate Detection During Import
+
+During the validation phase:
+
+* Duplicates within your file are highlighted in yellow
+* You can edit or remove duplicate rows from the UI before starting the import
+
+
+
+## En İyi Uygulamalar
+
+1. **Remove duplicates** from your file before importing
+2. **Check for existing records** in Twenty before importing
+3. **Use external IDs** when migrating from other systems
+4. **Include unique fields** if you want to update existing records
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/export-your-data.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/export-your-data.mdx
new file mode 100644
index 0000000000..da4d61327a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/export-your-data.mdx
@@ -0,0 +1,209 @@
+---
+title: Export Your Data
+description: Complete step-by-step guide to exporting data from Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Genel Bakış
+
+Export your workspace data to CSV for backups, reporting, or migration.
+
+**Kullanım alanları:**
+
+* **Regular backups** — keep copies of your data
+* **External reporting** — analyze data in Excel, Google Sheets, or BI tools
+* **Migration** — move data to another system
+* **Bulk updates** — export, edit, and re-import to update records
+
+## What You Need to Know
+
+### Export Limits
+
+* **Maximum 20,000 records** per export
+* Only **visible columns** are exported
+* Only **filtered records** are exported (based on your current view)
+
+For larger exports (20,000+ records), use filters to export in batches or use the [API](/l/tr/developers/extend/capabilities/apis).
+
+### İzinler
+
+You need the **"Export CSV"** permission to export data. Contact your workspace admin if you don't have this option.
+
+## Step 1: Navigate to the Object
+
+Go to the object you want to export:
+
+* **People** — for contacts
+* **Companies** — for organizations
+* **Opportunities** — for deals
+* **Custom objects** — any object you've created
+
+## Step 2: Configure Your View
+
+**Important:** The export includes only what's visible in your current view.
+
+### Add/Remove Columns
+
+1. Click **Options → Fields** (or the **+** at the end of columns)
+2. Check the fields you want to export
+3. Uncheck fields you don't need
+
+### Filter Records (Optional)
+
+If you only need a subset of data:
+
+1. Click **Filter**
+2. Add filter conditions (e.g., "Created date > January 1, 2024")
+3. Only matching records will be exported
+
+### Sort Records (Optional)
+
+1. Click a column header to sort
+2. The export will follow your sort order
+
+**Create a dedicated export view.** Save a view specifically configured for exports so you don't need to reconfigure each time.
+
+## Step 3: Export the Data
+
+1. Click the **⋮** icon on the top right of the table
+2. Select **Export view**
+3. Choose where to save the CSV file
+4. Wait for the download to complete
+
+## What Gets Exported
+
+| Included | Not Included |
+| -------------------------------- | ---------------------- |
+| All visible columns | Hidden columns |
+| Records matching current filters | Filtered-out records |
+| Custom field values | Fields not in the view |
+| Record IDs | File attachments |
+| Relation IDs | Images |
+
+### İlişki Alanları
+
+Relation IDs are only exported on the **"many" side** of a relationship:
+
+* **People export** includes a `companyId` column (People → Company relation)
+* **Companies export** does NOT include `peopleIds` (Companies is the "one" side)
+
+This means you can use the People export to re-import and maintain the Company link, but you'll need to re-import People after Companies to recreate the relationships.
+
+## Exporting for Specific Purposes
+
+### For Backups
+
+1. Create a view with **all fields** visible
+2. Remove all filters to include all records
+3. Export each object type separately
+4. Store exports in a secure location
+5. Set a recurring reminder (weekly/monthly)
+
+### For External Reporting
+
+1. Include only the fields you need for analysis
+2. Apply filters to focus on relevant data
+3. Consider sorting by the field you'll analyze
+
+### For Bulk Updates
+
+1. Export the records you want to update
+2. Include the unique identifier (`email`, `domain`, or `id`)
+3. Edit the exported file
+4. Re-import to update records
+ See: [How to Update Existing Records](/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import)
+
+### For Migration
+
+If you're exporting to migrate to another system:
+
+1. **Export each object separately** — People, Companies, Opportunities, etc.
+2. **Include ID fields** — these help maintain relationships
+3. **Document field mappings** — note how Twenty fields map to your target system
+
+## Handling Large Datasets (20,000+ Records)
+
+The export limit is 20,000 records. For larger datasets:
+
+### Option 1: Export in Batches
+
+1. Add a filter (e.g., "Created date" ranges)
+2. Export the first batch
+3. Change the filter
+4. Export the next batch
+5. Combine files in your spreadsheet
+
+**Example filters for batching:**
+
+* By date range (January, February, March...)
+* By owner (Team member A, Team member B...)
+* By status (Active, Inactive...)
+
+### Option 2: Use the API
+
+The API has no record limit:
+
+1. Get your API key from **Settings → Developers**
+2. Use the GraphQL API to query records
+3. Process results in your application
+
+See: [API Documentation](/l/tr/developers/extend/capabilities/apis)
+
+## Tips and Best Practices
+
+### Create Export Views
+
+Save views configured specifically for exports:
+
+1. Configure columns and filters
+2. Click **View options** → **Save as new view**
+3. Name it "Export - [Purpose]"
+
+### Secure Your Exports
+
+Exported files may contain sensitive data:
+
+* Store in secure locations
+* Delete old exports when no longer needed
+* Be careful sharing export files
+
+### Check Before Exporting
+
+Correct columns are visible
+Filters are set correctly (or removed for full export)
+You have Export permission
+
+## FAQ
+
+
+
+ Only visible columns are exported. Add the columns you need via **Options → Fields** before exporting.
+
+
+
+ Check your filters. The export only includes records matching your current view filters. Remove filters to export all records.
+
+
+
+ Not in a single export. Use filters to export in batches, or use the API for larger datasets.
+
+
+
+ CSV (Comma Separated Values). Opens in Excel, Google Sheets, or any spreadsheet application.
+
+
+
+ Yes, but only on the "many" side of relationships. For example, a People export includes `companyId`, but a Companies export does not include people IDs.
+
+
+
+ Not directly through the UI. Use the API to build automated export workflows.
+
+
+
+## Sonraki Adımlar
+
+* [How to Update Existing Records](/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import) — edit and re-import your export
+* [How to Import Data via API](/l/tr/user-guide/data-migration/how-tos/import-data-via-api) — for large datasets
+* [API Documentation](/l/tr/developers/extend/capabilities/apis) — build custom export workflows
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/fix-import-errors.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/fix-import-errors.mdx
new file mode 100644
index 0000000000..1a8d464487
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/fix-import-errors.mdx
@@ -0,0 +1,430 @@
+---
+title: Fix Import Errors
+description: Complete troubleshooting guide for resolving CSV import errors.
+---
+
+## Genel Bakış
+
+Import not working? This guide helps you identify and fix common import errors step by step.
+
+## How Import Validation Works
+
+After uploading your file and mapping columns, Twenty validates your data:
+
+1. **Validation runs** — Twenty checks each row for errors
+2. **Errors are highlighted** — problematic rows appear in **yellow**
+3. **You can fix in-place** — edit cells directly in the import UI
+4. **Or remove rows** — skip problematic records entirely
+
+**Fix errors in the UI.** You don't need to go back to your spreadsheet. Edit cells directly during import to save time.
+
+## Step-by-Step Troubleshooting
+
+### Step 1: Identify the Error Type
+
+Click on a highlighted row to see the specific error message. Common error types:
+
+| Hata Mesajı | What It Means |
+| --------------------------------------------------------------------- | ------------------------------------------------------------ |
+| Duplicate values highlighted in yellow | Value already exists in Twenty or appears twice in your file |
+| `{field} is not a valid {type}` (hover on yellow cell) | Data doesn't match expected format |
+| Required field highlighted | A required field is empty |
+| `Can't connect to {object}. No unique record found...` (import fails) | Referenced record doesn't exist |
+| `Too many records. Up to 10000 allowed` (upload blocked) | File has more than 10,000 records |
+
+### Step 2: Fix the Error
+
+Follow the specific instructions below for each error type.
+
+---
+
+## Error: Duplicate Value
+
+### Görecekleriniz
+
+Rows with duplicate values are **highlighted in yellow** in the import UI before the import starts.
+
+### What It Means
+
+A unique field (email, domain) either:
+
+* Already exists in Twenty
+* Appears twice in your file
+
+### How to Fix
+
+**Option 1: Edit the duplicate value**
+
+1. Click the cell with the error
+2. Change to a unique value
+3. Continue with import
+
+**Option 2: Remove the duplicate row**
+
+1. Click the X next to the row
+2. The row will be skipped during import
+
+**Option 3: Let Twenty update the existing record**
+
+1. Ensure your file includes a unique identifier (`email`, `domain`, or `id`)
+2. Map the unique identifier field
+3. Twenty will update the existing record instead of creating a duplicate
+
+
+ **You can update unique fields too.**
+
+ * If you keep the `id` but change the `email` → the email will be updated
+ * If you keep the `email` but change the `id` → the id will be updated
+
+ As long as one unique identifier matches, Twenty updates the record.
+
+
+### How to Prevent This Error
+
+Before importing:
+
+1. Sort your spreadsheet by the unique field
+2. Remove duplicate rows
+3. Check if records already exist in Twenty
+
+
+ **Soft-deleted records count toward uniqueness.**
+
+ Check Command Menu → See deleted records. Records there still enforce uniqueness. Permanently delete them or restore and update.
+
+
+For more details: [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints)
+
+---
+
+## Error: Invalid Format
+
+### Görecekleriniz
+
+The cell value is highlighted in yellow. Hover over it to see the error message:
+
+```
+{field name} is not a valid {field type}
+```
+
+### What It Means
+
+The data doesn't match the expected format for that field type.
+
+### How to Fix — By Field Type
+
+#### E-posta
+
+**Problem:** Invalid email format
+**Solution:** Use format `name@domain.com`
+
+```
+❌ john.smith@
+❌ john smith@acme.com
+✓ john.smith@acme.com
+```
+
+#### Alan Adı
+
+**Problem:** Inconsistent format may cause duplicates
+**Solution:** Use `https://domain.com` format (recommended)
+
+```
+⚠️ acme.com (valid, but not recommended)
+⚠️ www.acme.com (valid, but not recommended)
+✅ https://acme.com (recommended)
+```
+
+All formats are valid, but `https://domain.com` is recommended because it matches the format used by email/calendar sync. Using other formats may create duplicate companies.
+
+#### Tarih
+
+**Problem:** Unrecognized date format
+**Solution:** Use consistent format throughout file
+
+```
+✓ 2024-03-15 (YYYY-MM-DD - recommended)
+✓ 03/15/2024 (MM/DD/YYYY)
+✓ 15/03/2024 (DD/MM/YYYY)
+```
+
+#### Telefon
+
+**Problem:** Missing required columns
+**Solution:** Include all phone columns
+
+| Column | Örnek |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+#### Boolean
+
+**Problem:** Wrong boolean value
+**Solution:** Use uppercase `TRUE` or `FALSE`
+
+```
+❌ true
+❌ yes
+❌ 1
+✓ TRUE
+✓ FALSE
+```
+
+#### Select / Multi-Select
+
+**Problem:** Value doesn't match existing options
+**Solution:** Use **API names**, not display labels
+
+How to find API names:
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Use the API name (e.g., `OPTION_1`, not "Option 1")
+
+```
+❌ High Priority
+✓ HIGH_PRIORITY
+```
+
+#### Para Birimi
+
+**Problem:** Missing amount or currency code
+**Solution:** Fill both columns
+
+| Column | Örnek |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+#### Sayı
+
+**Problem:** Non-numeric characters
+**Solution:** Numbers only, period for decimals
+
+```
+❌ $1,234.56
+❌ 1,234.56
+✓ 1234.56
+```
+
+For complete format reference: [Field Mapping](/l/tr/user-guide/data-migration/capabilities/field-mapping)
+
+---
+
+## Error: Required Field Missing
+
+### Görecekleriniz
+
+The row is highlighted in yellow with the required field cell marked.
+
+### What It Means
+
+A required field is empty for this row.
+
+### How to Fix
+
+**Option 1: Enter a value**
+
+1. Click the empty cell
+2. Enter a value
+3. Continue with import
+
+**Option 2: Remove the row**
+
+1. If you don't have the data, click X to skip the row
+
+### How to Prevent This Error
+
+Before importing, identify required fields:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Check which fields are marked as required
+
+---
+
+## Error: Relation Not Found
+
+### Görecekleriniz
+
+This error appears **after the import starts** — the import fails with a message like:
+
+```
+Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
+```
+
+This means there is no Company in Twenty with that specific identifier.
+
+Unlike other errors, this one is not caught during the data review step. The import will start and then fail when it encounters the missing relation.
+
+### What It Means
+
+You're trying to link to a record that doesn't exist in Twenty.
+
+### How to Fix
+
+**Option 1: Import parent records first**
+
+1. Cancel the current import
+2. Import the parent records (e.g., Companies)
+3. Then import the child records (e.g., People)
+
+**Option 2: Fix the reference value**
+
+1. Check the reference value in your file
+2. Ensure it exactly matches an existing record
+3. Verify format: domains should be `https://domain.com`
+
+**Option 3: Remove the relation**
+
+1. Clear the cell to import without the relation
+2. Add the relation manually later
+
+### How to Prevent This Error
+
+1. **Import in the correct order:**
+ * Companies first
+ * People second (with company references)
+ * Opportunities third
+
+2. **Verify reference values:**
+ * Export parent records to get exact identifiers
+ * Use domain format `https://domain.com`
+ * Check for typos and case sensitivity
+
+
+ **Import will fail if a reference is made to a non-existent record.**
+
+ Always import parent objects before child objects.
+
+
+For more details: [Import Relations](/l/tr/user-guide/data-migration/capabilities/import-relations)
+
+---
+
+## Error: File Too Large
+
+### Görecekleriniz
+
+This error appears **when uploading your file** — the upload is blocked entirely:
+
+```
+Too many records. Up to 10000 allowed
+```
+
+You won't be able to proceed to the data review step until you reduce the file size.
+
+### What It Means
+
+Your file has more than 10,000 records.
+
+### How to Fix
+
+**Option 1: Split into multiple files**
+
+1. Divide your data into files of 10,000 records or fewer
+2. Import each file separately
+3. Maintain import order (Companies before People)
+
+**Option 2: Use API import**
+For very large datasets, use the API which has no record limit.
+See: [How to Import Data via API](/l/tr/user-guide/data-migration/how-tos/import-data-via-api)
+
+---
+
+## Error: Field Not Recognized
+
+### What It Means
+
+A column in your file can't be mapped because the field doesn't exist in Twenty.
+
+### How to Fix
+
+1. Go to **Settings → Data Model**
+2. Select the object you're importing
+3. Click **+ Add field**
+4. Create the custom field with the appropriate type
+5. Re-upload your file
+
+The CSV import creates records, not fields. All fields must exist before importing.
+
+---
+
+## Error: User Relation Empty
+
+### What It Means
+
+You're trying to assign a record to a user (Owner, Assignee) but the relation isn't being mapped.
+
+### Common Causes
+
+1. **User hasn't accepted their invitation** — the user doesn't exist in Twenty yet
+2. **Using user ID from old system** — Twenty can't match IDs from another system
+3. **Wrong email format** — the email doesn't match the user's Twenty account
+
+### How to Fix
+
+1. Ensure all users have **accepted their invitation** to your Twenty workspace
+2. Use the user's **email address** (not their name or old system ID)
+3. Use the same email they used to join Twenty
+
+
+ **Users must accept invitations before importing.**
+
+ If a user hasn't accepted their invitation, records referencing them will have empty user relations.
+
+
+---
+
+## Pre-Import Checklist
+
+Avoid errors by checking these before importing:
+
+### File Requirements
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+File uses UTF-8 encoding
+
+### Data Quality
+
+No duplicate emails (for People)
+No duplicate domains (for Companies)
+All dates use consistent format
+All domains use `https://domain.com` format
+
+### Field Formats
+
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+Phone fields have all required columns
+Currency fields have both Amount and Currency Code
+
+### İlişkiler
+
+Parent records imported before child records
+Relation columns reference existing records
+Domain format matches Twenty's format exactly
+
+### Veri modeli
+
+All custom fields exist in Settings → Data Model
+Select options exist before importing
+
+---
+
+## Still Having Issues?
+
+If you've tried the above solutions:
+
+1. **Download the sample file** — see the exact format Twenty expects
+2. **Export existing records** — compare your file to working data
+3. **Test with a small batch** — try 5-10 rows first
+4. **Check the reference articles:**
+ * [Field Mapping](/l/tr/user-guide/data-migration/capabilities/field-mapping)
+ * [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints)
+ * [Import Relations](/l/tr/user-guide/data-migration/capabilities/import-relations)
+ * [Error Handling](/l/tr/user-guide/data-migration/capabilities/error-handling)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
new file mode 100644
index 0000000000..089deb9664
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv.mdx
@@ -0,0 +1,201 @@
+---
+title: Import Companies via CSV
+description: Complete step-by-step guide to importing companies into Twenty.
+---
+
+## Genel Bakış
+
+This guide walks you through importing your companies into Twenty. **Companies should be imported first** because People and Opportunities link to Companies.
+
+## Başlamadan Önce
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate domains in your file
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ Need to import more than 10,000 companies? Split into multiple files or use the [API import](/l/tr/user-guide/data-migration/how-tos/import-data-via-api).
+
+
+## Step 1: Prepare Your Company Data
+
+### Required and Recommended Fields
+
+| Alan | Required? | Biçim | Notlar |
+| ----------------- | ----------- | -------------------- | ------------------------ |
+| **Name** | Recommended | Metin | Company display name |
+| **Domain** | Recommended | `https://domain.com` | Unique identifier |
+| **Address** | Optional | Multiple columns | See below |
+| **Employees** | Optional | Sayı | Employee count |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Domain Format
+
+
+ **Use the format `https://domain.com` for domains.**
+
+ This matches the format used when Companies are auto-created from email/calendar sync, preventing duplicates later.
+
+
+**Domain columns:**
+
+* **Domain / Domain Label**: `acme.com`
+* **Domain / Domain URL**: `https://acme.com`
+
+### Address Format
+
+Address is a nested field with multiple columns:
+
+```
+Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
+123 Main Street,San Francisco,CA,USA,94105
+```
+
+### Sample CSV Structure
+
+```csv
+name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
+Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
+Widget Co,https://widgets.co,widgets.co,New York,USA,50
+```
+
+
+ **Pro tip:** Click **Download sample file** during import to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the Companies View**
+
+1. Navigate to **Companies** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **Companies**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+* **Domain**: Map to **Domain / Domain URL** (not Domain Label)
+* **Address**: Map each part to its specific column (City, State, etc.)
+* **Select fields**: Values must match existing options (or you'll map them in the next step)
+
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields:
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Company Import Errors
+
+| Hata | Cause | Solution |
+| -------------------------- | ------------------------------- | ------------------------------------------ |
+| **Duplicate domain** | Domain already exists in Twenty | Remove from file or update existing record |
+| **Invalid domain format** | Wrong format | Use `https://domain.com` |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records
+
+## After Importing Companies
+
+Now you can import records that link to Companies:
+
+1. **[Import People](/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv)** — link them to Companies using the domain
+2. **Import Opportunities** — link them to Companies
+3. **Verify the import** — spot-check a few records to ensure data is correct
+
+## Updating Existing Companies
+
+To update companies instead of creating new ones:
+
+1. Include the `domain` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing companies are updated; new ones are created
+
+See [How to Update Existing Records](/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Domain is a unique identifier in Twenty. This prevents duplicate companies and ensures email sync correctly links emails to the right company.
+
+
+
+ You can leave the domain empty. However, we recommend adding domains when possible for better data quality and automatic email linking.
+
+
+
+ Evet! You can import companies first, then import People later and link them using the company domain.
+
+
+
+ If you include a unique identifier (domain or id) that matches an existing company, Twenty updates that company instead of creating a duplicate.
+
+
+
+ Either remove the duplicate from your file, or include the company's `id` to update the existing record instead.
+
+
+
+## Sorun Giderme
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors)
+* [Field Mapping Reference](/l/tr/user-guide/data-migration/capabilities/field-mapping)
+* [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
new file mode 100644
index 0000000000..9bf5707e52
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx
@@ -0,0 +1,242 @@
+---
+title: Import Contacts via CSV
+description: Complete step-by-step guide to importing people/contacts into Twenty.
+---
+
+## Genel Bakış
+
+This guide walks you through importing your contacts (People) into Twenty. **Import Companies first** if you want to link People to Companies.
+
+## Başlamadan Önce
+
+### Prerequisites Checklist
+
+
+ Your file is CSV, XLSX, or XLS format
+
+
+
+ File has fewer than 10,000 records
+
+
+
+ No duplicate email addresses in your file
+
+
+
+ **Companies imported first** (if linking People to Companies)
+
+
+
+ All custom fields exist in **Settings → Data Model**
+
+
+
+ **Import Companies Before People**
+
+ If you want to link People to Companies, import Companies first. The Company must exist before you can reference it.
+
+
+## Step 1: Prepare Your Contact Data
+
+### Required and Recommended Fields
+
+| Alan | Required? | Biçim | Notlar |
+| ----------------- | ----------- | ----------------- | ------------------------- |
+| **E-posta** | Recommended | `name@domain.com` | Must be unique |
+| **First Name** | Recommended | Metin | |
+| **Last Name** | Recommended | Metin | |
+| **Company** | Optional | Domain or ID | Links to existing Company |
+| **Phone** | Optional | Multiple columns | See below |
+| **Job Title** | Optional | Metin | |
+| **Custom fields** | Optional | Varies | Must exist in Data Model |
+
+### Email Format
+
+* Must be valid email format: `name@domain.com`
+* **Must be unique** — no duplicates in your file or in Twenty
+* For additional emails, use the **Emails / Additional Emails** column:
+
+```
+["jane@twenty.com","jane.doe@twenty.com"]
+```
+
+### Phone Format
+
+Phone is a **nested field** requiring multiple columns:
+
+| Column | Örnek |
+| --------------------------------------- | ------------ |
+| **Phones / Primary Phone Number** | `4159095555` |
+| **Phones / Primary Phone Country Code** | `US` |
+| **Phones / Primary Phone Calling Code** | `+1` |
+
+### Linking to Companies
+
+Add a column with the Company's unique identifier:
+
+| Column Name | Biçim | Örnek |
+| --------------- | ---------- | -------------------------------------- |
+| `companyDomain` | URL format | `https://acme.com` |
+| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Use Domain URL format** (`https://acme.com`), not the label. This matches how Companies are stored in Twenty.
+
+
+### Sample CSV Structure
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
+John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
+```
+
+
+ **Pro tip:** Click **Download sample file** during import or export a few existing People to see the exact column names Twenty expects.
+
+
+## Step 2: Access the Import Feature
+
+**Option 1: From the People View**
+
+1. Navigate to **People** in the left sidebar
+2. Click the **⋮** icon on the top right
+3. Select **Import records**
+
+**Option 2: Using Command Menu**
+
+1. Press `Cmd + K` (Mac) or `Ctrl + K` (Windows)
+2. Type "import"
+3. Select **Import records**
+4. Choose **People**
+
+## Step 3: Upload Your File
+
+1. Click **Select file**
+2. Choose your CSV, XLSX, or XLS file
+3. Wait for Twenty to analyze your file
+
+## Step 4: Map Your Columns
+
+Twenty automatically tries to match your columns to fields. Review and adjust:
+
+1. **Check automatic mappings** — verify they're correct
+2. **Fix incorrect mappings** — click the dropdown to select the right field
+3. **Skip columns** — select **Do not map** for columns you don't want to import
+
+### Important Mapping Rules
+
+| Column Type | Map To | Notlar |
+| ----------------- | ------------------------------ | ---------------------------------- |
+| Company reference | **Company** relation field | Use domain OR id, not both |
+| E-posta | **E-posta** | Primary email address |
+| Additional emails | **Emails / Additional Emails** | Array format |
+| Telefon | Separate columns | Number, Country Code, Calling Code |
+
+
+
+### Mapping the Company Relation
+
+When mapping the company column:
+
+1. Find your company reference column (e.g., `companyDomain`)
+2. Map it to the **Company** relation field
+3. Twenty will link each Person to the matching Company
+
+
+ **Map only ONE unique identifier for relations.**
+
+ Don't map both `companyId` AND `companyDomain`. Choose one—preferably domain since it's human-readable.
+
+
+## Step 5: Map Select Field Values
+
+If you have Select or Multi-Select fields (like Lead Source):
+
+1. Twenty shows your values alongside existing options
+2. Match each value in your file to a Twenty option
+3. Or create new options if needed
+
+
+ Select options use **API names**, not display labels. Check **Settings → Data Model** → Enable **Advanced mode** to see API names.
+
+
+## Step 6: Review and Fix Errors
+
+Before completing the import, Twenty validates your data:
+
+1. Click **Next Steps**
+2. Rows with errors are highlighted in **yellow**
+3. **Fix errors directly** — click a cell and edit the value
+4. **Remove problematic rows** — click the X to skip that row
+
+### Common Contact Import Errors
+
+| Hata | Cause | Solution |
+| -------------------------- | -------------------------------------- | ------------------------------------------- |
+| **Duplicate email** | Email already exists in Twenty or file | Remove duplicate or update existing record |
+| **Invalid email format** | Email format incorrect | Fix to `name@domain.com` |
+| **Relation not found** | Company doesn't exist | Import Companies first or fix the reference |
+| **Missing required field** | Required field is empty | Fill in the value or remove the row |
+
+## Step 7: Complete the Import
+
+1. Review the import summary
+2. Click **Confirm** to import
+3. Wait for the import to complete
+4. Verify by checking a few records and their Company links
+
+## After Importing Contacts
+
+Your contacts are now in Twenty! Next steps:
+
+1. **Verify Company links** — open a few People records to confirm they're linked to the right Company
+2. **Import Opportunities** — if needed, link them to People and Companies
+3. **Set up email sync** — connect your mailbox to see email history on contact records
+
+## Updating Existing Contacts
+
+To update contacts instead of creating new ones:
+
+1. Include the `email` or `id` column in your file
+2. Twenty matches records by this unique identifier
+3. Existing contacts are updated; new ones are created
+
+See [How to Update Existing Records](/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import) for details.
+
+## FAQ
+
+
+
+ Email is a unique identifier in Twenty. This prevents duplicate contacts and ensures email sync correctly links emails to the right person.
+
+
+
+ You can leave the email empty. However, we recommend adding emails when possible for better data quality and email sync functionality.
+
+
+
+ Add a column with the Company's domain (e.g., `https://acme.com`) or ID. During mapping, connect this column to the Company relation field.
+
+
+
+ Import Companies first, then import People. The Company must exist before you can reference it.
+
+
+
+ Evet! Create a custom field marked as "unique" in your data model to store the external ID. Note: the field name `id` is reserved for Twenty's internal ID.
+
+
+
+ The Company you're referencing doesn't exist. Either import the Company first, or check that the domain/ID exactly matches an existing Company.
+
+
+
+## Sorun Giderme
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors)
+* [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Field Mapping Reference](/l/tr/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-data-via-api.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-data-via-api.mdx
new file mode 100644
index 0000000000..1d5bf689ae
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-data-via-api.mdx
@@ -0,0 +1,176 @@
+---
+title: Import Data via API
+description: When and how to use Twenty's APIs for large-scale data imports.
+---
+
+## Genel Bakış
+
+Twenty provides both **GraphQL** and **REST APIs** for programmatic data import. Use the API when CSV import isn't practical for your data volume or when you need automated, recurring imports.
+
+## When to Use API Import
+
+| Scenario | Recommended Method |
+| ---------------------------------- | ----------------------------- |
+| Under 10,000 records | CSV Import |
+| 10,000 - 50,000 records | CSV Import (split into files) |
+| **50,000+ records** | **API Import** |
+| One-time migration | Either (based on volume) |
+| **Recurring imports** | **API Import** |
+| **Real-time sync** | **API Import** |
+| **Integration with other systems** | **API Import** |
+
+For datasets in the hundreds of thousands, the API is significantly faster and more reliable than multiple CSV imports.
+
+## API Rate Limits
+
+Twenty enforces rate limits to ensure system stability:
+
+| Limit | Değer |
+| -------------------------- | --------------------- |
+| **Requests per minute** | 100 |
+| **Records per batch call** | 60 |
+| **Maximum throughput** | ~6,000 records/minute |
+
+
+ **Plan your import around these limits.**
+
+ For 100,000 records at maximum throughput, expect approximately 17 minutes of import time. Add buffer time for error handling and retries.
+
+
+## Getting Started
+
+### Step 1: Get Your API Key
+
+1. Go to **Settings → Developers**
+2. Click **+ Create API key**
+3. Give your key a descriptive name
+4. Copy the API key immediately (it won't be shown again)
+5. Store it securely
+
+
+ **Keep your API key secret.**
+
+ Anyone with your API key can access and modify your workspace data. Never commit it to code repositories or share it publicly.
+
+
+### Step 2: Choose Your API
+
+Twenty supports two API types:
+
+| API | Best For | Dokümantasyon |
+| ----------- | ----------------------------------------------------------- | ------------------------------------------------ |
+| **GraphQL** | Flexible queries, fetching related data, complex operations | [API Docs](/l/tr/developers/extend/capabilities/apis) |
+| **REST** | Simple CRUD operations, familiar REST patterns | [API Docs](/l/tr/developers/extend/capabilities/apis) |
+
+Both APIs support:
+
+* Creating, reading, updating, and deleting records
+* **Batch operations** — create or update up to 60 records per call
+
+**For imports, use batch operations** to maximize throughput within rate limits.
+
+### Step 3: Plan Your Import Order
+
+Just like CSV imports, **order matters** for relations:
+
+1. **Companies** first (no dependencies)
+2. **People** second (can link to Companies)
+3. **Opportunities** third (can link to Companies and People)
+4. **Tasks/Notes** (can link to any of the above)
+5. **Custom objects** (following their dependencies)
+
+## En İyi Uygulamalar
+
+### Batch Your Requests
+
+* Don't send records one at a time
+* Group up to **60 records per API call**
+* This maximizes throughput within rate limits
+
+### Handle Rate Limits
+
+* Implement delays between requests (600ms minimum for sustained imports)
+* Use exponential backoff when you hit limits
+* Monitor for 429 (Too Many Requests) responses
+
+### Validate Data First
+
+* Clean and validate your data before importing
+* Check required fields are populated
+* Verify formats match Twenty's requirements (see [Field Mapping](/l/tr/user-guide/data-migration/capabilities/field-mapping))
+
+### Log Everything
+
+* Log every record imported (including IDs)
+* Log errors with full context
+* This helps debug issues and verify completion
+
+### Test First
+
+* Test with a small batch (10-20 records)
+* Verify data appears correctly in Twenty
+* Then run the full import
+
+### Upsert to Avoid Duplicates
+
+The GraphQL API supports **batch upsert** — update if the record exists, create if not. This prevents duplicates when re-running imports.
+
+## Finding Object and Field Names
+
+To see available objects and fields:
+
+1. Go to **Settings → API and Webhooks**
+2. Browse the **Metadata API**
+3. View all standard and custom objects with their fields
+
+The documentation shows all standard and custom objects, their fields, and the expected data types.
+
+## Profesyonel Hizmetler
+
+For complex API migrations, our partners can help:
+
+| Service | What's Included |
+| ----------------------- | ---------------------------------- |
+| **Data Model Design** | design your optimal data structure |
+| **Migration Scripts** | write and run the import scripts |
+| **Data Transformation** | handle complex mapping and cleanup |
+| **Validation & QA** | verify the migration is complete |
+
+**Best for:**
+
+* Migrations of 100,000+ records
+* Complex data transformations
+* Tight timelines
+* Teams without developer resources
+
+Contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/tr/user-guide/getting-started/capabilities/implementation-services).
+
+## FAQ
+
+
+
+ GraphQL lets you request exactly the data you need in a single query and is better for complex operations. REST uses standard HTTP methods (GET, POST, PUT, DELETE) and may be more familiar if you've worked with traditional APIs.
+
+
+
+ Evet! Use update mutations (GraphQL) or PUT/PATCH requests (REST) with the record's `id`.
+
+
+
+ Query for existing records first using unique identifiers (email, domain). Update if exists, create if not.
+
+
+
+ Yes, use delete mutations (GraphQL) or DELETE requests (REST).
+
+
+
+ Not currently, but both APIs work with any HTTP client in any language.
+
+
+
+## API Documentation
+
+For full implementation details, code examples, and schema reference:
+
+* [API Documentation](/l/tr/developers/extend/capabilities/apis)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
new file mode 100644
index 0000000000..5ede693434
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx
@@ -0,0 +1,228 @@
+---
+title: Import Relations Between Objects via CSV
+description: Complete step-by-step guide to linking records during CSV import.
+---
+
+## Genel Bakış
+
+This guide walks you through importing relations between objects—for example, linking People to Companies, or Opportunities to People.
+
+**What can be imported:** Only one-to-many relations pointing to a single object type. Relations pointing to multiple object types (like Notes linking to People AND Companies) are not yet supported for import.
+
+## Understanding Relations
+
+### What is a "One-to-Many" Relation?
+
+In a one-to-many relation:
+
+* **One** Company has **many** People (employees)
+* **One** Company has **many** Opportunities
+* **One** Person has **many** Tasks
+
+The "one" side is the **parent**. The "many" side is the **child**.
+
+### Common Relations in Twenty
+
+| İlişki | "One" Side (Parent) | "Many" Side (Child) |
+| ------------------------- | ------------------- | ------------------- |
+| Companies → People | Şirket | İnsanlar |
+| Companies → Opportunities | Şirket | Fırsatlar |
+| People → Tasks | Kişi | Görevler |
+| People → Notes | Kişi | Notlar |
+
+## Step 1: Identify the "One" and "Many" Sides
+
+Before importing, determine which object is the parent and which is the child.
+
+**Ask yourself:** "Does ONE [Object A] have MANY [Object B]?"
+
+* One Company → Many People ✓ (Company is parent)
+* One Person → Many Companies ✗ (This is wrong—a person belongs to one company)
+
+## Step 2: Import the Parent Records First
+
+The parent ("one" side) must exist in Twenty before you can reference it.
+
+**Import order:**
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and/or People)
+4. **Tasks/Notes** (link to any of the above)
+
+
+ **If the parent record doesn't exist, the import will fail.**
+
+ Always verify that Companies are imported before importing People with company references.
+
+
+## Step 3: Note the Parent's Unique Identifier
+
+You need to reference the parent record using a **unique identifier**. Available options:
+
+| Parent Object | Available Unique Identifiers |
+| ------------------------- | --------------------------------------------------------------- |
+| **Şirketler** | `id` (UUID), `domain` (recommended), or any custom unique field |
+| **People** | `id` (UUID), `email`, or any custom unique field |
+| **Çalışma Alanı Üyeleri** | `id` (UUID), `email` (not name) |
+| **Özel Nesneler** | `id` (UUID), or any field marked as unique |
+
+**Recommended:** Use `domain` for Companies and `email` for People. These are human-readable and easy to verify in your spreadsheet.
+
+### Finding the Identifier
+
+If you need the `id`:
+
+1. Export the parent records from Twenty
+2. The export includes the `id` column
+3. Use these IDs in your child records file
+
+## Step 4: Verify the Relation Field Exists
+
+Before importing, ensure the relation field exists between your objects.
+
+**To check or create:**
+
+1. Go to **Settings → Data Model**
+2. Select your child object (e.g., People)
+3. Look for a relation field pointing to the parent (e.g., Company)
+4. If it doesn't exist, create it:
+ * Click **+ Add field**
+ * Select **Relation** type
+ * Choose the parent object
+
+## Step 5: Prepare Your CSV File
+
+Add a column to your child CSV that references the parent using its unique identifier.
+
+### Example: People Linking to Companies
+
+**Your People CSV:**
+
+```csv
+firstName,lastName,email,jobTitle,companyDomain
+John,Smith,john@acme.com,CEO,https://acme.com
+Jane,Doe,jane@widgets.co,CTO,https://widgets.co
+Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
+```
+
+The `companyDomain` column references the Company's domain.
+
+### Format Requirements
+
+| Tanımlayıcı | Biçim | Örnek |
+| ----------- | -------------- | -------------------------------------- |
+| Alan Adı | URL format | `https://acme.com` |
+| E-posta | Standard email | `john@acme.com` |
+| Kimlik | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
+
+
+ **Domain format matters!**
+
+ Use `https://domain.com` (not just `domain.com`). This matches how Twenty stores Company domains and prevents matching errors.
+
+
+### Important Rules
+
+1. **Exact match required** — the value must exactly match the parent record
+2. **Map only ONE unique identifier** — don't include both `companyId` AND `companyDomain`
+3. **Case sensitive** — `Acme.com` ≠ `acme.com`
+
+## Step 6: Upload and Map the Relation
+
+1. Navigate to the child object (e.g., People)
+2. Click **⋮** → **Import records**
+3. Upload your CSV file
+4. In the field mapping step:
+ * Find your relation column (e.g., `companyDomain`)
+ * Map it to the **Company** relation field
+5. Complete the remaining mapping
+6. Review errors and confirm
+
+Twenty will automatically link each child record to the matching parent.
+
+## Step 7: Verify the Import
+
+After importing:
+
+1. Open a few child records (e.g., People)
+2. Verify the relation field shows the correct parent (e.g., Company)
+3. Open a parent record and check the related records section
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Solution |
+| -------------------------- | -------------------------------------------------- | ------------------------------------------------------- |
+| **Wrong import order** | Importing People before Companies | Always import parents first, then children |
+| **Wrong domain format** | Using `acme.com` instead of `https://acme.com` | Use full URL format with `https://` |
+| **Multiple unique fields** | Mapping both `companyId` AND `companyDomain` | Map only ONE unique identifier |
+| **Missing relation field** | The relation field doesn't exist in the data model | Create it in **Settings → Data Model** before importing |
+| **Non-existent records** | The parent record doesn't exist in Twenty | Import parent records first, or check for typos |
+| **Case mismatch** | `Acme.com` in file but `acme.com` in Twenty | Ensure exact case matching |
+
+## Linking to Workspace Members
+
+When linking to Workspace Members (your team):
+
+* Use their **email address**, not their name
+* Example: `owner@yourcompany.com`, not "John Smith"
+
+```csv
+taskName,assignedTo
+Follow up with client,john@yourcompany.com
+Review proposal,jane@yourcompany.com
+```
+
+## FAQ
+
+
+
+ You have two options:
+
+ 1. Use the Twenty `id` (export parent records to get their IDs)
+ 2. Create a custom unique field in your data model to store an external ID from your previous system
+
+
+
+ Evet! Include the child record's unique identifier (e.g., `email` for People) and the new relation value. The import will update the relation.
+
+
+
+ Many-to-Many relations are not yet supported for import. This is planned for H1 2026.
+
+
+
+ Relations pointing to multiple object types are not yet supported for import/export. This is on our roadmap.
+
+
+
+ The import will show an error for that row. Aşağıdakileri yapabilirsiniz:
+
+ * Import the parent record first, then re-import
+ * Fix the reference value
+ * Remove the row from import
+
+
+
+ Common causes:
+
+ * Wrong format (use `https://domain.com` for domains)
+ * Case mismatch (check exact spelling)
+ * Parent doesn't exist (import parents first)
+ * Mapping multiple identifiers (use only one)
+
+
+
+
+ **Remember: Soft-deleted records count toward uniqueness.**
+
+ If you're getting "not found" errors but the record seems to exist, check Command Menu → See deleted records. The parent may have been soft-deleted.
+
+
+## Sorun Giderme
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors)
+* [Import Relations Capabilities](/l/tr/user-guide/data-migration/capabilities/import-relations)
+* [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
new file mode 100644
index 0000000000..9ee94e26ec
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx
@@ -0,0 +1,293 @@
+---
+title: Diğer CRM'lerden Taşınma
+description: Step-by-step guide to migrate your data from any CRM to Twenty.
+---
+
+## Genel Bakış
+
+This guide walks you through migrating your data from any CRM to Twenty. The process involves auditing your data, preparing your Twenty workspace, exporting from your current system, and importing into Twenty.
+
+Views, workflows, and permissions must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Audit Your Current Data
+
+Migration is an opportunity for a fresh start. Don't bring over clutter.
+
+**What to keep:**
+
+* Active contacts and companies
+* Open opportunities and deals
+* Important notes and activities
+* Custom fields you actually use
+
+**What to leave behind:**
+
+* Outdated contacts (no activity in 2+ years)
+* Duplicate records
+* Test data
+* Unused custom fields
+
+## Step 2: Map Your Data Model
+
+Create a mapping document between your current CRM and Twenty:
+
+| Your CRM | Twenty |
+| ---------------------- | -------------------- |
+| Account / Organization | **Company** |
+| Contact / Person | **People** |
+| Deal / Opportunity | **Opportunity** |
+| Activity | **Task** or **Note** |
+| Custom Object | **Custom Object** |
+
+**For each field, document:**
+
+* The source field name
+* The target Twenty field
+* Any format transformations needed (dates, phone numbers, etc.)
+
+Keep this mapping document handy during import—you'll reference it when mapping columns.
+
+## Step 3: Set Up Your Twenty Workspace
+
+Before importing data, prepare your Twenty workspace:
+
+### Create Custom Objects and Fields
+
+1. Go to **Settings → Data Model**
+2. Create any custom objects you need
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, select options, etc.)
+
+
+ **Fields must exist before import.**
+
+ The CSV import creates records, not fields. Create all custom fields in Settings → Data Model before importing.
+
+
+### Invite Your Team
+
+
+ **Invite users BEFORE importing data.**
+
+ If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.
+
+
+1. **Ayarlar → Üyeler** bölümüne gidin
+2. Invite all team members
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export from Your Current CRM
+
+Export your data from your current CRM:
+
+1. Look for an **Export** function (usually under Settings, Data Management, or Admin)
+2. Export to **CSV format** when possible
+3. Export each object type separately (Companies, Contacts, Deals, etc.)
+4. Include all fields you want to migrate
+
+**Export these objects (in this order for reference):**
+
+1. Companies / Accounts / Organizations
+2. Contacts / People
+3. Deals / Opportunities
+4. Notes and Activities
+5. Özel nesneler
+
+## Step 5: Clean and Format Your Data
+
+Open each exported CSV in a spreadsheet application and prepare it for Twenty.
+
+### Remove Duplicates
+
+1. Sort by the unique field (email for People, domain for Companies)
+2. Remove or merge duplicate rows
+3. Verify no duplicates exist in Twenty already
+
+### Format Fields Correctly
+
+| Field Type | Required Format |
+| ----------------- | ------------------------------------------------- |
+| **Domain** | `https://domain.com` |
+| **E-posta** | `name@domain.com` (must be unique) |
+| **Date** | `YYYY-MM-DD` |
+| **Phone** | Three columns: Number, Country Code, Calling Code |
+| **Boolean** | `TRUE` or `FALSE` (uppercase) |
+| **Select fields** | Use API names, not display labels |
+
+
+ **Domain format is critical.**
+
+ Use `https://domain.com` (not `domain.com` or `www.domain.com`). This matches Twenty's format and prevents duplicates when you connect email/calendar sync.
+
+
+See [How to Prepare Your CSV Files](/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting requirements for all field types.
+
+### Add Relation Columns
+
+To link records (e.g., People to Companies), add a column with the parent's unique identifier.
+
+**Example: People CSV with Company link**
+
+```csv
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+See [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions on linking records.
+
+### Update User References
+
+If your data includes user assignments (Owner, Assignee):
+
+1. Add a column with the **user's email** (not just their ID from the old system)
+2. Use the same email addresses that users used to join your Twenty workspace
+
+See [How to Prepare Your CSV Files](/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files) for complete formatting guide.
+
+## Step 6: Import to Twenty
+
+
+ **Import Order Matters!**
+
+ Always import in this order:
+
+ 1. **Companies** first (no dependencies)
+ 2. **People** second (link to Companies)
+ 3. **Opportunities** third (link to Companies/People)
+ 4. **Notes and Tasks** (link to records)
+ 5. **Custom objects** following their dependencies
+
+ The parent record must exist before you can reference it.
+
+
+### Import Each Object
+
+For each CSV file, in order:
+
+1. Navigate to the object in Twenty
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map relation columns (like `companyDomain`) to relation fields
+5. Review and fix any errors in the UI
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+**Detailed guides:**
+
+* [How to Import Companies](/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv)
+* [How to Import Contacts](/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+
+## Step 7: Large Migrations (50,000+ Records)
+
+For large migrations:
+
+| Volume | Recommended Approach |
+| ----------------------- | ----------------------------- |
+| Under 10,000 records | Single CSV import |
+| 10,000 - 50,000 records | Split into multiple CSV files |
+| 50,000+ records | Use the API |
+
+**For API imports:**
+
+* Faster and more reliable for large datasets
+* Supports batch operations (up to 60 records per call)
+* See [How to Import Data via API](/l/tr/user-guide/data-migration/how-tos/import-data-via-api)
+
+## Step 8: Post-Migration Setup
+
+After importing data, complete your workspace configuration:
+
+### Recreate Views
+
+* Set up saved views with filters, sorts, and column configurations
+* Create any kanban or calendar views you need
+
+### Recreate Workflows
+
+* Rebuild your automations in **Settings → Workflows**
+* Start with the most critical workflows
+* Test each one before relying on it
+
+### Configure Roles and Permissions
+
+* Set up roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Connect Email and Calendar
+
+* Each user connects their own account in **Settings → Accounts**
+* Twenty will start syncing emails to contact records
+* See [Email & Calendar](/l/tr/user-guide/calendar-emails/overview)
+
+### Train Your Team
+
+* Walk through the new interface together
+* Document any team-specific processes
+
+## Sık Görülen Sorunlar ve Çözümleri
+
+| Issue | Cause | Solution |
+| ----------------------- | --------------------------- | ------------------------------------------------------------------------------------ |
+| **Duplicate errors** | Email/domain already exists | Remove duplicates from file, or include unique identifier to update existing records |
+| **Relation not found** | Parent record doesn't exist | Import parent objects first (Companies before People) |
+| **Missing fields** | Custom field doesn't exist | Create field in Settings → Data Model before importing |
+| **Select field errors** | Using display labels | Use API names (enable Advanced mode in Settings to find them) |
+| **User relation empty** | User hasn't accepted invite | Ensure all users accept invitations before importing |
+
+See [How to Fix Import Errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors) for detailed troubleshooting steps.
+
+## Taşındıktan Sonra Kontrol Listesi
+
+### Data Integrity
+
+All records imported (compare counts with source system)
+Relations working correctly (People linked to Companies)
+User assignments mapped correctly (Owner, Assignee)
+Custom fields populated
+No unexpected duplicates
+
+### Yapılandırma
+
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync connected
+
+### Team Readiness
+
+Team trained on new system
+Old CRM access plan decided (keep for reference? When to disable?)
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in Twenty.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload them manually, migrate via API, or contact our team for assistance.
+
+
+
+ Yes, we recommend keeping your old CRM running until you've verified the migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Depends on data volume and complexity. Small migrations (under 10,000 records) can be done in a few hours. Large migrations may take several days including data cleanup and testing.
+
+
+
+## Yardıma mı ihtiyacınız var?
+
+For complex migrations or large datasets:
+
+* **Guided setup:** Book a 4-hour onboarding pack
+* **Full migration service:** Our partners can handle the entire migration
+
+Contact [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/tr/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
new file mode 100644
index 0000000000..f667a180d6
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx
@@ -0,0 +1,171 @@
+---
+title: Kendi Barındırma'dan Bulut'a Geçiş
+description: Step-by-step guide to migrate your Twenty self-hosted instance to Twenty Cloud.
+---
+
+## Genel Bakış
+
+This guide walks you through migrating your data from a Twenty self-hosted instance to Twenty Cloud. The process involves setting up your cloud workspace, exporting your data, and re-importing it.
+
+Views, workflows, and roles must be recreated manually after migration. Plan time for this configuration work.
+
+## Step 1: Create Your Cloud Workspace
+
+1. Go to [app.twenty.com](https://app.twenty.com) and create a new workspace
+2. Complete the initial setup wizard
+3. Note your new workspace URL
+
+## Step 2: Recreate Your Data Model
+
+Before importing data, recreate your custom objects and fields:
+
+1. Go to **Settings → Data Model** in your cloud instance
+2. Create custom objects that match your self-hosted setup
+3. Add custom fields to standard and custom objects
+4. Configure field settings (unique, required, etc.)
+
+Take screenshots of your self-hosted data model for reference, or keep both instances open side by side.
+
+## Step 3: Invite All Users
+
+
+ **Critical: Invite users BEFORE importing data.**
+
+ Users must accept their invitations before you import any records that reference them (like Account Owner fields). If users don't exist yet, those relations cannot be mapped.
+
+
+1. Go to **Settings → Members** in your cloud instance
+2. Invite all team members who had accounts on self-hosted
+3. **Wait for everyone to accept** their invitation
+4. Verify all users appear in your Members list
+
+## Step 4: Export Data from Self-Hosted
+
+Export each object from your self-hosted instance:
+
+1. Navigate to each object (Companies, People, Opportunities, etc.)
+2. Configure the view to show **all columns** you want to migrate
+3. Click **⋮ → Export view**
+4. Save each CSV file with a clear name (e.g., `companies-export.csv`)
+
+**Export in this order** (for reference when importing):
+
+1. Şirketler
+2. İnsanlar
+3. Fırsatlar
+4. Custom objects (following their dependencies)
+5. Tasks, Notes
+
+## Step 5: Update Workspace Member References
+
+The exported CSVs contain user IDs from your self-hosted instance. These IDs won't match your cloud instance, so you need to replace them with emails.
+
+**For each CSV file with user references (Owner, Assignee, etc.):**
+
+1. Open the CSV in a spreadsheet application
+2. Add a new column next to each user ID column (e.g., `accountOwnerEmail` next to `accountOwnerId`)
+3. Fill in the **email address** of each user
+4. You can delete the old ID column or leave it (it will be skipped during import)
+
+**Example:**
+
+Önce:
+
+```csv
+name,domain,accountOwnerId
+Acme Corp,https://acme.com,old-uuid-123
+```
+
+Sonra:
+
+```csv
+name,domain,accountOwnerEmail
+Acme Corp,https://acme.com,john@yourcompany.com
+```
+
+Use the same email addresses that users used to accept their cloud workspace invitation.
+
+## Step 6: Plan Your Import Order
+
+Import files in the correct order to maintain relationships:
+
+1. **Companies** first (no dependencies)
+2. **People** second (link to Companies)
+3. **Opportunities** third (link to Companies and People)
+4. **Custom objects** (following their dependencies)
+5. **Tasks and Notes** last (link to other records)
+
+See [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for details on maintaining relationships.
+
+## Step 7: Import to Cloud
+
+For each CSV file, in order:
+
+1. Navigate to the object in your cloud instance
+2. Click **⋮ → Import records**
+3. Upload the CSV file
+4. Map columns to fields:
+ * Map user email columns to the appropriate relation fields
+ * Map other columns as usual
+5. Review and fix any errors
+6. Confirm the import
+7. Verify a few records before proceeding to the next file
+
+## Step 8: Recreate Configuration
+
+After importing data, manually recreate:
+
+### Görünümler
+
+* Recreate saved views with filters, sorts, and column configurations
+* Set up any kanban or calendar views
+
+### İş Akışları
+
+* Recreate automations in **Settings → Workflows**
+* Test each workflow before relying on it
+
+### Roles and Permissions
+
+* Configure roles in **Settings → Roles**
+* Assign users to appropriate roles
+
+### Entegrasyonlar
+
+* Reconnect email and calendar sync for each user
+* Reconfigure any API integrations with new API keys
+
+## Taşındıktan Sonra Kontrol Listesi
+
+All data imported successfully
+Relations between objects working correctly
+User assignments (Owner, Assignee) mapped correctly
+Views recreated
+Workflows recreated and tested
+Roles and permissions configured
+Email/calendar sync reconnected
+API integrations updated with new keys
+
+## FAQ
+
+
+
+ Not currently. Workflows must be recreated manually in your cloud instance.
+
+
+
+ File attachments are not included in CSV exports. You'll need to re-upload any attachments manually, migrate them via API or contact our team for assistance with large migrations.
+
+
+
+ Yes, we recommend keeping your self-hosted instance running until you've verified the cloud migration is complete. Just be careful not to create new data in both places.
+
+
+
+ Records referencing that user will fail to import or the relation will be empty. Ensure all users accept invitations before importing data.
+
+
+
+## Yardıma mı ihtiyacınız var?
+
+For complex migrations or large datasets, contact us at [contact@twenty.com](mailto:contact@twenty.com) or explore our [Implementation Services](/l/tr/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
new file mode 100644
index 0000000000..c700bd2864
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx
@@ -0,0 +1,270 @@
+---
+title: CSV Dosyalarınızı Hazırlayın},{
+description: Verilerinizi Twenty'ye içe aktarmak için biçimlendirmeye yönelik eksiksiz adım adım kılavuz.
+---
+
+## Genel Bakış
+
+Bu kılavuz, başarılı bir içe aktarma için CSV dosyanızı hazırlamanızda size rehberlik eder. Hataları önlemek için bu adımları izleyin.
+
+## Adım 1: Dosya Gereksinimlerini Kontrol Edin
+
+Başlamadan önce dosyanızın şu gereksinimleri karşıladığından emin olun:
+
+| Gereksinim | Ayrıntılar |
+| ---------------- | ------------------------------- |
+| **Biçim** | CSV, XLSX veya XLS |
+| **Boyut sınırı** | Dosya başına 10.000 kayıt |
+| **Kodlama** | UTF-8 önerilir |
+| **Yapı** | Dosya başına tek bir nesne türü |
+
+10.000 kayıttan büyük veri kümeleri için, birden çok dosyaya bölün veya [API ile içe aktarma](/l/tr/user-guide/data-migration/how-tos/import-data-via-api) kullanın.
+
+## Adım 2: Örnek Dosyayı İndirin
+
+**Bu en önemli adımdır.** Örnek dosya, Twenty'nin beklediği tam sütun adlarını ve biçimi gösterir.
+
+1. Nesne görünümüne gidin (Kişiler, Şirketler vb.)
+2. **⋮** üzerine tıklayın → **Kayıtları içe aktar**'ı seçin
+3. **Örnek dosyayı indir**'e tıklayın
+4. Bu dosyayı şablonunuz olarak kullanın
+
+**İpucu:** Bunun yerine birkaç mevcut kaydı dışa aktarın. Bu, verilerin nasıl biçimlendirilmesi gerektiğine dair gerçek örnekler sağlar ve içe aktarma sırasında sütun adları otomatik olarak eşleştirilir.
+
+## Adım 3: Yinelenen Değerleri Kaldırın
+
+Twenty bazı alanlarda benzersizliği zorunlu kılar. Yinelenenler içe aktarma hatalarına neden olur.
+
+| Nesne | Benzersiz Alanlar |
+| ----------------- | ---------------------------------------------------------------- |
+| **Kişiler** | `id`, `email` |
+| **Şirketler** | `id`, `domain` |
+| **Özel nesneler** | `id` ve benzersiz olarak işaretlediğiniz diğer herhangi bir alan |
+
+**İçe aktarmadan önce:**
+
+1. E-tablonuzu benzersiz alana göre sıralayın (e-posta veya alan adı)
+2. Yinelenen satırları kaldırın veya birleştirin
+3. Twenty'de zaten var olan yinelenen kayıtları kontrol edin
+
+**Geçici olarak silinmiş kayıtlar benzersizliğe dahildir.** Komut Menüsü → Silinen kayıtları gör bölümündeki kayıtlar yinelenen hatalarına neden olur. Onları kalıcı olarak silin ya da geri yükleyip güncelleyin.
+
+## Adım 4: Her Alan Türünü Doğru Biçimlendirin
+
+Farklı alan türleri belirli biçimler gerektirir. İşte eksiksiz başvuru:
+
+### Metin Alanları
+
+* Özel bir biçimlendirme gerekmez
+* Baştaki/sondaki boşluklar otomatik olarak kırpılır
+
+### E-posta Alanları
+
+* Geçerli e-posta biçiminde olmalıdır: `name@domain.com`
+* Benzersiz olmalıdır (dosyada veya Twenty'de yinelenen olmamalıdır)
+* Ek e-postalar için, **E-postalar / Ek E-postalar** sütununda şu biçimi kullanın:
+
+```
+[\"jane@twenty.com\",\"jane.doe@twenty.com\"]
+```
+
+### Alan Adı Alanları
+
+* **Önerilen biçim**: `https://domain.com`
+* Bu, posta kutusu/takvim eşitlemesinde kullanılan biçimle aynıdır (yinelenenleri önler)
+* Her iki sütunu da doldurun:
+ * **Alan Adı / Alan Adı Etiketi**: `domain.com`
+ * **Alan Adı / Alan Adı URL'si**: `https://domain.com`
+* Dosyanız içinde ve Twenty'de benzersiz olmalıdır
+
+### Telefon Alanları
+
+Telefon, birden çok sütun gerektiren **iç içe bir alan**dır:
+
+| Sütun | Örnek |
+| -------------------------------------------- | ------------ |
+| **Telefonlar / Birincil Telefon Numarası** | `4159095555` |
+| **Telefonlar / Birincil Telefon Ülke Kodu** | `US` |
+| **Telefonlar / Birincil Telefon Arama Kodu** | `+1` |
+
+### Address Fields
+
+Address is a **nested field** with multiple columns (some can be left empty):
+
+* **Address / Address 1**: Street address line 1
+* **Address / Address 2**: Street address line 2 (optional)
+* **Address / City**: City name
+* **Address / State**: State or province
+* **Address / Country**: Country name
+* **Address / Post Code**: Postal/ZIP code
+
+### Date Fields
+
+Use consistent formatting throughout your file:
+
+* `YYYY-MM-DD` (recommended): `2024-03-15`
+* `MM/DD/YYYY`: `03/15/2024`
+* `DD/MM/YYYY`: `15/03/2024`
+* ISO 8601: `2024-03-15T10:30:00Z`
+
+### Number Fields
+
+* Numbers only (no text)
+* Use period for decimals: `1234.56`
+* No thousands separators (not `1,234.56`)
+
+### Currency Fields
+
+Currency is a **nested field** requiring two columns that **both must be filled**:
+
+| Column | Örnek |
+| --------------------- | --------- |
+| **Amount / Amount** | `1234.56` |
+| **Amount / Currency** | `USD` |
+
+### Boolean Fields
+
+Use uppercase: `TRUE` or `FALSE`
+
+Lowercase `true` or `false` will not work.
+
+### Seçim Alanları
+
+Use the **API name** of the option, not the display label.
+
+**How to find API names:**
+
+1. Go to **Settings → Data Model**
+2. Select the object and field
+3. Enable **Advanced mode** (toggle at bottom right)
+4. Copy the API name (e.g., `OPTION_1`, not "Option 1")
+
+New select options are not created automatically. Add them in **Settings → Data Model** before importing.
+
+### Multi-Select Fields
+
+Use API names in array format:
+
+```
+["VALUE1","VALUE2"]
+```
+
+### Array Fields
+
+Use JSON array format:
+
+```
+["value1","value2"]
+```
+
+### Rating Fields
+
+Use the format: `RATING_1`, `RATING_2`, `RATING_3`, `RATING_4`, or `RATING_5`
+
+### Links/URL Fields
+
+Fill both columns:
+
+* **Links / Link Label**: `Twenty`
+* **Links / Link URL**: `https://twenty.com`
+
+For secondary links, use the **Links / Secondary Links** column:
+
+```
+[{"url":"https://twenty.com","label":"Twenty"}]
+```
+
+### JSON Fields
+
+Use valid JSON format:
+
+```
+{"key":"value","key2":"value2"}
+```
+
+### ID Fields
+
+* **Optional**: Twenty auto-generates IDs if not provided
+* **Format**: UUID (e.g., `c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
+* **Use case**: Include ID to update existing records instead of creating new ones
+
+## Step 5: Add Relation Columns (If Linking Records)
+
+To link records to other objects (e.g., People to Companies), add a column with the unique identifier of the related record.
+
+**Example**: Linking People to Companies
+
+Add a column to your People CSV:
+
+```
+firstName,lastName,email,companyDomain
+John,Smith,john@acme.com,https://acme.com
+Jane,Doe,jane@widgets.co,https://widgets.co
+```
+
+**Important rules for relations:**
+
+* The parent record must already exist in Twenty
+* Use the **Domain URL** format (`https://domain.com`), not the label
+* Map only ONE unique identifier (don't include both `companyId` AND `companyDomain`)
+* For Workspace Members, use their **email** (not name)
+
+
+ **Import Order Matters!**
+
+ Import the "one" side before the "many" side:
+
+ 1. **Companies** first
+ 2. **People** second (with company reference)
+ 3. **Opportunities** third
+
+ The parent record must exist before you can reference it.
+
+
+See [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) for detailed instructions.
+
+## Step 6: Ensure Fields Exist in Twenty
+
+The import creates **records**, not **fields**. All fields you want to import must already exist in your data model.
+
+**Before importing:**
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Create any custom fields you need
+4. Note the exact field names (they must match your column headers)
+
+## Step 7: Final Checklist
+
+Before uploading your file, verify:
+
+File is CSV, XLSX, or XLS format
+File has fewer than 10,000 records
+Encoding is UTF-8
+No duplicate emails (for People) or domains (for Companies)
+Dates use consistent format throughout
+Domains use `https://domain.com` format
+Boolean fields use `TRUE` or `FALSE` (uppercase)
+Select fields use API names, not display labels
+All custom fields exist in Settings → Data Model
+Parent records imported before child records
+Relation columns reference existing records
+
+## Common Mistakes to Avoid
+
+| Mistake | Solution |
+| -------------------------------------------- | ------------------------------------- |
+| Using `true` instead of `TRUE` | Boolean values must be uppercase |
+| Using display labels for Select fields | Find and use API names in Settings |
+| Importing People before Companies | Always import parent objects first |
+| Missing currency code for Currency fields | Fill both Amount and Currency columns |
+| Wrong domain format | Use `https://domain.com` consistently |
+| Mapping multiple unique fields for relations | Map only ONE (domain OR id, not both) |
+
+## Sonraki Adımlar
+
+Your file is ready! Now:
+
+* [Import Companies](/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv) (import these first)
+* [Import Contacts](/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv)
+* [Fix any import errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
new file mode 100644
index 0000000000..39a14d1522
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx
@@ -0,0 +1,198 @@
+---
+title: Update Existing Records via Import
+description: Complete step-by-step guide to bulk updating records using CSV import.
+---
+
+## Genel Bakış
+
+Need to update many records at once? Instead of editing them one by one, use the CSV import to bulk update existing records.
+
+**Kullanım alanları:**
+
+* Update job titles for multiple people
+* Change company information in bulk
+* Add data to new custom fields
+* Correct data errors across many records
+
+## Nasıl Çalışır
+
+When you import a file containing a **unique identifier** that matches an existing record, Twenty updates that record instead of creating a duplicate.
+
+| If unique identifier... | Twenty will... |
+| -------------------------- | ------------------------------------------------ |
+| Matches an existing record | **Update** the existing record |
+| Doesn't match any record | **Create** a new record |
+| Is missing from your file | **Create** a new record (with auto-generated ID) |
+
+
+ **Multi-Select fields are overwritten, not merged.**
+
+ If a record has `Option A` and `Option B` selected, and you import `["Option C"]`, the record will only have `Option C` after import. The import replaces all previous selections—it does not add to them.
+
+ To keep existing values, include them all in your import: `["Option A","Option B","Option C"]`
+
+
+## Step 1: Export Your Current Data
+
+First, export the records you want to update:
+
+1. Navigate to the object (People, Companies, etc.)
+2. **Add the columns you need** — click **Options → Fields** to show the fields you want to update
+3. **Filter if needed** — narrow down to only the records you want to update
+4. Click **⋮** → **Export view**
+5. Save the CSV file
+
+**Why export first?** The exported file has the correct format, includes unique identifiers, and maps automatically during import.
+
+### What Gets Exported
+
+* All visible columns in your current view
+* The record's unique identifiers (`id`, `email`, `domain`)
+* Current field values you can modify
+
+## Step 2: Edit the CSV File
+
+Open the exported file in your spreadsheet application (Excel, Google Sheets, etc.):
+
+1. **Keep the unique identifier column** — don't delete `id`, `email`, or `domain`
+2. **Update the values** in the columns you want to change
+3. **Remove columns you don't need to update** (optional, but cleaner)
+4. **Don't change unique identifier values** — or Twenty will create new records
+
+### Example: Updating Job Titles
+
+**Exported file:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
+```
+
+**After your edits:**
+
+```csv
+id,email,firstName,lastName,jobTitle
+550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
+550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
+550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
+```
+
+
+ **Don't change the unique identifier values.**
+
+ If you change `john@acme.com` to `john.smith@acme.com`, Twenty will create a new record instead of updating the existing one.
+
+
+## Step 3: Import the Updated File
+
+1. Navigate to the object
+2. Click **⋮** → **Import records**
+3. Upload your edited CSV file
+4. **Ensure the unique identifier is mapped** — verify `email`, `domain`, or `id` is mapped correctly
+5. Review the field mappings
+6. Check for errors
+7. Click **Confirm**
+
+Twenty matches records by the unique identifier and updates them with new values.
+
+## Choosing the Right Unique Identifier
+
+| Nesne | Recommended | Alternative | Notlar |
+| ----------------- | ---------------- | ----------- | ---------------------------- |
+| **People** | `e-posta` | `id` | Email is human-readable |
+| **Şirketler** | `alan Adı` | `id` | Domain is human-readable |
+| **Özel nesneler** | Any unique field | `id` | Use your custom unique field |
+
+**Use only ONE unique identifier.** Don't map both `email` AND `id`. This can cause confusion and errors.
+
+### Using Custom Unique Fields
+
+If you have a custom field marked as unique (like an external ID from another system):
+
+1. Include that field in your export and import
+2. Map it during import
+3. Twenty will match on that field
+
+## Step 4: Verify the Updates
+
+After importing:
+
+1. Open a few updated records
+2. Verify the changes were applied
+3. Check that no duplicate records were created
+
+## What About Fields Not in Your File?
+
+**Fields not included in your import file remain unchanged.**
+
+| Your file includes... | Sonuç |
+| ---------------------------- | ------------------------------------------------------ |
+| `email`, `jobTitle` | Only `jobTitle` is updated; other fields stay the same |
+| `email`, `jobTitle`, `phone` | `jobTitle` and `phone` are updated |
+
+This means you only need to include the fields you want to change (plus the unique identifier).
+
+## Combining Updates and New Records
+
+You can update existing records AND create new ones in the same import:
+
+```csv
+email,firstName,lastName,jobTitle
+john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
+newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
+```
+
+## Common Mistakes to Avoid
+
+| Mistake | Problem | Sonuç | Solution |
+| ------------------------------ | ------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
+| **Changing unique identifier** | Changed `john@acme.com` to `john.smith@acme.com` | Creates new record instead of updating | Keep unique identifiers unchanged |
+| **Multiple unique fields** | Mapping both `email` AND `id` | Potential matching conflicts | Map only ONE unique identifier |
+| **No unique identifier** | File only has `firstName`, `lastName`, `jobTitle` | All rows create new records | Always include `email`, `domain`, or `id` |
+| **Case mismatch** | File has `John@acme.com` but Twenty has `john@acme.com` | Creates new record | Export from Twenty to get exact values |
+
+## FAQ
+
+
+
+ Records with unique identifiers that don't match existing records will be created as new records. This lets you update and create in the same import.
+
+
+
+ Yes, leave the cell empty in your CSV. The import will clear that field's value on the existing record.
+
+
+
+ Fields not in your import file remain unchanged on existing records. Only fields you include are updated.
+
+
+
+ Evet! Include the relation's unique identifier (e.g., `companyDomain`) and map it to the relation field. The relation will be updated.
+
+
+
+ During the import review step, Twenty shows you how many records will be updated vs. created based on unique identifier matches.
+
+
+
+ There's no automatic undo. We recommend exporting your data as a backup before making bulk updates.
+
+
+
+## En İyi Uygulamalar
+
+1. **Export first** — always start from an export to ensure correct format
+2. **Backup before updating** — export your data before making bulk changes
+3. **Test with a few records** — try updating 5-10 records first before doing a large batch
+4. **Use human-readable identifiers** — `email` and `domain` are easier to verify than `id`
+5. **Only include necessary columns** — fewer columns means less chance for errors
+
+## Sorun Giderme
+
+Having issues? Check:
+
+* [How to Fix Import Errors](/l/tr/user-guide/data-migration/how-tos/fix-import-errors)
+* [Uniqueness Constraints](/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints)
+* [Field Mapping Reference](/l/tr/user-guide/data-migration/capabilities/field-mapping)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-migration/overview.mdx b/packages/twenty-docs/l/tr/user-guide/data-migration/overview.mdx
new file mode 100644
index 0000000000..8ffe40cd07
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-migration/overview.mdx
@@ -0,0 +1,89 @@
+---
+title: Veri Geçişi
+description: CSV dosyaları veya API aracılığıyla CRM verilerinizi içe ve dışa aktarın.
+image: /images/user-guide/import-export-data/cloud.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## İçe Aktarma Yöntemleri
+
+Twenty, veri içe aktarmak için iki ana yöntemi destekler:
+
+| Yöntem | En Uygun | Hacim Sınırı |
+| ----------------------- | ---------------------------------------- | ------------------------- |
+| **CSV İçe Aktarma** | Standart geçişler, düzenli güncellemeler | Dosya başına 10.000 kayıt |
+| **API ile İçe Aktarma** | Büyük ölçekli geçişler, otomasyon | Sınırsız |
+
+Çok büyük veri kümeleri (yüz binlerce kayıt) için API'yi kullanın. Gerekirse bu betiklerin çalıştırılmasına [uygulama ortaklarımız](/l/tr/user-guide/getting-started/capabilities/implementation-services) yardımcı olabilir.
+
+## CSV İçe Aktarmanın Temelleri
+
+CSV, XLSX veya XLS dosyaları kullanarak herhangi bir nesnenin verilerini içe aktarabilirsiniz. Her dosya **yalnızca bir tür nesne** içermelidir (ör. yalnızca Kişiler kayıtları).
+
+**Alanlar içe aktarmadan önce mevcut olmalıdır.** Bir CSV dosyası yüklemek kayıtlar oluşturur, ancak alanları oluşturmaz. Gerekiyorsa özel alanları önce **Ayarlar → Veri Modeli** altında oluşturun.
+
+### Adımlar
+
+1. Veri içe aktarmak istediğiniz nesneye gidin
+2. Sağ üstteki **⋮** simgesine tıklayın (bu Komut Menüsü'dür) ve **Kayıtları İçe Aktar**'a tıklayın
+3. Verinizin beklenen biçimde olduğundan emin olmak için şablon dosyasını indirin
+4. Biçimlendirilmiş CSV dosyanızı yükleyin
+5. Sütunlarınızı Twenty alanlarına eşleştirin
+6. Hataları (sarıyla vurgulanan) gözden geçirin ve kullanıcı arayüzünde doğrudan düzenleyerek düzeltin
+7. İçe aktarmayı onaylayın
+
+### Nesneler arasındaki ilişkileri içe aktarma
+
+CSV içe aktarma işlevini kullanarak nesneler arasındaki ilişkileri içe aktarabilirsiniz. İlgili nesneye, bu nesnedeki benzersiz bir alanı kullanarak referans vermeniz gerekir: `id`, People ve Çalışma Alanı Üyeleri için `email`, şirketler için `domain`, diğer nesneler için veri modelinde benzersiz olarak ayarlanmış herhangi bir başka alan.
+
+**Silinen kayıtlar benzersizlik hesabına dahildir.** Geçici olarak silinen kayıtlar (Komut Menüsü → Silinen kayıtları gör altında görünür) benzersizlik kontrollerine dahildir. Silinmiş bir kayıtla aynı benzersiz değere sahip bir kaydı içe aktarırsanız, silinmiş kayıt geri yüklenir.
+
+
+ **İçe Aktarma Sırası Önemlidir!**
+
+ İlişkili nesneleri içe aktarırken dosyaları şu sırayla yükleyin:
+
+ 1. **Şirketler** önce (ilişkilerin "bir" tarafı)
+ 2. **Kişiler** ikinci (companyId aracılığıyla şirketlere bağlı)
+ 3. **Fırsatlar** üçüncü (şirketlere/kişilere bağlı)
+ 4. **İlişkileri olan özel nesneler** en son
+
+ Neden? Bire-çok ilişkinin "bir" tarafı, ona referans verebilmeden önce mevcut olmalıdır. Örneğin, o şirketin kimliğine sahip bir Kişi içe aktarmadan önce Şirket kaydının mevcut olması gerekir.
+
+
+Nasıl ilerleyeceğinize ilişkin adım adım yönergeler için lütfen [bu makaleye](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) bakın.
+
+## Verileri Dışa Aktar
+
+Yedekleme, raporlama veya geçiş için çalışma alanı verilerinizi dışa aktarın.
+
+### Adımlar
+
+1. Dışa aktarmak istediğiniz nesneye gidin
+2. Görünümü ihtiyaç duyduğunuz sütunlarla yapılandırın
+3. **⋮** → **Görünümü Dışa Aktar**'a tıklayın
+4. CSV dosyasını kaydedin
+
+**Yalnızca görünür sütunlar dışa aktarılır.** CSV dosyası yalnızca mevcut görünümünüzde gösterilen sütunları içerir. Hangi verilerin dahil edileceğini kontrol etmek için dışa aktarmadan önce sütunları ekleyin veya gizleyin.
+
+**Dışa aktarma sınırları**: Her dışa aktarma için en fazla 20.000 kayıt.
+
+## İzinler
+
+Veri içe ve dışa aktarma belirli izinler gerektirir:
+
+* **İçe Aktarma**: "Import CSV" iznini gerektirir
+* **Dışa Aktarma**: "Export CSV" iznini gerektirir
+
+Bu izinlere sahip değilseniz çalışma alanı yöneticinizle iletişime geçin.
+
+## Sonraki Adımlar
+
+* [CSV dosyalarınızı hazırlayın](/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files)
+* [Nesneler arasındaki ilişkileri içe aktarın](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
+* [Büyük veri kümeleri için API üzerinden içe aktarın](/l/tr/user-guide/data-migration/how-tos/import-data-via-api)
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/fields.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/fields.mdx
new file mode 100644
index 0000000000..d9b083b5e2
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/fields.mdx
@@ -0,0 +1,122 @@
+---
+title: Alanlar
+description: Alanların rolünü anlayın ve bunları nasıl yöneteceğinizi öğrenin.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Alanlar Hakkında
+
+Alanlar bir elektronik tablo içindeki sütunlar gibidir. Metin, sayı veya tarih gibi farklı türde verileri depolarlar. Alanlar standart (gömülü) veya özel (kendi oluşturduğunuz) olabilir.
+
+### Standart Alanlar
+
+Standart alanlar, yaygın iş ihtiyaçlarını karşılamak için Twenty ile yerleşik olarak gelir.
+
+Örneğin, `Ad` ve `Soyad` `Kişi` nesnesinde standart alanlardır. Bireylerin isimleri için metin verileri depolarlar.
+
+Standart alanları silemezsiniz, ancak ihtiyacınız yoksa devre dışı bırakabilirsiniz.
+
+Ayrıca standart `SELECT` türü alanların seçeneklerini özelleştirebilirsiniz; örneğin Fırsatlar'daki `Stage` alanının seçeneklerini.
+
+
+
+### Özel Alanlar
+
+Özel alanlar herhangi bir nesneye eklenebilir. Metin, sayı, tarih, açılan seçimler ve daha fazlasını depolayabilirsiniz. Özel alanları, işinize özgü bilgileri izlemek için kullanın.
+
+Örneğin, SpaceX için özel bir alan `Roket Aktif Durumu` olabilir, çalışır durumda olup olmadığını gösterecek.
+
+
+
+## Alan Türleri
+
+Twenty çeşitli alan türlerini destekler:
+
+| Tür | Açıklama | Örnek |
+| ------------- | ------------------------------------------------------------------- | ---------------------- |
+| Adres | Sokak, şehir, eyalet, ülke, posta kodu içeren yapılandırılmış adres | Ofis Adresi |
+| Dizi | Metin değerlerinin listesi | Etiketler |
+| Boolean | Doğru/Yanlış onay kutusu | Aktif mi |
+| Para Birimi | Para birimi koduyla parasal değer | Anlaşma Tutarı (USD) |
+| Tarih | Tarih değerleri | Kapanış Tarihi |
+| Tarih ve Saat | Saat içeren tarih | Toplantı Saati |
+| Alan Adı | Web sitesi alan adı (Şirketler için kullanılır) | acme.com |
+| E-posta | E-posta adresleri (birincil + ek) | Kişi E-postası |
+| JSON | Yapılandırılmış JSON verisi | Özel meta veri |
+| Bağlantılar | Etiketli URL'ler (birincil + ikincil) | Web Sitesi, LinkedIn |
+| Uzun Metin | Çok satırlı metin | Açıklama, Notlar |
+| Çoklu Seçim | Önceden tanımlı bir listeden birden fazla seçim | Etiketler, Kategoriler |
+| Sayı | Sayısal değerler (tam sayılar veya ondalık sayılar) | Miktar, Puan |
+| Telefon | Ülke kodlu telefon numaraları | İş Telefonu |
+| Puan | Yıldız derecelendirmesi (1-5) | Öncelik, Puan |
+| İlişki | Diğer nesnelerdeki kayıtlara bağlantılar | Şirket → Kişiler |
+| Seç | Önceden tanımlı bir listeden tek seçim | Aşama, Durum |
+| Metin | Tek satırlık metin | Ad, Başlık |
+
+## Özel Alan Oluştur
+
+Herhangi bir nesneye özel bir alan eklemek için şu adımları izleyin:
+
+1. Sol kenar çubuğundaki `Ayarlar`a gidin.
+2. `Veri Modeli`ne gidin, ardından özelleştirmek istediğiniz nesneyi seçin.
+3. `Alan Ekle`ye tıklayarak devam edin.
+4. İhtiyaçlarınıza uygun bir alan adı ve türü seçin. Daha iyi anlama için bir alan açıklaması eklemeyi düşünün.
+
+Yeni oluşturulan alanınız artık uygulamanın alanları içinde kullanılabilir durumda. Belirli bir görünümde görüntülemek için, seçenekler menüsüne tıklayın ve ardından `Alanlar`ı seçin.
+
+
+
+**Hızlı yol:** Herhangi bir nesne tablosunun sağ üst kısmındaki **+** düğmesine tıklayın, ardından `Alanları özelleştir`i seçin. Bu sizi doğrudan Veri Modeli ayarlarına götürür.
+
+
+
+## Bir alanı devre dışı bırakın
+
+Verilerinizi kaybetmeden alanı uygulamadan gizlemek için devre dışı bırakabilirsiniz. Alanı silmek yerine gizleme olarak düşünün.
+
+İşte bu işlemi nasıl yapacağınız:
+
+1. Nesne ayarlarınızda devre dışı bırakmak istediğiniz alanı bulun.
+
+2. Alan yanındaki üç noktaya `⋮` tıklayarak menüyü açın.
+
+3. Açılacak listeden `Devre Dışı Bırak`ı seçin.
+
+
+
+Bir alanı devre dışı bıraktığınızda ne olur?
+
+1. **Uygulamada:** Alan kaybolur ve ona yeni değerler ekleyemezsiniz.
+
+2. **Mevcut ilişki:** Eğer bir ilişki alanıysa, mevcut bağlantılar kalır ama yeni bağlantılar oluşturamazsınız.
+
+3. **API erişimi:** Halen alanı ve verilerini API aracılığıyla erişebilirsiniz.
+
+Standart ve Özel Alanları tekrar etkin hale getirebilir veya kalıcı olarak silebilirsiniz.
+
+## Alanları Benzersiz Yap
+
+Farklı kayıtların aynı değere sahip olamaması için bir alanı benzersiz yapın. Örneğin, e-posta adresleri her kişi için benzersizdir.
+
+Benzersizliği ayarlarken bir hata alırsanız, verilerinizde (silinen kayıtlar dahil) yinelenen değerleri kontrol edin.
+
+## Alan Yapılandırma En İyi Uygulamaları
+
+### Adlandırma Kuralları ve Kısıtlamaları
+
+* **Tekil ve çoğul adlar farklı olmalıdır**: GraphQL API'miz için mutasyonlar için farklı adlar gerekmektedir
+* **Korunan alan adları**: bazı adlar sistem kullanımı için ayrılmıştır (ör. `Type`, `Application`)
+
+### Para ve Telefon Alanları
+
+* **Varsayılan para birimi**: veri modeli aracılığıyla yapılandırılabilir
+* **Varsayılan ülke kodları**: telefon alanları için veri modeli aracılığıyla yapılandırılabilir
+
+### Seçim Alanları
+
+* **Her Seçim alanı için varsayılan bir seçenek** seçilebilir
+
+### Kayıt Metin Alanları
+
+* **Her nesnenin bir ana gösterim alanı vardır**: Bu alan sol sütunda görünür ve diğer nesnelerle bağlantı kurulduğunda kaydı temsil eder. Bu bir metin alanı olmalıdır. Örneğin, Kişiler bir kişi bir şirkete bağlantı kurulduğunda `İsim` ana alanını kullanır, şirketin görünümünde isimlerini görürsünüz.
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/objects.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/objects.mdx
new file mode 100644
index 0000000000..e28ca8cf75
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/objects.mdx
@@ -0,0 +1,91 @@
+---
+title: Nesneler
+description: Learn about standard and custom objects in Twenty.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Standard Objects
+
+Standart nesneler, işe başlamanıza yardımcı olmak için çalışma alanınızda önceden tanımlanmış varlıklardır. Bunlar, Twenty kullanıcıları tarafından erişilebilen, paylaşılan bir veri modelinin parçasıdır. Onları olduğu gibi kullanabilir, özelleştirebilir veya devre dışı bırakabilirsiniz.
+
+
+
+### İnsanlar
+
+`İnsanlar` nesnesi, kişilerinizi saklar. Bu nesne, iletişim detayları ve etkileşim geçmişini içerir, böylece tüm müşteri etkileşimlerinizi tek bir yerde görebilirsiniz.
+
+### Şirket
+
+`Şirketler` nesnesi, iş hesaplarınızı saklar. Endüstri, boyut ve konum gibi detayları içerir. Şirketler, hem `İnsanlar` hem de `Fırsatlar` nesnelerine bağlanır.
+
+### Fırsatlar
+
+`Fırsatlar` nesnesi, işle ilgili verileri saklar. It tracks the progression of potential sales, from prospecting to closure, recording stages, deal sizes, associated account, and expected close date. Satış boru hattınızı kanban düzeninde görüntüleyebilirsiniz.
+
+### Notlar
+
+The `Notes` object stores free-form notes that can be attached to People, Companies, Opportunities, and other records. Use notes to capture meeting summaries, important details, or any contextual information.
+
+### Görevler
+
+The `Tasks` object stores to-dos and action items. Tasks can be linked to People, Companies, Opportunities, and other records. Track due dates, assignees, and completion status to stay on top of your follow-ups.
+
+## Özel Nesneler
+
+Custom objects let you store information that's unique to your organization and that standard objects can't handle. Örneğin, SpaceX iseniz, Roketler ve Fırlatmalar için özel bir nesne oluşturmak isteyebilirsiniz.
+
+
+
+### Creating a New Custom Object
+
+Yeni bir özel nesne oluşturmak için:
+
+1. Soldaki kenar çubuğundan Ayarlar'a gidin.
+2. Çalışma Alanı altında, Veri modeline gidin. Burada mevcut Standart ve Özel nesnelerinizin (aktif ve devre dışı) genel görünümünü görebilirsiniz.
+
+
+
+3. Üstteki `+ Yeni nesne` butonuna tıklayın. Adı (tekil ve çoğul olarak), bir simge seçip özel nesneniz için bir açıklama ekleyin ve Kaydet'e tıklayın (sağ üstte). Özel nesne olarak ilanı kullanarak, tekil "ilan" ve çoğul "ilanlar" olur, "Ev sahiplerinin mülklerini sergilemek için oluşturdukları ilanlar." gibi bir açıklamayla.
+
+4. Your custom object is now created and will appear in your sidebar. You can start adding records to it right away.
+
+## Managing Objects
+
+### Deactivating Objects
+
+If you don't need a standard or custom object:
+
+1. Go to Settings → Data Model
+2. Find the object you want to deactivate
+3. Click the toggle to deactivate it
+4. The object will be hidden from your workspace but data is preserved
+
+### Reactivating Objects
+
+To bring back a deactivated object:
+
+1. Go to Settings → Data Model
+2. Look for deactivated objects (they'll be grayed out)
+3. Click the toggle to reactivate it
+4. The object and all its data will be restored
+
+## En İyi Uygulamalar
+
+### When to Create Custom Objects
+
+* **Unique business entities**: Things specific to your industry or process
+* **Complex relationships**: When you need to track connections between multiple entities
+* **Scalable data**: When you might have many instances of something
+
+### When to Use Fields Instead
+
+* **Simple attributes**: Properties that describe existing objects
+* **Categories or labels**: Ways to classify existing records
+* **Single values**: Information that doesn't need its own lifecycle
+
+### Object Naming
+
+* **Use clear, descriptive names**: Make it obvious what the object represents
+* **Follow conventions**: Use singular for the object name, plural for the collection
+* **Consider your team**: Choose names everyone will understand
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/relation-fields.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/relation-fields.mdx
new file mode 100644
index 0000000000..fde597ff15
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/capabilities/relation-fields.mdx
@@ -0,0 +1,92 @@
+---
+title: İlişki Alanları
+description: Connect records across different objects using relation fields.
+---
+
+## Types of Relations
+
+### One-to-Many
+
+One record in Object A can be linked to many records in Object B.
+
+**Example:** One Company can have many People (employees).
+
+### Many-to-One
+
+Many records in Object A can be linked to one record in Object B.
+
+**Example:** Many People can belong to one Company.
+
+### Relations to Multiple Object Types
+
+Some objects can link to multiple object types on one side of the relation.
+
+**Example:** A Note can be attached to one Person AND one Company AND one Opportunity simultaneously. The Note is on the "many" side, connecting to multiple "one" sides.
+
+
+
+Similarly, a Project (on the "one" side) could receive links from multiple People, multiple Companies, and multiple Notes.
+
+
+
+
+ **Import/Export limitation**: Relations pointing to multiple object types are not yet supported for CSV import/export. This is on our roadmap.
+
+
+### Many-to-Many
+
+Many records in Object A can be linked to many records in Object B.
+
+**Example:** Many People can be linked to many Projects, and vice versa.
+
+
+ **Many-to-Many is not yet supported.**
+
+ This relation type is planned for H1 2026. As a workaround, create an intermediate "junction" object (e.g., "Project Assignments") that has Many-to-One relations to both objects.
+
+
+## Creating a Relation Field
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want to add the relation
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the target object(s) to relate to
+6. Configure the relation settings:
+ * **Field name on source object**: The name of the relation field on the object you're editing
+ * **Field name on destination object**: The name of the relation field that will appear on the target object
+ * Relation type (one-to-many, many-to-one)
+7. **Kaydet**'e tıklayın
+
+## Standard Relations
+
+Twenty comes with pre-built relations between standard objects:
+
+| From Object | To Object | Relation Type |
+| ----------- | --------- | ------------- |
+| İnsanlar | Şirketler | Many-to-One |
+| Fırsatlar | Şirketler | Many-to-One |
+| Fırsatlar | İnsanlar | Many-to-One |
+
+## En İyi Uygulamalar
+
+### Planning Relations
+
+* **Map your data model**: Plan relations before creating them
+* **Consider direction**: Think about which object "owns" the relationship
+* **Avoid circular dependencies**: Keep your data model clean
+
+### Naming Relations
+
+* **Use clear names**: Make it obvious what the relation represents
+* **Be consistent**: Use similar naming patterns across relations
+* **Consider both sides**: Name both sides of the relation appropriately
+
+### Performance
+
+* **Don't over-relate**: Too many relations can slow down your workspace
+
+## Limitations
+
+* **Deleting relations** removes the link but not the related records
+* **Circular relations** should be avoided for data integrity
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-fields.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-fields.mdx
new file mode 100644
index 0000000000..99c7a627b1
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-fields.mdx
@@ -0,0 +1,72 @@
+---
+title: Create Custom Fields
+description: Step-by-step guide to adding custom fields to any object.
+---
+
+Custom fields let you capture information specific to your business. Add them to any object—standard or custom.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object you want to add a field to
+3. Click **+ Add Field**
+4. Choose a **field type** (see [Fields](/l/tr/user-guide/data-model/capabilities/fields) for all types)
+5. Enter the **field name** and optional description
+6. Configure field-specific settings (see below)
+7. **Kaydet**'e tıklayın
+
+**Quick method:** Click the **+** at the end of column headers in any table view → **Customize fields**.
+
+## Show the Field in Views
+
+New fields aren't automatically visible. To display:
+
+1. Open the object's table view
+2. Click **Options → Fields**
+3. Click the **eye icon** next to your field to show it
+4. Drag to reorder
+
+## Configuration Options
+
+### For Select / Multi-Select
+
+1. Click **+ Add option** to create choices
+2. Set a **default option** if desired
+3. Drag to reorder options
+
+
+ **Use API names for imports.** Enable **Advanced mode** in Settings to see API names. See [Field Mapping](/l/tr/user-guide/data-migration/capabilities/field-mapping).
+
+
+### For Currency Fields
+
+Set the **default currency** (USD, EUR, etc.) for new records.
+
+### For Phone Fields
+
+Set the **default country code** to pre-fill for new phone numbers.
+
+### Making a Field Unique
+
+Toggle **Unique** to prevent duplicate values across records.
+
+
+ If duplicates exist (including in deleted records), you'll get an error. Clean up duplicates first.
+
+
+### Setting Default Values
+
+For Select fields, you can choose which option is pre-selected for new records. For Checkbox fields, set whether it's checked or unchecked by default.
+
+## Deactivating a Field
+
+1. Go to **Settings → Data Model**
+2. Find the field
+3. Click **⋮ → Deactivate**
+
+Data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Fields](/l/tr/user-guide/data-model/capabilities/fields) — all field types explained
+* [Data Model FAQ](/l/tr/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-objects.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-objects.mdx
new file mode 100644
index 0000000000..77fb9a9c09
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-objects.mdx
@@ -0,0 +1,51 @@
+---
+title: Create Custom Objects
+description: Step-by-step guide to creating custom objects in Twenty.
+---
+
+Custom objects let you store information unique to your business that standard objects don't cover. For example: Projects, Products, Tickets, or Listings.
+
+
+ **Not sure if you need an object or a field?** See [Understanding Your Data Model](/l/tr/user-guide/data-model/overview) for guidance.
+
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Click **+ New object**
+3. Fill in:
+ * **Singular name** (e.g., "Listing")
+ * **Plural name** (e.g., "Listings")
+ * **Icon**
+ * **Description** (optional)
+4. **Kaydet**'e tıklayın
+
+Your object appears in the sidebar immediately.
+
+## Next: Add Fields
+
+New objects start with basic fields. Add custom fields to capture the data you need:
+
+1. In **Settings → Data Model**, select your object
+2. Click **+ Add Field**
+3. Choose a field type, configure, and save
+
+See [How to Create Custom Fields](/l/tr/user-guide/data-model/how-tos/create-custom-fields) for details on field types and configuration.
+
+## Connecting to Other Objects
+
+To link your object to People, Companies, or other objects, create a relation field. See [How to Create Relation Fields](/l/tr/user-guide/data-model/how-tos/create-relation-fields).
+
+## Deactivating an Object
+
+If you no longer need an object:
+
+1. Go to **Settings → Data Model**
+2. Toggle the object off
+
+The object is hidden but data is preserved. You can reactivate or permanently delete later.
+
+## Related
+
+* [Objects](/l/tr/user-guide/data-model/capabilities/objects) — standard vs custom objects
+* [Data Model FAQ](/l/tr/user-guide/data-model/how-tos/data-model-faq) — common questions
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-relation-fields.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-relation-fields.mdx
new file mode 100644
index 0000000000..0198e3b671
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-relation-fields.mdx
@@ -0,0 +1,60 @@
+---
+title: Create Relation Fields
+description: Step-by-step guide to connecting objects with relation fields.
+---
+
+Relation fields connect records from different objects—for example, linking People to Companies.
+
+
+ **Relation names cannot be changed after creation** (they affect the API). Plan your names carefully.
+
+
+## Başlamadan Önce
+
+Decide:
+
+* Which objects are you connecting? (e.g., People → Companies)
+* Which is the "one" side? (e.g., Company)
+* Which is the "many" side? (e.g., People — many people work at one company)
+* What should the field be named on each side?
+
+See [Relation Fields](/l/tr/user-guide/data-model/capabilities/relation-fields) for relation types explained.
+
+## Steps
+
+1. Go to **Settings → Data Model**
+2. Select the object where you want the relation (typically the "many" side)
+3. Click **+ Add Field**
+4. Select **Relation** as the field type
+5. Choose the **target object**
+6. Select **One-to-Many** or **Many-to-One**
+7. Enter field names for **both sides** of the relation
+8. **Kaydet**'e tıklayın
+
+## Example: People → Companies
+
+* Go to **Settings → Data Model → People**
+* Add a Relation field
+* Target: **Companies**
+* Type: **Many-to-One**
+* Field on People: **Company**
+* Field on Companies: **Employees**
+
+Now each Person can be linked to a Company, and each Company shows its People.
+
+## Deleting a Relation
+
+1. Go to **Settings → Data Model**
+2. Find the relation field
+3. Click **⋮ → Deactivate**
+
+Links are preserved but hidden. Reactivate to restore.
+
+
+ **Deleting a relation doesn't delete records.** Only the link between them is removed.
+
+
+## Related
+
+* [Relation Fields](/l/tr/user-guide/data-model/capabilities/relation-fields) — types and limitations
+* [How to Import Relations](/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — bulk import linked records
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/customize-your-data-model.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/customize-your-data-model.mdx
new file mode 100644
index 0000000000..b3658bb666
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/customize-your-data-model.mdx
@@ -0,0 +1,22 @@
+---
+title: Veri modelinizi özelleştirin},{
+description: Veri modeli özelleştirme seçeneklerine genel bakış.
+---
+
+Twenty’nin veri modeli tamamen özelleştirilebilir. İşinize uyacak şekilde nesneler, alanlar ve ilişkiler oluşturun.
+
+## Hızlı Bağlantılar
+
+| Şunu yapmak istiyorum... | Kılavuz |
+| ------------------------- | ------------------------------------------------------------------------------------------ |
+| Yeni bir nesne oluştur | [Özel Nesneler Nasıl Oluşturulur](/l/tr/user-guide/data-model/how-tos/create-custom-objects) |
+| Bir nesneye alan ekle | [Özel Alanlar Nasıl Oluşturulur](/l/tr/user-guide/data-model/how-tos/create-custom-fields) |
+| Nesneleri birbirine bağla | [İlişki Alanları Nasıl Oluşturulur](/l/tr/user-guide/data-model/how-tos/create-relation-fields) |
+
+## Daha Fazlasını Öğrenin
+
+* [Veri Modelinizi Anlamak](/l/tr/user-guide/data-model/overview) — temel kavramlar ve planlama ipuçları
+* [Nesneler](/l/tr/user-guide/data-model/capabilities/objects) — standart ve özel nesneler
+* [Alanlar](/l/tr/user-guide/data-model/capabilities/fields) — tüm alan türleri
+* [İlişki Alanları](/l/tr/user-guide/data-model/capabilities/relation-fields) — nesneleri bağlama
+* [Veri Modeli SSS](/l/tr/user-guide/data-model/how-tos/data-model-faq) — sık sorulan sorular
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/data-model-faq.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/data-model-faq.mdx
new file mode 100644
index 0000000000..38b625f370
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/how-tos/data-model-faq.mdx
@@ -0,0 +1,155 @@
+---
+title: Veri Modeli SSS
+description: Frequently asked questions about Twenty's data model.
+---
+
+## Nesne Yönetimi
+
+
+
+ Yes, custom objects can be deleted. You can also deactivate them first, which hides the object and its data from the interface while preserving the data.
+
+
+
+ No, standard objects cannot be deleted. You can only deactivate them, which hides them from the interface but preserves the data.
+
+
+
+ You can create as many custom objects and fields as you need — the price doesn't change.
+
+
+
+ You can rename the label of standard objects (People, Companies, Opportunities), but not their API names. The API names are fixed for consistency across all Twenty workspaces.
+
+
+
+ Yes, you can change the icon for both standard and custom objects in **Settings → Data Model**.
+
+
+
+ Henüz değil. Navigasyon içindeki nesne sıralaması şu anda sabit, ancak bu özellik gelecekteki bir sürüm için planlanmıştır.
+
+
+
+ Tüm aktif nesneler gezinme menüsünde görünür. **Ayarlar → Veri Modeli** altında ihtiyaç duymadığınız nesneleri devre dışı bırakabilirsiniz.
+
+
+
+## Alan Yetkinlikleri
+
+
+
+ No, field types cannot be changed after creation. If you need a different type, create a new field with the correct type, migrate your data, then deactivate the old field.
+
+
+
+ GraphQL API'miz farklı işlemler için her iki biçimi de kullanır:
+
+ * Tek bir kayıt eylemleri için `createPerson` (tekil)
+ * Toplu işlemler için `createPeople` (çoğul)
+
+ Bu, tekil ve çoğul biçimler aynı olduğunda sınırlamalar yaratır ancak geliştirici deneyimini iyileştirir.
+
+
+
+ `Tür` veya `Uygulama` gibi bazı alan adları sistem kullanımı için ayrılmıştır. Bunun yerine `Kategori` veya `Sınıflandırma` gibi alternatif adlar seçin.
+
+
+
+ * The field is hidden from the interface
+ * Existing data is preserved
+ * You can still access the field via API
+ * Existing relations remain but you can't create new ones
+ * You can reactivate the field later
+
+
+
+ Currently, you cannot make custom fields required. All fields accept empty values. You can use workflows to enforce required fields by sending alerts or blocking actions when fields are empty.
+
+
+
+ * **Unique**: No two records can have the same value in this field
+ * **Required**: The field must have a value (not currently supported for custom fields)
+
+
+
+ Formül alanları **2026'nın ilk çeyreğinde** gelmektedir. Bu arada, alan değerlerini otomatik olarak hesaplamak ve güncellemek için iş akışlarını kullanabilirsiniz.
+
+
+
+ İç içe alanlar **2026'nın ilk çeyreğinde** gelmektedir. Şu anda, ilişkili nesnelerden alan değerleri getirmek için iş akışlarını kullanabilirsiniz. Örneğin, bir Kişi kaydında bir şirketin sektörünü görüntülemek için, Kişiler üzerinde özel bir alan oluşturun ve değeri eşzamanlamak için bir iş akışı kullanın.
+
+
+
+ Alan yeniden düzenlemesi, **2025'in dördüncü çeyreğinde** özel düzenlerle birlikte kullanılabilir olacaktır. Currently, fields appear in alphabetical order.
+
+
+
+## İlişkiler
+
+
+
+ Evet! Self-referencing relations are supported and recommended for use cases like account hierarchies. For example, create a relation from Companies to Companies to track parent/child accounts.
+
+
+
+ Many-to-many relationships are coming in **H1 2026**. Currently, create an intermediate object with two one-to-many relationships as a workaround.
+
+ For example, to link People and Projects (many-to-many), create a "Project Assignments" object with:
+
+ * A relation to People (many assignments → one person)
+ * A relation to Projects (many assignments → one project)
+
+
+
+ These allow one object to relate to multiple different object types through a single field. For example, Notes can be attached to People AND Companies AND Opportunities simultaneously.
+
+ Each Note links to one Person, one Company, and one Opportunity at the same time.
+
+ Learn more in [Relation Fields](/l/tr/user-guide/data-model/capabilities/relation-fields).
+
+
+
+ Yes, you can create multiple relations between the same two objects. For example, a Company could have both a "Primary Contact" and "Billing Contact" relation to People.
+
+
+
+ When you delete a record, the relation link is removed from the related records. The related records themselves are not deleted.
+
+
+
+ While technically possible, circular relations (A → B → C → A) should be avoided as they can cause confusion and potential performance issues.
+
+
+
+## Erişim ve İzinler
+
+
+
+ Go to **Settings → Data Model** to view and edit all your objects and fields.
+
+
+
+ Çalışma alanı yöneticinize ulaşın. Veri modeli erişimi genellikle yalnızca yöneticiler tarafından sınırlıdır.
+
+
+
+## Data Management
+
+
+
+ There's no hard limit on record counts. However, very large datasets may impact performance in some views. Use filters and views to manage large datasets effectively.
+
+
+
+ Yes, you can import CSV data into any object, including custom objects. The import process supports field mapping for custom fields. See [How to Prepare Your CSV Files](/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files).
+
+
+
+ Currently, there's no built-in export for data model configuration. Contact support if you need to migrate your data model between workspaces.
+
+
+
+## Daha Fazla Yardım mı İhtiyacınız Var?
+
+Check our [Implementation Services](/l/tr/user-guide/getting-started/capabilities/implementation-services) for help with complex data model design.
diff --git a/packages/twenty-docs/l/tr/user-guide/data-model/overview.mdx b/packages/twenty-docs/l/tr/user-guide/data-model/overview.mdx
new file mode 100644
index 0000000000..d11e1179b7
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/data-model/overview.mdx
@@ -0,0 +1,180 @@
+---
+title: Veri modeli
+description: Learn what a data model is and how to design one that fits your business.
+image: /images/user-guide/fields/custom_data_model.png
+---
+
+
+
+
+
+## What is a Data Model?
+
+Veri modeli, CRM'nizde bilgilerin nasıl organize edildiğini tanımlayan yapıdır. Think of it as the **blueprint** of your customer data — you design it once, then fill it with your actual data.
+
+## Key Concepts
+
+### Nesneler
+
+**Objects** are the main categories of data in your CRM. Each object represents a type of thing you want to track.
+
+Twenty comes with standard objects:
+
+* **People** — individuals (contacts, leads, partners)
+* **Companies** — organizations
+* **Opportunities** — deals or sales
+* **Notes** — attached notes on records
+* **Tasks** — to-dos linked to records
+
+You can also create **custom objects** for anything specific to your business (e.g., Projects, Subscriptions, Events).
+
+### Alanlar
+
+**Fields** are the properties or attributes that describe each object. They store the actual information.
+
+For example, the **People** object has fields like:
+
+* İsim
+* E-posta
+* Telefon
+* İş Unvanı
+* Company (a relation to the Companies object)
+
+Fields have different **types**: text, number, date, select, multi-select, relation, and more. You can add custom fields to any object.
+
+### Kayıtlar
+
+**Records** are the individual entries within an object — the actual data you create and manage.
+
+Örneğin:
+
+* "John Smith" is a **record** in the People object
+* "Acme Corp" is a **record** in the Companies object
+
+**An analogy:**
+
+| Data Model Concept | Real-World Analogy |
+| ------------------ | ------------------------------------------ |
+| **Objects** | Sections in a book (the categories) |
+| **Alan** | Columns in a spreadsheet (the properties) |
+| **Records** | Rows in a spreadsheet (the actual entries) |
+
+You design the data model (objects + fields) once, then create many records within that structure.
+
+## Why Customize Your Data Model?
+
+Her iş farklı çalışır. Customizing your data model means you can shape Twenty around **your** processes instead of forcing yours into a rigid system.
+
+Twenty offers full flexibility:
+
+* Create as many custom objects as you need
+* Add unlimited custom fields
+* The price doesn't change based on customization
+
+## Tips to Design Your Data Model
+
+### 1. Start with Your Core Objects
+
+Identify the main concepts you work with. Twenty already provides:
+
+* **People** — your contacts
+* **Companies** — your accounts
+* **Opportunities** — your deals
+
+Think about what else you might need:
+
+* Stripe would need a `Subscriptions` object
+* Airbnb would need a `Trips` object
+* An accelerator would need a `Batches` object
+
+### 2. Use Fields for Variations, Not New Objects
+
+If something is just a characteristic of an existing object, make it a **field**.
+
+**Use fields for:**
+
+* Categories and labels (e.g., `Industry` for Companies)
+* Status values (e.g., `Stage` for Opportunities)
+* Attributes and properties
+
+### 3. Create an Object When It Stands on Its Own
+
+If the concept has its own lifecycle, properties, or relationships, it deserves an object.
+
+**Create an object for:**
+
+* **Projects** — have deadlines, owners, and tasks
+* **Subscriptions** — connect companies, products, and invoices
+* **Events** — involve attendees and follow-up actions
+
+Bunlar, kendi verilerini ve ilişkilerini taşıdığından dolayı tek bir alandan daha fazlasıdır.
+
+### 4. Create an Object When Records Are Open-Ended
+
+If something can be linked multiple times and you don't know how many, use an object.
+
+**Bad approach:**
+Creating fields like `Product 1`, `Product 2`, `Product 3`...
+
+**Good approach:**
+Create a `Products` object and relate it to records. This supports one, two, or a hundred products without changing your model.
+
+### 5. Keep It Simple First
+
+Start with fields. Move to new objects only when you feel the limits:
+
+* Too many fields on one object
+* Repeated records that should be separate
+* Relationships that don't fit neatly
+
+## Special Note on People, Companies, and Opportunities
+
+
+ **Email and calendar sync only works with People, Companies, and Opportunities.**
+
+ These are the only objects where you can access synchronized emails and meetings from your mailbox/calendar. We recommend using them as much as possible.
+
+
+**Best practices:**
+
+* If you need categories of People, use fields (not new objects)
+* Example: Use a `Person Type` field with values "Prospect" and "Partner" instead of creating separate objects
+* Create different **views** to filter: one showing partners, another showing prospects
+
+**It's okay to have fields that don't apply to every record.** For example, a `Referral Link` field on People that only applies when `Person Type = Partner`. Hide this field from views where it's not relevant.
+
+## Questions to Guide Your Choice
+
+Kendinize şunu sorun:
+
+Is this just a property of something I already have, or does it need its own properties?
+Will I ever need to track multiple of these per record, without knowing how many?
+Does this concept connect to several different objects, not just one?
+Will it have its own lifecycle (stages, start/end dates)?
+
+If the answer is "yes" to one or more, it's probably time for a new object.
+
+## Accessing Your Data Model
+
+1. Go to **Settings** in the left sidebar
+2. Click **Data Model**
+3. View all your objects (standard and custom)
+4. Click any object to see and edit its fields
+
+
+ **Don't see Data Model in Settings?**
+
+ Access to the data model is usually restricted to administrators. Contact your workspace admin if you need access.
+
+
+## Sonraki Adımlar
+
+Once you've planned your data model:
+
+* [How to Create Custom Objects](/l/tr/user-guide/data-model/how-tos/create-custom-objects)
+* [How to Create Custom Fields](/l/tr/user-guide/data-model/how-tos/create-custom-fields)
+* [How to Create Relation Fields](/l/tr/user-guide/data-model/how-tos/create-relation-fields)
+
+## Yardıma mı ihtiyacınız var?
+
+Our team can help you design and create the data model you need. Discover our [Implementation Services](/l/tr/user-guide/getting-started/capabilities/implementation-services).
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/glossary.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/glossary.mdx
new file mode 100644
index 0000000000..9e4088486a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/glossary.mdx
@@ -0,0 +1,108 @@
+---
+title: Sözlük
+description: Twenty'de kullanılan temel terminolojiyle tanışın.
+---
+
+## API
+
+API (Uygulama Programlama Arayüzü), Twenty'yi diğer yazılım sistemleriyle bağlamanızı ve özel entegrasyonlar oluşturmanızı sağlar.
+
+## Apps
+
+Apps are custom extensions built as code that can define data models and serverless functions. They enable developers to create reusable customizations that can be deployed across multiple workspaces.
+
+## Code Actions
+
+Code Actions are workflow steps that let you write custom JavaScript to transform data, make calculations, or perform complex logic that isn't possible with built-in actions.
+
+## Komut Menüsü
+
+Komut Menüsü, işlemleri gerçekleştirmenize, kayıtlar oluşturmanıza ve çalışma alanınızda verimli bir şekilde gezinmenize olanak tanıyan hızlı erişim arayüzüdür (`Mac`'te `Cmd + K`, `Windows`'ta `Ctrl + K` ile açılır).
+
+## Şirket & Kişiler
+
+CRM'de iki temel kayıt türü vardır:
+
+* Bir `Şirket`, bir iş veya organizasyonu temsil eder.
+* `People` represent your company's current and prospective customers or clients.
+
+## Özel Alanlar
+
+Özel Alanlar, iş ihtiyaçlarınıza ve süreçlerinize özgü bilgileri yakalamak için oluşturduğunuz veri alanlarıdır.
+
+## Veri modeli
+
+Bir Veri Modeli, CRM'nizde bilgilerin nasıl düzenlendiğini tanımlayan yapıdır, hangi nesnelerin var oldukları, özellikleri (alanlar) ve birbirleriyle nasıl ilişkili oldukları gibi.
+
+## Favoriler
+
+Favoriler, hızlı erişim için işaretlediğiniz kayıtlar olup, önemli verilere anında erişim için yan panelinizde görünürler.
+
+## Alan
+
+Bir alan, bir varlığa ait belirli verilerin depolandığı alandır.
+
+## Entegrasyon
+
+Integrations are built-in tools that allow you to link Twenty with other software or systems.
+
+## Yineleyici
+
+An Iterator is a workflow action that loops through an array of items, executing subsequent actions for each item in the list.
+
+## Kanban
+
+A `Kanban` is a visual way to track your business processes using cards and columns. Her sütun, sürecinizdeki bir aşamayı temsil eder (örneğin: yeni, devam eden, kazanılan, kaybedilen) ve kayıtları bu aşamalarda ilerledikçe taşırsınız.
+
+## Nesne
+
+An Object is a data structure that represents a specific type of entity in your CRM (like People, Companies, or Opportunities). Nesneler standart (yerleşik) veya özelleştirilmiş (tarafınızdan oluşturulmuş) olabilir.
+
+## Fırsatlar
+
+Twenty CRM'deki Fırsatlar, hesaplar veya kişilerle potansiyel anlaşmalar veya satışlardır.
+
+## Kayıt
+
+Bir Kayıt, bir nesnenin örneğini belirtir, örneğin belirli bir hesap veya kişi.
+
+## İlişki Alanları
+
+İlişki Alanları, farklı nesneler arasında bağlantılar oluşturur; kayıtları birbirine bağlamanızı sağlar (örneğin bir Kişiyi bir Şirkete bağlamak gibi).
+
+## Standart Alanlar
+
+Standart Alanlar, varsayılan olarak nesnelerle birlikte gelen ve tüm çalışma alanlarında ortak işlevsellik sağlayan önceden yapılandırılmış veri alanlarıdır.
+
+## Görevler
+
+Twenty CRM'deki Görevler, kişilere, hesaplara veya fırsatlara ilişkin atanmış aktiviteleridir.
+
+## Tetikleyiciler
+
+Triggers are the starting point of a workflow — the event or condition that initiates the automation. Examples include record creation, record updates, webhooks, or scheduled times.
+
+## Görünümler
+
+Görünümleri kullanarak kayıtlarınızın görünümünü özelleştirebilir; her görünüm için farklı filtreler, düzenler ve sıralama seçenekleri ayarlayabilirsiniz.
+
+## Upsert
+
+Upsert is an operation that combines "update" and "insert" — it updates an existing record if a match is found, or creates a new record if no match exists.
+
+## Webhook'lar
+
+Webhook'lar, belirli olaylar gerçekleştiğinde Twenty'den diğer uygulamalara gönderilen otomatik mesajlardır ve gerçek zamanlı veri senkronizasyonu sağlar.
+
+## İş Akışları
+
+İş akışları, belirli koşullara göre tetiklenen otomatik süreçlerdir. Bu süreçler, tekrarlayan görevlerin ve iş süreçlerinin otomasyonuna yardımcı olur.
+
+## İş Alanı
+
+Bir `İş Alanı` genellikle Twenty'yi kullanan bir şirketi temsil eder. It holds all the records and data that you and your team members add to Twenty.
+Tek bir alan adını barındırır, bu genellikle çalışan e-posta adresleri için şirketinizin kullandığı alan adıdır.
+
+## İş Alanı Üyeleri
+
+İş Alanı Üyeleri, ekibinizdeki Twenty kullanıcılarıdır ve iş alanınıza erişebilirler. Kayıtlar için sahip veya atanan olarak görevlendirilebilirler.
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/implementation-services.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/implementation-services.mdx
new file mode 100644
index 0000000000..51acdfa333
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/implementation-services.mdx
@@ -0,0 +1,16 @@
+---
+title: Uygulama Hizmetleri
+description: Başlangıç yaparken veya gelişmiş özelleştirmeler oluştururken yardıma ihtiyacınız olsun, bir çözümümüz var.
+---
+
+## Başlangıç Paketleri
+
+Get help from our core team to set up your Twenty workspace with our 4-hour Onboarding packs:
+
+* **Veri Modeli Tasarımı**: Nesneler, alanlar ve ilişkilerle özel veri modelinizi tasarlayın ve oluşturun
+* **Veri Geçişi**: Mevcut verilerinizi, kullandığınız CRM'den Twenty'ye aktarın
+* **İş Akışı Oluşturma**: İş süreçlerinizi destekleyecek özelleştirilebilir iş akışları oluşturun
+
+## Uygulama Ortakları
+
+Daha ileri düzey özelleştirmeler ve entegrasyonlar için sertifikalı Twenty ortaklarıyla çalışın. Reach out to our team via [contact@twenty.com](mailto:contact@twenty.com) to be matched with our partners.
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/what-is-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/what-is-twenty.mdx
new file mode 100644
index 0000000000..a8aa73205a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/what-is-twenty.mdx
@@ -0,0 +1,42 @@
+---
+title: Twenty nedir
+description: Twenty is an open-source CRM that gives you the building blocks to create exactly what your business needs.
+---
+
+## Vizyon
+
+İyi bir CRM oluşturmak zordur çünkü bu bir dengeleme eylemidir.
+Her işletme için gereksinimler basit görünse de herkesin ihtiyaçları farklıdır.
+Sonuç, ya çok basit bir CRM ya da her şeye yetmeye çalışan ama hiçbir konuda üstün olamayan bir CRM olur.
+
+Başlangıçta, Twenty zaten bildiğiniz çoğu CRM gibi görünür: anlaşmaları takip edebilir, kişileri organize edebilir, görevleri ve notları yönetebilirsiniz.
+**Ama onu farklı kılan, genişletilebilirliğe olan yaklaşımımızdır. Benzersiz iş sorunlarınızı çözmeniz için yapı taşlarını sağlayan açık bir platform oluşturuyoruz.**
+
+Özellik listeleri yerine evrensel ilkeleri ve ortak kalıpları önceliklendiriyoruz.
+Tüm cevaplara sahip olmaya çalışmıyoruz, bunun yerine kullanıcıları en iyi çözümü bulmaları için güçlendiriyoruz.
+Açık kaynak, yaklaşımımızın temel taşıdır, Twenty'nin topluluğu ile birlikte, topluluğu için gelişmesini sağlar.
+
+## Faydalar
+
+**Özelleştirilebilir:** İş ihtiyaçlarınıza uygun olacak şekilde tasarlanmıştır.
+
+**Topluluk odaklı:** Büyük bir açık kaynak topluluğu tarafından geliştirilmekte ve sürdürülmektedir.
+
+**Maliyet Etkin:** Satıcı bağımlılığı yaşamazsınız çünkü her zaman kendi sunucunuzu barındırabilirsiniz.
+
+## Ana Özellikler
+
+* **Calendar & Emails:** Sync your mailbox and calendar to see all communications on your CRM records. [Daha Fazla Bilgi Edinin](/l/tr/user-guide/calendar-emails/overview).
+* **Data Model:** Create custom objects and fields to match your unique business processes. [Explore](/l/tr/user-guide/data-model/overview).
+* **Data Migration:** Import and export your data via CSV or API. [Başlayın](/l/tr/user-guide/data-migration/overview).
+* **Views & Pipelines:** Organize your data with table views, kanban boards, and sales pipelines. [Discover](/l/tr/user-guide/views-pipelines/overview).
+* **Workflows:** Automate your business processes and integrate with external tools. [Build automations](/l/tr/user-guide/workflows/overview).
+* **AI:** Enhance your CRM with AI-powered features and agents. [Explore AI](/l/tr/user-guide/ai/overview).
+* **Dashboards:** Track performance with custom reports and visualizations. [View dashboards](/l/tr/user-guide/dashboards/overview).
+* **Permissions & Access:** Control who can view, edit, and manage your data with role-based permissions. [Configure access](/l/tr/user-guide/permissions-access/overview).
+* **Notes & Tasks:** Create notes and tasks linked to your records for better collaboration.
+* **API & Webhooks:** Connect to other apps and build custom integrations. [Start integrating](/l/tr/developers/extend/capabilities/apis).
+
+## Şimdi katılın
+
+[Buradan kaydolun](https://app.twenty.com) veya [GitHub'da katkıda bulunan olun](https://github.com/twentyhq/twenty).
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/configure-your-workspace.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/configure-your-workspace.mdx
new file mode 100644
index 0000000000..fac68de3e3
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/configure-your-workspace.mdx
@@ -0,0 +1,77 @@
+---
+title: Configure Your Workspace
+description: Her iş farklı çalışır. Start with these 3 steps to shape Twenty around your needs.
+---
+
+**Quick Win**: Start with connecting your mailbox. Bu size anında değer katar ve ekibinizin gerçek verilerle Twenty'yi çalışırken görmesine yardımcı olur. You can do so under Settings → Accounts.
+
+## 1. Veri modelinizi özelleştirin
+
+Twenty, günlük ihtiyaçlarınızı en iyi şekilde destekleyecek veri modelini şekillendirmeniz için ihtiyaç duyduğunuz esnekliği sunar.
+Farklı nesneleriniz arasında ilişkiler dahil olmak üzere herhangi bir türde nesne ve alan oluşturabilirsiniz. Ayarlar → Veri Modeli altında bu işlemi gerçekleştirebilirsiniz.
+İşte birkaç ipucu:
+
+* **Özel alanlar veya özel nesneler için sınırınız yok**. Özel nesne ve alan eklemek planınızı yükseltmenize neden olmaz.
+* **People, Companies and Opportunities are the three objects from where you can access the emails and meetings synchronized from your mailbox and calendar**. We recommend using those as much as possible, adding fields to categorize your records if need be. İşte bir örnek:
+ * Ortak özel nesne oluşturmaktansa, potansiyel müşterileriniz ve iş ortaklarınız için Kişiler nesnesini kullanıp, Kişiler nesnesinde `Kişi Türü` adında bir alan oluşturmanız daha iyidir. Because you would not be able to access the emails exchanged with this person from the Partner records.
+ * Create different views under People, one to display partners and one to display prospects.
+* İki Kişinin aynı e-posta adresi olamaz. Two Companies cannot have the same domain.
+* Kullanmak istemediğiniz standart alanları ve nesneleri devre dışı bırakabilirsiniz.
+* Görünümlerden alanları gizleyebilirsiniz: alanlar oluşturmaktan korkmayın, hepsini göstermek zorunda değilsiniz.
+
+Veri modelinizi tasarlamayı öğrenmek için [bu makaleyi](/l/tr/user-guide/data-model/overview) okuyabilirsiniz.
+
+## 2. Verilerinizi yükleyin
+
+Mevcut verilerinizi Twenty'ye getirmek, ekibinize baştan itibaren bağlam sunar.
+
+### Posta kutunuzu bağlayın
+
+Çalışma alanınızı oluştururken bunu yapmadıysanız, Ayarlar → Hesaplar altında **Google veya Microsoft hesabınızı** bağlayın. Bu, Twenty'ye şunları yapma olanağı tanır:
+
+* Mesajlarınızı ve toplantılarınızı içe aktarın
+* Etkileşimlere dayalı olarak otomatik kişi oluşturma (isteğe bağlı)
+* İletişim geçmişini ekibiniz için görünür tutun
+
+**Başka bir sağlayıcı mı kullanıyorsunuz?**
+SMTP üzerinden başka bir posta kutusu veya CalDAV üzerinden başka bir takvim ekleyebilirsiniz. Özelliği Ayarlar → Sürüm Notları → Lab bölümünde etkinleştirmeniz gerektiğini unutmayın, ardından tekrar Ayarlar → Hesaplar sekmesine geri dönün.
+
+### Verilerinizi csv ile içe aktarın
+
+Komut menüsünü (`Cmd + K` veya `Ctrl + K`) kullanarak Kişiler, Şirketler, Fırsatlar veya herhangi bir özel nesneyi CSV ile içe aktarabilirsiniz.
+
+**Key guidelines**:
+
+* Beklenen formatı anlamak için örnek dosyayı indirin
+* Her dosyayı 10.000 kayıtla sınırlayın
+* Kişiler için tekrarlanan e-postaları veya Şirketler için tekrarlanan alan adlarını kaldırın
+* İçe aktarmadan önce hata kontrolü yapın ve düzeltin (sarı renkte vurgulanır)
+
+Veri içe aktarma hakkında daha fazla bilgi almak için [bu makaleyi](/l/tr/user-guide/data-migration/overview) okuyun.
+
+## 3. İlk görünümünüzü oluşturun
+
+Farklı görünümler oluşturmak, verileri ekibiniz için işe yarar hale getirmek için anahtardır.
+Nasıl yapılır:
+
+* **Sütunları ekleyin veya gizleyin**
+ Görüntülenen alanları düzenlemek için Seçenekler → Alanlar (sağ üst köşeden tıklayarak) kısmına gidin. Oradan alanları gösterebilir veya gizleyebilirsiniz.
+
+* **Alanları yeniden sıralayın**
+ Bir görünümden alanları yeniden sıralamak için Seçenekler → Alanlar (sağ üst köşeden tıklayarak) kısmına gidin. Alanları yeniden sıralamak için sürükleyip bırakabilirsiniz.
+
+* **Görünümünüzü filtreleyin**
+ Üst sağ köşeden Filtreler'i kullanarak görüntülenen kayıtları daraltın.
+
+* **Kayıtları sırala**
+ Üst sağ köşeden Sırala işlevini kullanarak veya sütun adına tıklayarak görüntülenen kayıtları sıralayabilirsiniz.
+
+* **Düzeni seçin**
+ Bir `Aşama` veya benzeri seçim türü alan varsa **Kanban düzeni** veya liste **Gruplandır** düzenine geçebilirsiniz.
+
+* **Görünümünüzü Favori olarak kaydedin**
+ Farklı görünümleri gösteren açılır menüyü kullanarak yapılabilir.
+
+## Sırada ne var?
+
+[İş akışlarını](/l/tr/user-guide/workflows/overview) kullanarak otomasyonlar oluşturmaya başlayın.
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/create-workspace.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/create-workspace.mdx
new file mode 100644
index 0000000000..6c7a6d18be
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/create-workspace.mdx
@@ -0,0 +1,48 @@
+---
+title: Bir Çalışma Alanı Oluşturun
+description: Follow a step-by-step guide on how to register on Twenty, choose a subscription plan, and set up your account.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Adım 1: Kayıt
+
+1. [Twenty Kayıt](https://app.twenty.com) sayfasına gidin.
+2. Tercih ettiğiniz kayıt yöntemini seçin:
+ * Google hesabı kaydı için **Google ile Devam Et**.
+ * Microsoft hesabı kaydı için **Microsoft ile Devam Et**.
+ * Veya e-posta kaydı için, **E-posta ile Devam Et**.
+
+
+
+## Adım 2: Deneme Süresini Seçmek
+
+İki deneme süresi arasında seçim yapın:
+
+### 30 gün
+
+Kredi kartı ile
+
+### 7 gün
+
+Kredi kartsız
+
+Her iki deneme süresi şunları içerir:
+
+* Tam erişim
+* Sınırsız kişi
+* E-posta entegrasyonu
+* Özel nesneler
+* API & Webhook'lar
+
+Başka bir plan veya fatura aralığı seçmek için "Planı değiştir" seçeneğine tıklayabilirsiniz.
+
+
+
+## Adım 3: Ödemenin Onaylanması ve Hesap Kurulumu
+
+Ödeme onayından sonra Stripe aracılığıyla, çalışma alanınızı ve kullanıcı profilinizi oluşturmak için yönlendirilirsiniz. Aboneliğinizi istediğiniz zaman iptal edebileceğinizi unutmayın.
+
+## Destek
+
+Sorularınız veya yardım için, [contact@twenty.com](mailto:contact@twenty.com) adresindeki özel destek ekibiyle iletişime geçin veya [Discord](https://discord.gg/cx5n4Jzs57) üzerinden mesaj gönderin.
diff --git a/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/navigate-around-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
new file mode 100644
index 0000000000..af85fccb67
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/navigate-around-twenty.mdx
@@ -0,0 +1,83 @@
+---
+title: Navigate Around Twenty
+description: Platformda nasıl gezineceğiniz ve farklı türdeki işlemleri nerede yapacağınız hakkında hızlı bir genel bakış edinin.
+---
+
+## Ana Düzen
+
+The center of the screen is **where your records live**: people, companies, opportunities, tasks, notes, dashboards, workflows and any other object you created. İşlerin günlük olarak yapılması gereken yer burasıdır.
+Oradan kayıtları görüntüleyebilir, düzenleyebilir, silebilirsiniz ve ayrıca yeni görünümler oluşturabilirsiniz.
+
+
+
+## Gezinme Çubuğu
+
+On the left side, from the top to the bottom, you'll be able to:
+
+* Açılır menüyü kullanarak birden fazla çalışma alanınız arasında geçiş yapın veya yeni bir çalışma alanı oluşturun.
+* Arama çubuğunu kullanın (hemen odaklanmak için `/` tuşuna basın)
+* Ayarlar bölümünü açın
+* Have direct access to your **Favourites views**. Favoriler her kullanıcıya özeldir.
+* Farklı nesneler arasında geçiş yapın.
+* İş akışlarını kullanarak otomasyonlar oluşturun.
+* Destek departmanına ulaşın ve Kullanıcı Kılavuzumuzu açın.
+
+
+
+## The Command Menu
+
+The command menu gives you **quick access to actions** in Twenty. İki yöntemle erişebilirsiniz:
+
+* Klavye kısayolu: Mac için `Cmd + K` veya Windows için `Ctrl + K` tuşlarına basın
+* **Mouse**: Click the three dots in the top right corner
+ From there, you can:
+* Yeni kayıtlar oluşturun
+* CSV ile veri içe aktarın ve dışa aktarın
+* Yeni görünümler oluşturun
+* Silinen kayıtlara erişin (Twenty yumuşak ve kalıcı silmeleri destekler)
+* Çalışma alanı nesnelerine hızlı erişim için klavye kısayollarını görün
+
+
+
+## The Search Bar
+
+The search bar is accesible via the Command Menu, at the top of your navigation bar, or by pressing `/` to focus on it instantly. Search works across all object.
+
+
+
+## The Side Panel
+
+When you click on a record, the side panel appears on the right. This gives you a quick overview of the record's key information, without bringing you to another page. From there, you can decide to close this overview or to get additional information about this record, clicking on the Open button.
+
+
+
+## Görünümler
+
+Her nesne (Fırsatlar veya Kişiler gibi) birden fazla görünüme sahiptir. Nesne başına görünüm sayısında herhangi bir sınırlama yoktur.
+
+Farklı görünümler arasında geçiş yapmak için ana düzenin sol üstündeki açılır menüyü kullanın. Örneğin:
+
+* Fırsatları aşamaya göre takip etmek için bir Kanban görünümü kullanın
+* Bölümler oluşturmak ve verimliliği artırmak için Grup Görünümü kullanın
+* Belirli kayıtlara odaklanmak için filtreleri kullanın (ör. Geçen hafta oluşturulan adaylar)
+* Daha sonra tekrar kullanmak için filtrelenmiş görünümleri kaydedin
+* Hızlı erişim için favori görünümleri kullanın
+
+
+
+If you're new to Views, read our [Views & Pipelines guide](/l/tr/user-guide/views-pipelines/overview) to learn how to create and customize them.
+
+## Ayarlar
+
+Sol üstten ayarlarınızı açın:
+
+* E-posta ve takviminizi sorunsuz şekilde senkronize etmek için posta kutusu ve takvim hesaplarınızı bağlayın
+* Customize your **data model**: create custom objects, fields, and relationships
+* API oyun alanına erişin ve webhook'ları yapılandırın
+* Kullanıcı izinlerini ve çalışma alanı erişim denetimlerini yönetin
+* Ekip üyelerini davet edin ve kullanıcı rollerini yönetin
+* Profilinizi ve çalışma alanı tercihlerinizi düzenleyin
+* Faturalamayı yapılandırın ve iş akışı kredilerinin kullanımını izleyin
+* En son sürümleri ve yaklaşan özellikleri keşfedin (Releases → Lab sekmesi altında)
+
+If you do not see all those sections under Settings, reach out to your workspace administrator - some of them have restricted access.
diff --git a/packages/twenty-docs/l/tr/user-guide/introduction.mdx b/packages/twenty-docs/l/tr/user-guide/introduction.mdx
new file mode 100644
index 0000000000..f4b8e222d1
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/introduction.mdx
@@ -0,0 +1,63 @@
+---
+title: Discover Twenty
+description: Welcome to Twenty User Guide, your resources for advanced configurations and best practices.
+---
+
+import { CardTitle } from "/snippets/card-title.mdx"
+
+
+
+ Discover Twenty
+ Learn what Twenty is and how it can help your business.
+
+
+
+ Data Model
+ Customize your data model to fit your business processes.
+
+
+
+ Data Migration
+ Import and export your data via CSV or API.
+
+
+
+ Calendar & Emails
+ Centralize your team's meetings and emails.
+
+
+
+ Workflows
+ Automate processes and integrate with external tools.
+
+
+
+ AI
+ Enhance your team with AI agents.
+
+
+
+ Views & Pipelines
+ Organize your data with actionable views and pipelines.
+
+
+
+ Dashboards
+ Real-time insights to track performance.
+
+
+
+ Permissions & Access
+ Manage roles and access to Twenty.
+
+
+
+ Billing
+ Understand how Twenty pricing and billing works.
+
+
+
+ Settings
+ Configure your workspace preferences.
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/permissions.mdx b/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/permissions.mdx
new file mode 100644
index 0000000000..3fe8cf801f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/permissions.mdx
@@ -0,0 +1,198 @@
+---
+title: İzinler
+description: Control access to objects, fields, and settings with role-based permissions.
+image: /images/user-guide/permissions/permissions.png
+---
+
+Twenty'nin izin sistemi, üç ana alana erişimi kontrol etmenizi sağlar:
+
+* **Objeler ve Alanlar**: Kimin kayıtları ve bireysel alanları görüntüleyebileceğini, düzenleyebileceğini veya silebileceğini kontrol edin
+* **Ayarlar**: Çalışma alanı yapılandırmasına ve yönetici işlevlerine erişimi yönetin
+* **Aksiyonlar**: Veri ithalatı veya e-posta gönderimi gibi genel çalışma alanı aksiyonlarını kontrol edin
+
+## Rol Oluştur
+
+Yeni bir rol oluşturmak için:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. **Tüm Roller** altında, **+ Rol Oluştur** seçeneğine tıklayın
+3. Bir rol adı girin
+4. In the default **Permissions** tab, [configure permissions](#customize-permissions)
+5. Bitirmek için **Kaydet**'e tıklayın
+
+## Delete a Role
+
+Bir rolü silmek için:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Kaldırmak istediğiniz role tıklayın
+3. **Ayarlar** sekmesini açın, ardından **Rolü Sil** seçeneğine tıklayın
+4. Modalde **Onayla**'ya tıklayın
+
+
+ If a role is deleted, any workspace member assigned to it will be automatically reassigned to the default role. **Yönetici** rolü hariç tüm roller silinebilir. Her zaman **Yönetici** rolüne atanmış en az bir üye olmalıdır.
+
+
+## Üyelere Rol Atama
+
+### Mevcut Atamaları Görüntüle
+
+* **Ayarlar → Roller** bölümüne gidin
+* Tüm rolleri ve her birine kaç üye atandığını görün
+* Hangi üyelerin hangi rollere sahip olduğunu görün
+
+### Bir Üyeye Rol Atama
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Atamak istediğiniz role tıklayın
+3. **Atama** sekmesini açın
+4. **+ Üyeye Atama**'ya tıklayın
+5. Listeden çalışma alanı üyesini seçin
+6. Atamayı onaylayın
+
+### Varsayılan Rol Ayarlama
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. **Seçenekler** bölümünde, **Varsayılan Rol**'ü bulun
+3. Yeni üyelerin otomatik olarak alacağı rolü seçin
+4. Yeni çalışma alanı üyeleri katıldığında bu role atanacaklardır
+
+
+ You can only assign roles to existing workspace members. Yeni üyeleri davet etmek için, [Üye Yönetimi](/l/tr/user-guide/settings/capabilities/member-management) kullanın.
+
+
+## İzinleri Özelleştirin
+
+İzinler, her rolün çalışma alanınızda hangi alanlara erişip neleri değiştirebileceğini belirler, bu çalışma alanı obje kayıtları, ayarlar ve aksiyonlar dahil.
+
+### Object Permissions
+
+The **Objects** section controls what this role can do with records across your workspace.
+
+#### Set Default Permissions (All Objects)
+
+First, configure the baseline permissions that apply to **all objects** by default:
+
+| Permission | Açıklama |
+| ---------------------------------------- | -------------------------------------- |
+| **Tüm Nesnelerdeki Kayıtları Görüntüle** | View records in lists and detail pages |
+| **Tüm Nesnelerdeki Kayıtları Düzenle** | Modify existing records |
+| **Tüm Nesnelerde Kayıtları Silin** | Soft-delete records (can be restored) |
+| **Tüm Nesnelerde Kayıtları Yok Edin** | Permanently delete records |
+
+Select or unselect based on what should be the default behavior for this role.
+
+
+ **Example — Intern role**: An intern should be able to see all objects but not edit them by default. Enable "See Records on All Objects" but leave "Edit Records on All Objects" unchecked.
+
+
+#### Add Object-Level Exceptions
+
+After setting defaults, use the **Object-Level** sub-section to add rules that override the defaults for specific objects.
+
+Click **+ Add rule** and select an object to create an exception.
+
+**Example rules for an Intern role:**
+
+| Rule | Effect |
+| ------------------------------------- | ------------------------------------------------------ |
+| Opportunities → disable "See Records" | Intern cannot see the Opportunities object at all |
+| People → enable "Edit Records" | Intern can edit People records (but not other objects) |
+
+### Field Permissions
+
+Within each object-level rule, you can go further and configure **field-level permissions** to control access to specific fields.
+
+| Permission | Açıklama |
+| -------------- | -------------------------- |
+| **See Field** | View the field value |
+| **Edit Field** | Modify the field value |
+| **No Access** | Field is completely hidden |
+
+**Example — Restrict sensitive fields:**
+
+For the Intern role with People edit access, you might want to restrict certain fields:
+
+* People → Email → **See Field** only (cannot edit)
+* People → Address → **No Access** (completely hidden)
+
+This allows the intern to edit most People fields while protecting sensitive information.
+
+### How Permission Inheritance Works
+
+Permissions cascade from general to specific:
+
+1. **All Objects** → sets the baseline for all objects
+2. **Object-Level rules** → override the baseline for specific objects
+3. **Field-Level rules** → override the object setting for specific fields
+
+More specific settings always take precedence.
+
+### İzin Geçersiz Kılmalarını Yönetme
+
+To override inherited permissions:
+
+1. Miras alınan kuralı kaldırmak için **X**'e tıklayın
+2. Select the specific permissions you want
+3. Değişiklikleri geri almak için turuncu **Geri Al** simgesine (daire ok) tıklayın
+
+Tamamlandığında, **Bitir**'e tıklayın, ardından rol sayfasına yönlendirildiğinizde **Kaydet**'e tıklayın.
+
+### Çalışma Alanı Ayarları İzinleri
+
+Çalışma alanı ayarlarına iki şekilde erişimi kontrol edin:
+
+* Tam erişim vermek için **Ayarlar Tüm Erişim**'i değiştirin
+* Veya spesifik izinleri etkinleştirin (örneğin, API anahtarı oluşturma, çalışma alanı tercihleri, rol atama, veri modeli yapılandırma, güvenlik ayarları ve iş akışı yönetimi)
+
+
+ **Current limitation**: Access to workflow management is currently required to manually trigger workflows. This behavior may change in future releases.
+
+
+### Çalışma Alanı Aksiyon İzinleri
+
+Genel çalışma alanı aksiyonlarına erişimi kontrol edin:
+
+* Tam izin vermek için **Uygulama Tüm Erişim**'i değiştirin
+* Veya **E-posta Gönder**, **CSV İthal Et**, **CSV İhraç Et** gibi bireysel aksiyonları etkinleştirin
+
+## Assigning Roles to API Keys and AI Agents
+
+Beyond workspace members, roles can also be assigned to **API Keys** and **AI Agents**. This is particularly helpful for teams who want to control exactly "who" can do what in their workspace—including automated processes and integrations.
+
+### Why Assign Roles to API Keys and AI Agents?
+
+* **Security**: Limit what automated processes can access or modify
+* **Compliance**: Ensure integrations only touch the data they need
+* **Control**: Prevent accidental data changes from misconfigured automations
+* **Auditability**: Track which actions were performed by which integration or agent
+
+### Assign a Role to an API Key
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Atamak istediğiniz role tıklayın
+3. **Atama** sekmesini açın
+4. Under **API Keys**, click **+ Assign to API key**
+5. Select the API key from the list
+6. Atamayı onaylayın
+
+The API key will now inherit all permissions defined by that role. Any API calls made with this key will be restricted accordingly.
+
+
+ API keys without an assigned role use default permissions. For tighter security, always assign a specific role to production API keys.
+
+
+### Assign a Role to an AI Agent
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Atamak istediğiniz role tıklayın
+3. **Atama** sekmesini açın
+4. Under **AI Agents**, click **+ Assign to AI agent**
+5. Select the AI agent from the list
+6. Atamayı onaylayın
+
+The AI agent will only be able to access data and perform actions allowed by its assigned role.
+
+
+ For AI agents running within workflows, this ensures the agent cannot access or modify data outside its intended scope—even if the workflow has broader permissions.
+
diff --git a/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/sso-configuration.mdx b/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/sso-configuration.mdx
new file mode 100644
index 0000000000..5f690407ae
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/sso-configuration.mdx
@@ -0,0 +1,125 @@
+---
+title: SSO Configuration
+description: Configure Single Sign-On for secure enterprise authentication.
+---
+
+## About SSO
+
+Single Sign-On (SSO) allows your team members to log into Twenty using your organization's identity provider. This provides:
+
+* **Centralized access control**: Manage access from one place
+* **Enhanced security**: Leverage your existing security policies
+* **Better user experience**: One set of credentials for all tools
+
+## Supported Providers
+
+Twenty supports SSO with:
+
+* **SAML 2.0**: Works with most enterprise identity providers
+* **Google Workspace**: For organizations using Google
+* **Microsoft Entra ID**: (formerly Azure AD) For Microsoft environments
+
+## Setting Up SSO
+
+### Ön Gereksinimler
+
+* Organization plan (cloud and self-hosted workspaces)
+* Admin access to your identity provider
+* Admin access to Twenty workspace
+
+
+ **For self-hosting users willing to set up SSO**, reach out to contact@twenty.com
+
+
+### Configuration Steps
+
+#### 1. Access SSO Settings
+
+1. Go to **Settings → Security**
+2. Find the **SSO Configuration** section
+3. Click **Configure SSO**
+
+#### 2) Choose Your Provider
+
+Select your identity provider from the list or choose "Custom SAML" for other providers.
+
+#### 3. Configure Your Identity Provider
+
+You'll need to configure your identity provider with:
+
+* **Entity ID**: Provided by Twenty
+* **ACS URL**: The callback URL for authentication
+* **Certificate**: For secure communication
+
+#### 4. Enter Provider Details in Twenty
+
+* **SSO URL**: Login URL from your provider
+* **Entity ID**: Your provider's identifier
+* **Certificate**: X.509 certificate from your provider
+
+#### 5. Test and Enable
+
+1. Click **Test Configuration** to verify setup
+2. Enable SSO when testing is successful
+3. Configure user provisioning preferences
+
+## User Provisioning
+
+### Just-in-Time (JIT) Provisioning
+
+* Users are created automatically on first login
+* Assigned default role automatically
+* No manual user creation needed
+
+### Manual Provisioning
+
+* Invite users before they can log in
+* Pre-assign specific roles
+* More control over who can access
+
+## Managing SSO Users
+
+### Role Assignment
+
+SSO users can be assigned roles like regular users:
+
+1. **Ayarlar → Üyeler** bölümüne gidin
+2. Find the user
+3. Change their role as needed
+
+### Access Revocation
+
+To remove access for SSO users:
+
+* Remove them from your identity provider, or
+* Remove them from the Twenty workspace
+
+## En İyi Uygulamalar
+
+### Güvenlik
+
+* **Require SSO**: Disable password login for SSO users
+* **Regular audits**: Review access periodically
+* **Strong IdP policies**: Enforce MFA at the identity provider
+
+### User Management
+
+* **Clear naming**: Use consistent naming from your directory
+* **Group mapping**: Map IdP groups to Twenty roles (if available)
+* **Offboarding process**: Include Twenty in your deprovisioning workflow
+
+## Sorun Giderme
+
+### Common Issues
+
+* **Certificate errors**: Ensure certificate hasn't expired
+* **URL mismatches**: Verify ACS URL matches exactly
+* **User not found**: Check JIT provisioning settings
+
+### Yardım Almak
+
+If you encounter issues, contact support with:
+
+* Error messages received
+* Identity provider being used
+* Configuration details (without sensitive data)
diff --git a/packages/twenty-docs/l/tr/user-guide/permissions-access/how-tos/permissions-faq.mdx b/packages/twenty-docs/l/tr/user-guide/permissions-access/how-tos/permissions-faq.mdx
new file mode 100644
index 0000000000..f8cf4ba1d7
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/permissions-access/how-tos/permissions-faq.mdx
@@ -0,0 +1,126 @@
+---
+title: Permissions FAQ
+description: Frequently asked questions about roles and permissions.
+---
+
+## Roller
+
+
+
+ Twenty comes with an **Admin** and **Member** roles by default. You can create additional custom roles based on your team's needs (e.g., Sales Rep, Manager, Read-Only User).
+
+
+
+ No, the Admin role cannot be deleted. There must always be at least one member assigned to the Admin role.
+
+
+
+ Any workspace member assigned to that role will be automatically reassigned to the default role.
+
+
+
+ Go to **Settings → Roles**, find the **Default Role** option, and select which role new members should automatically receive when they join.
+
+
+
+ No, each user can only have one role at a time. Create a custom role if you need a combination of permissions.
+
+
+
+## İzinler
+
+
+
+ * **Object permissions**: Control access to entire records (e.g., can see/edit/delete People records)
+ * **Field permissions**: Control access to specific fields within an object (e.g., can see but not edit the Salary field)
+
+ Field permissions allow more granular control over sensitive data.
+
+
+
+ Permissions cascade from global to specific:
+
+ 1. **All Objects** sets the baseline for all objects
+ 2. **Object-Level Permissions** can override the global setting for specific objects
+ 3. **Field-Level Permissions** can override the object setting for specific fields
+
+ More specific settings always take precedence.
+
+
+
+ For objects:
+
+ * **See Records**: View records in lists and detail pages
+ * **Edit Records**: Modify existing records
+ * **Delete Records**: Soft-delete records (can be restored)
+ * **Destroy Records**: Permanently delete records
+
+ For fields:
+
+ * **See Field**: View the field value
+ * **Edit Field**: Modify the field value
+ * **No Access**: Field is completely hidden
+
+
+
+ Row-level permissions will be available on the **Organization** plan by Q1 2026. This allows you to restrict access to specific records based on criteria (e.g., only see your own opportunities).
+
+
+
+ 1. **Ayarlar → Roller** bölümüne gidin
+ 2. Select the role
+ 3. Navigate to the object containing the field
+ 4. Set the field permission to **See Field** (without Edit Field)
+
+
+
+## Settings & Actions
+
+
+
+ You can control access to:
+
+ * API key generation
+ * Workspace preferences
+ * Role assignment
+ * Data model configuration
+ * Security settings
+ * Workflow management
+
+ Use **Settings All Access** to grant full access, or enable specific permissions.
+
+
+
+ You can control:
+
+ * **Send Email**: Ability to send emails from Twenty
+ * **Import CSV**: Ability to import data via CSV
+ * **Export CSV**: Ability to export data to CSV
+
+ Use **Application All Access** to grant all actions, or enable specific ones.
+
+
+
+## Tek Oturum Açma
+
+
+
+ No, SSO is a Premium feature available on the **Organization** plan only.
+
+
+
+ Twenty supports:
+
+ * **SAML 2.0** (works with most enterprise identity providers)
+ * **Google Workspace**
+ * **Microsoft Entra ID** (formerly Azure AD)
+
+
+
+ With JIT provisioning, user accounts are automatically created in Twenty when someone logs in via SSO for the first time. They're assigned the default role automatically.
+
+
+
+ Yes, once SSO is configured, you can disable password login for SSO users to enforce authentication through your identity provider.
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/permissions-access/overview.mdx b/packages/twenty-docs/l/tr/user-guide/permissions-access/overview.mdx
new file mode 100644
index 0000000000..c236bdafe4
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/permissions-access/overview.mdx
@@ -0,0 +1,40 @@
+---
+title: İzinler ve Erişim
+description: Çalışma alanınızda roller, izinler ve erişim denetimini yönetin.
+---
+
+
+
+
+
+Twenty'nin izin sistemi, çalışma alanınızdaki verilere kimin erişebileceğini ve bunları kimin değiştirebileceğini kontrol etmenizi sağlar. Roller oluşturun, izinler atayın ve güvenli erişim için SSO'yu yapılandırın.
+
+## Bu bölümde neler var
+
+
+
+ Roller oluşturun ve nesne, alan ve ayar izinlerini yapılandırın.
+
+
+
+ Kimlik sağlayıcınızla Tek Oturum Açmayı kurun.
+
+
+
+ Roller, izinler ve SSO hakkında sık sorulan sorular.
+
+
+
+## Temel özellikler
+
+* **Rol tabanlı erişim**: Belirli izinlere sahip özel roller oluşturun
+* **Nesne izinleri**: Kimin kayıtları görüntüleyebileceğini, düzenleyebileceğini veya silebileceğini kontrol edin
+* **Alan izinleri**: Hassas alanlara erişimi kısıtlayın
+* **Ayar izinleri**: Çalışma alanı yapılandırmasına erişimi kontrol edin
+* **SSO entegrasyonu**: Kurumsal güvenlik için Tek Oturum Açmayı yapılandırın (Kuruluş planı)
+
+## Hızlı bağlantılar
+
+* [Bir rol oluşturun](/l/tr/user-guide/permissions-access/capabilities/permissions#create-a-role)
+* [SSO'yu yapılandırın](/l/tr/user-guide/permissions-access/capabilities/sso-configuration)
+* [Ekip üyelerini yönetin](/l/tr/user-guide/settings/capabilities/member-management)
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/capabilities/domains-settings.mdx b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/domains-settings.mdx
new file mode 100644
index 0000000000..43c5f43d2b
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/domains-settings.mdx
@@ -0,0 +1,47 @@
+---
+title: Domain Settings
+description: Configure workspace domain, approved access domains, and public domains.
+---
+
+Configure domain settings under **Settings → Domains**.
+
+## İş Alanı Alan Adı
+
+Edit your subdomain name or set a custom domain for your workspace.
+
+### Alan adını özelleştir
+
+1. Click **Customize Domain**
+2. Edit your subdomain (e.g., `yourcompany.twenty.com`)
+3. Or set up a custom domain (e.g., `crm.yourcompany.com`)
+
+For custom domains, you'll need to configure DNS settings with your domain provider.
+
+## Onaylanmış Alan Adları
+
+Anyone with an email address at these domains is allowed to sign up for this workspace automatically.
+
+### Onaylanmış Erişim Alanı Ekle
+
+1. Click **Add Approved Access Domain**
+2. Enter your company domain (e.g., `yourcompany.com`)
+3. Kaydet
+
+Once configured, anyone with an email address at that domain can join your workspace without needing a direct invitation.
+
+
+ This is useful for allowing your entire team to self-register while keeping the workspace restricted to your organization.
+
+
+## Public Domains
+
+Bu alan adları üzerinde eksiksiz ve güvenli bir barındırma ortamı sağlayın.
+
+### Kamusal Alan Ekle
+
+1. Click **Add Public Domain**
+2. Enter the domain you want to use
+3. Configure DNS settings as instructed
+4. Verify the domain
+
+SSL certificates are automatically provisioned for public domains.
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/capabilities/member-management.mdx b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/member-management.mdx
new file mode 100644
index 0000000000..143a3ad8ad
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/member-management.mdx
@@ -0,0 +1,87 @@
+---
+title: Üye Yönetimi
+description: Invite team members and manage workspace access.
+---
+
+Manage who has access to your workspace under **Settings → Members**.
+
+## Yeni Üyeleri Davet Et
+
+### Using Email Invitation
+
+1. **Ayarlar → Üyeler** bölümüne gidin
+2. Click **+ Invite**
+3. Kişinin e-posta adresini girin
+4. Select a role for the new member
+5. Click **Send invite**
+
+The invited person will receive an email with a link to join your workspace.
+
+### Using Invite Link
+
+1. **Ayarlar → Üyeler** bölümüne gidin
+2. Çalışma alanı davet bağlantısını kopyalayın
+3. Bağlantıyı yeni takım üyeleriyle paylaşın
+4. Kaydolduktan sonra erişim kazanacaklar
+
+## View and Manage Members
+
+### View All Members
+
+Go to **Settings → Members** to see:
+
+* All active members
+* Pending invitations
+
+### Edit a Member's Profile
+
+Click on a member to open their profile page. As an admin, you can:
+
+* Edit their **name**
+* Update their **profile picture**
+* **Impersonate** their account (useful for troubleshooting)
+* **Delete** their account
+
+### Change a Member's Role
+
+On the member's profile page:
+
+1. Open the **Permissions** tab
+2. View the currently assigned role
+3. Select a different role from the dropdown
+4. The change takes effect immediately
+
+→ [Learn more about roles and permissions](/l/tr/user-guide/permissions-access/capabilities/permissions)
+
+### Remove a Member
+
+1. Click on the member to open their profile
+2. Click **Delete** to remove them from the workspace
+
+
+ Removed members lose access immediately. Their data (records, notes, tasks) remains in the workspace.
+
+
+
+ **Email sync is also removed.** If the deleted user was the only one who synced certain emails, those emails will be permanently removed from the workspace.
+
+
+## Pending Invitations
+
+Manage invitations that haven't been accepted:
+
+* **Resend**: Send the invitation email again
+* **Cancel**: Revoke the invitation before it's accepted
+
+## Onaylı Erişim Alan Adları
+
+Allow team members to join automatically based on their email domain:
+
+1. **Ayarlar → Alan Adları** kısmına gidin
+2. Add your company domain (e.g., `yourcompany.com`)
+3. Anyone with that email domain can join without an invitation
+
+## Related
+
+* [Permissions](/l/tr/user-guide/permissions-access/capabilities/permissions) — configure what each role can do
+* [Domains Settings](/l/tr/user-guide/settings/capabilities/domains-settings) — configure approved domains
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/capabilities/releases-settings.mdx b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/releases-settings.mdx
new file mode 100644
index 0000000000..74146c4eeb
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/releases-settings.mdx
@@ -0,0 +1,31 @@
+---
+title: Sürüm Ayarları
+description: Enable experimental features in Twenty.
+---
+
+## About Releases Settings
+
+The Releases section allows you to enable experimental features before they're generally available.
+
+## Lab Özellikleri
+
+Lab features are experimental capabilities that are still being developed. They may change or be removed without notice.
+
+### How to Enable Lab Features
+
+1. Go to **Settings → Releases**
+2. Find the feature you want to enable
+3. Toggle it on
+4. The feature will be available immediately
+
+
+ Lab features are experimental and may not work as expected. Use them with caution in production environments.
+
+
+## Feature Feedback
+
+Your feedback helps improve Twenty:
+
+* Report issues with experimental features
+* Share how you're using new features
+* Suggest improvements via the community Discord
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/capabilities/workspace-settings.mdx b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/workspace-settings.mdx
new file mode 100644
index 0000000000..0a31139675
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/capabilities/workspace-settings.mdx
@@ -0,0 +1,30 @@
+---
+title: Çalışma Alanı Ayarları
+description: Çalışma alanı isminizi ve markanızı özelleştirin.
+---
+
+Those are accessible under **Settings → General**.
+
+## Çalışma Alanı Resmi
+
+* **Logo Yükle**: Özel bir çalışma alanı logosu ekleyin
+* **Desteklenen Formatlar**: 10MB altındaki PNG, JPEG ve GIF dosyaları
+* **Kaldır**: Mevcut çalışma alanı logosunu silin
+
+## İş Alanı Adı
+
+* **İsim**: Çalışma alanı görüntü adınızı değiştirin
+* Bu isim tüm çalışma alanı üyelerine görünür
+
+## Danger Zone
+
+
+ Çalışma alanınızı silmek tüm verileri kalıcı olarak kaldırır ve geri alınamaz. Tüm çalışma alanı verileri sonsuza kadar kaybolacak, tüm üyeler anında erişimi kaybedecek ve bu işlem geri döndürülemez.
+
+
+Çalışma alanınızı silmek için:
+
+1. **Çalışma alanını sil** düğmesine tıklayın
+2. İstendiğinde silmeyi onaylayın
+
+**Not**: Sadece çalışma alanı yöneticileri çalışma alanlarını silebilir.
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/how-tos/settings-faq.mdx b/packages/twenty-docs/l/tr/user-guide/settings/how-tos/settings-faq.mdx
new file mode 100644
index 0000000000..053e5d94d8
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/how-tos/settings-faq.mdx
@@ -0,0 +1,171 @@
+---
+title: Ayarlar SSS
+description: Frequently asked questions about Twenty settings.
+image: /images/user-guide/setup/settings.png
+---
+
+## Çalışma Alanı Ayarları
+
+
+
+ 1. Go to **Settings → General**
+ 2. Find the Workspace Name field
+ 3. Enter your new name
+ 4. Changes save automatically
+
+
+
+ 1. Go to **Settings → General**
+ 2. Click on the current logo or upload area
+ 3. Select an image file (PNG, JPEG, or GIF under 10MB)
+ 4. The logo updates immediately
+
+
+
+ Yes, you can create and be a member of multiple workspaces. Each workspace has its own data, settings, and subscription.
+
+
+
+ 1. Go to **Settings → General**
+ 2. Scroll to Danger Zone
+ 3. Click **Delete workspace**
+ 4. Confirm the deletion
+
+ Note: This permanently deletes all data and cannot be undone.
+
+
+
+ Delete the workspaces you no longer need under **Settings → General → Delete workspace**.
+
+
+ Do not delete your **account** (accessible under Settings → Profile): your account is shared among all your workspaces. Deleting your account removes access to ALL workspaces.
+
+
+
+
+ If you want to temporarily disable your workspace (not permanently delete it), go to **Settings → Billing** and click **Cancel Plan**. Your data will be preserved for a grace period.
+
+
+
+## Profil Ayarları
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the Password section
+ 3. Enter your current password
+ 4. Enter your new password
+ 5. Save changes
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Find the 2FA section
+ 3. **2FA Etkinleştir**'e tıklayın
+ 4. QR kodunu yetkilendirme uygulamanızla tarayın
+ 5. Enter the verification code
+
+
+
+ To change your email address, please reach out to [contact@twenty.com](mailto:contact@twenty.com).
+
+
+
+ 1. Go to **Settings → Profile**
+ 2. Scroll to Danger Zone
+ 3. **Hesabı Sil**'e tıklayın
+ 4. Confirm by typing your email
+
+ Note: This removes your access to all workspaces and deletes all emails synced from your connected accounts.
+
+
+
+## Deneyim Ayarları
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find the Theme section
+ 3. Select Light, Dark, or System
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Date Format
+ 3. Select your preferred format
+ 4. Changes apply immediately
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Time Zone
+ 3. Select your local time zone
+ 4. All timestamps will adjust
+
+
+
+ 1. Go to **Settings → Experience**
+ 2. Find Language
+ 3. Select from available languages
+ 4. The interface updates to your selection
+
+
+
+## Account Settings
+
+
+
+ 1. **Ayarlar → Hesaplar** sekmesine gidin.
+ 2. **Hesap ekle** butonuna tıklayın.
+ 3. Choose Google or Microsoft
+ 4. Authorize access
+ 5. Configure sync settings
+
+
+
+ Yes, you can connect multiple email accounts. Go to **Settings → Accounts** and add additional accounts as needed.
+
+
+
+ 1. **Ayarlar → Hesaplar** sekmesine gidin.
+ 2. Find the account to remove
+ 3. Click **Disconnect**
+ 4. Confirm the action
+
+
+
+## Alan Adları
+
+
+
+ Evet! Go to **Settings → Domains** and click **Customize Domain**. You have two options:
+
+ * **Subdomain**: Use a Twenty subdomain like `yourcompany.twenty.com`
+ * **Custom domain**: Use your own domain like `crm.yourcompany.com` (requires DNS configuration)
+
+ A subdomain is quick to set up, while a custom domain provides a fully branded experience for your team.
+
+
+
+ You can configure approved access domains so team members with company email addresses can automatically join your workspace. Go to **Settings → Domains** and add your company domain (e.g., `yourcompany.com`).
+
+
+
+## Lab Özellikleri
+
+
+
+ Lab features are experimental capabilities being tested before general release. They may change or be removed without notice.
+
+
+
+ Lab features are functional but may have bugs or unexpected behavior. Use them cautiously in production environments.
+
+
+
+ 1. Go to **Settings → Releases → Lab**
+ 2. Find the feature you want
+ 3. Toggle it on
+ 4. The feature becomes available immediately
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/settings/overview.mdx b/packages/twenty-docs/l/tr/user-guide/settings/overview.mdx
new file mode 100644
index 0000000000..6624eb1274
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/settings/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: Ayarlar
+description: Set up your Twenty workspace with essential configurations.
+image: /images/user-guide/setup/settings.png
+---
+
+
+
+
+
+## Initial Setup
+
+When you first create your workspace, there are several key settings to configure.
+
+### Workspace Name and Logo
+
+1. Go to **Settings → General**
+2. Update your workspace name
+3. Upload your company logo
+4. Save your changes
+
+### Time Zone and Date Format
+
+1. Go to **Settings → Experience**
+2. Select your time zone
+3. Choose your preferred date format
+4. Save your changes
+
+## Essential Configurations
+
+### Connect Email and Calendar
+
+Set up email and calendar sync:
+
+1. **Ayarlar → Hesaplar** sekmesine gidin.
+2. **Hesap ekle** butonuna tıklayın.
+3. Connect your Google or Microsoft account
+4. Configure sync settings
+
+→ [Complete email & calendar setup guide](/l/tr/user-guide/calendar-emails/overview)
+
+### Invite Your Team
+
+Add team members to your workspace:
+
+1. **Ayarlar → Üyeler** bölümüne gidin
+2. Click **+ Invite**
+3. Enter email addresses
+4. Assign appropriate roles
+
+
+ Before inviting your team, check the default role under **Settings → Roles**. New members are automatically assigned this role when they join.
+
+
+## Workspace Settings Checklist
+
+* Workspace name and logo configured
+* Time zone and date format set
+* Email and calendar connected
+* Team members invited
+* Roles and permissions configured
+
+## Sonraki Adımlar
+
+* [Workspace settings](/l/tr/user-guide/settings/capabilities/workspace-settings)
+* [Profile settings](/l/tr/user-guide/settings/capabilities/profile-settings)
+* [Experience settings](/l/tr/user-guide/settings/capabilities/experience-settings)
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/calendar-view.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/calendar-view.mdx
new file mode 100644
index 0000000000..4a1fd7d049
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/calendar-view.mdx
@@ -0,0 +1,46 @@
+---
+title: Takvim Görünümü
+description: Display records with date fields on a calendar.
+---
+
+## About Calendar View
+
+Calendar view displays your records on a calendar based on a date field. Each record appears as an event on the corresponding date.
+
+
+
+## Creating a Calendar View
+
+1. Navigate to an object with date fields
+2. Click the view dropdown → **+ Add view**
+3. Name your view and click **Create**
+4. Open the **Options** on the right
+5. Select **Calendar** as the layout
+6. Choose the **date field** to use for positioning records
+7. Click **Update view**
+
+## Configuring the Calendar
+
+### Choose the Date Field
+
+Under **Options**, select which date field determines where records appear on the calendar.
+
+### Display Fields
+
+Configure which fields show on each calendar event:
+
+1. Click **Options → Fields**
+2. Toggle fields on/off
+3. Drag to reorder
+
+## Use Cases
+
+* **Meetings and calls**: View upcoming appointments
+* **Deadlines**: Track due dates and close dates
+* **Events**: Plan and visualize scheduled activities
+* **Follow-ups**: See when tasks are due
+
+## Related
+
+* [Views Overview](/l/tr/user-guide/views-pipelines/overview) — creating and managing views
+* [Filters and Sorting](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting) — filtering calendar data
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/fields-and-columns.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
new file mode 100644
index 0000000000..1b8f0adfa5
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/fields-and-columns.mdx
@@ -0,0 +1,52 @@
+---
+title: Fields & Columns
+description: Choose which fields to display and how to organize them.
+---
+
+## Selecting Fields to Display
+
+Each view can show a different set of fields. Customize what's visible to focus on the information that matters.
+
+### Show or Hide Fields
+
+1. Click **Options** in the top right
+2. Click **Fields**
+3. Click the **eye icon** next to each field to show/hide it
+
+### Reorder Fields
+
+Change the order fields appear in your view:
+
+1. Click **Options → Fields**
+2. Drag fields up or down
+3. Changes save automatically
+
+## Field Display by View Type
+
+### Tablo Görünümleri
+
+* Fields appear as columns
+* Resize columns by dragging borders
+
+### Kanban Görünümleri
+
+* Fields appear on cards
+* Reorder via Options → Fields
+* Use Compact view to hide all fields
+
+### Calendar Views
+
+* Selected fields show on calendar events
+* Configure via Options → Fields
+
+## En İyi Uygulamalar
+
+* **Show only what's needed** — too many fields clutters the view
+* **Put important fields first** — most-used columns on the left
+* **Create multiple views** — different field sets for different purposes
+* **Use field visibility per view** — same object, different focus
+
+## Related
+
+* [Table Views](/l/tr/user-guide/views-pipelines/capabilities/table-views) — list view features
+* [Kanban Views](/l/tr/user-guide/views-pipelines/capabilities/kanban-views) — card-based views
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
new file mode 100644
index 0000000000..1503a8ac0f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx
@@ -0,0 +1,78 @@
+---
+title: Filters & Sorting
+description: Filter and sort records to find exactly what you need.
+---
+
+## Filtering Data
+
+Filters help you focus on specific records by showing only those that match your criteria.
+
+### Adding a Filter
+
+1. Click the **Filter** button in the toolbar
+2. Select the field to filter by
+3. Choose the operator (equals, contains, etc.)
+4. Enter the filter value
+5. Click **Apply**
+
+### Filter Operators
+
+| Field Type | Available Operators |
+| -------------- | -------------------------------------------------- |
+| Metin | Equals, Contains, Starts with, Ends with, Is empty |
+| Sayı | Equals, Greater than, Less than, Between, Is empty |
+| Tarih | Equals, Before, After, Between, Is empty |
+| Seç | Equals, Is any of, Is empty |
+| Kontrol Kutusu | Is true, Is false |
+| İlişki | Equals, Is empty |
+
+### Multiple Filters
+
+Combine multiple filters to narrow down results:
+
+* All filters are applied with AND logic
+* Each additional filter further restricts results
+
+### Removing Filters
+
+* Click the **X** on individual filter chips
+* Click **Clear all** to remove all filters
+
+## Sorting Data
+
+Sorting determines the order records appear.
+
+### Adding a Sort
+
+1. Click the **Sort** button in the toolbar
+2. Select the field to sort by
+3. Choose ascending (A-Z, 0-9) or descending (Z-A, 9-0)
+4. Click **Apply**
+
+### Multiple Sorts
+
+Add multiple sort levels:
+
+* First sort is primary
+* Subsequent sorts apply within groups of equal values
+
+### Quick Column Sorting
+
+Click any column header to sort:
+
+* First click: Ascending
+* Second click: Descending
+* Third click: Remove sort
+
+## Saving Filter and Sort Settings
+
+Filters and sorts are saved with the view:
+
+1. Configure your filters and sorts
+2. Click **Save** to update the current view
+3. Or click **Save as new view** to create a variant
+
+## Related
+
+* [Table Views](/l/tr/user-guide/views-pipelines/capabilities/table-views) — group by feature
+* [Views Overview](/l/tr/user-guide/views-pipelines/overview) — building and managing views
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/kanban-views.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/kanban-views.mdx
new file mode 100644
index 0000000000..a3ee36f0ba
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/kanban-views.mdx
@@ -0,0 +1,99 @@
+---
+title: Kanban Board Views
+description: Learn how to use Kanban views to visualize and manage your workflows.
+image: /images/user-guide/kanban-views/kanban.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## Kanban Görünümleri Hakkında
+
+Kanban görünümleri, her sütunun farklı bir aşamayı ve her kartın bir kaydı temsil ettiği süreç akışlarını görsel olarak haritalandırır.
+
+## Kartları Aşamalar Arasında Taşıma
+
+Kartların her birini, iş akışınız boyunca sürükleyip bırakarak aşamalar arasında taşıyabilirsiniz. Devam etmek için, bir karta tıklayıp tutarak sonraki aşamaya taşıyın.
+
+
+
+## Add and Delete Stages
+
+Bir Seçim Alanındaki değeri temsil eden aşamaları kullanarak iş akışınızı ihtiyaçlarınıza uygun şekilde ayarlayabilirsiniz:
+
+### Aşamaları Ekle
+
+Bir aşama eklemek için Ayarlar > Veri Modeline giderek, nesnenizi seçin ve ardından Kanban panonuzun bağlı olduğu alanı seçin.
+
+
+
+### Aşamaları Kaldırma
+
+To remove a stage, hover the stage name or the `⋮` icon, click `Edit from settings` in the Select field settings, and then click **Delete** next to the relevant stage.
+
+## Display Fields
+
+Kanban tahtanızı bazı alanları gösterecek ve diğerlerini gizleyecek şekilde yapılandırabilirsiniz. To hide a field, click on **Options** on the top right, then on **Fields** to bring up the list of options. Look for the field needed in the Hidden Fields section and click on the eye button to display the field.
+
+Alanların sırasını değiştirmek için alan adını basılı tutup istediğiniz yere sürükleyin.
+
+
+
+## Kompakt Görünüm
+
+You can hide all the fields and get an overview of all records at a glance. To enable:
+
+1. Click **Options** on the top right
+2. Turn on the toggle for **Compact view**
+
+
+
+## Column Aggregations
+
+Each column in a Kanban view can display aggregated values at the top, helping you understand your data at a glance.
+
+### Available Aggregations
+
+| Aggregation | Açıklama |
+| ----------- | --------------------------------------------- |
+| **Count** | Number of records in the column |
+| **Sum** | Total of a numeric field (e.g., deal amounts) |
+| **Average** | Average value of a numeric field |
+| **Min** | Lowest value |
+| **Max** | Highest value |
+
+### Configuring Aggregations
+
+1. Click on the number displayed next to the Stage value, at the top of a column
+2. Select the aggregation type
+3. Choose the field to aggregate
+
+**Example:** Show total deal value per stage by aggregating the Amount field with Sum.
+
+## When to Use Kanban Views
+
+Kanban views are ideal for:
+
+* **Sales pipelines**: Track deals through stages from lead to close
+* **Project management**: Monitor tasks through workflow states
+* **Recruitment**: Track candidates through hiring stages
+* **Any staged process**: Visualize any workflow with defined stages
+
+## En İyi Uygulamalar
+
+### Organize Your Stages
+
+* **Limit stages**: 5-7 stages is ideal for visibility
+* **Clear naming**: Use descriptive stage names
+* **Logical order**: Arrange stages in process order
+
+### Optimize Card Display
+
+* **Show key fields**: Display only the most important information
+* **Use compact view**: For high-level overviews
+* **Color coding**: Use stage colors to quickly identify status
+
+### Maintain Data Quality
+
+* **Update regularly**: Keep cards moving through stages
+* **Archive completed**: Move closed items out of active view
+* **Review stale cards**: Follow up on cards stuck in stages
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/table-views.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/table-views.mdx
new file mode 100644
index 0000000000..66c32444e9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/table-views.mdx
@@ -0,0 +1,64 @@
+---
+title: Tablo Görünümleri
+description: Display your data in a spreadsheet-like list format.
+---
+
+## Tablo Görünümleri Hakkında
+
+Table views display records in rows with customizable columns—like a spreadsheet. This is the default view type for most objects.
+
+
+
+## Features
+
+### Column Configuration
+
+* Show or hide columns (fields)
+* Resize column widths
+* Reorder columns by dragging
+
+### Group By a Select Field
+
+Organize records into collapsible groups based on a field of select type.
+
+
+
+1. Click **Options**
+2. Select **Group**
+3. Choose a Select field
+4. Configure group order under **Options → Group → Sort**:
+ * **Alphabetical** or **Reverse alphabetical**
+ * **Manual order**: Drag groups under "Visible groups" to reorder
+ * Click the **eye icon** next to a group to hide it
+
+**Kullanım alanları:**
+
+* Group Company by Type
+* Group Opportunities by Stage
+* Group Tasks by Status
+
+
+ **For best performance, limit to 10-15 visible groups per view.** If you need more groups, consider using a Dashboard instead.
+
+
+### Column Widths
+
+Resize columns to show more or less content:
+
+1. Hover between two column headers
+2. Click and drag the column border
+3. Release to set the new width
+
+## When to Use Table Views
+
+Table views work best for:
+
+* **Browsing large datasets** — scan many records quickly
+* **Data entry** — edit multiple records efficiently
+* **Detailed analysis** — see many fields at once
+* **Sorting and filtering** — find specific records
+
+## Related
+
+* [Fields and Columns](/l/tr/user-guide/views-pipelines/capabilities/fields-and-columns) — configuring which fields to display
+* [Filters and Sorting](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting) — narrowing down records
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/view-settings.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/view-settings.mdx
new file mode 100644
index 0000000000..11fd74f818
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/view-settings.mdx
@@ -0,0 +1,74 @@
+---
+title: View Settings
+description: Manage view visibility, naming, icons, and organization.
+---
+
+## Görünüm Gezgini'nden
+
+Control who can see your custom views.
+
+### Visibility Options
+
+| Setting | Who Can See |
+| ------------- | --------------------- |
+| **Workspace** | All workspace members |
+| **Unlisted** | Only you |
+
+### Changing Visibility
+
+1. Open the view
+2. Click **Options → Visibility**
+3. Select **Workspace** or **Unlisted**
+
+
+ The default "All [Object Name]" views cannot have their visibility changed.
+
+
+## Rename a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Enter the new name
+
+## Change View Icon
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Edit**
+4. Click the icon to change it
+
+## Reorder Views
+
+Change the order views appear in the dropdown:
+
+1. Open the view dropdown
+2. Drag views by their handle
+3. Drop in the desired position
+4. Order saves automatically
+
+## Favoriler
+
+Pin frequently used views for quick access:
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to a view
+3. Select **Add to favorites**
+
+Favorited views appear in a dedicated section for easy access.
+
+## Delete a View
+
+1. Open the view dropdown
+2. Click the **⋮** menu next to the view
+3. Select **Delete**
+4. Confirm deletion
+
+
+ Deleted views cannot be recovered.
+
+
+## Related
+
+* [Views Overview](/l/tr/user-guide/views-pipelines/overview) — creating views
+* [How to Restrict Access](/l/tr/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — step-by-step guide
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
new file mode 100644
index 0000000000..d7df7b8a3d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx
@@ -0,0 +1,61 @@
+---
+title: Create a Calendar View for Tasks Due
+description: Visualize your tasks and deadlines on a calendar.
+---
+
+
+
+## Ön Gereksinimler
+
+Your Tasks object needs a **Due Date** field (Date or Date & Time type).
+
+## Steps
+
+1. Navigate to **Tasks**
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Tasks Calendar")
+4. Click **Create**
+5. Click **Options** and select **Calendar** as the layout
+6. Choose **Due Date** as the date field
+7. **Kaydet**'e tıklayın
+
+## Configure Your Calendar
+
+### Display Fields on Events
+
+1. Click **Options → Fields**
+2. Click the **eye icon** to show/hide fields
+3. Drag to reorder
+
+Recommended fields to display:
+
+* **Title** — task name
+* **Assignee** — who's responsible
+* **Status** — current progress
+
+### Filter Your Calendar
+
+Create focused views:
+
+* **My Tasks**: Filter by Assignee = Me
+* **This Week**: Filter by Due Date = This week
+* **Overdue**: Filter by Due Date < Today, Status ≠ Done
+
+## Other Calendar Use Cases
+
+| Nesne | Date Field | Purpose |
+| ------------- | ---------- | ------------------------- |
+| Fırsatlar | Close Date | Track expected closes |
+| Custom Events | Event Date | Plan activities |
+| Projects | Deadline | Monitor project timelines |
+
+## Tips
+
+* **Review weekly**: Start each week by checking your calendar view
+* **Combine with table view**: Use calendar for overview, table for details
+* **Set visibility**: Keep personal task calendars as Unlisted
+
+## Related
+
+* [Calendar View](/l/tr/user-guide/views-pipelines/capabilities/calendar-view) — all calendar features
+* [Filters and Sorting](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting) — filter your calendar
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
new file mode 100644
index 0000000000..de2a41b1ee
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx
@@ -0,0 +1,80 @@
+---
+title: Create a Kanban View for Projects
+description: Track projects through stages using a visual board.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Use a Kanban view to visualize your projects (or any object with stages) as cards moving through columns.
+
+
+
+## Ön Gereksinimler
+
+Your object needs a **Select field** to use as columns (e.g., Status, Stage, Phase).
+
+If you don't have one:
+
+1. Go to **Settings → Data Model**
+2. Select your object
+3. Add a Select field with your stage options
+
+## Steps
+
+1. Navigate to your object (e.g., Projects, Tasks)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Project Board")
+4. Click **Create**
+5. Click **Options** and select **Kanban** as the layout
+6. The view uses your Select field for columns automatically
+7. **Kaydet**'e tıklayın
+
+## Configure Your Board
+
+### Show Key Fields on Cards
+
+1. Click **Options → Fields**
+2. Find fields in the "Hidden Fields" section
+3. Click the **eye icon** to display them on cards
+4. Drag to reorder
+
+
+
+### Enable Compact View
+
+For a high-level overview:
+
+1. Click **Options**
+2. Turn on **Compact view**
+
+Cards show only the record name.
+
+
+
+### Add Aggregations
+
+Show counts or totals at the top of each column:
+
+1. Click the number next to a column name
+2. Select an aggregation (Count, Sum, etc.)
+3. Choose a field if needed
+
+## Moving Cards
+
+Drag and drop cards between columns to update their status.
+
+
+
+## Example: Task Board
+
+| Column (Status) | Cards |
+| --------------- | ----------------- |
+| **To Do** | New tasks |
+| **In Progress** | Active work |
+| **Review** | Awaiting approval |
+| **Done** | Tamamlandı |
+
+## Related
+
+* [Kanban Views](/l/tr/user-guide/views-pipelines/capabilities/kanban-views) — aggregations, compact view, stages
+* [How to Set Up a Sales Pipeline](/l/tr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — Kanban for Opportunities
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
new file mode 100644
index 0000000000..60f566e143
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx
@@ -0,0 +1,51 @@
+---
+title: Create a Table View with Grouping
+description: Organize your records into collapsible groups by field value.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+Group your table view by a Select field to organize records into collapsible sections.
+
+
+
+## Steps
+
+1. Navigate to the object (People, Companies, etc.)
+2. Click the view dropdown → **+ Add view**
+3. Name your view (e.g., "Companies by Type")
+4. Click **Create**
+5. Click **Options → Group**
+6. Choose a Select field to group by
+7. **Kaydet**'e tıklayın
+
+## Configure Group Order
+
+Under **Options → Group → Sort**, choose how groups are ordered:
+
+| Seçenek | Açıklama |
+| ------------------------ | --------------------------------------------- |
+| **Alphabetical** | A to Z |
+| **Reverse alphabetical** | Z to A |
+| **Manual order** | Drag groups to reorder under "Visible groups" |
+
+Click the **eye icon** next to a group to hide it from the view.
+
+
+ **For best performance, limit to 10-15 visible groups.** If you need more, consider using a Dashboard instead.
+
+
+## Example: Companies by Industry
+
+1. Go to **Companies**
+2. Create a new view named "By Industry"
+3. Click **Options → Group**
+4. Select the **Industry** field
+5. Kaydet
+
+Now your companies are organized by industry, making it easy to focus on one segment at a time.
+
+## Related
+
+* [Table Views](/l/tr/user-guide/views-pipelines/capabilities/table-views) — all table view features
+* [Filters and Sorting](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting) — combine grouping with filters
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
new file mode 100644
index 0000000000..fb634b2959
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx
@@ -0,0 +1,32 @@
+---
+title: Görünümünüze Erişimi Kısıtlayın
+description: Özel görünümlerinizi kimin görebileceğini kontrol edin.
+---
+
+Her görünüm (varsayılan "All [Object Name]" görünümleri hariç) kendi görünürlük ayarına sahiptir.
+
+## Adımlar
+
+1. Kısıtlamak istediğiniz görünümü açın
+2. Sağ üst köşedeki **Seçenekler**'e tıklayın
+3. **Görünürlük**'e tıklayın
+4. **Liste dışı**'yı seçin
+
+Görünümünüz artık yalnızca sizin için görünür.
+
+## Görünürlük Seçenekleri
+
+| Ayar | Kimler Görebilir |
+| -------------- | -------------------- |
+| **İş Alanı** | Tüm iş alanı üyeleri |
+| **Liste dışı** | Yalnızca siz |
+
+## Notlar
+
+* Varsayılan "All [Object Name]" görünümleri liste dışı yapılamaz
+* Liste dışı görünümler diğer kullanıcıların görünüm açılır menülerinde görünmez
+* Görünürlüğü istediğiniz zaman yeniden İş Alanı olarak değiştirebilirsiniz
+
+## İlgili
+
+* [View Settings](/l/tr/user-guide/views-pipelines/capabilities/view-settings) — tüm görünüm yapılandırma seçenekleri
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
new file mode 100644
index 0000000000..66f4182a88
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx
@@ -0,0 +1,120 @@
+---
+title: Set Up a Sales Pipeline
+description: Configure your sales pipeline to track opportunities through stages.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+A sales pipeline in Twenty is a Kanban view of your Opportunities object, where each column represents a stage in your sales process.
+
+## Step 1: Configure Your Stages
+
+Stages are defined in the Opportunities object's **Stage** field.
+
+1. Go to **Settings → Data Model**
+2. Select **Opportunities**
+3. Find and click the **Stage** field
+4. Add, remove, or rename stages to match your process
+
+
+
+### Recommended Stages
+
+| Aşama | Purpose |
+| --------------- | ----------------------------------- |
+| **New** | Fresh opportunities just identified |
+| **Qualified** | Confirmed as a good fit |
+| **Meeting** | Engaged in discussions |
+| **Proposal** | Proposal sent |
+| **Negotiation** | Working on terms |
+| **Closed Won** | Deal successful |
+| **Closed Lost** | Deal unsuccessful |
+
+
+ **5-7 stages is optimal.** Too many stages makes the pipeline hard to scan; too few loses visibility into deal progress.
+
+
+## Step 2: Create a Pipeline View
+
+1. Go to **Opportunities**
+2. Click the view dropdown → **+ Add view**
+3. Name it "Sales Pipeline"
+4. Click **Create**
+5. Open **Options** and select **Kanban** as the layout
+
+The view automatically uses the Stage field for columns.
+
+## Step 3: Configure Your View
+
+### Show Key Fields
+
+1. Click **Options → Fields**
+2. Look for fields in the "Hidden Fields" section
+3. Click the **eye icon** to display: Company, Amount, Close Date, Owner
+
+### Enable Aggregations
+
+Show totals at the top of each column:
+
+1. Click the number displayed next to a Stage name at the top of a column
+2. Select the aggregation type (Count, Sum, Average, etc.)
+3. Choose the field to aggregate (e.g., Amount)
+
+**Example:** Show total deal value per stage by aggregating Amount with Sum.
+
+### Use Compact View (Optional)
+
+For a high-level overview with minimal card content:
+
+1. Click **Options**
+2. Turn on the toggle for **Compact view**
+
+## Step 4: Create Personal and Team Views
+
+### "My Pipeline"
+
+* **Filter**: Owner = Me
+* **Visibility**: Unlisted (personal view)
+
+### "Team Pipeline"
+
+* **Filter**: None (show all)
+* **Visibility**: Workspace (shared view)
+
+### "Closing This Month"
+
+* **Type**: Table
+* **Filter**: Close Date = This month, Stage ≠ Closed Won, Stage ≠ Closed Lost
+* **Sort**: Close Date ascending
+
+## Working with Opportunities
+
+### Creating Opportunities
+
+* Click **+ New** in the Opportunities view
+* Or click **+** in a specific stage column
+
+### Moving Through Stages
+
+Drag and drop opportunity cards between columns to update their stage.
+
+
+
+## En İyi Uygulamalar
+
+### Pipeline Hygiene
+
+* Update deals daily as they progress
+* Move or close stale deals promptly
+* Keep close dates realistic
+
+### Stage Discipline
+
+* Define clear criteria for each stage
+* Move deals promptly when criteria are met
+* Don't let deals sit in stages too long
+
+## Related
+
+* [Kanban Views](/l/tr/user-guide/views-pipelines/capabilities/kanban-views) — aggregations and compact view
+* [Filters and Sorting](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting) — creating filtered views
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
new file mode 100644
index 0000000000..611a3480a1
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx
@@ -0,0 +1,149 @@
+---
+title: Boru Hattınızda Beklenen Tutarı Gösterin
+description: Aşama olasılığına göre ağırlıklandırılmış fırsat değerlerini hesaplayın ve görüntüleyin.
+---
+
+Beklenen Tutar, hesaplanan bir değerdir: **Tutar × Olasılık**. Bu, kapanma olasılıklarına göre fırsatları ağırlıklandırarak geliri tahmin etmenize yardımcı olur.
+
+
+ Bu, iş akışlarını kullanarak [Formül Alanları](/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields) oluşturmanın bir örneğidir.
+
+
+Bu kılavuz, boru hattınızda beklenen tutarları hesaplamak ve görüntülemek için gerekli özel alanları ve iş akışlarını kurma konusunda sizi yönlendirir.
+
+## Adım 1: Özel Alanlar Oluşturun
+
+Fırsatlar nesnesinde iki özel alana ihtiyacınız var.
+
+### Olasılık Alanını Oluşturun
+
+1. **Ayarlar → Veri Modeli → Fırsatlar**'a gidin
+2. **+ Alan Ekle**'ye tıklayın
+3. Alanı Yapılandır:
+ * **Ad**: Olasılık
+ * **Tür**: Sayı
+ * **Açıklama**: Aşama tabanlı olasılık (0-100%)
+4. **Kaydet**'e tıklayın
+
+### Beklenen Tutar Alanını Oluşturun
+
+1. **+ Alan Ekle**'ye tıklayın
+2. Alanı Yapılandır:
+ * **Ad**: Beklenen Tutar
+ * **Tür**: Para Birimi
+ * **Açıklama**: Hesaplanır: Tutar × Olasılık
+3. **Kaydet**'e tıklayın
+
+### İsteğe bağlı: Alanları Kullanıcılar için Salt Okunur Yapın
+
+Kullanıcıların bu hesaplanan alanları manuel olarak düzenlemesini istemiyorsanız:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Yapılandırılacak rolü seçin
+3. Fırsatlar nesnesini bulun
+4. **Olasılık** ve **Beklenen Tutar** alanlarını salt okunur yapın
+
+Bu, bu değerleri yalnızca iş akışlarının güncelleyebilmesini sağlar.
+
+## Adım 2: İş Akışı #1'i Oluşturun — Aşama Değiştiğinde Olasılığı Güncelleyin
+
+Bu iş akışı, bir fırsat yeni bir aşamaya geçtiğinde Olasılığı otomatik olarak ayarlar.
+
+### İş Akışını Oluşturun
+
+1. **İş Akışları**'na gidin
+2. **+ Yeni İş Akışı**'na tıklayın
+3. Adını "Aşama Değiştiğinde Olasılığı Güncelle" koyun
+
+### Tetikleyiciyi Yapılandırın
+
+1. **Kayıt Oluşturuldu veya Güncellendi** tetikleyicisi ekleyin
+2. Nesne olarak **Fırsatlar**'ı seçin
+3. Filtre: **Aşama** alanı güncellendi
+
+### Her Aşama için Dallar Ekleyin
+
+Her aşama için kendi olasılığıyla bir dal oluşturun:
+
+| Aşama | Olasılık |
+| ---------- | -------- |
+| Yeni | 10% |
+| Nitelikli | 25% |
+| Toplantı | 40% |
+| Teklif | 60% |
+| Müzakere | 80% |
+| Kazanıldı | 100% |
+| Kaybedildi | 0% |
+
+
+ Yeni bir dal oluşturmak için, iş akışı kanvasına sağ tıklayın ve **Yeni eylem**'e tıklayın. Ardından, oku önceki düğümden bu yeni eyleme sürükleyerek bu eylemi önceki düğüme bağlayın.
+
+
+Her aşama için:
+
+1. Bir **Filtre** düğümü ekleyin: Aşama = [aşama adı]
+2. Bir **Kaydı Güncelle** eylemi ekleyin:
+ * Kayıt: Tetikleyen Fırsat
+ * Alan: Olasılık
+ * Değer: [o aşama için olasılık]
+
+### Beklenen Tutarı Hesaplayın
+
+Dallar yeniden birleştiğinde:
+
+1. Bir **Filtre** düğümü ekleyin: Tutar boş değil
+2. Bir **Kaydı Güncelle** eylemi ekleyin:
+ * Kayıt: Tetikleyen Fırsat
+ * Alan: Beklenen Tutar
+ * Değer: Tutar × Olasılık
+
+## Adım 3: İş Akışı #2'yi Oluşturun — Tutar Değiştiğinde Yeniden Hesaplayın
+
+Bu iş akışı, fırsatın Tutarı değiştiğinde Beklenen Tutarı günceller.
+
+### İş Akışını Oluşturun
+
+1. **İş Akışları**'na gidin
+2. **+ Yeni İş Akışı**'na tıklayın
+3. Adını "Tutar Değiştiğinde Beklenen Tutarı Yeniden Hesapla" koyun
+
+### Tetikleyiciyi Yapılandırın
+
+1. **Kayıt Oluşturuldu veya Güncellendi** tetikleyicisi ekleyin
+2. Nesne olarak **Fırsatlar**'ı seçin
+3. Filtre: **Tutar** alanı güncellendi
+
+### Mantığı Ekleyin
+
+1. Bir **Filtre** düğümü ekleyin: Tutar boş değil
+2. Bir **Kaydı Güncelle** eylemi ekleyin:
+ * Kayıt: Tetikleyen Fırsat
+ * Alan: Beklenen Tutar
+ * Değer: Tutar × Olasılık
+
+## Adım 4: Boru Hattınızda Görüntüleyin
+
+Şimdi Kanban görünümünüzde Beklenen Tutar toplamlarını gösterin:
+
+1. **Satış Boru Hattı** Kanban görünümünüzü açın
+2. Bir sütunun üst kısmında herhangi bir Aşama adının yanındaki **sayıya** tıklayın
+3. **Toplam**'ı seçin
+4. **Beklenen Tutar**'ı seçin
+
+Artık her sütun, o aşama için ağırlıklandırılmış boru hattı toplam değerini gösterir.
+
+## Özet
+
+| Bileşen | Amaç |
+| ------------------------ | --------------------------------------------------------------------------------- |
+| **Olasılık alanı** | Aşama tabanlı kazanma olasılığını saklar |
+| **Beklenen Tutar alanı** | Tutar × Olasılık değerini saklar |
+| **İş Akışı #1** | Aşama değiştiğinde Olasılığı günceller, ardından Beklenen Tutarı yeniden hesaplar |
+| **İş Akışı #2** | Tutar değiştiğinde Beklenen Tutarı yeniden hesaplar |
+| **Toplama** | Her aşama için Beklenen Tutar toplamını gösterir |
+
+## İlgili
+
+* [Formül Alanları](/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields) — iş akışlarını kullanarak hesaplanan alanlar oluşturun
+* [Kanban Görünümleri](/l/tr/user-guide/views-pipelines/capabilities/kanban-views) — sütun toplamaları
+* [Özel Alanlar Nasıl Oluşturulur](/l/tr/user-guide/data-model/how-tos/create-custom-fields) — alan yapılandırması
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
new file mode 100644
index 0000000000..9e08449c14
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx
@@ -0,0 +1,231 @@
+---
+title: Fırsatların her aşamada ne kadar süre kaldığını izleyin
+description: Fırsatların her aşamaya ne zaman girdiğini izleyerek anlaşma hızını takip edin.
+---
+
+
+ Bu, İş Akışları kullanılarak [Formül Alanları](/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields) oluşturmaya bir örnektir — özellikle tarih hesaplamaları.
+
+
+Fırsatların her aşamaya ne zaman girdiğini izlemeniz darboğazları belirlemenize ve anlaşma hızını ölçmenize yardımcı olur.
+
+Bu kılavuz, bir fırsatın her aşamaya ne zaman geçtiğini otomatik olarak kaydetmek ve önceki aşamada kaç gün geçirdiğini hesaplamak için özel alanlar ve bir İş Akışı yapılandırma adımlarında size yol gösterir.
+
+## Adım 1: Özel Alanlar Oluşturun
+
+Her aşama için iki tür alana ihtiyacınız var:
+
+* **Tarih ve Saat alanları**: Fırsatın her aşamaya ne zaman girdiğini kaydedin
+* **Sayı alanları**: Fırsatın her aşamada kaç gün geçirdiğini saklayın
+
+### "Last Entered" Alanlarını Oluşturun
+
+1. **Ayarlar → Veri Modeli → Fırsatlar** bölümüne gidin
+2. Her aşama için **+ Alan Ekle**'ye tıklayın ve yapılandırın:
+ * **Ad**: Last Entered [Aşama Adı] (örn. "Last Entered New", "Last Entered Qualified")
+ * **Tür**: Tarih ve Saat
+ * **Açıklama**: Fırsatın bu aşamaya girdiği zaman damgası
+3. **Kaydet**'e tıklayın
+
+Bu alanları oluşturun:
+
+* Last Entered New
+* Last Entered Qualified
+* Last Entered Meeting
+* Last Entered Proposal
+* Last Entered Negotiation
+* Last Entered Closed Won
+* Last Entered Closed Lost
+
+### "Days in Stage" Alanlarını Oluşturun
+
+1. Her aşama için **+ Alan Ekle**'ye tıklayın ve yapılandırın:
+ * **Ad**: Days in [Aşama Adı] (örn. "Days in New", "Days in Qualified")
+ * **Tür**: Sayı
+ * **Açıklama**: Bu aşamada geçirilen gün sayısı
+2. **Kaydet**'e tıklayın
+
+Bu alanları oluşturun:
+
+* Days in New
+* Days in Qualified
+* Days in Meeting
+* Days in Proposal
+* Days in Negotiation
+
+
+ Closed Won ve Closed Lost için "Days in" alanlarına ihtiyaç yoktur; çünkü bunlar son aşamalardır.
+
+
+### İsteğe bağlı: Alanları Salt Okunur Yapın
+
+Bu hesaplanan alanların kullanıcılar tarafından manuel olarak düzenlenmesini istemiyorsanız:
+
+1. **Ayarlar → Roller** bölümüne gidin
+2. Yapılandırılacak rolü seçin
+3. Fırsatlar nesnesini bulun
+4. "Last Entered" ve "Days in" alanlarını salt okunur yapın
+
+## Adım 2: İş Akışı Oluşturun
+
+Bu tek İş Akışı her iki görevi de gerçekleştirir:
+
+* Yeni bir aşamaya girildiğinde zaman damgasını kaydeder
+* Önceki aşamada geçirilen günleri hesaplar
+
+### İş Akışı Oluşturun
+
+1. **İş Akışları** bölümüne gidin
+2. **+ Yeni İş Akışı**'na tıklayın
+3. Adını "Aşama Süresini İzle" koyun
+
+### Tetikleyiciyi Yapılandırın
+
+1. **Kayıt Güncellendi** tetikleyicisi ekleyin
+2. **Nesne** olarak **Opportunities**'i seçin
+3. Şuna göre filtrele: **Stage** alanı güncellendi
+
+### Her Aşama için Dallar Ekleyin
+
+
+ Yeni bir dal oluşturmak için iş akışı tuvaline sağ tıklayın ve **New action**'a tıklayın. Ardından, önceki düğümden bu yeni eyleme oku sürükleyerek bu eylemi önceki düğüme bağlayın.
+
+
+---
+
+**Dal 1: Stage = New (ilk aşama)**
+
+Bu ilk aşama olduğundan yalnızca giriş zaman damgasını kaydediyoruz — hesaplanacak önceki bir aşama yok.
+
+1. **Filter** düğümü ekleyin: Stage = New
+2. **Code** eylemi ekleyin:
+
+```javascript
+export const main = async (): Promise => {
+ return { now: new Date().toISOString() };
+};
+```
+
+3. **Update Record** eylemi ekleyin:
+ * Kayıt: Tetikleyen Opportunity
+ * Alan: Last Entered New
+ * Değer: Code düğümünden `now`
+
+---
+
+**Dal 2: Stage = Qualified**
+
+Qualified aşamasına geçerken, giriş zamanını kaydedin VE New aşamasında geçirilen günleri hesaplayın.
+
+1. **Filter** düğümü ekleyin: Stage = Qualified
+2. **Code** eylemi ekleyin:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Code düğümü girdisini yapılandırın: `lastEnteredPreviousStage` değerini **Last Entered New** alanına eşleyin
+4. **Update Record** eylemi ekleyin:
+ * Kayıt: Tetikleyen Opportunity
+ * Güncellenecek alanlar:
+ * Last Entered Qualified = `now`
+ * Days in New = `daysInPreviousStage`
+
+---
+
+**Dal 3: Stage = Meeting**
+
+Meeting aşamasına geçerken, giriş zamanını kaydedin VE Qualified aşamasında geçirilen günleri hesaplayın.
+
+1. **Filter** düğümü ekleyin: Stage = Meeting
+2. **Code** eylemi ekleyin:
+
+```javascript
+export const main = async (params: {
+ lastEnteredPreviousStage: Date;
+}): Promise => {
+ const { lastEnteredPreviousStage } = params;
+
+ const now = new Date();
+ const entryDate = new Date(lastEnteredPreviousStage);
+ const diffTime = Math.abs(now.getTime() - entryDate.getTime());
+ const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return {
+ now: now.toISOString(),
+ daysInPreviousStage: daysInPreviousStage
+ };
+};
+```
+
+3. Code düğümü girdisini yapılandırın: `lastEnteredPreviousStage` değerini **Last Entered Qualified** alanına eşleyin
+4. **Update Record** eylemi ekleyin:
+ * Kayıt: Tetikleyen Opportunity
+ * Güncellenecek alanlar:
+ * Last Entered Meeting = `now`
+ * Days in Qualified = `daysInPreviousStage`
+
+---
+
+**Kalan aşamalar için devam edin:**
+
+| Aşama | Kayıtlar | Hesaplar |
+| ----------- | ------------------------ | ------------------- |
+| Proposal | Last Entered Proposal | Days in Meeting |
+| Negotiation | Last Entered Negotiation | Days in Proposal |
+| Closed Won | Last Entered Closed Won | Days in Negotiation |
+| Closed Lost | Last Entered Closed Lost | Days in Negotiation |
+
+Dalların yeniden birleşmesine gerek yoktur—her biri, aşama koşulu karşılandığında bağımsız olarak çalışır.
+
+## Adım 3: Aşamadaki Süreyi Analiz Edin
+
+Zaman damgaları ve gün sayıları kaydedildiğinde artık anlaşma hızını analiz edebilirsiniz.
+
+### "Yavaş Anlaşmalar" Görünümü Oluşturun
+
+1. Fırsatlar için bir Tablo görünümü oluşturun
+2. Sütunları ekleyin: Ad, Aşama, Days in [önceki aşama], Tutar
+3. "Days in" alanına göre sırala (azalan)
+4. Aynı anda tek bir aşamaya odaklanmak için Aşama'ya göre filtreleyin
+
+Üstteki anlaşmalar önceki aşamada en fazla zamanı geçirmiştir.
+
+### Toplamaları Kullanın
+
+Boru hattı Kanban görünümünüzde:
+
+1. Bir Aşama adının yanındaki sayıya tıklayın
+2. **Average**'ı seçin
+3. Bir "Days in" alanı seçin
+
+Bu, anlaşmaların her aşamada harcadığı ortalama süreyi gösterir.
+
+## Özet
+
+| Bileşen | Amaç |
+| ---------------------------- | ------------------------------------------------------- |
+| **Last Entered alanları** | Fırsatın her aşamaya ne zaman girdiğini saklar |
+| **Days in alanları** | Her aşamada kaç gün geçirildiğini saklar |
+| **İş Akışı** | Zaman damgasını kaydeder VE tek adımda günleri hesaplar |
+| **Görünümler ve Toplamalar** | Anlaşma hızını analiz edin ve darboğazları belirleyin |
+
+## İlgili
+
+* [İş Akışları](/l/tr/user-guide/workflows/overview) — otomasyon temelleri
+* [Özel Alanlar Nasıl Oluşturulur](/l/tr/user-guide/data-model/how-tos/create-custom-fields) — alan yapılandırma
+* [Kanban Görünümleri](/l/tr/user-guide/views-pipelines/capabilities/kanban-views) — toplamalar
diff --git a/packages/twenty-docs/l/tr/user-guide/views-pipelines/overview.mdx b/packages/twenty-docs/l/tr/user-guide/views-pipelines/overview.mdx
new file mode 100644
index 0000000000..278b2e2e54
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/views-pipelines/overview.mdx
@@ -0,0 +1,137 @@
+---
+title: Görünümler ve Boru Hatları
+description: Twenty'de görünümler oluşturmayı ve yönetmeyi öğrenin.
+image: /images/user-guide/table-views/table.png
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+
+
+## Görünümleri Anlama
+
+Görünümler, verilerinizin nasıl görüntüleneceğini belirleyen kaydedilmiş yapılandırmalardır. Her görünümün kendine ait şunları olabilir:
+
+* **Düzen**: Tablo, Kanban veya Takvim
+* **Filtreler**: Hangi kayıtların gösterileceği
+* **Sıralama**: Kayıtların nasıl sıralanacağı
+* **Alanlar**: Hangi sütunların görünür olacağı
+
+## Görünüm Türleri
+
+### Tablo Görünümü
+
+Varsayılan e-tablo benzeri görünüm; kayıtları satırlarda gösterir ve sütunlar özelleştirilebilir.
+
+### Kanban Görünümü
+
+Kayıtların aşamalara göre düzenlenmiş kartlar olarak göründüğü görsel pano görünümü. Şunlar için idealdir:
+
+* Satış boru hatları
+* Proje takibi
+* Tanımlı aşamalara sahip herhangi bir iş akışı
+
+### Takvim Görünümü
+
+Tarih alanları olan kayıtları bir takvimde görüntüleyin. Şunlar için idealdir:
+
+* Toplantılar ve etkinlikler
+* Son tarihler ve teslim tarihleri
+* Zamana dayalı planlama
+
+## Görünüm Oluşturma
+
+Yeni bir görünüm oluşturmanın iki yolu vardır.
+
+### Görünüm Açılır Menüsünü Kullanma
+
+1. Herhangi bir nesneye gidin (Kişiler, Şirketler vb.)
+2. Sol üstteki görünüm adına tıklayın (açılır okla birlikte geçerli görünümü gösterir)
+3. **+ Görünüm Ekle**'ye tıklayın
+4. Görünümünüze ad verin ve **Oluştur**'a tıklayın
+5. **Seçenekler** altında bir düzen seçin (Tablo, Kanban veya Takvim)
+6. Gerektiğinde filtreler ve sıralama ekleyin
+7. Hangi alanların görüntüleneceğini seçin ve sıralarını yeniden düzenleyin
+8. **Kaydet**'e tıklayın
+
+
+
+### Mevcut bir görünümü düzenleyerek başlayın
+
+1. Herhangi bir nesneye gidin (Kişiler, Şirketler vb.)
+2. **Seçenekler** altında bir düzen (Tablo, Kanban veya Takvim) seçin ya da gerektiğinde filtreler ve sıralama ekleyin
+3. **Yeni görünüm olarak kaydet**'e tıklayın
+4. Görünümünüze ad verin ve **Oluştur**'a tıklayın
+5. Yeni görünümünüzü düzenlemeye devam edin
+6. Ek yapılandırmalarınızı kaydetmek için **Görünümü güncelle**'ye tıklayın
+
+
+
+## Görünümleri Yönetme
+
+### Görünümü Düzenle
+
+1. Açılır listeden görünümü seçin
+2. Değişikliklerinizi yapın (filtreler, sıralama, sütunlar)
+3. Görünümü güncellemek için **Kaydet**'e tıklayın
+
+### Bir Görünümü Yeniden Adlandırın veya Simgesini Değiştirin
+
+1. Görünüm açılır menüsünü açın
+2. Görünüm adının yanındaki **⋮** menüsüne tıklayın
+3. **Düzenle**'yi seçin
+4. Adı veya simgeyi değiştirin
+5. **Kaydet**'e tıklayın
+
+### Görünümleri Yeniden Sırala
+
+1. Görünüm açılır menüsünü açın
+2. Bir görünümü tutamacından tıklayıp sürükleyin
+3. İstediğiniz konuma bırakın
+4. Yeni sıralama otomatik olarak kaydedilir
+
+### Sık Kullanılanlara Ekle
+
+Hızlı erişim için sık kullanılan görünümleri sabitleyin:
+
+1. Görünüm açılır menüsünü açın
+2. Bir görünümün yanındaki **⋮** menüsüne tıklayın
+3. **Sık Kullanılanlara Ekle**'yi seçin
+4. Görünüm, Sık Kullanılanlar bölümünüzde görünür
+
+### Bir Görünümü Sil
+
+1. Silinecek görünümü seçin
+2. Görünüm açılır menüsüne tıklayın
+3. Görünümün yanındaki **⋮** menüsüne tıklayın
+4. **Sil**'i seçin
+5. Silmeyi onaylayın
+
+
+ Silinen görünümler geri alınamaz. Onaylamadan önce kaldırmak istediğinizden emin olun.
+
+
+## Görünüm Gezgini'nden
+
+Her görünümün (varsayılan "Tüm [Nesne Adı]" görünümleri hariç) kendine ait bir görünürlük ayarı vardır.
+
+Görünürlüğü değiştirmek için:
+
+1. Görünümü açın
+2. **Seçenekler → Görünürlük**'e tıklayın
+3. Şunlardan birini seçin:
+ * **Çalışma Alanı**: Tüm çalışma alanı üyelerine görünür
+ * **Liste Dışı**: Yalnızca size görünür
+
+
+ Varsayılan "Tüm [Nesne Adı]" görünümlerinin görünürlüğü değiştirilemez.
+
+
+## Sonraki Adımlar
+
+* [Tablo Görünümleri](/l/tr/user-guide/views-pipelines/capabilities/table-views)
+* [Kanban Görünümleri](/l/tr/user-guide/views-pipelines/capabilities/kanban-views)
+* [Filtreler ve Sıralama](/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting)
+* [Görünüm Ayarları](/l/tr/user-guide/views-pipelines/capabilities/view-settings)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
new file mode 100644
index 0000000000..8e49769098
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows.mdx
@@ -0,0 +1,149 @@
+---
+title: Send Emails from Workflows
+description: Send personalized emails automatically using workflow actions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Automatically send emails when specific events occur in your CRM—welcome new contacts, follow up on opportunities, or notify team members.
+
+## Ön Gereksinimler
+
+Before you can send emails from workflows:
+
+1. Connect an email account under **Settings → Accounts**
+2. Ensure the account has sending permissions enabled
+
+## Basic Email Workflow
+
+### Example: Welcome Email for New Contacts
+
+**Goal**: Send a welcome email when a new person is added to the CRM.
+
+**Kurulum**:
+
+1. **Create workflow**: Go to **Settings → Workflows** and click **+ New Workflow**
+
+2. **Add trigger**: Select **Record is Created** → **People**
+
+3. **Add Send Email action**:
+ * Click **+** to add an action
+ * Select **Send Email**
+ * Configure the email:
+
+| Alan | Değer |
+| ----------- | -------------------------------------- |
+| **To** | `{{trigger.object.email}}` |
+| **Subject** | `{{Your Company Name}}'e Hoş Geldiniz` |
+| **Body** | `Hi {{trigger.object.firstName}}, ...` |
+
+4. **Test and activate**: Test with a sample record, then activate
+
+## Using Variables in Emails
+
+Reference data from previous steps using `{{variable}}` syntax:
+
+```text
+Hi {{trigger.object.firstName}},
+
+Thank you for connecting with us!
+
+Your company, {{trigger.object.company.name}}, is now in our system.
+
+Best regards,
+The Team
+```
+
+### Available Variables from Triggers
+
+| Tetikleyici Türü | Common Variables |
+| -------------------------- | -------------------------------------- |
+| **Record Created/Updated** | `{{trigger.object.fieldName}}` |
+| **Manual** | `{{trigger.selectedRecord.fieldName}}` |
+| **Webhook** | `{{trigger.body.fieldName}}` |
+
+## Advanced: Conditional Emails
+
+### Example: Different Emails Based on Lead Source
+
+**Goal**: Send different welcome emails based on where the lead came from.
+
+**Kurulum**:
+
+1. **Trigger**: Record is Created (People)
+
+2. **Add Filter action**:
+ * Condition: `{{trigger.object.source}}` equals `"Website"`
+ * If true → continue to website welcome email
+
+3. **Branch for other sources**:
+ * Create parallel branches for different sources
+ * Each branch has its own Send Email action
+
+## Sending Emails to Multiple Recipients
+
+### Example: Notify Team When Deal Closes
+
+**Goal**: Email the sales rep and their manager when an opportunity is won.
+
+**Kurulum**:
+
+1. **Trigger**: Record is Updated (Opportunities, Stage = "Closed Won")
+
+2. **Search Records**: Find the opportunity owner's manager
+
+3. **Send Email #1**: To opportunity owner
+ * To: `{{trigger.object.owner.email}}`
+ * Subject: `Congratulations on closing {{trigger.object.name}}!`
+
+4. **Send Email #2**: To manager
+ * To: `{{searchRecords.manager.email}}`
+ * Subject: `Deal Won: {{trigger.object.name}}`
+
+## Scheduled Follow-up Emails
+
+### Example: Follow Up 3 Days After Meeting
+
+**Goal**: Send a follow-up email 3 days after a meeting is logged.
+
+**Kurulum**:
+
+1. **Trigger**: Record is Created (Activities, Type = "Meeting")
+
+2. **Delay action**: Wait 3 days
+
+3. **Send Email**:
+ * To: Meeting attendee
+ * Subject: Following up on our conversation
+ * Body: Reference meeting details from trigger
+
+## En İyi Uygulamalar
+
+### Email Content
+
+* Keep subject lines concise and relevant
+* Personalize with recipient's name
+* Include a clear call to action
+* Test emails before activating
+
+### Deliverability
+
+* Don't send too many emails too quickly
+* Use professional email signatures
+* Avoid spam trigger words
+* Ensure unsubscribe options for marketing emails
+
+### Sorun Giderme
+
+* Verify email account is connected and active
+* Check recipient email address is valid
+* Review workflow runs for error messages
+* Test with your own email address first
+
+
+ **Coming soon**: Email attachments will be available in Q1 2026.
+
+
+## Related
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
new file mode 100644
index 0000000000..4b5b50d334
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows.mdx
@@ -0,0 +1,90 @@
+---
+title: Use Branches in Workflows
+description: Understand how branches work and how to control which path is executed.
+---
+
+## How Branches Work
+
+In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
+
+**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
+
+## Controlling Which Branch Runs
+
+To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
+
+### Example Setup
+
+1. Create your workflow with multiple branches from a single node
+2. Add a **Filter** node as the first step in each branch
+3. Set conditions on each Filter to determine when that branch should continue
+4. Only the branch(es) whose Filter conditions are met will proceed
+
+
+
+### How Filters Work
+
+* If the Filter condition is **met**: The branch continues executing
+* If the Filter condition is **not met**: The branch stops at the Filter node
+
+This effectively creates conditional logic where only the appropriate branch runs based on your data.
+
+## Example: Route by Deal Size
+
+**Scenario**: When a deal is closed, send different notifications based on deal size.
+
+1. **Trigger**: Opportunity updated (Stage = Closed Won)
+2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
+3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
+
+Both branches start, but only the one matching the deal amount will continue past its Filter.
+
+## Creating Branches
+
+
+ To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
+
+
+1. In the workflow editor, select the step you want to branch from
+2. Click the **+** button to add an action
+3. This creates one branch
+4. Click **+** again on the same step to create additional branches
+5. Each branch can have its own sequence of actions
+
+## Merging Branches Back Together
+
+After parallel branches complete their work, you can merge them back into a single path:
+
+1. Complete your branched actions
+2. Add a new step that should run after all branches
+3. Drag a connection from the last step of each branch to this new step
+4. The merged step waits for all connected branches to complete before executing
+
+### Example: Process Then Notify
+
+```
+Trigger
+ │
+ ├── Branch A: Update Customer Record
+ │
+ └── Branch B: Create Support Ticket
+
+ ↘ ↙
+
+ Merged Step: Send Confirmation Email
+```
+
+The confirmation email sends only after both the customer update and ticket creation are done.
+
+## En İyi Uygulamalar
+
+* Always use **Filter nodes** at the start of branches when you want conditional execution
+* Keep branch conditions **mutually exclusive** to avoid duplicate actions
+* Test your workflows with different data to ensure the correct branches run
+* **Rename branch steps** descriptively so it's clear what each path does
+* **Merge branches** when you need a final action after parallel processing
+
+## Related
+
+* [Workflows FAQ](/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-iterator.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-iterator.mdx
new file mode 100644
index 0000000000..fcf7cf8ad0
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-iterator.mdx
@@ -0,0 +1,180 @@
+---
+title: Use Iterator
+description: Loop through arrays of records to perform actions on each item.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Iterator lets you loop through an array of records and perform actions on each one. It's essential for workflows that need to process multiple records returned by Search Records or received via webhooks.
+
+
+ Iterator is currently in beta. Activate it under **Settings → Releases → Lab**.
+
+
+## When to Use Iterator
+
+| Scenario | Örnek |
+| -------------------------- | ---------------------------------------------- |
+| **Process search results** | Send email to each person found |
+| **Handle webhook arrays** | Create records for each item in order |
+| **Bulk updates** | Update multiple records with calculated values |
+| **Notifications** | Alert multiple people about an event |
+
+## Understanding Iterator
+
+Iterator expects an **array** as input. It then:
+
+1. Takes the first item from the array
+2. Runs all actions inside the iterator with that item
+3. Moves to the next item
+4. Repeats until all items are processed
+
+## Basic Setup
+
+### Example: Email Everyone in Search Results
+
+**Goal**: Find all contacts in a specific company and send each one a personalized email.
+
+### Step 1: Search for Records
+
+1. Add **Search Records** action
+2. Object: **People**
+3. Filter: Company equals "Acme Inc"
+4. This returns an array of people
+
+### Step 2: Check Results Exist
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. This prevents Iterator errors on empty results
+
+### Step 3: Add Iterator
+
+1. Add **Iterator** action
+2. Array input: Select `{{searchRecords}}`
+3. This creates a loop
+
+### Step 4: Add Actions Inside Iterator
+
+Actions placed after Iterator run for each item:
+
+1. Add **Send Email** action (inside iterator)
+2. To: `{{iterator.currentItem.email}}`
+3. Subject: Hello `{{iterator.currentItem.firstName}}`!
+4. Body: Personalized message using current item fields
+
+### Sonuç
+
+If Search Records returns 5 people, the Iterator:
+
+* Sends email to person 1
+* Sends email to person 2
+* ... continues for all 5
+
+## Accessing Current Item Data
+
+Inside Iterator, use `{{iterator.currentItem}}` to access the current record:
+
+| Variable | Açıklama |
+| --------------------------------------- | ----------------------------------- |
+| `{{iterator.currentItem}}` | The entire current record object |
+| `{{iterator.currentItem.id}}` | Record ID |
+| `{{iterator.currentItem.email}}` | Email field |
+| `{{iterator.currentItem.company.name}}` | Related company name |
+| `{{iterator.index}}` | Current position in array (0-based) |
+
+## Common Patterns
+
+### Update Multiple Records
+
+**Goal**: Mark all overdue tasks as "Late"
+
+```
+1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
+2. Filter (length > 0)
+3. Iterator (searchRecords)
+ └── Update Record
+ - Object: Tasks
+ - Record: {{iterator.currentItem.id}}
+ - Status: Late
+```
+
+### Create Records from Array
+
+**Goal**: Webhook receives order with multiple items, create a record for each
+
+```
+1. Webhook Trigger (receives items array)
+2. Filter (items.length > 0)
+3. Iterator (trigger.body.items)
+ └── Create Record
+ - Object: Order Items
+ - Name: {{iterator.currentItem.name}}
+ - Quantity: {{iterator.currentItem.qty}}
+ - Related Order: {{trigger.body.orderId}}
+```
+
+### Conditional Processing Inside Loop
+
+**Goal**: Only send email to contacts with valid emails
+
+```
+1. Search Records (People)
+2. Iterator (searchRecords)
+ └── Filter (currentItem.email is not empty)
+ └── Send Email
+ - To: {{iterator.currentItem.email}}
+```
+
+## Sorun Giderme
+
+### "Iterator expects an array"
+
+**Cause**: You passed a single record instead of an array.
+
+**Fix**: Make sure you're passing the result of Search Records or an array field, not a single record.
+
+```
+✅ Correct: {{searchRecords}}
+❌ Wrong: {{searchRecords[0]}}
+```
+
+### Iterator Doesn't Run
+
+**Cause**: The array is empty.
+
+**Fix**: Add a Filter before Iterator to check array length:
+
+```
+Filter: {{searchRecords.length}} > 0
+```
+
+### Actions Run Too Many Times
+
+**Cause**: Search Records returned more records than expected.
+
+**Fix**:
+
+* Add more specific filters to Search Records
+* Set a limit on Search Records (max 200)
+* Add Filter inside Iterator for additional conditions
+
+## Performance Considerations
+
+* **Credit usage**: Each iteration consumes credits for its actions
+* **Time**: Large arrays take longer to process
+* **Limits**: Consider batching very large operations
+* **Rate limits**: External API calls may hit rate limits with many iterations
+
+## En İyi Uygulamalar
+
+1. **Always check array length** before Iterator to avoid errors
+2. **Add filters inside loops** when not all items need processing
+3. **Rename your Iterator step** to describe what it's looping through
+4. **Test with small arrays** before processing large datasets
+5. **Monitor workflow runs** to ensure iterations complete as expected
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [How to Use Branches](/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows)
+* [Workflows FAQ](/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-actions.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-actions.mdx
new file mode 100644
index 0000000000..33e0fe9f6d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-actions.mdx
@@ -0,0 +1,311 @@
+---
+title: İş Akışı Aksiyonları
+description: Learn about the actions available in Twenty workflows.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+## About Actions
+
+Aksiyonlar, bir tetikleyici devreye girdiğinde neler olacağını tanımlar. You can chain multiple actions together to build complex automations.
+
+
+ * Use the variable picker (click the `(x+)` icon) to browse available data from previous steps
+ * Hover over any input field to see which step a variable comes from — helpful when the same field (e.g., ID) exists in multiple previous steps
+ * Give each action a descriptive name for easier maintenance
+
+
+## Record Actions
+
+
+
+### Kayıt Oluştur
+
+Seçilen bir nesneye yeni bir kayıt ekler.
+
+**Yapılandırma**:
+
+* Hedef nesneyi seçin
+* Gerekli ve isteğe bağlı alanları doldurun
+* Use data from previous steps or input values manually to populate fields
+
+**Çıktı**: Yeni oluşturulan kayıt verileri, sonraki adımlarda kullanılmak üzere mevcuttur.
+
+### Kayıt Güncelle
+
+Seçilen bir nesnedeki mevcut bir kaydı değiştirir.
+
+
+
+**Yapılandırma**:
+
+* Hedef nesneyi seçin
+* Güncellenecek belirli kaydı seçin.
+ * You can either choose a fixed record, using the drop down menu displaying all available records.
+ * Or you can have the record dynamically selected, by designating a record found in a previous step, using the `(x+)`. You cannot search for the record based on different criteria at this stage. If you've not yet identified the record, add a `Search Record` step before this `Update Record` step.
+* Değiştirilecek alanları seçin ve yeni değerler girin
+
+**Çıktı**: Güncellenmiş kayıt verileri, sonraki adımlarda kullanılmak üzere mevcuttur.
+
+### Kayıt Sil
+
+Seçilen bir nesneden bir kaydı kaldırır.
+
+**Yapılandırma**:
+
+* Hedef nesneyi seçin
+* Silinecek belirli kaydı seçin
+
+**Çıktı**: Silinen kayıt verileri, sonraki adımlarda kullanılmak üzere mevcut kalır.
+
+### Kayıt Ara
+
+Seçilen bir nesnede filtreleme koşulları kullanarak kayıt bulur.
+
+**Yapılandırma**:
+
+* Aranacak nesneyi seçin
+* Sonuçları daraltmak için filtre kriterlerini ayarlayın
+* Sıralama ve sınırları yapılandırın
+
+**Çıktı**: Belirlenen filtre koşullarına uyan kayıtlar, sonraki adımlarda kullanılmak üzere döner.
+
+
+ **Limit**: Search Records returns a maximum of **200 records**. If you need to process more, add specific filters to reduce results or use scheduled workflows to process in batches.
+
+
+**Best Practice**: Use [branches](/l/tr/user-guide/workflows/capabilities/workflow-branches) after Search Records to handle "found" vs "not found" scenarios.
+
+### Upsert Record
+
+Creates a new record or updates an existing one based on matching criteria. This is useful when you're not sure if a record already exists.
+
+
+
+**Yapılandırma**:
+
+* Hedef nesneyi seçin
+* Note which fields can be used for matching: email for People, domain for Companies, ID for any object, or any field marked as Unique. You'll need to populate at least one of these below.
+* Fill out the field values. Do not forget to populate at least one of the unique identifiers.
+
+
+ **Matching usually works even better when adding only one unique identifier.** For example, the screenshot below will match companies based on their domain. The ID is not necessarily needed.
+
+
+
+
+* Alanları doldurmak için önceki adımlardan gelen verileri kullanın
+
+**How it works**:
+
+1. Searches for a record matching your criteria
+2. If found → updates the existing record
+3. If not found → creates a new record
+
+**Output**: The created or updated record data is available for use in subsequent steps.
+
+## Flow Actions
+
+### Yineleyici
+
+**Loops through an array of records** returned from a previous step, allowing you to perform actions on each record individually.
+
+**Yapılandırma**:
+
+* Select the array of records from a previous step (e.g., results from Search Records, from a Manual trigger with Bulk availability, from a code node)
+* Döngüde her kayıt üzerinde gerçekleştireceğiniz işlemleri tanımlayın.
+
+
+ - You can add several actions within an iterator.
+ - When using branches inside an iterator, make sure the last step of each branch connects back to the iterator to close the loop.
+
+
+* Access `Current Item` Fields: to use fields from the record currently being processed, click on the **Iterator** step, then select **Current item**. The list of available fields from that record will be displayed and can be selected for use in subsequent actions.
+
+
+
+### Filtre
+
+Filters records based on specified conditions, allowing only records that meet the criteria to pass through.
+
+**Yapılandırma**:
+
+* Select the record to filter
+* Filtre koşullarını ve kriterlerini tanımlayın
+* Sonraki adımlara geçmesi gereken kayıtları yapılandırın
+
+
+ 1. **Output**: Filter nodes don't return data—they act as gates. If the conditions are met, the workflow continues. If not, the workflow stops at that branch.
+ 2. The `IS` operator can be used with numeric fields. It performs as an `EQUAL`.
+
+
+### Delay
+
+Pauses workflow execution for a specified duration or until a specific date/time.
+
+**Delay Types**:
+
+| Tür | Açıklama |
+| ------------------ | ------------------------------------------------------------------ |
+| **Duration** | Wait for a specific amount of time (days, hours, minutes, seconds) |
+| **Scheduled Date** | Wait until a specific date and time |
+
+**Configuration for Duration**:
+
+* Set days, hours, minutes, and/or seconds
+* Combine multiple units (e.g., 2 days and 4 hours)
+
+**Configuration for Scheduled Date**:
+
+* Select a date and time
+* Can reference a date field from a previous step (e.g., follow up 3 days after a meeting)
+
+**Kullanım alanları**:
+
+* Wait 24 hours before sending a follow-up email
+* Pause until an opportunity's close date
+* Schedule actions for business hours
+
+
+ The scheduled date cannot be in the past. If a date field from a previous step is used and the date has already passed, the workflow will fail.
+
+
+**Limits & Credits**:
+
+* **No maximum duration limit**—you can set delays of minutes, days, weeks, or longer
+* **1 credit consumed** when the Delay node executes, regardless of duration
+* **No credits consumed** while waiting—a 5-minute delay costs the same as a 5-day delay
+
+## Communication Actions
+
+### E-posta Gönder
+
+İş akışınızdan bir e-posta gönderir. This is great for templated group emails. Emails will look like the ones you send from your mailbox.
+Not suited for newsletters (which require richer formatting) or automated email sequences.
+
+**Prerequisites**: Add an email account in Settings → Accounts
+
+**Yapılandırma**:
+
+* Select the sender email account
+
+
+ You can only send emails from mailboxes synced to your own Twenty account. Sending from other team members' mailboxes (e.g., the account owner's email) is on the roadmap.
+
+
+For all the following steps, you can reference variables from previous steps for personalization.
+
+* Alıcı e-posta adresini girin.
+
+
+ Only one recipient is possible at the moment.
+
+
+* Konu satırını ayarlayın.
+* Mesaj gövdesini yazın. You can format links, create numbered list, bullet point lists, add attachments.
+
+
+ Adding HTML signatures is not possible at the moment.
+
+
+### Form
+
+İş akışı gerçekleştirilirken kullanıcı girdisi toplamak için bir form açar. The responses can then be used in subsequent steps to create records, send emails, or execute any other action based on the input.
+
+
+ **Forms are designed for manual triggers only**. Diğer tetikleyicilerle (Kayıt Oluşturuldu, Güncellendi, vb.) iş akışlarında, formlar yalnızca iş akışı çalıştırma arayüzü üzerinden erişilebilir olup, bu beklenen kullanıcı deneyimi değildir. 2026'da formların otomatik iş akışlarını doğru bir şekilde desteklemesi için bir bildirim merkezi yayınlanacaktır.
+
+
+**Yapılandırma**:
+
+* Configure the fields that users will be asked to fill. For each field, choose
+ * a type among text, number, date, a given record, a select field. Select fields from all objects are available.
+ * a label
+ * a default value under `Placeholder` (optional)
+* Edit the form title
+
+**Çıktı**: Form yanıtları, sonraki adımlarda kullanılmak üzere mevcuttur.
+
+**Example**: The "Quick Lead" workflow is available by default in all workspaces, available anywhere in the Command Menu `Cmd + K`.
+
+**How to fill the form**:
+
+* Trigger your manual workflow from the command menu `Cmd K`
+* Fill the form that is displayed in the side panel and click `Submit`.
+
+
+ The fields cannot be made mandatory.
+
+
+
+
+## Integration Actions
+
+### Kod
+
+İş akışınızda özel JavaScript çalıştırır.
+
+**Yapılandırma**:
+
+* Önceki adımlardan gelen değişkenlere erişin. You can edit the variables names dynamically.
+
+
+
+* Düzenleyicide JavaScript kodu yazın
+* Sonraki adımlarda kullanılmak üzere değişkenler döndürün
+* Kodu doğrudan adımda test edin
+
+
+ If you need to use external API keys in your code, you must input them directly in the function body. You cannot configure API keys elsewhere and reference them in the serverless function.
+
+
+
+ **Working with arrays?** Arrays from external systems or previous steps may come as strings. See [How to handle arrays in Code actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) for the solution.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
+
+### HTTP İsteği
+
+İş akışınızın bir parçası olarak harici bir API'ye istek gönderir.
+
+
+
+**Yapılandırma**:
+
+* API endpoint URL'sini girin. Using parameters from previous steps is possible.
+* HTTP yöntemini seçin (GET, POST, PUT, PATCH, DELETE)
+* Gerekli başlıkları ve değerleri ekleyin
+* Yapı önizlemesi için örnek yanıt sağlayın
+
+## AI Actions
+
+### AI Agent - Coming Soon
+
+Runs an AI agent within your workflow to perform intelligent tasks.
+
+**Yapılandırma**:
+
+* **Agent**: Select an existing AI agent or use the default agent
+* **Prompt**: Write the instruction for the AI agent
+* Reference variables from previous steps in the prompt
+
+**What AI Agents can do**:
+
+* Analyze and summarize data
+* Classify or categorize records
+* Generate text content
+* Make decisions based on data
+* Interact with your CRM data using tools
+
+**Output**: The AI agent's response is available for use in subsequent steps. If the agent has a structured output schema, the response will follow that format.
+
+
+ AI Agent actions consume workflow credits based on the AI model used. See [Workflow Credits](/l/tr/user-guide/workflows/capabilities/workflow-credits) for details.
+
+
+
+ AI agents respect role-based permissions. You can assign specific roles to agents under **Settings → Roles** to control what data they can access. See [Permissions](/l/tr/user-guide/permissions-access/capabilities/permissions) for details.
+
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-branches.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-branches.mdx
new file mode 100644
index 0000000000..b18249314f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-branches.mdx
@@ -0,0 +1,66 @@
+---
+title: İş Akışı Dalları
+description: İş akışlarınızda paralel yollar ve koşullu mantık oluşturun.
+---
+
+Dallar, iş akışınızı verilerinize bağlı olarak eşzamanlı veya koşullu olarak çalışabilen birden çok yola ayırmanıza olanak tanır.
+
+
+
+## Dallar Nasıl Çalışır
+
+Tek bir düğümden birden fazla bağlantı oluşturduğunuzda, her yol bir dala dönüşür. Varsayılan olarak, **tüm dallar paralel olarak çalışır**—birbirlerini beklemezler.
+
+## Dal Oluşturma
+
+### Yeni Bir Dal Ekle
+
+1. **İş akışının ana tuvaline sağ tıklayın** (mevcut bir düğümün üzerine değil)
+2. **Düğüm ekle** seçeneğine tıklayın.
+3. Yeni dalınız için düğüm türünü seçin
+4. Önceki adımın altından bu yeni eylemin üstüne bir ok sürükleyin
+5. Aynı düğümden daha fazla dal eklemek için tekrarlayın
+
+
+ Her dal bağımsızdır. Bir dal eklemek, o düğümdeki diğer mevcut yolları etkilemez.
+
+
+### Görsel Düzen
+
+Dallar, iş akışı düzenleyicisinde paralel yollar olarak görünür. Yürütmeyi etkilemeden görsel düzeni yeniden düzenlemek için düğümleri sürükleyebilirsiniz.
+
+## Koşullu Dallar
+
+Tüm dallar varsayılan olarak çalıştığından, hangi yolların gerçekten yürütüleceğini denetlemek için **Filtre** düğümlerini kullanın:
+
+| Dal | Filtre Koşulu | Eylem |
+| --- | -------------------- | ----------------------- |
+| A | Aşama = "Kazanıldı" | Tebrik e-postası gönder |
+| B | Aşama = "Kaybedildi" | Takip görevi oluştur |
+| C | Aşama = "Müzakere" | Yöneticiyi bilgilendir |
+
+1. Tetikleyicinizden veya eyleminizden dallar oluşturun
+2. Her dalın ilk adımı olarak bir **Filtre** düğümü ekleyin
+3. Her filtreyi birbirini dışlayan koşullarla yapılandırın
+4. Her filtrenin ardından eylemlerinizi ekleyin
+
+Yalnızca filtre koşulunun sağlandığı dallar yürütülmeye devam eder.
+
+## Dalları Birleştirme
+
+**Dallar otomatik olarak birleştirilmez.** Her dal, bitene kadar bağımsız olarak çalışır. Bunu nasıl ele alacağınız konusunda tam esnekliğe sahipsiniz:
+
+* **Seçenek 1: Dalları ayrı tutun**
+ Her dal, kendi takip eylemlerini bağımsız olarak yürütür. Dalların birleşmesi gerekmiyorsa bu en basit yaklaşımdır.
+
+* **Seçenek 2: Dalları el ile birleştirin**
+ İş akışınızı oluştururken birden fazla dalı aynı sonraki eyleme manuel olarak bağlayabilirsiniz. Her dalın sonundan ortak bir düğüme okları sürüklemeniz yeterlidir.
+
+
+ Yürütmeyi duraklatmak için bir [Delay](/l/tr/user-guide/workflows/capabilities/workflow-actions#delay) düğümü kullanabilirsiniz, ancak şu anda "başka bir dal bitene kadar" bekleyecek şekilde yapılandırılamaz.
+
+
+## İlgili
+
+* [İş Akışlarında Dallar Nasıl Kullanılır](/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows) - Adım adım kılavuz
+* [İş Akışı Eylemleri](/l/tr/user-guide/workflows/capabilities/workflow-actions) - Filtre de dahil olmak üzere kullanılabilir eylemler
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-credits.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-credits.mdx
new file mode 100644
index 0000000000..1db5b084e5
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-credits.mdx
@@ -0,0 +1,76 @@
+---
+title: İş Akışı Kredileri
+description: Understand workflow credit consumption and management.
+---
+
+İş akışı kredileri, Twenty'deki otomasyonlarınızın gücüdür. Nasıl çalıştıklarını anlamak, maliyetleri optimize etmenize ve otomasyon bütçenizi etkili bir şekilde yönetmenize yardımcı olur.
+
+## Credit Allocation
+
+Workflow credits are allocated based on your billing cycle, not your plan tier:
+
+| Billing Cycle | Credits |
+| ------------------------ | --------------------------- |
+| **Monthly subscription** | 5 million credits per month |
+| **Yearly subscription** | 50 million credits per year |
+
+
+ 5 million monthly credits are generous for standard automations. Most teams won't exceed this limit with typical workflow usage. Additional credits are primarily needed for advanced Code actions and AI-powered workflows.
+
+
+## Kredi Tüketiminin Çalışma Prensibi
+
+Krediler, iş akışları çalıştığında tüketilir, oluşturulduğunda değil. Her iş akışı eylemi, karmaşıklığına göre kredi tüketir:
+
+### Eylem Türüne Göre Kredi Tüketimi
+
+* **Temel dahili işlemler**: Çok düşük kredi tüketimi
+ * Kayıt Ara
+ * Kayıt Oluştur
+ * Kayıt Güncelle
+ * Kayıt Sil
+ * Form işlemleri
+
+* **Karmaşık işlemler**: Daha yüksek kredi tüketimi
+ * Kod eylemleri (JavaScript yürütme)
+ * Harici hizmetlere HTTP İstekleri
+
+* **AI features**: Higher credit consumption
+ * AI Agent actions consume credits based on the AI model used
+ * More complex prompts and longer outputs use more credits
+
+* **Delay actions**: Minimal credit consumption
+ * The Delay node consumes **1 credit** when it executes
+ * **No credits are consumed** during the wait period
+ * A 5-minute delay costs the same as a 5-day delay
+
+### Gerçek Zamanlı Düşüm
+
+Krediler, iş akışları çalışırken gerçek zamanlı olarak düşülür. Bu şu anlama gelir:
+
+* Taslak iş akışları kredi tüketmez
+* Sadece aktif, çalışan iş akışları kredi tahsisatınızı kullanır
+* Başarısız iş akışları, tamamlanan adımlarda yine de kredi tüketir
+
+## Kredilerin Yönetimi
+
+### Kredi Kullanımını Kontrol Et
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. Güncel kredi tüketiminizi ve kalan bakiyenizi görüntüleyin
+3. İş akışlarınızı optimize etmek için kullanım desenlerini izleyin
+
+### Ek Kredi Satın Alma
+
+Plan tahsisinizin ötesinde daha fazla krediye ihtiyacınız varsa:
+
+1. **Ayarlar → Faturalama** bölümüne gidin
+2. Ek kredi satın alma seçeneğine tıklayın. Farklı boyutlarda paketler mevcuttur.
+3. Krediler mevcut bakiyenize eklenir
+
+## En İyi Uygulamalar
+
+* **Toplu İşleme**: Toplu işlemler ve Iterator eylemlerini verimli bir şekilde kullanın
+* **Manual Trigger Optimization**: For manual triggers, choose `Bulk` availability to process multiple records in a single workflow run
+* Verimlilik için Kod eylemlerini optimize edin
+* Bireysel eylem çağrılarını azaltmak için toplu işlemler yapın
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-runs.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-runs.mdx
new file mode 100644
index 0000000000..e18a67b783
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-runs.mdx
@@ -0,0 +1,92 @@
+---
+title: İş Akışı Çalıştırmaları
+description: Monitor and manage workflow executions.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## About Runs
+
+A **Run** is a record of a workflow execution. Every time a workflow is triggered—whether by a record event, schedule, manual action, or webhook—a new run is created.
+
+## Viewing Runs
+
+### From the Workflow Editor
+
+1. Open the workflow you want to monitor
+2. Click the **Runs** panel on the right side
+3. See a list of recent runs with their status
+
+### From the Workflow Runs View
+
+1. Go to **Workflow Runs** in the sidebar
+2. View runs across all workflows
+3. Filter by status, workflow, or date
+
+## Run Statuses
+
+| Durum | Açıklama |
+| ------------------ | ------------------------------------------------------------------------ |
+| **Çalıştırılıyor** | Workflow is currently executing |
+| **Completed** | Workflow finished successfully |
+| **Failed** | Workflow encountered an error and stopped |
+| **Waiting** | Workflow is paused (e.g., waiting for a Delay action or Form submission) |
+
+## Run Details
+
+Click on any run to see:
+
+* **Status**: Current state of the run
+* **Started at**: When the run began
+* **Duration**: How long the run took
+* **Trigger data**: The input that started the workflow
+* **Step outputs**: Data returned by each step
+* **Error messages**: If the run failed, what went wrong
+
+## Step-by-Step Execution
+
+Each run shows the progression through your workflow:
+
+1. See which steps completed successfully
+2. Identify where failures occurred
+3. View the data passed between steps
+4. Debug issues by examining step inputs and outputs
+
+## Error Handling
+
+When a run fails:
+
+1. Open the failed run
+2. Find the step that caused the failure
+3. Check the error message for details
+4. Common issues:
+ * Missing required fields
+ * Geçersiz veri biçimi
+ * External API errors
+ * Permission issues
+
+## Re-running Workflows
+
+If a run fails, you can:
+
+* Fix the underlying issue and wait for the next trigger
+* For manual workflows, trigger again with the same or updated data
+* Review the workflow logic to prevent future failures
+
+## Performance Tips
+
+### Managing Run History
+
+* Runs are retained for historical reference
+* Very old runs may be archived automatically
+* Export run data if you need to keep records
+
+### Monitoring Best Practices
+
+* Check runs regularly after activating new workflows
+* Review failed runs to identify patterns
+
+## Related
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Troubleshooting](/l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-triggers.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-triggers.mdx
new file mode 100644
index 0000000000..23ee229fa5
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-triggers.mdx
@@ -0,0 +1,136 @@
+---
+title: İş Akışı Tetikleyicileri
+description: Learn about the different triggers that start your workflows.
+---
+
+## About Triggers
+
+İş akışları, otomasyonun ne zaman çalıştırılacağını tanımlayan tek bir tetikleyici ile başlar.
+
+
+
+
+ **Advanced objects are supported!** Beyond standard CRM objects (People, Companies, Opportunities), you can also trigger workflows and perform actions on:
+
+ * Çalışma Alanı Üyeleri
+ * Calendar Events
+ * Messages (Emails)
+ * Tasks, Notes, and many other system objects
+
+ This opens up powerful automations like notifying team members when calendar events are created, or processing incoming emails automatically.
+
+
+## Kayıt Oluşturuldu
+
+Seçilen bir nesneye (Kişiler, Şirketler, Fırsatlar veya herhangi bir özel nesne) yeni bir kayıt oluşturulduğunda iş akışını başlatır.
+
+**Yapılandırma**: Yeni kayıtları izlemek için nesne türünü seçin.
+
+
+ * This trigger is great for records created by csv, mailbox and calendar synchronization, API.
+ * **It is not recommended for records created manually**: with this trigger, workflows start as soon as the record is created. Since Twenty UI offers auto-save on the fly (there is not an edit mode and then a validation to save records), the workflow will be triggered before the user inputs all the fields.
+ To trigger this workflow on records created manually, it is recommended to use the trigger `Record is created or updated` instead.
+
+
+## Kayıt Güncellendi
+
+Mevcut bir kayıtta değişiklik yapıldığında iş akışını başlatır.
+
+**Yapılandırma**:
+
+* Nesne türünü seçin
+* Hangi alanların değişiklikler için izleneceğini isteğe bağlı olarak belirtin
+
+## Kayıt Güncellendi veya Oluşturuldu
+
+Bir kaydın seçili bir nesnede oluşturulması veya güncellenmesi durumunda iş akışını başlatır.
+
+**Neden Bu Önemli**: Bu tetikleyici özellikle faydalıdır çünkü farklı yöntemlerle oluşturulan kayıtlar farklı davranır:
+
+* **API/CSV içe aktarmaları**: Kayıtlar tüm alanlar doldurulmuş olarak hemen oluşturulur
+* **Manuel oluşturma**: Önce kayıtlar oluşturulur, ardından alanlar sonraki güncellemelerde eklenir
+
+**Yapılandırma**:
+
+* İzlenecek nesne türünü seçin
+* Hangi alanların değişiklikler için izleneceğini isteğe bağlı olarak belirtin
+* İş akışı, hem ilk oluşturma sırasında hem de sonraki güncellemelerde tetiklenecektir
+
+## Kayıt Silindi
+
+Bir nesneden kayıt kaldırıldığında iş akışını başlatır.
+
+**Yapılandırma**: Silme işlemlerini izlemek için nesne türünü seçin.
+
+## Manual Trigger
+
+Bir kullanıcı eylemi tarafından tetiklendiğinde iş akışını başlatır. This trigger can be accessed through the `Cmd+K` menu or via a custom button that will be displayed in the top navbar after selecting record(s).
+
+
+
+**Kullanılabilirlik Yapılandırması**:
+İş akışının kayıt seçimini nasıl ele alacağını seçin:
+
+* **Global**: No record is required to trigger this workflow. The workflow is triggered from the command menu `Cmd + K` anywhere (from any object) and does not use record(s) as input.
+
+* **Single**: The selected record(s) will be passed to your workflow. Bu, belirli bir nesne için yapılandırılmıştır. İş akışını başlatmadan önce birkaç kayıt seçilebilir. The workflow will run from beginning to end as many times as there are records selected.
+
+
+ **Soft limit: 100 runs/minute**. Beyond this, workflows remain in "Not Started" status and are processed gradually—either by a background job or when another workflow enters the queue. This means you can select more than 100 records with a Single trigger; execution will just be slower.
+
+
+* **Bulk**: The selected record(s) will be passed to your workflow. Bu, belirli bir nesne için yapılandırılmıştır. İş akışını başlatmadan önce birkaç kayıt seçilebilir. İş akışı bir kere çalışacak, tüm kayıt listesini girdi olarak sağlayacak. This means the workflow needs to contain an [Iterator action](/l/tr/user-guide/workflows/capabilities/workflow-actions#iterator).
+
+
+ This is more advanced, and best for people who want to optimize the number of workflow runs.
+
+
+
+
+**Ek Yapılandırma**:
+
+* Hedef nesneyi seçin (Tek ve Toplu kullanılabilirlik için)
+* İş akışı tetikleyicisi için bir komut simgesi seçin
+* Gezinme çubuğundaki konumu yapılandırın (Sabitlenmiş veya Sabitlenmemiş)
+
+**Erişim Yöntemleri**:
+
+* `Cmd+K` menu to find and launch manual workflows
+* Üst gezinme çubuğunda (yapılandırılmışsa) özel bir düğme
+
+## Time-Based Trigger: On a Schedule
+
+Belirlediğiniz aralıklarla iş akışını başlatır.
+
+**Yapılandırma**:
+
+* Zaman birimini seçin (dakika, saat, gün)
+* İleri düzey zamanlama için bir değer girin veya özel cron ifadeleri kullanın.
+
+
+ **Timezone**: Scheduled workflows run in **UTC**. When setting hours for daily schedules, convert your local time to UTC.
+
+
+## External Trigger: Webhook
+
+İş akışı, harici bir hizmetten bir GET veya POST isteği alındığında başlar.
+
+
+
+**Yapılandırma**:
+
+* The workflow provides a unique webhook URL—copy this and add it to your external system as the endpoint to call.
+* For POST requests, define the expected body structure so Twenty knows what data to expect. Add here the fields you will receive that will be needed below in your workflow.
+* Configure authentication (coming soon).
+
+## Choosing the Right Trigger
+
+| Use Case | Recommended Trigger |
+| --------------------------- | ---------------------------------- |
+| New leads need processing | Kayıt Oluşturuldu |
+| Data changes need sync | Kayıt Güncellendi |
+| Import/manual data handling | Kayıt Güncellendi veya Oluşturuldu |
+| Cleanup after deletion | Kayıt Silindi |
+| User-initiated action | Manuel Olarak Başlat |
+| Recurring reports | On a Schedule |
+| External integration | Webhook or On a Schedule |
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-versions.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-versions.mdx
new file mode 100644
index 0000000000..7bac593571
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-versions.mdx
@@ -0,0 +1,85 @@
+---
+title: İş Akışı Versiyonları
+description: İş akışı sürümlerini ve taslaklarını yönetin.
+image: /images/user-guide/workflows/workflow.png
+---
+
+## Sürümler Hakkında
+
+Bir iş akışını her etkinleştirdiğinizde yeni bir sürüm oluşturulur. Bu, zaman içinde değişiklikleri izlemenize ve gerekirse önceki yapılandırmalara geri dönmenize olanak tanır.
+
+## Sürüm Durumları
+
+| Durum | Açıklama |
+| --------------- | ----------------------------------------------- |
+| **Taslak** | Düzenleniyor, henüz yayımlanmadı |
+| **Aktif** | Tetikleyicilere yanıt veren canlı sürüm |
+| **Devre Dışı** | Önceden aktifti, ancak manuel olarak durduruldu |
+| **Arşivlenmiş** | Geçmiş için saklanan önceki sürümler |
+
+## Taslaklarla Çalışma
+
+Aktif bir iş akışını düzenlediğinizde, değişiklikleriniz **taslak** olarak kaydedilir. Güncellemeler üzerinde çalışırken aktif sürüm çalışmaya devam eder.
+
+Düzenlemeyi bitirdiğinizde şunları yapabilirsiniz:
+
+* **Etkinleştir**: Taslağı yeni aktif sürüm olarak yayımlayın (önceki sürüm arşivlenir)
+* **Sil**: Taslağı silin ve mevcut aktif sürümü koruyun
+
+## Versiyon Tarihçesi
+
+### Önceki Sürümleri Görüntüleme
+
+1. İş akışını açın
+2. **Sürümler** sekmesine tıklayın
+3. Zaman damgalarıyla birlikte tüm önceki sürümleri görün
+
+### Bir Sürümü Geri Yükleme
+
+1. Geri yüklemek istediğiniz sürümü bulun
+2. **Taslak olarak kullan** seçeneğine tıklayın
+3. Sürüm yeni bir taslağa kopyalanır
+4. Gerekli tüm güncellemeleri yapın
+5. Hazır olduğunuzda etkinleştirin
+
+## En İyi Uygulamalar
+
+### Sürüm Yönetimi
+
+* Yalnızca üretime hazır olduğunda etkinleştirin
+* Sürümler arasında yalnızca anlamlı değişiklikler bulundurun
+* İş akışı adları veya açıklamalarındaki büyük değişiklikleri belgeleyin
+* Etkinleştirmeden önce taslak modunda test edin
+
+### Değişiklikleri Geri Alma
+
+* Yeni bir sürüm sorunlara neden olursa önceki sürümü geri yükleyin
+* Nelerin değiştiğini izlemek için sürüm geçmişini kullanın
+* Geri yüklenen sürümleri etkinleştirmeden önce her zaman test edin
+
+## Yaygın İş Akışları
+
+### Hızlı Düzenleme
+
+1. Aktif bir iş akışında küçük değişiklikler yapın
+2. Taslak modunda test edin
+3. Yeni sürümü etkinleştirin
+
+### Kapsamlı Revizyon
+
+1. Önceki sürümü başlangıç noktası olarak kullanın
+2. Taslakta önemli değişiklikler yapın
+3. Tüm senaryoları kapsamlı şekilde test edin
+4. Emin olduğunuzda etkinleştirin
+
+### Geri Alma
+
+1. Mevcut sürümdeki sorunu belirleyin
+2. Geçmişte çalışan son sürümü bulun
+3. **Taslak olarak kullan** seçeneğine tıklayın
+4. Eski davranışı geri getirmek için etkinleştirin
+
+## İlgili
+
+* [İş Akışlarına Başlarken](/l/tr/user-guide/workflows/overview)
+* [İş Akışı Çalıştırmaları](/l/tr/user-guide/workflows/capabilities/workflow-runs)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
new file mode 100644
index 0000000000..bbc096202f
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx
@@ -0,0 +1,82 @@
+---
+title: Handle Arrays in Code Actions
+description: Learn how to properly handle array inputs in workflow Code actions.
+---
+
+When working with arrays in Code actions, you may encounter two common challenges:
+
+1. **Arrays passed as strings** — data from external systems or previous steps arrives as a string instead of an actual array
+2. **Can't select individual items** — you can only select the entire array, not specific fields within it
+
+Both can be solved with a Code node.
+
+## Parsing Arrays from Strings
+
+Arrays are often passed between workflow steps as strings or JSON rather than native arrays. This happens when:
+
+* Receiving data from external APIs via HTTP Request
+* Processing webhook payloads
+* Passing data between workflow steps
+
+**Solution**: Add this pattern at the start of your Code action:
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+
+ // Handle input that may come as a string or an array
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Now you can safely work with usersFormatted as an array
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ })),
+ };
+};
+```
+
+The key line `typeof users === "string" ? JSON.parse(users) : users` checks if the input is a string, parses it if needed, or uses it directly if it's already an array.
+
+## Extracting Individual Fields from Arrays
+
+A webhook might return an array like `answers: [...]`, but in subsequent workflow steps you can only select the **entire array** — not individual items within it.
+
+**Solution**: Add a Code node to extract specific fields and return them as a structured object:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract specific fields from the array
+ const firstname = answersFormatted[0]?.text || "";
+ const name = answersFormatted[1]?.text || "";
+
+ return {
+ answer: {
+ firstname,
+ name
+ }
+ };
+};
+```
+
+The Code node returns a structured object instead of an array. In subsequent steps, you can now select individual fields like `answer.firstname` and `answer.name` from the variable picker.
+
+
+ We're actively working on making array handling easier in future updates.
+
+
+
+ Click the square icon at the top right of the code editor to display it in full screen — helpful since the default editor width is limited.
+
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
new file mode 100644
index 0000000000..13f44998f9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx
@@ -0,0 +1,182 @@
+---
+title: Bring Product Data into Twenty
+description: Sync product catalog data from a data warehouse into your CRM on a schedule.
+---
+
+Use this pattern to keep Twenty in sync with product data from your data warehouse (e.g., Snowflake, BigQuery, PostgreSQL).
+
+## Workflow Structure
+
+1. **Trigger**: On a Schedule
+2. **Code**: Query your data warehouse
+3. **Code** (optional): Format data as array
+4. **Iterator**: Loop through each product
+5. **Upsert Record**: Create or update in Twenty
+
+
+
+## Step 1: Schedule the Trigger
+
+Set the workflow to run at a frequency matching your data freshness needs:
+
+* Every 5 minutes for near real-time sync
+* Every hour for less critical data
+* Daily for batch updates
+
+## Step 2: Query Your Data Warehouse
+
+Add a **Code** action to fetch recent data:
+
+```javascript
+export const main = async () => {
+ const intervalMinutes = 10; // Match your schedule frequency
+ const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
+
+ // Replace with your actual data warehouse connection
+ const response = await fetch("https://your-warehouse-api.com/query", {
+ method: "POST",
+ headers: {
+ "Authorization": "Bearer YOUR_API_KEY",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ query: `
+ SELECT id, name, sku, price, stock_quantity, updated_at
+ FROM products
+ WHERE updated_at >= '${cutoffTime}'
+ `
+ })
+ });
+
+ const data = await response.json();
+ return { products: data.results };
+};
+```
+
+
+ Filter by `updated_at >= last X minutes` to retrieve only recently changed records. This keeps the sync efficient.
+
+
+## Step 3: Format Data (Optional)
+
+If your warehouse returns data in a format that needs transformation, add another **Code** action. Common transformations include type conversions, field renaming, and data cleanup.
+
+### Example: User Data with Boolean and Status Fields
+
+```javascript
+export const main = async (params: {
+ users: any;
+}): Promise => {
+ const { users } = params;
+ const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
+
+ // Convert string "true"/"false" to actual booleans
+ const toBool = (v: any) => v === true || v === "true";
+
+ return {
+ users: usersFormatted.map((user) => ({
+ ...user,
+ activityStatus: String(user.activityStatus).toUpperCase(),
+ isActiveLast30d: toBool(user.isActiveLast30d),
+ isActiveLast7d: toBool(user.isActiveLast7d),
+ isActiveLast24h: toBool(user.isActiveLast24h),
+ isTwenty: toBool(user.isTwenty),
+ })),
+ };
+};
+```
+
+### Example: Product Data with Type Conversions
+
+```javascript
+export const main = async (params: { products: any }) => {
+ const products = typeof params.products === "string"
+ ? JSON.parse(params.products)
+ : params.products;
+
+ return {
+ products: products.map(product => ({
+ externalId: product.id,
+ name: product.name,
+ sku: product.sku,
+ price: parseFloat(product.price), // String → Number
+ stockQuantity: parseInt(product.stock_quantity),
+ isActive: product.status === "active" // String → Boolean
+ }))
+ };
+};
+```
+
+### Example: Date and Currency Formatting
+
+```javascript
+export const main = async (params: { deals: any }) => {
+ const deals = typeof params.deals === "string"
+ ? JSON.parse(params.deals)
+ : params.deals;
+
+ return {
+ deals: deals.map(deal => ({
+ ...deal,
+ // Convert Unix timestamp to ISO date
+ closedAt: deal.closed_timestamp
+ ? new Date(deal.closed_timestamp * 1000).toISOString()
+ : null,
+ // Ensure amount is a number (remove currency symbols)
+ amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
+ // Normalize stage names
+ stage: deal.stage?.toLowerCase().replace(/_/g, " ")
+ }))
+ };
+};
+```
+
+### Common Transformations
+
+| Source Format | Target Format | Kod |
+| -------------------- | ---------------- | ---------------------------------------- |
+| `"true"` / `"false"` | `true` / `false` | `v === true \|\| v === "true"` |
+| `"123.45"` | `123.45` | `parseFloat(value)` |
+| `"active"` | `"ACTIVE"` | `value.toUpperCase()` |
+| `1704067200` (Unix) | ISO date | `new Date(v * 1000).toISOString()` |
+| `"$1,234.56"` | `1234.56` | `parseFloat(v.replace(/[^0-9.-]/g, ""))` |
+| `null` / `undefined` | `""` | `value \|\| ""` |
+
+## Step 4: Iterate Through Products
+
+Add an **Iterator** action:
+
+* Input: `{{code.products}}`
+
+This loops through each product in the array.
+
+## Step 5: Upsert Each Record
+
+Inside the iterator, add an **Upsert Record** action:
+
+| Setting | Değer |
+| ------------ | -------------------------------------- |
+| **Object** | Your custom Product object |
+| **Match by** | External ID or SKU (unique identifier) |
+| **Name** | `{{iterator.item.name}}` |
+| **SKU** | `{{iterator.item.sku}}` |
+| **Price** | `{{iterator.item.price}}` |
+
+
+ Use **Upsert** (update or create) instead of building separate branches for create vs. update. It's faster to build and easier to debug.
+
+
+## Example Use Cases
+
+| Kaynak | Veri |
+| ----------------------- | ----------------------------------- |
+| **ERP system** | Product catalog, pricing, inventory |
+| **E-commerce platform** | Orders, customers, product updates |
+| **Data warehouse** | Aggregated metrics, enriched data |
+| **Inventory system** | Stock levels, reorder alerts |
+
+## Related
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Handle Arrays in Code Actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
new file mode 100644
index 0000000000..13153d4c95
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx
@@ -0,0 +1,130 @@
+---
+title: Bring Typeform Submissions into Twenty
+description: Handle Typeform's webhook payload to create leads from form submissions.
+---
+
+For standard webhook setup, see [Set Up a Webhook Trigger](/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger). This article covers the specific handling required for Typeform's custom payload structure.
+
+### Step 1: Create a Webhook Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Select **Webhook** as the trigger
+4. Copy the webhook URL
+
+### Step 2: Configure Typeform
+
+1. In Typeform, open your form
+2. Go to **Connect → Webhooks**
+3. Paste your Twenty webhook URL
+4. Kaydet
+
+### Step 3: Understand the Typeform Payload
+
+Typeform sends a nested JSON structure. Here's a simplified example:
+
+```json
+{
+ "event_type": "form_response",
+ "form_response": {
+ "form_id": "abc123",
+ "submitted_at": "2025-01-15T10:30:00Z",
+ "answers": [
+ {
+ "text": "Jane",
+ "type": "text",
+ "field": { "id": "field1", "type": "short_text", "title": "First Name" }
+ },
+ {
+ "text": "Smith",
+ "type": "text",
+ "field": { "id": "field2", "type": "short_text", "title": "Last Name" }
+ },
+ {
+ "text": "Acme Corp",
+ "type": "text",
+ "field": { "id": "field3", "type": "short_text", "title": "Company" }
+ },
+ {
+ "email": "jane@acme.com",
+ "type": "email",
+ "field": { "id": "field4", "type": "email", "title": "Email" }
+ },
+ {
+ "type": "choice",
+ "field": { "id": "field5", "type": "dropdown", "title": "Team Size" },
+ "choice": { "label": "10-50" }
+ }
+ ]
+ }
+}
+```
+
+Key things to note:
+
+* Form data is nested under `form_response`
+* **Answers are returned as an array**, not as named fields
+* Each answer includes the field type and title for reference
+
+### Step 4: Extract Fields from the Answers Array
+
+Since `answers` is an array, you can only select the entire array in subsequent steps — not individual fields. Add a **Code** action to extract the fields you need:
+
+```javascript
+export const main = async (params: {
+ answers: any;
+}): Promise => {
+ const { answers } = params;
+
+ // Handle input that may come as a string or an array
+ const answersFormatted = typeof answers === "string"
+ ? JSON.parse(answers)
+ : answers;
+
+ // Extract fields by position or by finding the field type
+ const firstName = answersFormatted[0]?.text || "";
+ const lastName = answersFormatted[1]?.text || "";
+ const company = answersFormatted[2]?.text || "";
+ const email = answersFormatted.find(a => a.type === "email")?.email || "";
+ const teamSize = answersFormatted.find(a => a.type === "choice")?.choice?.label || "";
+
+ return {
+ contact: {
+ firstName,
+ lastName,
+ company,
+ email,
+ teamSize
+ }
+ };
+};
+```
+
+Now in subsequent steps, you can select `contact.firstName`, `contact.email`, etc. from the variable picker.
+
+
+ For more details on handling arrays in Code actions, see [Handle Arrays in Code Actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+### Step 5: Create the Record
+
+Add a **Create Record** action:
+
+| Alan | Değer |
+| -------------- | ---------------------------------------------------- |
+| **Object** | İnsanlar |
+| **First Name** | `{{code.contact.firstName}}` |
+| **Last Name** | `{{code.contact.lastName}}` |
+| **Email** | `{{code.contact.email}}` |
+| **Company** | Search or create based on `{{code.contact.company}}` |
+
+### Step 6: Test and Activate
+
+1. Submit a test response in Typeform
+2. Check the workflow run to verify data was captured
+3. Activate the workflow
+
+## Related
+
+* [Set Up a Webhook Trigger](/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger)
+* [Handle Arrays in Code Actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
new file mode 100644
index 0000000000..59d845e10b
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx
@@ -0,0 +1,143 @@
+---
+title: Generate a Quote or Invoice from Twenty
+description: Automatically create invoices in external tools when deals close.
+---
+
+Automatically send deal data to your invoicing system (Stripe, QuickBooks, Xero, etc.) when an opportunity is won.
+
+## Workflow Structure
+
+1. **Trigger**: Record is Updated (Opportunity)
+2. **Filter**: Stage = Closed Won
+3. **Search Record**: Get Company details
+4. **Code** (optional): Format payload
+5. **HTTP Request**: Send to invoicing system
+
+## Step 1: Set Up the Trigger
+
+1. Create a new workflow
+2. Select **Record is Updated** trigger
+3. Choose **Opportunity** as the object
+
+## Step 2: Filter for Closed Won
+
+Add a **Filter** action to only continue when the deal is won:
+
+| Setting | Değer |
+| ------------- | --------------------------------- |
+| **Field** | Aşama |
+| **Condition** | Equals |
+| **Value** | `CLOSED_WON` (or your stage name) |
+
+
+ The trigger fires on any Opportunity update. The Filter ensures the workflow only continues when the stage changes to Closed Won.
+
+
+## Step 3: Get Company Details
+
+The Opportunity record may not include all Company fields you need for the invoice. Add a **Search Record** action:
+
+| Setting | Değer |
+| ------------ | ---------------------------------------- |
+| **Object** | Şirket |
+| **Match by** | ID equals `{{trigger.object.companyId}}` |
+
+This retrieves the full Company record with billing address, tax ID, etc.
+
+## Step 4: Format the Payload (Optional)
+
+If your invoicing system expects a specific format, add a **Code** action:
+
+```javascript
+export const main = async (params: {
+ opportunity: any;
+ company: any;
+}): Promise => {
+ const { opportunity, company } = params;
+
+ return {
+ invoice: {
+ // Customer info from Company
+ customer_name: company.name,
+ customer_email: company.email || "",
+ billing_address: {
+ line1: company.address?.street || "",
+ city: company.address?.city || "",
+ postal_code: company.address?.postalCode || "",
+ country: company.address?.country || ""
+ },
+ tax_id: company.taxId || null,
+
+ // Invoice details from Opportunity
+ amount: opportunity.amount,
+ currency: opportunity.currency || "USD",
+ description: `Invoice for ${opportunity.name}`,
+ due_days: 30,
+
+ // Reference back to Twenty
+ metadata: {
+ opportunity_id: opportunity.id,
+ company_id: company.id
+ }
+ }
+ };
+};
+```
+
+## Step 5: Send to Invoicing System
+
+Add an **HTTP Request** action:
+
+| Setting | Değer |
+| ----------- | ----------------------------------------- |
+| **Method** | POST |
+| **URL** | Your invoicing API endpoint |
+| **Headers** | `Authorization: Bearer YOUR_API_KEY` |
+| **Body** | `{{code.invoice}}` or map fields directly |
+
+### Example: Stripe Invoice
+
+```
+POST https://api.stripe.com/v1/invoices
+Headers:
+ Authorization: Bearer sk_live_xxx
+ Content-Type: application/x-www-form-urlencoded
+
+Body:
+ customer: {{company.stripeCustomerId}}
+ collection_method: send_invoice
+ days_until_due: 30
+```
+
+### Example: QuickBooks Invoice
+
+```
+POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
+Headers:
+ Authorization: Bearer YOUR_ACCESS_TOKEN
+ Content-Type: application/json
+
+Body: {{code.invoice}}
+```
+
+## Complete Workflow Summary
+
+| Step | Eylem | Purpose |
+| ---- | ----------------------- | ------------------------------------ |
+| 1 | Trigger: Record Updated | Fires when any Opportunity changes |
+| 2 | Filtre | Only proceed if Stage = Closed Won |
+| 3 | Search Record | Get full Company details for billing |
+| 4 | Kod | Format data for invoicing API |
+| 5 | HTTP İsteği | Create invoice in external system |
+
+## Tips
+
+* **Store external IDs**: Save the invoice ID returned by the API back to the Opportunity using an **Update Record** action
+* **Error handling**: Add a branch to send a notification if the HTTP request fails
+* **Test first**: Use your invoicing system's sandbox/test mode before going live
+
+## Related
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Closed Won Automations](/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
new file mode 100644
index 0000000000..492917818e
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx
@@ -0,0 +1,171 @@
+---
+title: Set Up a Webhook Trigger
+description: Receive data from external services to trigger workflows.
+image: /images/user-guide/workflows/workflow.png
+---
+
+Webhook triggers allow external services to start your workflows by sending data to a unique URL. Use them to connect forms, third-party apps, and custom integrations.
+
+## When to Use Webhooks
+
+| Use Case | Örnek |
+| ----------------------- | --------------------------------------- |
+| **Web forms** | Contact form submissions create leads |
+| **Third-party apps** | Stripe payment → create customer record |
+| **Custom integrations** | Your app → Twenty automation |
+| **No-code tools** | Zapier, Make, n8n connections |
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it (e.g., "Website Form Submission")
+
+### Step 2: Configure the Webhook Trigger
+
+1. Click on the trigger block
+2. Select **Webhook**
+3. You'll receive a unique webhook URL like:
+ ```
+ https://api.twenty.com/webhooks/workflow/abc123...
+ ```
+4. Copy this URL—you'll need it for your external service
+
+### Step 3: Define Expected Data Structure
+
+For **POST** requests, define the expected body structure:
+
+1. Click **Define expected body**
+2. Enter a sample JSON that matches what your service will send:
+
+```json
+{
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john@example.com",
+ "company": "Acme Inc",
+ "message": "Interested in your product"
+}
+```
+
+3. Click **Save**—this creates variables you can use in subsequent steps
+
+### Step 4: Add Actions
+
+Now add actions that use the webhook data:
+
+**Example: Create a Person record**
+
+1. Add **Create Record** action
+2. Select **People** object
+3. Map fields:
+
+| Alan | Değer |
+| ------- | ---------------------------------------------------- |
+| İsim | `{{trigger.body.firstName}}` |
+| Soyadı | `{{trigger.body.lastName}}` |
+| E-posta | `{{trigger.body.email}}` |
+| Şirket | Search or create based on `{{trigger.body.company}}` |
+
+### Step 5: Test the Webhook
+
+Before activating, test your webhook:
+
+**Using cURL**:
+
+```bash
+curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
+ -H "Content-Type: application/json" \
+ -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
+```
+
+**Using Postman or similar**:
+
+1. Create a POST request to your webhook URL
+2. Set Content-Type header to `application/json`
+3. Add your test JSON body
+4. Send and check workflow runs
+
+### Step 6: Activate
+
+Once tested, click **Activate** to make the workflow live.
+
+## Handling Different Data Structures
+
+### Nested Data
+
+If your webhook sends nested data:
+
+```json
+{
+ "contact": {
+ "name": "John Doe",
+ "email": "john@example.com"
+ },
+ "source": "website"
+}
+```
+
+Reference with: `{{trigger.body.contact.email}}`
+
+### Arrays
+
+If data includes arrays:
+
+```json
+{
+ "items": [
+ {"name": "Product A", "qty": 2},
+ {"name": "Product B", "qty": 1}
+ ]
+}
+```
+
+How you handle arrays depends on your use case:
+
+**Unknown number of items → Use Iterator**
+
+If you need to process each item in the array (e.g., create a record for each), add a **Code** action to parse the array, then use **Iterator**:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+ return { items };
+};
+```
+
+Then use Iterator to loop through: `{{code.items}}`
+
+**Known/specific fields → Extract to named fields**
+
+If the array contains specific fields you want to access individually (e.g., form answers where position 0 is always "first name", position 1 is always "last name"), add a **Code** action to extract them:
+
+```javascript
+export const main = async (params: { items: any }) => {
+ const items = typeof params.items === "string"
+ ? JSON.parse(params.items)
+ : params.items;
+
+ return {
+ product: {
+ name: items[0]?.name || "",
+ qty: items[0]?.qty || 0
+ }
+ };
+};
+```
+
+Now you can select `product.name` and `product.qty` individually in subsequent steps.
+
+
+ For more details on handling arrays, see [Handle Arrays in Code Actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
+
+
+## Related
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
new file mode 100644
index 0000000000..6f181674cd
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx
@@ -0,0 +1,179 @@
+---
+title: Closed Won Automations
+description: Automate post-win activities when opportunities close.
+---
+
+When a deal closes, multiple things need to happen: update company status, notify team members, create onboarding tasks. Automate all of this with a single workflow.
+
+## The Problem
+
+When an opportunity moves to "Closed Won":
+
+* Company type needs to change from "Prospect" to "Customer"
+* Onboarding tasks need to be created
+* Customer success team needs to be notified
+* Sales rep needs confirmation
+
+Doing this manually is time-consuming and error-prone.
+
+## The Solution
+
+Create a workflow that handles all post-win activities automatically.
+
+## Complete Workflow Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Deal Won - Post-Win Automation"
+
+### Step 2: Configure the Trigger
+
+1. Select **Record is Updated**
+2. Choose **Opportunities**
+3. Under "Fields to monitor", select **Stage**
+
+### Step 3: Add Stage Filter
+
+1. Add **Filter** action
+2. Condition: `{{trigger.object.stage}}` equals "Closed Won"
+
+### Step 4: Update Company Type
+
+1. Add **Update Record** action
+2. Alanı Yapılandır:
+
+| Alan | Değer |
+| ------------------- | ------------------------------- |
+| **Object** | Şirketler |
+| **Record** | `{{trigger.object.company.id}}` |
+| **Tür** | Müşteri |
+| **First Deal Date** | `{{trigger.object.closedAt}}` |
+| **Hesap Sahibi** | `{{trigger.object.owner.id}}` |
+
+### Step 5: Create Onboarding Task
+
+1. Add **Create Record** action
+2. Alanı Yapılandır:
+
+| Alan | Değer |
+| ----------------------- | ---------------------------------------------------------------------------------------------------- |
+| **Object** | Görevler |
+| **Title** | `Onboarding: {{trigger.object.name}}` |
+| **Assignee** | Customer Success team member |
+| **Due Date** | 3 days from now |
+| **Priority** | High |
+| **Related Company** | `{{trigger.object.company.id}}` |
+| **Related Opportunity** | `{{trigger.object.id}}` |
+| **Description** | `New customer onboarding for {{trigger.object.company.name}}. Deal value: {{trigger.object.amount}}` |
+
+### Step 6: Notify Customer Success
+
+1. Add **Send Email** action
+2. Alanı Yapılandır:
+
+| Alan | Değer |
+| ----------- | -------------------------------------------------- |
+| **To** | customer-success@yourcompany.com |
+| **Subject** | `🎉 New Customer: {{trigger.object.company.name}}` |
+| **Body** | See example below |
+
+**Email body example**:
+
+```
+Hi CS Team,
+
+We have a new customer!
+
+Company: {{trigger.object.company.name}}
+Deal: {{trigger.object.name}}
+Value: {{trigger.object.amount}}
+Sales Rep: {{trigger.object.owner.name}}
+Close Date: {{trigger.object.closedAt}}
+
+An onboarding task has been created automatically.
+
+Let's give them a great start!
+```
+
+### Step 7: Confirm to Sales Rep
+
+1. Add another **Send Email** action
+2. Alanı Yapılandır:
+
+| Alan | Değer |
+| ----------- | -------------------------------------------------------------------------------------------------------------------- |
+| **To** | `{{trigger.object.owner.email}}` |
+| **Subject** | `✅ Deal Closed: {{trigger.object.name}}` |
+| **Body** | Congratulations! Your deal has been processed. The customer success team has been notified and onboarding has begun. |
+
+### Step 8: Test and Activate
+
+1. Test by moving a test opportunity to "Closed Won"
+2. Doğrula:
+ * Company type changed to "Customer"
+ * Onboarding task created
+ * CS team received email
+ * Sales rep received confirmation
+3. Activate when ready
+
+## Handling Closed Lost
+
+Create a similar workflow for lost deals:
+
+### Tetikleyici
+
+* Record is Updated (Opportunities, Stage = "Closed Lost")
+
+### Eylemler
+
+1. **Create Record**: Task for "Lost Deal Analysis"
+2. **Update Record**: Add lost reason to company record
+3. **Send Email**: Notify manager of lost deal
+
+## Advanced: Multi-Step Onboarding
+
+For complex onboarding, create multiple tasks:
+
+```javascript
+export const main = async (params) => {
+ const tasks = [
+ { title: "Welcome call", daysFromNow: 1, assignee: "CS" },
+ { title: "Send onboarding materials", daysFromNow: 2, assignee: "CS" },
+ { title: "Technical setup", daysFromNow: 5, assignee: "Support" },
+ { title: "30-day check-in", daysFromNow: 30, assignee: "CS" }
+ ];
+
+ return { tasks };
+};
+```
+
+Use **Iterator** to create each task from the array.
+
+## Customization Ideas
+
+### Keep your other tools up-to-date
+
+* Create customer in billing system with an **HTTP Request**
+
+### Conditional Actions
+
+Use **Filter** actions to:
+
+* Different onboarding for enterprise vs SMB
+* Different assignees based on region
+* Skip notifications for small deals
+
+### Include Deal Details
+
+Use **Code** action to format:
+
+* Deal summary documents
+* Handoff notes for CS team
+* Custom onboarding checklists
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
new file mode 100644
index 0000000000..e69ebf19da
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx
@@ -0,0 +1,136 @@
+---
+title: Detect Stale Opportunities
+description: Automatically notify managers when opportunities haven't been updated.
+---
+
+Keep your pipeline healthy by alerting managers when opportunities go stale. This workflow checks for opportunities that haven't been updated in a specified number of days.
+
+## The Problem
+
+Opportunities sitting without updates lead to:
+
+* Deals going cold
+* Unreliable forecasts
+* Lost revenue
+
+## The Solution
+
+Create a scheduled workflow that finds stale opportunities and emails their managers.
+
+## Step-by-Step Setup
+
+### Step 1: Create the Workflow
+
+1. Go to **Settings → Workflows**
+2. Click **+ New Workflow**
+3. Name it "Stale Opportunity Alert"
+
+### Step 2: Configure the Trigger
+
+1. Select **On a Schedule**
+2. Set to run daily (e.g., every day at 8 AM)
+
+### Step 3: Search for Stale Opportunities
+
+1. Add **Search Records** action
+2. Alanı Yapılandır:
+
+| Alan | Değer |
+| ---------- | ----------------------------------------------- |
+| **Object** | Fırsatlar |
+| **Filter** | Updated At is before (today - 7 days) |
+| **Filter** | Stage is not "Closed Won" AND not "Closed Lost" |
+| **Limit** | 100 |
+
+### Step 4: Check If Any Found
+
+1. Add **Filter** action
+2. Condition: `{{searchRecords.length}}` is greater than 0
+3. If no stale opportunities, the workflow stops here
+
+### Step 5: Format the Alert (Code Action)
+
+Add a **Code** action to format the email:
+
+```javascript
+export const main = async (params) => {
+ const opportunities = params.opportunities;
+
+ // Group opportunities by owner
+ const byOwner = {};
+ opportunities.forEach(opp => {
+ const ownerEmail = opp.owner?.email || 'unassigned';
+ if (!byOwner[ownerEmail]) {
+ byOwner[ownerEmail] = [];
+ }
+ byOwner[ownerEmail].push({
+ name: opp.name,
+ amount: opp.amount,
+ lastUpdated: opp.updatedAt,
+ stage: opp.stage
+ });
+ });
+
+ // Format summary for manager
+ let summary = "Stale Opportunities Report\n\n";
+ Object.entries(byOwner).forEach(([owner, opps]) => {
+ summary += `${owner}: ${opps.length} stale opportunities\n`;
+ opps.forEach(opp => {
+ summary += ` - ${opp.name} (${opp.stage})\n`;
+ });
+ summary += "\n";
+ });
+
+ return {
+ summary,
+ totalCount: opportunities.length
+ };
+};
+```
+
+### Step 6: Send Alert Email
+
+Add **Send Email** action:
+
+| Alan | Değer |
+| ----------- | ----------------------------------------------------------- |
+| **To** | sales-manager@yourcompany.com |
+| **Subject** | `🚨 {{code.totalCount}} Stale Opportunities Need Attention` |
+| **Body** | `{{code.summary}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow
+2. Check that the email contains the right data
+3. Activate when ready
+
+## Customization Options
+
+### Change Staleness Threshold
+
+Modify the Search Records filter to change from 7 days to your preferred period:
+
+* 3 days for high-velocity sales
+* 14 days for enterprise deals
+* 30 days for long sales cycles
+
+### Alert Individual Reps
+
+Instead of one manager email, use **Iterator** to send personalized emails to each rep about their own stale deals.
+
+### Add Escalation
+
+Create multiple workflows with increasing severity:
+
+1. Day 7: Email to rep
+2. Day 14: Email to rep + manager
+3. Day 21: Create task for manager to intervene
+
+### Include in Slack
+
+Use **HTTP Request** to post to a Slack webhook instead of or in addition to email.
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
new file mode 100644
index 0000000000..6a6fe660d9
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx
@@ -0,0 +1,74 @@
+---
+title: Display Number of Emails Received
+description: Create a workflow to automatically count and display the number of emails received from each contact.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+## Genel Bakış
+
+This workflow triggers every time a new email is received and updates a custom field on the Person record with the total count of emails from that sender.
+
+## Ön Gereksinimler
+
+Before setting up this workflow, create a custom field on the **People** object:
+
+1. Go to **Settings → Data Model → People**
+2. Add a new **Number** field
+3. Name it something like "Number of emails received from this person"
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Workflows** and create a new workflow
+2. Select **Record is Created** as the trigger
+3. Choose **Message Participants** (available under Advanced objects)
+
+
+ A Message Participant is a combination of a message ID and a person ID, creating one unique record per message. This is easier to track than Messages directly because we can access the `handle` field, which contains the sender's (or recipient's) email address.
+
+
+### Step 2: Filter on Role
+
+1. Add a **Filter** action
+2. Set the condition: **Role** equals **FROM**
+
+This ensures you only count messages sent by this person, not messages sent to them.
+
+### Step 3: Search All Message Participants with Same Handle
+
+1. Add a **Search Records** action
+2. Select **Message Participants** as the object
+3. Add filters: **Handle** equals the handle from the trigger (the sender's email address) and **Role** equals **FROM**
+4. Increase the **Limit** from 1 to **200** (the maximum)
+
+This finds all messages from this email address to get the total count.
+
+
+ The Search Records action is limited to returning 200 records maximum. However, since you're only using the `totalCount` value (not the individual records), this step will return the total number of emails sent by this person.
+
+
+### Step 4: Update the Person Record with a Create or Update Record action
+
+1. Add a **Create or Update Record** action
+
+
+ Use **Upsert Record** instead of **Update Record** here. This lets you identify the person by their email address (the `handle` field) rather than requiring a record ID from a previous step.
+
+
+2. Select **People** as the object
+3. Find the person by matching their email to the `handle` from the Message Participant
+4. Set your custom "Number of emails received" field to `{{searchRecords.totalCount}}`
+
+The `totalCount` value from the Search Records action represents the total number of emails received from this person.
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Create Custom Fields](/l/tr/user-guide/data-model/how-tos/customize-your-data-model)
+* [Search Records Action](/l/tr/user-guide/workflows/capabilities/workflow-actions#search-records)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
new file mode 100644
index 0000000000..fef13e4347
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx
@@ -0,0 +1,170 @@
+---
+title: Display Related Record Data
+description: Show data from related records (e.g., Company info on Opportunities) using workflows.
+---
+
+Display data from related records directly on your records — for example, show the employee count from a Company on its Opportunities. This workflow workaround is useful until nested fields are natively available.
+
+## Ortak Kullanım Durumları
+
+| Kaynak | Destination | Fields to Copy |
+| ------ | ----------- | ------------------------------- |
+| Şirket | Fırsat | Industry, Company Size, ARR |
+| Kişi | Fırsat | Email, Phone, Title |
+| Fırsat | Şirket | Last Deal Amount, Last Won Date |
+
+## Basic Field Copy
+
+### Example: Copy Contact Email to Opportunity
+
+**Goal**: When setting a Point of Contact on an opportunity, copy their email to the opportunity for easy access.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities** before building the workflow:
+
+* Contact Email (type: Email)
+* Contact Phone (type: Phone)
+
+### Kurulum
+
+1. **Trigger**: Record is Updated (Opportunities, Point of Contact field)
+
+2. **Filter**: Check that Point of Contact is not empty
+
+3. **Search Records**: Find the linked person
+ * Object: People
+ * Filter: ID equals `{{trigger.object.pointOfContact.id}}`
+
+4. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Contact Email: `{{searchRecords[0].email}}`
+ * Contact Phone: `{{searchRecords[0].phone}}`
+
+## Copy Multiple Fields
+
+### Example: Sync Company Info to All Related Opportunities
+
+**Goal**: When company details change, update all related opportunities.
+
+### Kurulum
+
+1. **Trigger**: Record is Updated (Companies)
+ * Fields: Industry, Company Size, Annual Revenue
+
+2. **Search Records**: Find all opportunities for this company
+ * Object: Opportunities
+ * Filter: Company ID equals `{{trigger.object.id}}`
+
+3. **Iterator**: Loop through each opportunity
+
+4. **Update Record** (inside iterator):
+ * Object: Opportunities
+ * Record: `{{iterator.currentItem.id}}`
+ * Company Industry: `{{trigger.object.industry}}`
+ * Company Size: `{{trigger.object.companySize}}`
+ * Company ARR: `{{trigger.object.annualRevenue}}`
+
+## Copy on Record Creation
+
+### Example: Pre-fill Opportunity with Company Data
+
+**Goal**: When creating an opportunity linked to a company, automatically copy key company info.
+
+### Prerequisite
+
+Create the destination fields in **Settings → Data Model → Opportunities**:
+
+* Company Industry (type: Text)
+* Company Size (type: Number)
+
+### Kurulum
+
+1. **Trigger**: Record is Created (Opportunities)
+ * Filter: Company is not empty
+
+2. **Search Records**: Get the linked company's details
+ * Object: Companies
+ * Filter: ID equals `{{trigger.object.company.id}}`
+
+3. **Update Record**:
+ * Object: Opportunities
+ * Record: `{{trigger.object.id}}`
+ * Company Industry: `{{searchRecords[0].industry}}`
+ * Company Size: `{{searchRecords[0].employees}}`
+
+
+ **Tasks and Notes limitation**: Relations on Tasks and Notes are hardcoded as many-to-many and are not yet available in workflow triggers or actions. To access these relations, use the [API](/l/tr/developers/extend/capabilities/apis) instead.
+
+
+## Bidirectional Sync
+
+### Example: Keep Primary Contact in Sync
+
+**Goal**: When a company's primary contact changes, update the contact. When a person becomes primary, update the company.
+
+### Workflow 1: Company → Person
+
+1. **Trigger**: Record is Updated (Companies, Primary Contact field)
+2. **Update Record**: Set person's "Is Primary Contact" to true
+3. **Search Records**: Find previous primary contact
+4. **Update Record**: Set previous contact's "Is Primary Contact" to false
+
+### Workflow 2: Person → Company
+
+1. **Trigger**: Record is Updated (People, Is Primary Contact = true)
+2. **Update Record**: Set company's Primary Contact to this person
+
+
+ Be careful with bidirectional syncs to avoid infinite loops. Use filters to check if the value actually changed before updating.
+
+
+## Using Code for Complex Mapping
+
+### Example: Transform Data During Copy
+
+**Goal**: Copy and format phone number from person to opportunity.
+
+```javascript
+export const main = async (params) => {
+ const { phone } = params;
+
+ if (!phone) return { formattedPhone: null };
+
+ // Remove non-numeric characters
+ const digits = phone.replace(/\D/g, '');
+
+ // Format as (XXX) XXX-XXXX
+ const formatted = digits.length === 10
+ ? `(${digits.slice(0,3)}) ${digits.slice(3,6)}-${digits.slice(6)}`
+ : phone;
+
+ return { formattedPhone: formatted };
+};
+```
+
+## En İyi Uygulamalar
+
+### Avoid Loops
+
+* Don't create workflows that trigger each other endlessly
+* Use specific field conditions
+* Add checks to see if value actually changed
+
+### Handle Missing Data
+
+* Always check if source record exists before copying
+* Provide default values for optional fields
+* Use filters to skip when source field is empty
+
+### Performance
+
+* Batch updates when copying to many records
+* Use scheduled workflows for bulk sync operations
+* Consider using Iterator for multiple record updates
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
new file mode 100644
index 0000000000..7d4e820cf0
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx
@@ -0,0 +1,202 @@
+---
+title: Formula Fields
+description: Create formula fields using workflows until native support is available.
+---
+
+Twenty doesn't yet support native formula fields yet (coming in 2026), but you can achieve the same result using workflows. This workaround lets you automatically calculate and populate field values—from simple concatenations to complex business logic.
+
+## Ortak Kullanım Durumları
+
+| Use Case | Formula Example |
+| ------------------- | --------------------------------- |
+| **Full name** | First Name + " " + Last Name |
+| **Expected amount** | Amount × Probability |
+| **Days until due** | Due Date - Today |
+| **Days in stage** | Today - Stage Entry Date |
+| **Lead score** | Points based on multiple criteria |
+
+
+ For a complete example of tracking time in pipeline stages, see [Track How Long Opportunities Stay in Each Stage](/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage).
+
+
+## Basic Formula: Concatenation
+
+### Example: Auto-Fill Full Name
+
+**Goal**: Automatically combine first and last name into a full name field.
+
+### Kurulum
+
+1. **Trigger**: Record is Updated or Created (People)
+
+2. **Filter**: Check that first name or last name changed
+
+3. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { firstName, lastName } = params;
+
+ const fullName = [firstName, lastName]
+ .filter(Boolean)
+ .join(' ');
+
+ return { fullName };
+};
+```
+
+4. **Update Record**: Set Full Name to `{{code.fullName}}`
+
+## Numeric Formula: Expected Amount
+
+### Example: Calculate Expected Revenue
+
+**Goal**: Multiply opportunity amount by probability to get expected amount.
+
+See [How to Show Expected Amount in Pipeline](/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline) for the complete workflow.
+
+### Quick Setup
+
+1. **Trigger**: Record is Updated (Opportunities, Amount OR Probability field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { amount, probability } = params;
+
+ const expectedAmount = (amount || 0) * (probability || 0) / 100;
+
+ return { expectedAmount };
+};
+```
+
+3. **Update Record**: Set Expected Amount to `{{code.expectedAmount}}`
+
+## Date Formula: Days Calculation
+
+### Example: Days Until Task Due
+
+**Goal**: Calculate how many days remain until a task's due date.
+
+### Kurulum
+
+1. **Trigger**: Record is Updated or Created (Tasks, Due Date field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { dueDate } = params;
+
+ if (!dueDate) {
+ return { daysUntilDue: null };
+ }
+
+ const due = new Date(dueDate);
+ const today = new Date();
+ const diffTime = due - today;
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+
+ return { daysUntilDue: diffDays };
+};
+```
+
+3. **Update Record**: Set Days Until Due to `{{code.daysUntilDue}}`
+
+
+ Negative values indicate overdue tasks. You can use this field to filter or sort tasks by urgency.
+
+
+## Conditional Formula: Lead Score
+
+### Example: Calculate Lead Score Based on Criteria
+
+**Goal**: Score leads based on company size, industry, and engagement.
+
+### Kurulum
+
+1. **Trigger**: Record is Updated (People or Companies)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { companySize, industry, hasEmail, hasPhone, source } = params;
+
+ let score = 0;
+
+ // Company size scoring
+ if (companySize === 'Enterprise') score += 30;
+ else if (companySize === 'Mid-Market') score += 20;
+ else if (companySize === 'SMB') score += 10;
+
+ // Industry scoring
+ const targetIndustries = ['Technology', 'Finance', 'Healthcare'];
+ if (targetIndustries.includes(industry)) score += 25;
+
+ // Contact info scoring
+ if (hasEmail) score += 10;
+ if (hasPhone) score += 15;
+
+ // Source scoring
+ if (source === 'Referral') score += 20;
+ else if (source === 'Website') score += 10;
+
+ return { leadScore: score };
+};
+```
+
+3. **Update Record**: Set Lead Score to `{{code.leadScore}}`
+
+## Text Formula: Domain Extraction
+
+### Example: Extract Domain from Email
+
+**Goal**: Automatically extract and store the email domain.
+
+### Kurulum
+
+1. **Trigger**: Record is Updated (People, Email field)
+
+2. **Code action**:
+
+```javascript
+export const main = async (params) => {
+ const { email } = params;
+
+ if (!email) return { domain: null };
+
+ const domain = email.split('@')[1]?.toLowerCase();
+
+ return { domain };
+};
+```
+
+3. **Update Record**: Set Domain field to `{{code.domain}}`
+
+## En İyi Uygulamalar
+
+### Performance
+
+* Only trigger on relevant field changes
+* Use filters to skip records that don't need calculation
+* Avoid complex calculations in high-volume workflows
+
+### Error Handling
+
+* Check for null/undefined values before calculations
+* Use default values when data is missing
+* Return clear error messages when calculations fail
+
+### Test
+
+* Test with edge cases (empty fields, zero values)
+* Verify calculations manually before activating
+* Monitor workflow runs for unexpected results
+
+## Related
+
+* [How to Show Expected Amount in Pipeline](/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline)
+* [How to Track Time in Stage](/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
new file mode 100644
index 0000000000..d107aac3fb
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx
@@ -0,0 +1,106 @@
+---
+title: Send Email Alerts with Tasks Due
+description: Automatically notify team members about their upcoming or overdue tasks.
+---
+
+import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
+
+
+
+Send daily email reminders to each team member about their tasks due today.
+
+## Genel Bakış
+
+This workflow runs on a schedule and:
+
+1. Fetches all workspace members
+2. Loops through each member
+3. Finds their tasks due today
+4. Formats and sends a personalized email
+
+## Step-by-Step Setup
+
+
+
+### Step 1: Configure the Trigger
+
+1. Go to **Settings → Workflows** and create a new workflow
+2. Select **On a Schedule** as the trigger
+3. Use a cron expression for daily at 8:00 AM: `0 8 * * *`
+
+### Step 2: Search for All Workspace Members
+
+1. Add a **Search Records** action
+2. Select **Workspace Members** (under advanced objects)
+3. No filters needed — this returns all members
+
+### Step 3: Add an Iterator
+
+1. Add an **Iterator** action
+2. Set the input array to the workspace members from the previous step
+3. All actions inside the iterator will run once per member
+
+### Step 4: Search for Tasks Due Today (Inside Iterator)
+
+1. Inside the iterator, add a **Search Records** action
+2. Select **Tasks** as the object
+3. Add filters:
+ * **Assignee** = current workspace member (from the iterator)
+ * **Due Date** = today
+
+### Step 5: Format Tasks into Email Body (Inside Iterator)
+
+Add a **Code** action to format the tasks into a readable list with links:
+
+```javascript
+export const main = async (params: {
+ tasksDue?: Array<{ id: string; title: string }> | null | string;
+}) => {
+ const tasksDue =
+ typeof params.tasksDue === "string"
+ ? JSON.parse(params.tasksDue)
+ : params.tasksDue;
+
+ if (!Array.isArray(tasksDue) || tasksDue.length === 0) {
+ return {
+ formattedTasks: "No tasks due today."
+ };
+ }
+
+ const formattedTasks = tasksDue
+ .map(
+ t =>
+ `${t.title}\nhttps://yourSubDomain.twenty.com/object/task/${t.id}`
+ )
+ .join("\n\n");
+
+ return { formattedTasks };
+};
+```
+
+
+ Replace `yourSubDomain` with your actual Twenty workspace subdomain.
+
+
+### Step 6: Send Email (Inside Iterator)
+
+1. Add a **Send Email** action (still inside the iterator)
+2. Configure:
+
+| Alan | Değer |
+| ----------- | --------------------------------------------------------------- |
+| **To** | `{{iterator.currentItem.userEmail}}` (workspace member's email) |
+| **Subject** | Your Tasks Due Today |
+| **Body** | `{{code.formattedTasks}}` |
+
+### Step 7: Test and Activate
+
+1. Click **Test** to run the workflow manually
+2. Check inboxes for the emails
+3. Activate the workflow
+
+## Related
+
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [Send Emails from Workflows](/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows)
+* [Handle Arrays in Code Actions](/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/professional-services.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
new file mode 100644
index 0000000000..73858f90b6
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/professional-services.mdx
@@ -0,0 +1,29 @@
+---
+title: Profesyonel Hizmetler
+description: Get professional help building complex workflows and automations from Twenty's team and certified partners.
+---
+
+## Ne Zaman Profesyonel Yardıma İhtiyacınız Var?
+
+Aşağıdaki durumlar için profesyonel hizmetleri düşünün:
+
+* Karmaşık çoklu sistem entegrasyonları
+* Gelişmiş iş mantığı ve otomasyon kuralları
+* Large-scale data processing workflows
+* Özel API geliştirme
+* Ekip eğitimi ve iş akışı optimizasyonu
+* İç kaynaklarınız olmadığında
+
+## Hizmet Seçenekleri
+
+### Başlangıç Paketleri
+
+Get help from our core team with our 4-hour [Onboarding packs](https://twenty.com/onboarding-packages):
+
+* **İş Akışı Oluşturma**: İş süreçleriniz için özel iş akışları oluşturun
+* **Veri Modeli Tasarımı**: İş akışı otomasyonu için veri yapınızı optimize edin
+* **Veri Göçü**: Mevcut verileri uygun iş akışı entegrasyonu ile içe aktarın
+
+### Uygulama Ortakları
+
+Gelişmiş özelleştirmeler için sertifikalı ortaklarla çalışın. [Uygulama ortaklarımızla](https://twenty.com/partners) bağlantıya geçmek için bizimle contact@twenty.com adresinden iletişime geçin.
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
new file mode 100644
index 0000000000..706524389a
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx
@@ -0,0 +1,170 @@
+---
+title: İş Akışı Sorun Giderme
+description: Common workflow issues and how to resolve them.
+---
+
+## Sık Görülen Sorunlar ve Çözümleri
+
+### İş Akışı Tetiklenmiyor
+
+**Symptoms**: Your workflow doesn't run when you expect it to.
+
+**Possible Causes**:
+
+1. **Workflow not activated**: Ensure the workflow is set to "Active" not "Draft"
+2. **Trigger conditions not met**: Verify the trigger matches your expected event
+3. **Field not monitored**: For "Record is Updated" triggers, ensure the specific field is being watched
+4. **Permissions**: Check you have permission to run workflows
+
+**Çözümler**:
+
+* Verify workflow status in the workflow list
+* Test with the specific action you expect to trigger it
+* Review trigger configuration
+* Contact your admin about permissions
+
+### Workflow Triggers Too Early (Empty Fields)
+
+**Symptoms**: When manually creating a record in the UI, your workflow triggers before you've had time to fill in all the fields. The workflow runs with mostly empty field values.
+
+**Why this happens**: Twenty saves everything in real-time — there's no separate "edit" vs "read" mode. When you create a record, it's saved immediately, triggering the "Record is created" event before you can fill in additional fields.
+
+**When "Record is created" works well**:
+
+* Records created via API calls (fields are populated in a single request)
+* Records created via import
+* Automated record creation from other workflows
+
+**Solution**: For records created manually in the UI, use **"Record is created or updated"** as your trigger instead. This way:
+
+* The workflow triggers after the user has finished filling in and saving the fields
+* You get the complete data rather than empty values
+
+
+ If you only want the workflow to run once per record, add a Filter action to check a field like `createdAt equals updatedAt` (first save) or use a custom checkbox field to track if the workflow has already run.
+
+
+### Actions Failing
+
+**Symptoms**: Workflow runs but some actions fail.
+
+**Possible Causes**:
+
+1. **Missing data**: Required fields are empty
+2. **Invalid references**: Variables from previous steps don't exist
+3. **API errors**: External services returning errors
+4. **Permission issues**: Action requires permissions you don't have
+
+**Çözümler**:
+
+* Check the workflow run details for error messages
+* Verify all required fields have values
+* Test API connections independently
+* Review role permissions
+
+### HTTP Request Errors
+
+**Symptoms**: HTTP Request actions fail or return unexpected results.
+
+**Common Error Codes**:
+
+* **400**: Bad request - check your request body format
+* **401**: Unauthorized - verify API key
+* **403**: Forbidden - check API permissions
+* **404**: Not found - verify endpoint URL
+* **429**: Too many requests - implement rate limiting
+* **500**: Server error - external service issue
+
+**Çözümler**:
+
+* Verify API endpoint URL
+* Check authentication headers
+* Test the API call outside of Twenty first
+* Add error handling in Code actions
+
+### Code Action Errors
+
+**Symptoms**: JavaScript code fails to execute.
+
+**Common Issues**:
+
+1. **Syntax errors**: Typos or invalid JavaScript
+2. **Undefined variables**: Referencing variables that don't exist
+3. **Type errors**: Operations on wrong data types
+4. **Timeouts**: Code taking too long to execute
+
+**Çözümler**:
+
+* Use the built-in code editor validation
+* Test code logic in a JavaScript console first
+* Add console.log statements for debugging
+* Simplify complex operations
+
+### Email Not Sending
+
+**Symptoms**: Send Email action doesn't deliver emails.
+
+**Possible Causes**:
+
+1. **No email account connected**: Check Settings → Accounts
+2. **Invalid email address**: Recipient email is malformed
+3. **Sending limits**: Email provider rate limits reached
+4. **Spam filters**: Emails being blocked
+
+**Çözümler**:
+
+* Verify email account connection
+* Validate recipient email addresses
+* Check email provider limits
+* Review email content for spam triggers
+
+## Debugging Workflows
+
+### Using Workflow Runs
+
+1. Go to the workflow editor
+2. Open the **Runs** panel
+3. Find the failed run
+4. Click to see step-by-step details
+5. Review error messages and output data
+
+### Testing Individual Steps
+
+1. For Code actions, use the **Test** button
+2. For HTTP requests, test the endpoint separately
+3. Create test records to trigger workflows
+4. Use manual triggers for controlled testing
+
+### Common Debugging Patterns
+
+**Add logging**:
+Use Code actions to log intermediate values for debugging.
+
+**Isolate steps**:
+Test each step independently to identify failures.
+
+**Check data flow**:
+Verify that each step receives the expected input data.
+
+## Best Practices to Avoid Issues
+
+### Before Activation
+
+* Test thoroughly in draft mode
+* Validate all API connections
+* Review trigger conditions carefully
+* Document expected behavior
+
+### During Development
+
+* Use descriptive step names
+* Add comments in Code actions
+* Test with realistic data
+* Plan for edge cases
+
+### After Activation
+
+* Monitor initial runs closely
+* Set up alerts for failures
+* Review run history regularly
+* Keep workflows simple when possible
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
new file mode 100644
index 0000000000..da39914b36
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx
@@ -0,0 +1,254 @@
+---
+title: Workflows FAQ
+description: Frequently asked questions about workflows in Twenty.
+---
+
+
+
+ This is likely a permissions issue. You need access to workflows to create and activate them.
+
+ **Solution**: Contact your workspace administrator to grant you workflow access under **Settings → Roles**.
+
+ If you don't see the Workflows section at all in your sidebar, this confirms it's a permissions issue.
+
+
+
+ Manual workflows only appear in the navbar if properly configured:
+
+ 1. The workflow must be **activated** (not in draft mode)
+ 2. The navbar placement must be set to **Pinned**
+ 3. For Single/Bulk triggers, you must be on the correct object page
+
+ **To check**: Open the workflow → click the trigger → verify "Navbar placement" is set to "Pinned".
+
+ You can always access manual workflows via **Cmd + K** (or **Ctrl + K**) regardless of navbar settings.
+
+
+
+ | Tür | Records Required | İş Akışı Çalıştırmaları |
+ | --- | ---------------- | ----------------------- |
+
+ \| **Global** | None | Once, no record input |
+ \| **Single** | One or more selected | Once per selected record |
+ \| **Bulk** | One or more selected | Once, with all records as array |
+
+ * **Global**: Use when the workflow doesn't need any record context (e.g., generate a report)
+ * **Single**: Use when you want to process each selected record independently (e.g., send individual emails)
+ * **Bulk**: Use when you need to process records together or optimize credit usage (requires Iterator action)
+
+ See [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers) for details.
+
+
+
+ An explicit If/Else node is not yet available but is on our roadmap.
+
+ **Current workaround**: Create multiple branches from your step, each starting with a **Filter** action:
+
+ ```
+ Step 1
+ │
+ ├── Branch A: Filter (condition = true) → Actions...
+ │
+ └── Branch B: Filter (condition = false) → Actions...
+ ```
+
+ Only the branch where the filter condition passes will execute its subsequent actions.
+
+ See [How to Use Branches](/l/tr/user-guide/workflows/capabilities/workflow-branches) for a step-by-step guide.
+
+
+
+ **Yes**, branches run in parallel by default.
+
+ If you want only one branch to execute:
+
+ * Add a **Filter** action at the start of each branch
+ * Set opposite conditions (e.g., Branch A: status = "Open", Branch B: status ≠ "Open")
+
+ Branches that fail their filter condition stop executing, while others continue.
+
+
+
+ **Yes**. After your parallel branches complete, you can add a step that both branches connect to.
+
+ In the workflow editor:
+
+ 1. Complete your branched actions
+ 2. Add a new step after the branches
+ 3. Drag connections from the end of each branch to this new step
+
+ The merged step will execute after all connected branches complete.
+
+
+
+ **Search Records returns a maximum of 200 records.**
+
+ If you need to process more:
+
+ * Add more specific filters to reduce results
+ * Use scheduled workflows to process in batches
+ * Consider using the API for bulk operations
+
+ For most workflows, 200 records is sufficient. If you regularly hit this limit, consider restructuring your automation.
+
+
+
+ **Not yet.** CC and BCC fields for the Send Email action are on our roadmap.
+
+ **Current workaround**: Add multiple Send Email actions to send to additional recipients, or use an HTTP Request to send via an external email service that supports CC.
+
+
+
+ Every action produces output data that can be used in subsequent steps.
+
+ **To reference previous step data**:
+
+ * Use the variable picker when configuring a field
+ * Or type `{{stepName.fieldName}}` directly
+
+ **Örnekler**:
+
+ * Trigger data: `{{trigger.object.email}}`
+ * Search results: `{{searchRecords[0].name}}`
+ * Code output: `{{code.calculatedValue}}`
+
+ Hover over any field in the action configuration to see available variables from previous steps.
+
+
+
+ **Iterator requires an array input.** Common issues:
+
+ 1. **Input is not an array**: Ensure you're passing results from Search Records or another action that returns an array
+ 2. **Array is empty**: Add a filter before Iterator to check `{{searchRecords.length}} > 0`
+ 3. **Wrong variable selected**: Make sure you select the array itself, not a single record
+
+ **Correct setup**:
+
+ 1. Search Records (returns array)
+ 2. Filter: length > 0
+ 3. Iterator: select `{{searchRecords}}`
+ 4. Actions inside iterator use `{{iterator.currentItem.fieldName}}`
+
+
+
+ Code actions (serverless functions) have a **default timeout of 5 minutes** (300 seconds).
+
+ The maximum configurable timeout is **15 minutes** (900 seconds).
+
+ If your code exceeds this limit, the action will fail with a timeout error.
+
+ **Tips to avoid timeouts**:
+
+ * Break large operations into smaller chunks using Iterator
+ * Avoid heavy computations; use external services via HTTP Request for intensive processing
+ * Optimize your code to reduce execution time
+ * If you need longer processing, consider using scheduled workflows that process data in batches
+
+
+
+ Workflow runs show the execution history and help you debug issues.
+
+ **Access runs**:
+
+ * In workflow editor → **Runs** panel on the right
+ * Or go to **Workflow Runs** in the sidebar
+
+ **Understanding a run**:
+
+ * **Status**: Running, Completed, Failed, Waiting
+ * **Steps**: See which steps executed and their output
+ * **Errors**: Click failed steps to see error messages
+ * **Data**: View input/output data at each step
+
+ See [Workflow Runs](/l/tr/user-guide/workflows/capabilities/workflow-runs) for details.
+
+
+
+ Workflow runs might be failing immediately due to rate limits.
+
+ **Hard limit: 5,000 runs per hour per workspace.**
+
+ If you exceed this limit, workflows are immediately marked as failed and won't appear in your runs list as expected.
+
+ **Common scenarios that hit this limit**:
+
+ * Selecting more than 5,000 records with a Single manual trigger
+ * Multiple workflows running simultaneously across your workspace
+ * High-frequency automated triggers (e.g., Record Updated on a busy object)
+
+ **Çözümler**:
+
+ * Use **Bulk** triggers instead of Single to process many records in one run
+ * Space out large batch operations
+ * Use filters to reduce trigger frequency
+ * Schedule heavy workflows during off-peak hours
+
+
+
+ Twenty has two rate limits to ensure system stability:
+
+ | Limit | Değer | Behavior |
+ | ----- | ----- | -------- |
+
+ \| **Soft limit** | 100 runs/minute | Runs queue in "Not Started" status, processed gradually |
+ \| **Hard limit** | 5,000 runs/hour | Runs immediately fail |
+
+ **Soft limit (100/min)**: Your workflows won't fail—they just wait in the queue and are processed over time. You can trigger more than 100 records; execution will be slower.
+
+ **Hard limit (5,000/hr)**: This applies to your entire workspace. If all your workflows combined exceed 5,000 runs in an hour, additional runs will fail immediately.
+
+ **Tips to stay within limits**:
+
+ * Use Bulk triggers with Iterator instead of Single triggers for large batches
+ * Combine related automations into fewer workflows
+ * Use scheduled workflows to spread load over time
+
+
+
+ **No, there is no automatic retry functionality at the moment.**
+
+ If a workflow run fails, you'll need to:
+
+ 1. Review the error in **Settings → Workflows → [Your Workflow] → Runs**
+ 2. Fix the issue (data, configuration, or external service)
+ 3. Manually trigger the workflow again on the affected record(s)
+
+ **Tips to reduce failures**:
+
+ * Add **Filter** nodes to validate data before actions
+ * Use **Search Records** to check if related records exist
+ * Test thoroughly with a few records before bulk operations
+
+ Automatic retry functionality is on our roadmap for a future release.
+
+
+
+ **Yes, if your workflows are triggered by record creation or updates.**
+
+ When you import data via CSV, each record created or updated can trigger workflows. A large import (thousands of records) could:
+
+ * Hit the 5,000 runs/hour limit
+ * Consume significant workflow credits
+ * Send unexpected emails or notifications
+ * Create duplicate tasks or records
+
+ **Before a mass import**:
+
+ 1. Go to **Settings → Workflows**
+ 2. Identify workflows triggered by the object you're importing
+ 3. **Deactivate** them temporarily
+ 4. Run your CSV import
+ 5. **Reactivate** the workflows when done
+
+ **Alternative**: If you need the workflows to run on imported data, import in smaller batches to stay within rate limits.
+
+
+
+ If your workflow canvas looks messy with nodes scattered around, you can automatically organize it:
+
+ 1. Right-click anywhere on the workflow canvas
+ 2. Click **Tidy up workflow**
+
+ This will automatically rearrange all nodes into a clean, organized layout.
+
+
diff --git a/packages/twenty-docs/l/tr/user-guide/workflows/overview.mdx b/packages/twenty-docs/l/tr/user-guide/workflows/overview.mdx
new file mode 100644
index 0000000000..886a20c53d
--- /dev/null
+++ b/packages/twenty-docs/l/tr/user-guide/workflows/overview.mdx
@@ -0,0 +1,80 @@
+---
+title: İş Akışları
+description: Learn how to build automations in Twenty.
+image: /images/user-guide/workflows/workflow.png
+---
+
+
+
+
+
+## İş Akışları Neden Önemlidir?
+
+Twenty, kullanıcılarına maksimum esneklik sağlamak için tasarlandı. İş süreçlerinizi katı, önceden oluşturulmuş özelliklere uyarlamak yerine, iş akışları, benzersiz iş kullanım durumlarınızı en iyi destekleyen CRM'yi oluşturmanıza olanak tanır.
+
+İş akışları, bu otomasyonları oluşturmak için Twenty'nin uygulama içi özelliğidir. They give you the building blocks to create exactly what your business needs, when it needs it.
+
+## İş akışlarıyla ne yapabilirim?
+
+İki ana amaç için otomasyonlar oluşturmanızı öneririz:
+
+1. **Ekibinizin günlük işlerini kolaylaştırmak için iç otomasyonlar**: Ekibinizin yavaşlamasına neden olan manuel giriş ve tekrarlanan görevleri azaltın.
+2. **Verileri içeri ve dışarı getirin**: Twenty'yi API çağrıları ve webhooks aracılığıyla veritabanınıza ve diğer araçlara bağlayın.
+
+## Building Your First Workflow
+
+### Step 1: Create a New Workflow
+
+1. Go to **Workflows** accessible below the other objects
+2. Click **+ New Record**
+3. Give your workflow a name
+
+### Step 2: Add a Trigger
+
+Every workflow starts with a trigger. Choose from:
+
+* **Record events**: When a record is created, updated, or deleted
+* **Schedule**: Run at specific times (daily, weekly, etc.)
+* **Manual**: Triggered by a user action
+* **Webhook**: Triggered by a webhook
+
+
+
+### Step 3: Add Actions
+
+After your trigger, add one or more actions:
+
+* **Create Record**: Add new records to any object
+* **Update Record**: Modify existing record data
+* **Delete Record**: Remove records from objects
+* **Search Records**: Find records matching criteria
+* **Upsert Record**: Create or update based on matching criteria
+* **Iterator**: Loop through arrays of records
+* **Filter**: Control which records proceed
+* **Delay**: Wait before continuing (duration or scheduled date)
+* **Send Email**: Send emails via your connected account
+* **Code**: Run custom JavaScript
+* **HTTP Request**: Call external APIs
+* **Form**: Get inputs from users within Twenty UI at the time of execution
+* **AI Agent** (Coming soon): Run intelligent AI tasks
+
+
+
+### Step 4: Test and Activate
+
+1. Use the **Test** button to run your workflow with sample data
+2. Review the results to ensure it works as expected
+3. Toggle the workflow **Active** when ready
+
+## İş Akışı En İyi Uygulamaları
+
+* **Adım isimlerini düzenleyin**: Her biri ne yaptığını açıkça tanımlamak için iş akışı adımlarınızı yeniden adlandırın. Bakım açısından yardımcı olur ve iş arkadaşlarına devretmeyi kolaylaştırır
+* **Önceki adım verilerinden yararlanın**: İş akışınızdaki herhangi bir önceki adım tarafından döndürülen kayıtlardan alanları kullanabilirsiniz
+* **Basit başlayın**: Temel iş akışlarıyla başlayın ve sistemle daha rahat hale geldikçe zamanla karmaşıklık ekleyin
+* **Plan before building**: Map out your workflow logic before you start building to avoid getting stuck halfway through
+
+## Sonraki Adımlar
+
+* [Workflow Triggers](/l/tr/user-guide/workflows/capabilities/workflow-triggers)
+* [Workflow Actions](/l/tr/user-guide/workflows/capabilities/workflow-actions)
+* [CRM Automations](/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations)
diff --git a/packages/twenty-utils/fix-crowdin-translations.ts b/packages/twenty-utils/fix-crowdin-translations.ts
index 9304d9df96..77ed276317 100644
--- a/packages/twenty-utils/fix-crowdin-translations.ts
+++ b/packages/twenty-utils/fix-crowdin-translations.ts
@@ -153,7 +153,7 @@ async function addTranslation(
// Success if added OR if identical already exists (meaning correct version is now active)
if (response.ok) return true;
- const data = await response.json();
+ const data = (await response.json()) as { errors?: Array<{ error?: { errors?: Array<{ message?: string }> } }> };
const errorMsg = data?.errors?.[0]?.error?.errors?.[0]?.message || '';
// "Identical translation already saved" means the correct version was already a suggestion
diff --git a/packages/twenty-utils/fix-docs-tags.ts b/packages/twenty-utils/fix-docs-tags.ts
new file mode 100644
index 0000000000..514a385662
--- /dev/null
+++ b/packages/twenty-utils/fix-docs-tags.ts
@@ -0,0 +1,273 @@
+/**
+ * Script to fix HTML tags in MDX translations that should use Markdown
+ *
+ * Problem: Some translations use HTML tags (, , , ) instead of
+ * Markdown syntax (**, *) causing QA issues and potentially breaking Crowdin builds.
+ *
+ * Usage:
+ * CROWDIN_PERSONAL_TOKEN=xxx npx ts-node packages/twenty-utils/fix-docs-tags.ts
+ */
+
+const CROWDIN_BASE_URL = 'https://twenty.api.crowdin.com/api/v2';
+const CROWDIN_PROJECT_ID = 2; // Docs project
+
+type QAIssue = {
+ stringId: number;
+ languageId: string;
+ validation: string;
+};
+
+type Translation = {
+ stringId: number;
+ translationId: number;
+ text: string;
+};
+
+type CrowdinErrorResponse = {
+ errors?: Array<{
+ error?: {
+ errors?: Array<{
+ message?: string;
+ }>;
+ };
+ }>;
+};
+
+async function getToken(): Promise {
+ const token = process.env.CROWDIN_PERSONAL_TOKEN;
+
+ if (!token) {
+ console.error(
+ 'Error: CROWDIN_PERSONAL_TOKEN environment variable not set',
+ );
+ process.exit(1);
+ }
+
+ return token;
+}
+
+async function fetchTagsQAIssues(token: string): Promise {
+ const issues: QAIssue[] = [];
+ let offset = 0;
+ const limit = 500;
+
+ console.log('Fetching tags QA issues from Crowdin...');
+
+ while (true) {
+ const url = `${CROWDIN_BASE_URL}/projects/${CROWDIN_PROJECT_ID}/qa-checks?limit=${limit}&offset=${offset}&category=tags`;
+ const response = await fetch(url, {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ throw new Error(`Crowdin API error: ${response.status}`);
+ }
+
+ type QAResponse = {
+ data: Array<{ data: QAIssue }>;
+ };
+
+ const data = (await response.json()) as QAResponse;
+
+ if (data.data.length === 0) break;
+
+ for (const item of data.data) {
+ issues.push(item.data);
+ }
+
+ if (data.data.length < limit) break;
+ offset += limit;
+ }
+
+ return issues;
+}
+
+async function getTranslation(
+ token: string,
+ stringId: number,
+ languageId: string,
+): Promise {
+ const url = `${CROWDIN_BASE_URL}/projects/${CROWDIN_PROJECT_ID}/languages/${languageId}/translations?stringIds=${stringId}`;
+ const response = await fetch(url, {
+ headers: {
+ Authorization: `Bearer ${token}`,
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ console.error(`Failed to get translation for string ${stringId}`);
+ return null;
+ }
+
+ type TransResponse = {
+ data: Array<{
+ data: Translation;
+ }>;
+ };
+
+ const data = (await response.json()) as TransResponse;
+
+ return data.data[0]?.data || null;
+}
+
+async function deleteTranslation(
+ token: string,
+ translationId: number,
+): Promise {
+ const url = `${CROWDIN_BASE_URL}/projects/${CROWDIN_PROJECT_ID}/translations/${translationId}`;
+ const response = await fetch(url, {
+ method: 'DELETE',
+ headers: {
+ Authorization: `Bearer ${token}`,
+ },
+ });
+
+ return response.ok || response.status === 404;
+}
+
+async function addTranslation(
+ token: string,
+ stringId: number,
+ languageId: string,
+ text: string,
+): Promise {
+ const url = `${CROWDIN_BASE_URL}/projects/${CROWDIN_PROJECT_ID}/translations`;
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ Authorization: `Bearer ${token}`,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ stringId, languageId, text }),
+ });
+
+ if (response.ok) return true;
+
+ const data = (await response.json()) as CrowdinErrorResponse;
+ const errorMsg = data?.errors?.[0]?.error?.errors?.[0]?.message ?? '';
+
+ // Identical translation already exists - that's fine
+ if (errorMsg.includes('identical')) return true;
+
+ console.error(`Failed to add translation: ${JSON.stringify(data)}`);
+ return false;
+}
+
+function fixHtmlTags(text: string): string {
+ let fixed = text;
+
+ // Fix bold: ... or ... → **...**
+ fixed = fixed.replace(/(.*?)<\/strong>/gi, '**$1**');
+ fixed = fixed.replace(/(.*?)<\/b>/gi, '**$1**');
+
+ // Fix italic: ... or ... → *...*
+ fixed = fixed.replace(/(.*?)<\/em>/gi, '*$1*');
+ fixed = fixed.replace(/(.*?)<\/i>/gi, '*$1*');
+
+ // Fix code: ... → `...`
+ fixed = fixed.replace(/(.*?)<\/code>/gi, '`$1`');
+
+ return fixed;
+}
+
+function hasHtmlFormattingTags(text: string): boolean {
+ return /<(strong|b|em|i|code)[^>]*>/i.test(text);
+}
+
+async function main() {
+ const token = await getToken();
+
+ const issues = await fetchTagsQAIssues(token);
+ console.log(`Found ${issues.length} tags QA issues`);
+
+ if (issues.length === 0) {
+ console.log('No tags issues to fix!');
+ return;
+ }
+
+ // Group by stringId + languageId to avoid duplicates
+ const uniqueIssues = new Map();
+ for (const issue of issues) {
+ const key = `${issue.stringId}-${issue.languageId}`;
+ uniqueIssues.set(key, issue);
+ }
+
+ console.log(`Processing ${uniqueIssues.size} unique string-language pairs...`);
+
+ let fixed = 0;
+ let skipped = 0;
+ let errors = 0;
+
+ for (const [key, issue] of uniqueIssues) {
+ const translation = await getTranslation(
+ token,
+ issue.stringId,
+ issue.languageId,
+ );
+
+ if (!translation) {
+ console.log(` [${key}] No translation found, skipping`);
+ skipped++;
+ continue;
+ }
+
+ if (!hasHtmlFormattingTags(translation.text)) {
+ console.log(` [${key}] No HTML formatting tags, skipping`);
+ skipped++;
+ continue;
+ }
+
+ const fixedText = fixHtmlTags(translation.text);
+
+ if (fixedText === translation.text) {
+ console.log(` [${key}] No changes needed, skipping`);
+ skipped++;
+ continue;
+ }
+
+ console.log(` [${key}] Fixing HTML tags...`);
+
+ // Delete old translation
+ const deleted = await deleteTranslation(token, translation.translationId);
+ if (!deleted) {
+ console.error(` [${key}] Failed to delete old translation`);
+ errors++;
+ continue;
+ }
+
+ // Add corrected translation
+ const added = await addTranslation(
+ token,
+ issue.stringId,
+ issue.languageId,
+ fixedText,
+ );
+
+ if (added) {
+ console.log(` [${key}] ✓ Fixed`);
+ fixed++;
+ } else {
+ errors++;
+ }
+
+ // Small delay to avoid rate limiting
+ await new Promise((resolve) => setTimeout(resolve, 100));
+ }
+
+ console.log(`
+Done!
+ Fixed: ${fixed}
+ Skipped: ${skipped}
+ Errors: ${errors}
+`);
+}
+
+main().catch((error) => {
+ console.error('Error:', error);
+ process.exit(1);
+});
+