From 3dd858c91ee59bff8e26123b2ad14d7ba1d1e6ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Malfait?= Date: Tue, 23 Dec 2025 14:26:11 +0100 Subject: [PATCH] i18n - docs translations (#16774) Created by Github action Pulls the latest documentation translations from Crowdin for all supported languages: - French (fr) - Arabic (ar) - Czech (cs) - German (de) - Spanish (es) - Italian (it) - Japanese (ja) - Korean (ko) - Portuguese (pt) - Romanian (ro) - Russian (ru) - Turkish (tr) - Chinese (zh-CN) --------- Co-authored-by: github-actions --- .github/workflows/docs-i18n-pull.yaml | 77 ++- .github/workflows/docs-i18n-push.yaml | 16 +- .github/workflows/i18n-pull.yaml | 4 +- crowdin-docs.yml | 3 +- packages/twenty-docs/docs.json | 108 ++-- .../best-practices-server.mdx | 22 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/queue.mdx | 41 ++ .../backend-development/server-commands.mdx | 101 ++++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 325 +++++++++++ .../frontend-development/hotkeys.mdx | 178 ++++++ .../frontend-development/storybook.mdx | 8 + .../frontend-development/style-guide.mdx | 290 ++++++++++ .../frontend-development/work-with-figma.mdx | 58 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/ar/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/ar/developers/extend/extend.mdx | 34 ++ .../l/ar/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 252 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 225 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/ar/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/ar/navigation.json | 214 +++++-- .../l/ar/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/ar/twenty-ui/display/checkmark.mdx | 58 ++ .../l/ar/twenty-ui/display/chip.mdx | 138 +++++ .../l/ar/twenty-ui/display/icons.mdx | 73 +++ .../l/ar/twenty-ui/display/soon-pill.mdx | 18 + .../l/ar/twenty-ui/display/tag.mdx | 38 ++ .../l/ar/twenty-ui/input/block-editor.mdx | 35 +- .../l/ar/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/ar/twenty-ui/input/checkbox.mdx | 44 ++ .../l/ar/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/ar/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/ar/twenty-ui/input/image-input.mdx | 34 ++ .../l/ar/twenty-ui/input/radio.mdx | 97 ++++ .../l/ar/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/ar/twenty-ui/input/text.mdx | 214 ++++--- .../l/ar/twenty-ui/input/toggle.mdx | 36 ++ .../l/ar/twenty-ui/introduction.mdx | 30 + .../twenty-docs/l/ar/twenty-ui/navigation.mdx | 8 + .../l/ar/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/ar/twenty-ui/navigation/links.mdx | 226 ++++---- .../l/ar/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../l/ar/twenty-ui/navigation/step-bar.mdx | 34 ++ .../l/ar/twenty-ui/progress-bar.mdx | 66 +++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/ar/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/ar/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/ar/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/ar/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../ar/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/ar/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/ar/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/ar/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/ar/user-guide/workflows/overview.mdx | 80 +++ .../best-practices-server.mdx | 22 + .../folder-architecture-server.mdx | 125 +++++ .../backend-development/server-commands.mdx | 100 ++++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 324 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-commands.mdx | 90 +++ .../frontend-development/storybook.mdx | 8 + .../frontend-development/style-guide.mdx | 290 ++++++++++ .../frontend-development/work-with-figma.mdx | 59 ++ .../contribute/capabilities/local-setup.mdx | 332 +++++++++++ .../l/cs/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/cs/developers/extend/extend.mdx | 34 ++ .../l/cs/developers/introduction.mdx | 23 + .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/cs/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/cs/navigation.json | 212 +++++-- .../l/cs/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/cs/twenty-ui/display/checkmark.mdx | 58 ++ .../l/cs/twenty-ui/display/chip.mdx | 138 +++++ .../l/cs/twenty-ui/display/icons.mdx | 73 +++ .../l/cs/twenty-ui/display/soon-pill.mdx | 18 + .../l/cs/twenty-ui/display/tag.mdx | 54 +- .../l/cs/twenty-ui/input/block-editor.mdx | 31 ++ .../l/cs/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/cs/twenty-ui/input/checkbox.mdx | 44 ++ .../l/cs/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/cs/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/cs/twenty-ui/input/image-input.mdx | 34 ++ .../l/cs/twenty-ui/input/radio.mdx | 97 ++++ .../l/cs/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/cs/twenty-ui/input/text.mdx | 137 +++++ .../l/cs/twenty-ui/input/toggle.mdx | 36 ++ .../l/cs/twenty-ui/introduction.mdx | 30 + .../l/cs/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../l/cs/twenty-ui/navigation/step-bar.mdx | 34 ++ .../l/cs/twenty-ui/progress-bar.mdx | 66 +++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/cs/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/cs/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/cs/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/cs/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../cs/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/cs/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/cs/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/cs/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/cs/user-guide/workflows/overview.mdx | 80 +++ .../backend-development/custom-objects.mdx | 39 ++ .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/server-commands.mdx | 101 ++++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 325 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-development/style-guide.mdx | 289 ++++++++++ .../frontend-development/work-with-figma.mdx | 58 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/de/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/de/developers/extend/extend.mdx | 34 ++ .../l/de/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 226 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/de/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/de/navigation.json | 212 +++++-- .../l/de/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/de/twenty-ui/display/checkmark.mdx | 58 ++ .../l/de/twenty-ui/display/chip.mdx | 138 +++++ .../l/de/twenty-ui/display/icons.mdx | 86 ++- .../l/de/twenty-ui/display/soon-pill.mdx | 18 + .../l/de/twenty-ui/display/tag.mdx | 38 ++ .../l/de/twenty-ui/input/block-editor.mdx | 31 ++ .../l/de/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/de/twenty-ui/input/checkbox.mdx | 44 ++ .../l/de/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/de/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/de/twenty-ui/input/image-input.mdx | 34 ++ .../l/de/twenty-ui/input/radio.mdx | 97 ++++ .../l/de/twenty-ui/input/select.mdx | 71 ++- .../twenty-docs/l/de/twenty-ui/input/text.mdx | 137 +++++ .../l/de/twenty-ui/input/toggle.mdx | 36 ++ .../l/de/twenty-ui/introduction.mdx | 30 + .../l/de/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/de/twenty-ui/navigation/links.mdx | 154 ++++++ .../l/de/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../l/de/twenty-ui/progress-bar.mdx | 66 +++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/de/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/de/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/de/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/de/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../de/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/de/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/de/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/de/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 135 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/de/user-guide/workflows/overview.mdx | 80 +++ .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/server-commands.mdx | 100 ++++ .../backend-development/zapier.mdx | 81 +++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 325 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-commands.mdx | 90 +++ .../frontend-development/style-guide.mdx | 290 ++++++++++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/es/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/es/developers/extend/extend.mdx | 34 ++ .../l/es/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 226 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/es/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/es/navigation.json | 212 +++++-- .../l/es/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/es/twenty-ui/display/checkmark.mdx | 58 ++ .../l/es/twenty-ui/display/chip.mdx | 138 +++++ .../l/es/twenty-ui/display/icons.mdx | 86 ++- .../l/es/twenty-ui/display/soon-pill.mdx | 18 + .../l/es/twenty-ui/display/tag.mdx | 54 +- .../l/es/twenty-ui/input/block-editor.mdx | 35 +- .../l/es/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/es/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/es/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/es/twenty-ui/input/image-input.mdx | 34 ++ .../l/es/twenty-ui/input/radio.mdx | 97 ++++ .../l/es/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/es/twenty-ui/input/text.mdx | 137 +++++ .../l/es/twenty-ui/input/toggle.mdx | 36 ++ .../l/es/twenty-ui/introduction.mdx | 30 + .../l/es/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/es/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 69 ++- .../l/es/twenty-ui/navigation/step-bar.mdx | 34 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/es/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/es/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/es/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/es/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/es/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/es/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/es/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/es/user-guide/workflows/overview.mdx | 80 +++ .../backend-development/custom-objects.mdx | 39 ++ .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/server-commands.mdx | 100 ++++ .../backend-development/zapier.mdx | 81 +++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 325 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-development/style-guide.mdx | 290 ++++++++++ .../frontend-development/work-with-figma.mdx | 58 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/it/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/it/developers/extend/extend.mdx | 34 ++ .../l/it/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 292 ++++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/it/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/it/navigation.json | 212 +++++-- .../l/it/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/it/twenty-ui/display/checkmark.mdx | 58 ++ .../l/it/twenty-ui/display/chip.mdx | 138 +++++ .../l/it/twenty-ui/display/icons.mdx | 73 +++ .../l/it/twenty-ui/display/soon-pill.mdx | 18 + .../l/it/twenty-ui/display/tag.mdx | 54 +- .../l/it/twenty-ui/input/block-editor.mdx | 35 +- .../l/it/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/it/twenty-ui/input/checkbox.mdx | 44 ++ .../l/it/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/it/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/it/twenty-ui/input/image-input.mdx | 34 ++ .../l/it/twenty-ui/input/radio.mdx | 97 ++++ .../l/it/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/it/twenty-ui/input/text.mdx | 214 ++++--- .../l/it/twenty-ui/input/toggle.mdx | 36 ++ .../l/it/twenty-ui/introduction.mdx | 30 + .../l/it/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/it/twenty-ui/navigation/links.mdx | 226 ++++---- .../l/it/twenty-ui/navigation/menu-item.mdx | 427 ++++++++++++++ .../l/it/twenty-ui/navigation/step-bar.mdx | 34 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/it/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/it/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/it/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/it/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../it/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/it/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/it/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/profile-settings.mdx | 43 ++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/it/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/it/user-guide/workflows/overview.mdx | 80 +++ .../best-practices-server.mdx | 22 + .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/queue.mdx | 41 ++ .../backend-development/server-commands.mdx | 101 ++++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 325 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-commands.mdx | 90 +++ .../frontend-development/hotkeys.mdx | 178 ++++++ .../frontend-development/style-guide.mdx | 290 ++++++++++ .../frontend-development/work-with-figma.mdx | 59 ++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/ro/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/ro/developers/extend/extend.mdx | 34 ++ .../l/ro/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/ro/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/ro/navigation.json | 212 +++++-- .../l/ro/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/ro/twenty-ui/display/checkmark.mdx | 58 ++ .../l/ro/twenty-ui/display/chip.mdx | 138 +++++ .../l/ro/twenty-ui/display/icons.mdx | 73 +++ .../l/ro/twenty-ui/display/soon-pill.mdx | 18 + .../l/ro/twenty-ui/display/tag.mdx | 38 ++ .../l/ro/twenty-ui/input/block-editor.mdx | 35 +- .../l/ro/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/ro/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/ro/twenty-ui/input/image-input.mdx | 34 ++ .../l/ro/twenty-ui/input/radio.mdx | 97 ++++ .../l/ro/twenty-ui/input/select.mdx | 51 ++ .../twenty-docs/l/ro/twenty-ui/input/text.mdx | 137 +++++ .../l/ro/twenty-ui/input/toggle.mdx | 36 ++ .../l/ro/twenty-ui/introduction.mdx | 30 + .../l/ro/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/ro/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../l/ro/twenty-ui/navigation/step-bar.mdx | 44 +- .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../l/ro/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/ro/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/ro/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/ro/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/ro/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/ro/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/ro/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/ro/user-guide/workflows/overview.mdx | 80 +++ .../best-practices-server.mdx | 22 + .../backend-development/custom-objects.mdx | 39 ++ .../backend-development/feature-flags.mdx | 46 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/queue.mdx | 41 ++ .../backend-development/server-commands.mdx | 101 ++++ .../backend-development/zapier.mdx | 83 +++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 324 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-development/style-guide.mdx | 290 ++++++++++ .../contribute/capabilities/local-setup.mdx | 333 +++++++++++ .../l/ru/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/ru/developers/extend/extend.mdx | 34 ++ .../l/ru/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 292 ++++++++++ .../capabilities/troubleshooting.mdx | 227 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 381 +++++++++++++ .../l/ru/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/ru/navigation.json | 212 +++++-- .../l/ru/twenty-ui/display/checkmark.mdx | 58 ++ .../l/ru/twenty-ui/display/chip.mdx | 138 +++++ .../l/ru/twenty-ui/display/icons.mdx | 73 +++ .../l/ru/twenty-ui/display/soon-pill.mdx | 18 + .../l/ru/twenty-ui/display/tag.mdx | 38 ++ .../l/ru/twenty-ui/input/block-editor.mdx | 35 +- .../l/ru/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/ru/twenty-ui/input/checkbox.mdx | 44 ++ .../l/ru/twenty-ui/input/color-scheme.mdx | 86 ++- .../l/ru/twenty-ui/input/image-input.mdx | 43 +- .../l/ru/twenty-ui/input/radio.mdx | 97 ++++ .../l/ru/twenty-ui/input/select.mdx | 71 ++- .../twenty-docs/l/ru/twenty-ui/input/text.mdx | 137 +++++ .../l/ru/twenty-ui/input/toggle.mdx | 51 +- .../l/ru/twenty-ui/introduction.mdx | 30 + .../l/ru/twenty-ui/navigation/links.mdx | 154 ++++++ .../l/ru/twenty-ui/navigation/menu-item.mdx | 428 ++++++++++++++ .../twenty-ui/navigation/navigation-bar.mdx | 69 ++- .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/ru/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/ru/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/ru/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/ru/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../ru/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/ru/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/ru/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/ru/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 135 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/ru/user-guide/workflows/overview.mdx | 80 +++ .../best-practices-server.mdx | 22 + .../backend-development/custom-objects.mdx | 39 ++ .../folder-architecture-server.mdx | 125 +++++ .../backend-development/server-commands.mdx | 101 ++++ .../capabilities/bug-and-requests.mdx | 78 +++ .../best-practices-front.mdx | 324 +++++++++++ .../folder-architecture-front.mdx | 109 ++++ .../frontend-development/style-guide.mdx | 288 ++++++++++ .../frontend-development/work-with-figma.mdx | 58 ++ .../contribute/capabilities/local-setup.mdx | 331 +++++++++++ .../l/tr/developers/contribute/contribute.mdx | 32 ++ .../developers/extend/capabilities/apis.mdx | 147 +++++ .../developers/extend/capabilities/apps.mdx | 522 ++++++++++++++++++ .../extend/capabilities/webhooks.mdx | 112 ++++ .../l/tr/developers/extend/extend.mdx | 34 ++ .../l/tr/developers/introduction.mdx | 23 + .../capabilities/cloud-providers.mdx | 45 ++ .../self-host/capabilities/docker-compose.mdx | 253 +++++++++ .../self-host/capabilities/setup.mdx | 293 ++++++++++ .../capabilities/troubleshooting.mdx | 226 ++++++++ .../self-host/capabilities/upgrade-guide.mdx | 374 +++++++++++++ .../l/tr/developers/self-host/self-host.mdx | 30 + packages/twenty-docs/l/tr/navigation.json | 210 +++++-- .../l/tr/twenty-ui/display/app-tooltip.mdx | 78 +++ .../l/tr/twenty-ui/display/checkmark.mdx | 58 ++ .../l/tr/twenty-ui/display/chip.mdx | 138 +++++ .../l/tr/twenty-ui/display/icons.mdx | 73 +++ .../l/tr/twenty-ui/display/soon-pill.mdx | 18 + .../l/tr/twenty-ui/display/tag.mdx | 38 ++ .../l/tr/twenty-ui/input/block-editor.mdx | 35 +- .../l/tr/twenty-ui/input/buttons.mdx | 439 +++++++++++++++ .../l/tr/twenty-ui/input/checkbox.mdx | 44 ++ .../l/tr/twenty-ui/input/color-scheme.mdx | 63 +++ .../l/tr/twenty-ui/input/icon-picker.mdx | 52 ++ .../l/tr/twenty-ui/input/image-input.mdx | 34 ++ .../l/tr/twenty-ui/input/radio.mdx | 97 ++++ .../l/tr/twenty-ui/input/select.mdx | 71 ++- .../twenty-docs/l/tr/twenty-ui/input/text.mdx | 137 +++++ .../l/tr/twenty-ui/input/toggle.mdx | 36 ++ .../l/tr/twenty-ui/introduction.mdx | 30 + .../l/tr/twenty-ui/navigation/breadcrumb.mdx | 41 ++ .../l/tr/twenty-ui/navigation/links.mdx | 154 ++++++ .../l/tr/twenty-ui/navigation/menu-item.mdx | 427 ++++++++++++++ .../l/tr/twenty-ui/navigation/step-bar.mdx | 34 ++ .../l/tr/twenty-ui/progress-bar.mdx | 49 ++ .../user-guide/ai/capabilities/ai-agents.mdx | 34 ++ .../user-guide/ai/capabilities/ai-chatbot.mdx | 41 ++ .../permissions-access-control.mdx | 35 ++ .../l/tr/user-guide/ai/how-tos/ai-faq.mdx | 29 + .../l/tr/user-guide/ai/overview.mdx | 62 +++ .../billing/capabilities/pricing-plans.mdx | 79 +++ .../billing/capabilities/workflow-credits.mdx | 49 ++ .../billing/how-tos/billing-faq.mdx | 86 +++ .../l/tr/user-guide/billing/overview.mdx | 45 ++ .../calendar-emails/capabilities/calendar.mdx | 43 ++ .../calendar-emails/capabilities/mailbox.mdx | 85 +++ .../can-i-book-meetings-from-twenty.mdx | 28 + .../how-tos/can-i-send-emails-from-twenty.mdx | 44 ++ ...-i-track-email-activity-on-all-objects.mdx | 35 ++ .../connect-several-mailboxes-per-user.mdx | 42 ++ .../how-tos/i-dont-see-emails-on-records.mdx | 53 ++ .../how-tos/limit-emails-imported.mdx | 52 ++ .../user-guide/calendar-emails/overview.mdx | 132 +++++ .../dashboards/capabilities/dashboards.mdx | 74 +++ .../dashboards/capabilities/widgets.mdx | 131 +++++ .../dashboards/how-tos/dashboards-faq.mdx | 59 ++ .../l/tr/user-guide/dashboards/overview.mdx | 79 +++ .../capabilities/error-handling.mdx | 76 +++ .../capabilities/field-mapping.mdx | 198 +++++++ .../capabilities/file-formats.mdx | 48 ++ .../capabilities/import-relations.mdx | 148 +++++ .../capabilities/uniqueness-constraints.mdx | 72 +++ .../how-tos/export-your-data.mdx | 209 +++++++ .../how-tos/fix-import-errors.mdx | 430 +++++++++++++++ .../how-tos/import-companies-via-csv.mdx | 201 +++++++ .../how-tos/import-contacts-via-csv.mdx | 242 ++++++++ .../how-tos/import-data-via-api.mdx | 176 ++++++ ...port-relations-between-objects-via-csv.mdx | 228 ++++++++ .../how-tos/migrating-from-other-crms.mdx | 293 ++++++++++ .../migrating-from-self-hosted-to-cloud.mdx | 171 ++++++ .../how-tos/prepare-your-csv-files.mdx | 270 +++++++++ .../update-existing-records-via-import.mdx | 198 +++++++ .../tr/user-guide/data-migration/overview.mdx | 89 +++ .../data-model/capabilities/fields.mdx | 122 ++++ .../data-model/capabilities/objects.mdx | 91 +++ .../capabilities/relation-fields.mdx | 92 +++ .../how-tos/create-custom-fields.mdx | 72 +++ .../how-tos/create-custom-objects.mdx | 51 ++ .../how-tos/create-relation-fields.mdx | 60 ++ .../how-tos/customize-your-data-model.mdx | 22 + .../data-model/how-tos/data-model-faq.mdx | 155 ++++++ .../l/tr/user-guide/data-model/overview.mdx | 180 ++++++ .../getting-started/capabilities/glossary.mdx | 108 ++++ .../capabilities/implementation-services.mdx | 16 + .../capabilities/what-is-twenty.mdx | 42 ++ .../how-tos/configure-your-workspace.mdx | 77 +++ .../how-tos/create-workspace.mdx | 48 ++ .../how-tos/navigate-around-twenty.mdx | 83 +++ .../l/tr/user-guide/introduction.mdx | 63 +++ .../capabilities/permissions.mdx | 198 +++++++ .../capabilities/sso-configuration.mdx | 125 +++++ .../how-tos/permissions-faq.mdx | 126 +++++ .../permissions-access/overview.mdx | 40 ++ .../capabilities/domains-settings.mdx | 47 ++ .../capabilities/member-management.mdx | 87 +++ .../capabilities/releases-settings.mdx | 31 ++ .../capabilities/workspace-settings.mdx | 30 + .../settings/how-tos/settings-faq.mdx | 171 ++++++ .../l/tr/user-guide/settings/overview.mdx | 67 +++ .../capabilities/calendar-view.mdx | 46 ++ .../capabilities/fields-and-columns.mdx | 52 ++ .../capabilities/filters-and-sorting.mdx | 78 +++ .../capabilities/kanban-views.mdx | 99 ++++ .../capabilities/table-views.mdx | 64 +++ .../capabilities/view-settings.mdx | 74 +++ .../create-a-calendar-view-for-tasks-due.mdx | 61 ++ .../create-a-kanban-view-for-projects.mdx | 80 +++ .../create-a-table-view-with-grouping.mdx | 51 ++ .../how-tos/restrict-access-to-your-view.mdx | 32 ++ .../how-tos/set-up-a-sales-pipeline.mdx | 120 ++++ .../show-expected-amount-in-pipeline.mdx | 149 +++++ .../how-tos/track-time-in-stage.mdx | 231 ++++++++ .../user-guide/views-pipelines/overview.mdx | 137 +++++ .../send-emails-from-workflows.mdx | 149 +++++ .../use-branches-in-workflows.mdx | 90 +++ .../workflows/capabilities/use-iterator.mdx | 180 ++++++ .../capabilities/workflow-actions.mdx | 311 +++++++++++ .../capabilities/workflow-branches.mdx | 66 +++ .../capabilities/workflow-credits.mdx | 76 +++ .../workflows/capabilities/workflow-runs.mdx | 92 +++ .../capabilities/workflow-triggers.mdx | 136 +++++ .../capabilities/workflow-versions.mdx | 85 +++ .../handle-arrays-in-code-actions.mdx | 82 +++ .../bring-product-data-in-twenty.mdx | 182 ++++++ .../bring-typeform-submissions-in-twenty.mdx | 130 +++++ .../generate-quote-or-invoice-from-twenty.mdx | 143 +++++ .../set-up-a-webhook-trigger.mdx | 171 ++++++ .../closed-won-automations.mdx | 179 ++++++ .../detect-stale-opportunities.mdx | 136 +++++ .../display-number-of-emails-received.mdx | 74 +++ .../display-related-record-data.mdx | 170 ++++++ .../crm-automations/formula-fields.mdx | 202 +++++++ .../send-email-alerts-with-tasks-due.mdx | 106 ++++ .../need-more-help/professional-services.mdx | 29 + .../workflow-troubleshooting.mdx | 170 ++++++ .../how-tos/need-more-help/workflows-faq.mdx | 254 +++++++++ .../l/tr/user-guide/workflows/overview.mdx | 80 +++ .../twenty-utils/fix-crowdin-translations.ts | 2 +- packages/twenty-utils/fix-docs-tags.ts | 273 +++++++++ 1164 files changed, 134359 insertions(+), 1590 deletions(-) create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/hotkeys.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/storybook.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/ar/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/ar/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/ar/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/ar/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/ar/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/ar/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/ar/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/navigation.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/navigation/step-bar.mdx create mode 100644 packages/twenty-docs/l/ar/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/ar/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/frontend-commands.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/storybook.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/cs/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/cs/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/cs/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/cs/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/cs/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/cs/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/cs/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/cs/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/cs/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/cs/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/cs/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/block-editor.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/navigation/step-bar.mdx create mode 100644 packages/twenty-docs/l/cs/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/cs/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/de/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/de/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/de/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/de/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/de/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/de/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/de/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/block-editor.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/navigation/links.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/de/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/de/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/frontend-commands.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/es/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/es/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/es/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/es/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/es/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/es/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/es/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/es/twenty-ui/navigation/step-bar.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/es/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/it/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/it/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/it/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/it/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/it/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/it/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/it/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/it/twenty-ui/navigation/step-bar.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/capabilities/profile-settings.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/it/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/frontend-commands.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/hotkeys.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/ro/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/ro/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/ro/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/ro/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/ro/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/ro/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/ro/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/select.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/ro/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/ro/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/feature-flags.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/queue.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/backend-development/zapier.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/ru/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/ru/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/ru/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/ru/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/ru/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/ru/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/ru/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/navigation/links.mdx create mode 100644 packages/twenty-docs/l/ru/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/ru/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/best-practices-server.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/custom-objects.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/folder-architecture-server.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/backend-development/server-commands.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/bug-and-requests.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/best-practices-front.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/folder-architecture-front.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/style-guide.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/frontend-development/work-with-figma.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/capabilities/local-setup.mdx create mode 100644 packages/twenty-docs/l/tr/developers/contribute/contribute.mdx create mode 100644 packages/twenty-docs/l/tr/developers/extend/capabilities/apis.mdx create mode 100644 packages/twenty-docs/l/tr/developers/extend/capabilities/apps.mdx create mode 100644 packages/twenty-docs/l/tr/developers/extend/capabilities/webhooks.mdx create mode 100644 packages/twenty-docs/l/tr/developers/extend/extend.mdx create mode 100644 packages/twenty-docs/l/tr/developers/introduction.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/capabilities/cloud-providers.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/capabilities/docker-compose.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/capabilities/setup.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/capabilities/troubleshooting.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/capabilities/upgrade-guide.mdx create mode 100644 packages/twenty-docs/l/tr/developers/self-host/self-host.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/app-tooltip.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/checkmark.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/chip.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/icons.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/soon-pill.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/display/tag.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/buttons.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/checkbox.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/color-scheme.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/icon-picker.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/image-input.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/radio.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/text.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/input/toggle.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/introduction.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/navigation/breadcrumb.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/navigation/links.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/navigation/menu-item.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/navigation/step-bar.mdx create mode 100644 packages/twenty-docs/l/tr/twenty-ui/progress-bar.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-agents.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/ai/capabilities/ai-chatbot.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/ai/capabilities/permissions-access-control.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/ai/how-tos/ai-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/ai/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/billing/capabilities/pricing-plans.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/billing/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/billing/how-tos/billing-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/billing/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/calendar.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/capabilities/mailbox.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-book-meetings-from-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-send-emails-from-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/can-i-track-email-activity-on-all-objects.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/connect-several-mailboxes-per-user.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/how-tos/limit-emails-imported.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/calendar-emails/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/dashboards.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/dashboards/capabilities/widgets.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/dashboards/how-tos/dashboards-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/dashboards/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/error-handling.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/field-mapping.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/file-formats.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/import-relations.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/capabilities/uniqueness-constraints.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/export-your-data.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/fix-import-errors.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-companies-via-csv.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-contacts-via-csv.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-data-via-api.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-other-crms.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/migrating-from-self-hosted-to-cloud.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/prepare-your-csv-files.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/how-tos/update-existing-records-via-import.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-migration/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/capabilities/fields.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/capabilities/objects.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/capabilities/relation-fields.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-fields.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-custom-objects.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/how-tos/create-relation-fields.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/how-tos/customize-your-data-model.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/how-tos/data-model-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/data-model/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/glossary.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/implementation-services.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/capabilities/what-is-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/configure-your-workspace.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/create-workspace.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/getting-started/how-tos/navigate-around-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/introduction.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/permissions.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/permissions-access/capabilities/sso-configuration.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/permissions-access/how-tos/permissions-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/permissions-access/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/capabilities/domains-settings.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/capabilities/member-management.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/capabilities/releases-settings.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/capabilities/workspace-settings.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/how-tos/settings-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/settings/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/calendar-view.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/fields-and-columns.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/filters-and-sorting.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/kanban-views.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/table-views.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/capabilities/view-settings.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-calendar-view-for-tasks-due.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-kanban-view-for-projects.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/create-a-table-view-with-grouping.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/restrict-access-to-your-view.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/show-expected-amount-in-pipeline.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/how-tos/track-time-in-stage.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/views-pipelines/overview.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/send-emails-from-workflows.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-branches-in-workflows.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/use-iterator.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-actions.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-branches.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-credits.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-runs.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-triggers.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/capabilities/workflow-versions.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-product-data-in-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/bring-typeform-submissions-in-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/closed-won-automations.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/detect-stale-opportunities.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-number-of-emails-received.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/display-related-record-data.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/formula-fields.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/crm-automations/send-email-alerts-with-tasks-due.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/professional-services.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/how-tos/need-more-help/workflows-faq.mdx create mode 100644 packages/twenty-docs/l/tr/user-guide/workflows/overview.mdx create mode 100644 packages/twenty-utils/fix-docs-tags.ts 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 مع القالب الذي يُحافظ عليه المجتمع أدناه. + +[![نشر على Railway](https://railway.com/button.svg)](https://railway.com/deploy/nAL3hA) + +### Twenty على Sealos + +انشر Twenty على Sealos باستخدام القالب الذي تتم صيانته من قِبل المجتمع أدناه. + +[![نشر على Sealos](https://sealos.io/Deploy-on-Sealos.svg)](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 الحد من السرعة +* **والمزيد من الأمور...** + +![متغيرات تكوين لوحة الإدارة](/images/user-guide/setup/admin-panel-config-variables.png) + + + كل متغير موثق بوصف في لوحة الإدارة الخاصة بك في **الإعدادات → لوحة الإدارة → متغيرات التكوين**. + بعض إعدادات البنية التحتية مثل اتصالات قاعدة البيانات (`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 --- - Header + رأس الصفحة يستخدم محرر نصوص غني يعتمد على الكتل من [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 ( +