diff --git a/.deco/blocks/%5Ben%5D%20%5Bdocs%5D%20Head.json b/.deco/blocks/%5Ben%5D%20%5Bdocs%5D%20Head.json
index 300b52f2..133936b7 100644
--- a/.deco/blocks/%5Ben%5D%20%5Bdocs%5D%20Head.json
+++ b/.deco/blocks/%5Ben%5D%20%5Bdocs%5D%20Head.json
@@ -1 +1 @@
-{"url":"https://www.deco.cx/docs/en/overview","title":"deco.cx - Own your frontend. Own your future. ","imageUrl":"https://www.deco.cx/decocx-meta-en.png","styleUrls":[],"themeColor":"#0A2121","description":"The digital experience platform that combines performance and personalization for enterprise ecommerce.","__resolveType":"site/sections/Head.tsx"}
\ No newline at end of file
+{"url":"https://docs.deco.cx/en/overview","title":"deco.cx - Own your frontend. Own your future. ","imageUrl":"https://www.deco.cx/decocx-meta-en.png","styleUrls":[],"themeColor":"#0A2121","description":"The digital experience platform that combines performance and personalization for enterprise ecommerce.","__resolveType":"site/sections/Head.tsx"}
\ No newline at end of file
diff --git a/.deco/blocks/%5Bpt%5D%20%5Bdocs%5D%20Head.json b/.deco/blocks/%5Bpt%5D%20%5Bdocs%5D%20Head.json
index 68915cb8..724ca67e 100644
--- a/.deco/blocks/%5Bpt%5D%20%5Bdocs%5D%20Head.json
+++ b/.deco/blocks/%5Bpt%5D%20%5Bdocs%5D%20Head.json
@@ -1 +1 @@
-{"url":"https://deco.cx/docs/pt/overview","title":"deco.cx - Acelere a construção de lojas super rápidas","imageUrl":"/decocx-meta-pt.png","styleUrls":[],"themeColor":"#0A2121","description":"Aumente sua produtividade e e desenvolva lojas virtuais em tempo recorde.","__resolveType":"site/sections/Head.tsx"}
\ No newline at end of file
+{"url":"https://docs.deco.cx/pt/overview","title":"deco.cx - Acelere a construção de lojas super rápidas","imageUrl":"/decocx-meta-pt.png","styleUrls":[],"themeColor":"#0A2121","description":"Aumente sua produtividade e e desenvolva lojas virtuais em tempo recorde.","__resolveType":"site/sections/Head.tsx"}
\ No newline at end of file
diff --git a/.deco/blocks/Current%20integrations.json b/.deco/blocks/Current%20integrations.json
index 65938824..84cdf28e 100644
--- a/.deco/blocks/Current%20integrations.json
+++ b/.deco/blocks/Current%20integrations.json
@@ -1 +1 @@
-{"images":[{"href":"https://www.deco.cx/docs/pt/composable-apis/vtex","label":"VTEX","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/989362e9-0d0a-455d-9b3a-7388599374d7","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/aa458b45-0856-40d1-9bc7-d7aa298f86c1"},{"href":"https://www.deco.cx/docs/pt/composable-apis/shopify","label":"Shopify","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/99303fb5-512e-4da6-b73d-39d016eb61c8","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/ba08eb76-0bc4-49fd-89f6-ed07f12c1825"},{"href":"https://www.deco.cx/pt","label":"Vnda","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/75ce56a7-c1b1-40fa-b59a-b523c6fad9aa","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9cd38f5b-6391-449d-907a-e12c5141b9f1"},{"href":"https://wake.tech/","label":"Wake","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a7992830-475a-499f-bf0c-fc1927caf69b","altText":"Wake","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/01e58de6-9f84-4cca-989c-50b68f48914c"},{"href":"https://www.nuvemshop.com.br/","label":"nuvemshop","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/233e9345-5a45-41fd-8b33-9193fbe5c808","altText":"nuvemshop","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/f0e53884-173b-4ba8-85c2-d7ed87fb7d37"},{"href":"https://www.linx.com.br/linx-commerce/","label":"Linx Commerce","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d6493cae-4c05-431f-94fa-7f84f2f9cc32","altText":"Linx Commerce","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/2f141d28-5981-4f6a-ae35-81a5b898852f"},{"href":"https://www.deco.cx/pt","label":"LINX Impulse","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8a944437-010a-4f8f-8e5e-ae31294abc04","altText":"linx impulse","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7e8c1392-f9ea-4fff-b828-6afc430d531d"},{"href":"https://www.opinioes-verificadas.com/pt/","label":"opinioes verificadas","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9832e325-2238-45a6-9761-8c67107225ab","altText":"opinioes verificadas","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/6f2893be-ffe8-4091-852f-14063eea85d1"},{"href":"algolia.com/","label":"Algolia","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/1524e469-2cb7-4102-85fd-aeda3061026e","altText":"algolia","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/956f9526-b191-40a1-8c0d-c39aa1cbfa2e"},{"href":"https://typesense.org/","label":"Typesense","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8d67aaf4-83f4-4c6b-b27e-fedb43fd6b2f","altText":"typsense","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/4c5af3db-3d44-4c8a-8bf1-30f687c3092e"},{"href":"https://www.powerreviews.com/","label":"Power Reviews","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0b21cba8-89ea-4f93-bc82-55dec8e709e5","altText":"Power Reviews","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5fa1d823-eb19-44d7-ab16-89ea3db39efd"},{"href":"https://buttercms.com/","label":"ButterCMS","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/75444c64-44ac-466c-a378-3f6250c23eeb","altText":"ButterCMS","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/e4e7c1ca-d803-48a5-b40e-d0896c60cd75"},{"href":"https://mailchimp.com/","label":"mailchimp","altText":"mailchimp","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/405de431-ba77-4f01-9069-e8f24ba18423","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5fc0a86c-7f7d-468e-b315-b7249144c8fb"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fd392d3-9f56-4baa-a7e0-b26e5b99caf1","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/c1f186cd-7337-49ab-809f-b3bfd63ac11b","altText":"konfidecy","href":"https://www.konfidency.com.br/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/aa86d34e-87ec-4523-b7e5-c50c972ea649","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5a6a4c02-0d0a-43b4-9228-bb8444ea7ffd","altText":"stripe","href":"https://stripe.com/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/ff3eaae8-d50b-410c-b6e3-a11a8d533fa8","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/1dba1d3b-664e-4096-8390-05a280ae37b7","altText":"wordpress","href":"https://wordpress.org/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5ca8110e-de0f-479f-9cda-51acd6dd3699","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/cecac1a8-df42-4633-800e-834e928257eb","altText":"Google Analytics","href":"https://marketingplatform.google.com/about/analytics/"}],"__resolveType":"site/sections/Hub/Integrations.tsx"}
\ No newline at end of file
+{"images":[{"href":"https://docs.deco.cx/pt/composable-apis/vtex","label":"VTEX","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/989362e9-0d0a-455d-9b3a-7388599374d7","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/aa458b45-0856-40d1-9bc7-d7aa298f86c1"},{"href":"https://docs.deco.cx/pt/composable-apis/shopify","label":"Shopify","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/99303fb5-512e-4da6-b73d-39d016eb61c8","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/ba08eb76-0bc4-49fd-89f6-ed07f12c1825"},{"href":"https://www.deco.cx/pt","label":"Vnda","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/75ce56a7-c1b1-40fa-b59a-b523c6fad9aa","altText":"vtex logo","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9cd38f5b-6391-449d-907a-e12c5141b9f1"},{"href":"https://wake.tech/","label":"Wake","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a7992830-475a-499f-bf0c-fc1927caf69b","altText":"Wake","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/01e58de6-9f84-4cca-989c-50b68f48914c"},{"href":"https://www.nuvemshop.com.br/","label":"nuvemshop","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/233e9345-5a45-41fd-8b33-9193fbe5c808","altText":"nuvemshop","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/f0e53884-173b-4ba8-85c2-d7ed87fb7d37"},{"href":"https://www.linx.com.br/linx-commerce/","label":"Linx Commerce","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d6493cae-4c05-431f-94fa-7f84f2f9cc32","altText":"Linx Commerce","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/2f141d28-5981-4f6a-ae35-81a5b898852f"},{"href":"https://www.deco.cx/pt","label":"LINX Impulse","active":false,"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8a944437-010a-4f8f-8e5e-ae31294abc04","altText":"linx impulse","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7e8c1392-f9ea-4fff-b828-6afc430d531d"},{"href":"https://www.opinioes-verificadas.com/pt/","label":"opinioes verificadas","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9832e325-2238-45a6-9761-8c67107225ab","altText":"opinioes verificadas","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/6f2893be-ffe8-4091-852f-14063eea85d1"},{"href":"algolia.com/","label":"Algolia","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/1524e469-2cb7-4102-85fd-aeda3061026e","altText":"algolia","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/956f9526-b191-40a1-8c0d-c39aa1cbfa2e"},{"href":"https://typesense.org/","label":"Typesense","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8d67aaf4-83f4-4c6b-b27e-fedb43fd6b2f","altText":"typsense","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/4c5af3db-3d44-4c8a-8bf1-30f687c3092e"},{"href":"https://www.powerreviews.com/","label":"Power Reviews","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0b21cba8-89ea-4f93-bc82-55dec8e709e5","altText":"Power Reviews","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5fa1d823-eb19-44d7-ab16-89ea3db39efd"},{"href":"https://buttercms.com/","label":"ButterCMS","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/75444c64-44ac-466c-a378-3f6250c23eeb","altText":"ButterCMS","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/e4e7c1ca-d803-48a5-b40e-d0896c60cd75"},{"href":"https://mailchimp.com/","label":"mailchimp","altText":"mailchimp","mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/405de431-ba77-4f01-9069-e8f24ba18423","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5fc0a86c-7f7d-468e-b315-b7249144c8fb"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fd392d3-9f56-4baa-a7e0-b26e5b99caf1","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/c1f186cd-7337-49ab-809f-b3bfd63ac11b","altText":"konfidecy","href":"https://www.konfidency.com.br/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/aa86d34e-87ec-4523-b7e5-c50c972ea649","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5a6a4c02-0d0a-43b4-9228-bb8444ea7ffd","altText":"stripe","href":"https://stripe.com/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/ff3eaae8-d50b-410c-b6e3-a11a8d533fa8","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/1dba1d3b-664e-4096-8390-05a280ae37b7","altText":"wordpress","href":"https://wordpress.org/"},{"mobile":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5ca8110e-de0f-479f-9cda-51acd6dd3699","desktop":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/cecac1a8-df42-4633-800e-834e928257eb","altText":"Google Analytics","href":"https://marketingplatform.google.com/about/analytics/"}],"__resolveType":"site/sections/Hub/Integrations.tsx"}
\ No newline at end of file
diff --git a/.deco/blocks/blogposts.json b/.deco/blocks/blogposts.json
index 7b723d80..f629e9e8 100644
--- a/.deco/blocks/blogposts.json
+++ b/.deco/blocks/blogposts.json
@@ -80,7 +80,7 @@
"en": {
"descr": "Simplifying event handling with inline scripts",
"title": "Introducing `useScript`",
- "content": "At deco.cx, we are always making web development more efficient and effective for developers. Today, we are excited to introduce a new utility function: `useScript`. This function is designed to streamline the process of handling events on HTML elements by leveraging the powerful `hx-on:` handlers from HTMX.\n\n### What is `useScript`?\n\n`useScript` is a utility function that takes a JavaScript function and its arguments, and returns a stringified, minified version of the function. This allows developers to inline scripts directly into their HTML with minimal payload, which is especially useful for event handling.\n\n### Why is `useScript` incredibly useful?\n\nWith HTMX, developers can create dynamic, server-rendered HTML pages with ease. However, when it comes to handling client-side events, there’s often a need to include small pieces of JavaScript. This is where `useScript` shines. By using `useScript`, you can add JavaScript only where necessary, avoiding the overhead of a full client-side framework like React.\n\n### Example: Inline script with `hx-on:click`\n\nLet's look at a simple example where `useScript` is used to handle a click event:\n\n```tsx\nimport { useScript } from \"deco/hooks/useScript.ts\";\n\nconst onClick = () ={\n event!.currentTarget.innerText = \"Clicked!\";\n};\n\nfunction ExampleButton() {\n return (\n \n Click me\n \n );\n}\n\nexport default ExampleButton;\n```\n\nIn this example, `useScript` takes the `onClick` function and inlines it into the `hx-on:click` attribute, making the button interactive without loading a large JavaScript framework.\n\n### Bridging the gap between server and client\n\n`useScript` offers a unique balance between server-rendered and client-side interactions. By combining the strengths of HTMX for processing large HTML chunks on the server with the ability to add small, targeted JavaScript interactions, `useScript` delivers the best of both worlds. This approach allows developers to build performant, interactive web applications without the need for complex toolsets like React.\n\n### Notes and Limitations\n\nWhile `useScript` is a powerful tool, there are a few things to keep in mind:\n\n1. **No Build Tool**: Since we don’t use a build tool, developers must ensure that their JavaScript functions are compatible with their target browsers. This means keeping your code in sync with your [browserslist](https://browsersl.ist/) target.\n2. **Scope and Dependencies**: The function you pass to `useScript` should not rely on external variables or closures that won’t be available when the script is executed inline. Make sure the function is self-contained and does not depend on external state.\n3. **Attribute Length**: When using `hx-on:` handlers, ensure the minified function does not exceed any attribute length limits imposed by browsers or HTML specifications.\n\n### Conclusion\n\n`useScript` is a valuable addition to our toolkit, enabling developers to add small, targeted JavaScript interactions to their server-rendered HTML. By leveraging the power of HTMX for large chunks of HTML and using `useScript` for small event handlers, you can create efficient, interactive web applications without the overhead of a full client-side framework. Try out `useScript` today and experience the best of both worlds in your web development projects.\n\nFor more details visit the [useScript API reference](https://deco.cx/docs/en/api-reference/use-script).\n\nHappy coding!"
+ "content": "At deco.cx, we are always making web development more efficient and effective for developers. Today, we are excited to introduce a new utility function: `useScript`. This function is designed to streamline the process of handling events on HTML elements by leveraging the powerful `hx-on:` handlers from HTMX.\n\n### What is `useScript`?\n\n`useScript` is a utility function that takes a JavaScript function and its arguments, and returns a stringified, minified version of the function. This allows developers to inline scripts directly into their HTML with minimal payload, which is especially useful for event handling.\n\n### Why is `useScript` incredibly useful?\n\nWith HTMX, developers can create dynamic, server-rendered HTML pages with ease. However, when it comes to handling client-side events, there’s often a need to include small pieces of JavaScript. This is where `useScript` shines. By using `useScript`, you can add JavaScript only where necessary, avoiding the overhead of a full client-side framework like React.\n\n### Example: Inline script with `hx-on:click`\n\nLet's look at a simple example where `useScript` is used to handle a click event:\n\n```tsx\nimport { useScript } from \"deco/hooks/useScript.ts\";\n\nconst onClick = () ={\n event!.currentTarget.innerText = \"Clicked!\";\n};\n\nfunction ExampleButton() {\n return (\n \n Click me\n \n );\n}\n\nexport default ExampleButton;\n```\n\nIn this example, `useScript` takes the `onClick` function and inlines it into the `hx-on:click` attribute, making the button interactive without loading a large JavaScript framework.\n\n### Bridging the gap between server and client\n\n`useScript` offers a unique balance between server-rendered and client-side interactions. By combining the strengths of HTMX for processing large HTML chunks on the server with the ability to add small, targeted JavaScript interactions, `useScript` delivers the best of both worlds. This approach allows developers to build performant, interactive web applications without the need for complex toolsets like React.\n\n### Notes and Limitations\n\nWhile `useScript` is a powerful tool, there are a few things to keep in mind:\n\n1. **No Build Tool**: Since we don’t use a build tool, developers must ensure that their JavaScript functions are compatible with their target browsers. This means keeping your code in sync with your [browserslist](https://browsersl.ist/) target.\n2. **Scope and Dependencies**: The function you pass to `useScript` should not rely on external variables or closures that won’t be available when the script is executed inline. Make sure the function is self-contained and does not depend on external state.\n3. **Attribute Length**: When using `hx-on:` handlers, ensure the minified function does not exceed any attribute length limits imposed by browsers or HTML specifications.\n\n### Conclusion\n\n`useScript` is a valuable addition to our toolkit, enabling developers to add small, targeted JavaScript interactions to their server-rendered HTML. By leveraging the power of HTMX for large chunks of HTML and using `useScript` for small event handlers, you can create efficient, interactive web applications without the overhead of a full client-side framework. Try out `useScript` today and experience the best of both worlds in your web development projects.\n\nFor more details visit the [useScript API reference](https://docs.deco.cx/en/api-reference/use-script).\n\nHappy coding!"
}
},
"date": "06/21/2024",
@@ -95,7 +95,7 @@
"en": {
"descr": "Unleash the power of native web APIs",
"title": "HTMX first class support on deco.cx",
- "content": "We are thrilled to announce a new HTMX App on deco hub. HTMX has been gaining popularity for its ability to create dynamic web applications without relying heavily on JavaScript. By leveraging HTML attributes, HTMX simplifies the development process, making it easier to build interactive user interfaces.\n\n#### Why support HTMX now?\n\nAt deco.cx, we intend to support all major frameworks, including Angular, Next.JS, SvelteKit, and more. However, we started with HTMX because we see a significant potential in simplifying both the development and production of simple web pages. HTMX shines in scenarios where developers want to avoid the complexities of build steps, hot module replacement (HMR), and other tooling. With HTMX, what you write in HTML is exactly what you see in both development and production environments.\n\nBy combining HTMX with the strengths of HTML5 and CSS3, developers can deliver good user experiences and top-class performance without the overhead of downloading, parsing, and compiling heavy JavaScript libraries. Additionally, using HTMX can result in more robust web applications. Testing JavaScript across all devices and browsers (Safari, Samsung browser, etc.) is time-consuming and expensive. Having your UI rendered on the server saves you countless hours of debugging across different environments, ultimately reducing Sentry bills.\n\n#### How deco.cx Integrates with HTMX\n\nIf HTMX offers so many advantages, why isn't it the standard for web application development? The primary challenge with HTMX lies in the need to create routes for each UI state, which can complicate the development process. Each interactive element or dynamic update often requires a corresponding server route, leading to a proliferation of endpoints and increased maintenance complexity.\n\nMoreover, the web is mostly comprised of centralized servers, and computing new UI states on a centralized server can penalize peripheral users due to latency issues. This is not the case with deco.cx, where our edge-first infrastructure distributes the code globally. This ensures that computing new UI states is much cheaper and faster, thanks to our low latency and globally distributed infrastructure.\n\nFor us at deco.cx, the most difficult part of using HTMX is having to create a route for each UI state. To address this challenge, we developed a new hook called `useSection`. This hook automatically creates routes for rendering your UI states without requiring developers to handle routing manually.\n\nTo demonstrate the power and simplicity of the `useSection` hook, let's explore an example by building a counter component.\n\n#### Building a Counter with `useSection` on deco.cx\n\nIn this guide, we'll build a simple counter component using HTMX and the `useSection` hook on deco.cx.\n\n\n\n\n#### Preact Version\n\nFirst, let's look at the usual Preact code for this component using the `useState` hook:\n\n```jsx\nimport { useState } from \"preact/hooks\";\n\nexport default function Section() {\n const [count, setCount] = useState(0);\n\n return (\n
\n setCount(count - 1)}\n >\n - \n \n {count} \n setCount(count + 1)}\n >\n + \n \n
\n );\n}\n```\n\n#### Refactoring to HTMX\n\nTo refactor this component into HTMX, we follow three simple rules:\n\n1. Client-side hooks like `useState` and `useEffect` are removed.\n2. All variables started by a `useState` hook are placed on the component's props.\n3. Client-side event handlers like `onClick` and `onChange` are removed\n\nBy applying rules 1 and 2 to the Section component, we move the `count` variable to the component's props, leaving us with:\n\n```jsx\nexport default function Section({ count }: { count: number }) {\n return (\n \n setCount(count - 1)}\n >\n - \n \n {count} \n setCount(count + 1)}\n >\n + \n \n
\n );\n}\n```\n\nNotice we don't need the import of `useState` anymore. To apply rule number 3, we need to remove the onClick handler, however, how can we keep the interactivity? That’s where the `useSection` hook is handy.\n\n#### Integrating `useSection`\n\nTo implement the `onClick` functionality, start by importing `useSection` from `deco/hooks/useSection.ts`. This hook lets you create a link for the current section instance and override any props this section receives. By refactoring this component, we get:\n\n```jsx\nimport { useSection } from \"deco/hooks/useSection.ts\";\n\nexport default function Section({ count = 0 }:{ count: number }) {\n return (\n \n \n - \n \n {count} \n \n + \n \n
\n );\n}\n```\n\n#### Explanation\n\nLet’s dissect each part starting with the `hx-get` attribute. `useSection({ props: { count: count - 1 }})` creates a link for the current section instance, but overrides the `count` prop. This means that if we had other props, the new `count` value would be merged with the other prop values, and a link for this section would be returned. This is beneficial as the developer can now override some props inserted by the deco.cx CMS.\n\nThe `hx-target` and `hx-swap` combo is useful when you want to replace the whole section at deco.cx, as sections are rendered under a `` element.\n\n\n\n\n#### Handling Slow Connections\n\nFor 3G connections, where performing a request to increase/decrease the counter can be slow, we need to add a loading state. HTMX provides the `htmx-request` indicator class for this purpose. When HTMX is performing a request, the `htmx-request` class is added to the DOM. With TailwindCSS v3, we can create specific rules activated once this class is present. Here's the updated button:\n\n```jsx\n\n - \n \n \n```\n\nThe magic is in the `[.htmx-request_&]:` selector. This tells Tailwind to create a selector that is activated whenever the `htmx-request` class is present on a parent element. When performing a request, the CSS will hide the `-` element and display a spinner. This approach leverages native Web APIs to enhance user experience even on slow connections. Here's the final result: \n\n\n\n#### Warnings\n\nWhen using the `useSection` hook, keep in mind that the props passed to the hook go into the final URL. Be cautious of URL size limits and try to pass small payloads like booleans and IDs.\n\n#### Conclusion\n\nWe have a `useSection` API reference available for those who want to dive deeper. Additionally, we provide a recipe for migrating from Preact to HTMX and vice versa, detailing common design patterns and how to achieve them with HTML5 and CSS3. With these tools, developers can leverage the power of HTMX and the flexibility of deco.cx to build robust, high-performance web applications.\n\nFor more information, visit our docs: [https://deco.cx/docs/en/api-reference/use-section](https://deco.cx/docs/en/api-reference/use-section). "
+ "content": "We are thrilled to announce a new HTMX App on deco hub. HTMX has been gaining popularity for its ability to create dynamic web applications without relying heavily on JavaScript. By leveraging HTML attributes, HTMX simplifies the development process, making it easier to build interactive user interfaces.\n\n#### Why support HTMX now?\n\nAt deco.cx, we intend to support all major frameworks, including Angular, Next.JS, SvelteKit, and more. However, we started with HTMX because we see a significant potential in simplifying both the development and production of simple web pages. HTMX shines in scenarios where developers want to avoid the complexities of build steps, hot module replacement (HMR), and other tooling. With HTMX, what you write in HTML is exactly what you see in both development and production environments.\n\nBy combining HTMX with the strengths of HTML5 and CSS3, developers can deliver good user experiences and top-class performance without the overhead of downloading, parsing, and compiling heavy JavaScript libraries. Additionally, using HTMX can result in more robust web applications. Testing JavaScript across all devices and browsers (Safari, Samsung browser, etc.) is time-consuming and expensive. Having your UI rendered on the server saves you countless hours of debugging across different environments, ultimately reducing Sentry bills.\n\n#### How deco.cx Integrates with HTMX\n\nIf HTMX offers so many advantages, why isn't it the standard for web application development? The primary challenge with HTMX lies in the need to create routes for each UI state, which can complicate the development process. Each interactive element or dynamic update often requires a corresponding server route, leading to a proliferation of endpoints and increased maintenance complexity.\n\nMoreover, the web is mostly comprised of centralized servers, and computing new UI states on a centralized server can penalize peripheral users due to latency issues. This is not the case with deco.cx, where our edge-first infrastructure distributes the code globally. This ensures that computing new UI states is much cheaper and faster, thanks to our low latency and globally distributed infrastructure.\n\nFor us at deco.cx, the most difficult part of using HTMX is having to create a route for each UI state. To address this challenge, we developed a new hook called `useSection`. This hook automatically creates routes for rendering your UI states without requiring developers to handle routing manually.\n\nTo demonstrate the power and simplicity of the `useSection` hook, let's explore an example by building a counter component.\n\n#### Building a Counter with `useSection` on deco.cx\n\nIn this guide, we'll build a simple counter component using HTMX and the `useSection` hook on deco.cx.\n\n\n\n\n#### Preact Version\n\nFirst, let's look at the usual Preact code for this component using the `useState` hook:\n\n```jsx\nimport { useState } from \"preact/hooks\";\n\nexport default function Section() {\n const [count, setCount] = useState(0);\n\n return (\n \n setCount(count - 1)}\n >\n - \n \n {count} \n setCount(count + 1)}\n >\n + \n \n
\n );\n}\n```\n\n#### Refactoring to HTMX\n\nTo refactor this component into HTMX, we follow three simple rules:\n\n1. Client-side hooks like `useState` and `useEffect` are removed.\n2. All variables started by a `useState` hook are placed on the component's props.\n3. Client-side event handlers like `onClick` and `onChange` are removed\n\nBy applying rules 1 and 2 to the Section component, we move the `count` variable to the component's props, leaving us with:\n\n```jsx\nexport default function Section({ count }: { count: number }) {\n return (\n \n setCount(count - 1)}\n >\n - \n \n {count} \n setCount(count + 1)}\n >\n + \n \n
\n );\n}\n```\n\nNotice we don't need the import of `useState` anymore. To apply rule number 3, we need to remove the onClick handler, however, how can we keep the interactivity? That’s where the `useSection` hook is handy.\n\n#### Integrating `useSection`\n\nTo implement the `onClick` functionality, start by importing `useSection` from `deco/hooks/useSection.ts`. This hook lets you create a link for the current section instance and override any props this section receives. By refactoring this component, we get:\n\n```jsx\nimport { useSection } from \"deco/hooks/useSection.ts\";\n\nexport default function Section({ count = 0 }:{ count: number }) {\n return (\n \n \n - \n \n {count} \n \n + \n \n
\n );\n}\n```\n\n#### Explanation\n\nLet’s dissect each part starting with the `hx-get` attribute. `useSection({ props: { count: count - 1 }})` creates a link for the current section instance, but overrides the `count` prop. This means that if we had other props, the new `count` value would be merged with the other prop values, and a link for this section would be returned. This is beneficial as the developer can now override some props inserted by the deco.cx CMS.\n\nThe `hx-target` and `hx-swap` combo is useful when you want to replace the whole section at deco.cx, as sections are rendered under a `` element.\n\n\n\n\n#### Handling Slow Connections\n\nFor 3G connections, where performing a request to increase/decrease the counter can be slow, we need to add a loading state. HTMX provides the `htmx-request` indicator class for this purpose. When HTMX is performing a request, the `htmx-request` class is added to the DOM. With TailwindCSS v3, we can create specific rules activated once this class is present. Here's the updated button:\n\n```jsx\n\n - \n \n \n```\n\nThe magic is in the `[.htmx-request_&]:` selector. This tells Tailwind to create a selector that is activated whenever the `htmx-request` class is present on a parent element. When performing a request, the CSS will hide the `-` element and display a spinner. This approach leverages native Web APIs to enhance user experience even on slow connections. Here's the final result: \n\n\n\n#### Warnings\n\nWhen using the `useSection` hook, keep in mind that the props passed to the hook go into the final URL. Be cautious of URL size limits and try to pass small payloads like booleans and IDs.\n\n#### Conclusion\n\nWe have a `useSection` API reference available for those who want to dive deeper. Additionally, we provide a recipe for migrating from Preact to HTMX and vice versa, detailing common design patterns and how to achieve them with HTML5 and CSS3. With these tools, developers can leverage the power of HTMX and the flexibility of deco.cx to build robust, high-performance web applications.\n\nFor more information, visit our docs: [https://docs.deco.cx/en/api-reference/use-section](https://docs.deco.cx/en/api-reference/use-section). "
},
"pt": {
"descr": "Libere o potencial das apis nativas da web",
@@ -138,7 +138,7 @@
},
"descr": "10 sites on deco.cx with approved CWV",
"title": "At deco.cx the grass IS greener!",
- "content": "In the digital marketplace, performance isn't just a feature—it's a necessity. This is especially true as Google's Core Web Vitals (CWV) become a key determinant of a site's success, reshaping how sites are built and optimized everywhere. \n\nAt [deco.cx](https://deco.cx/), we're not just meeting these standards—we're making it easier than ever to exceed them. Most importantly, we are doing so without sacrificing easy personalization, as well as fast, on-budget execution. \n\nTo find out how your site's Core Web Vitals are, visit [pagespeed.web.dev](https://pagespeed.web.dev/).\n\nHere’s a look at how some of our clients are already seeing significant benefits. These sites aren’t just meeting Google's Core Web Vitals standards; they are fully approved on mobile devices at the origin URL. This approval reflects real-world usability, as it simulates an average mobile navigation session rather than merely testing the homepage. This ensures that the entire user experience, from start to finish, adheres to the highest performance standards set by Google.\n\n- **Lumini**: [lojavirtual.lumini.com.br](https://lojavirtual.lumini.com.br/) \n- **Osklen**: [osklen.com.br](https://www.osklen.com.br/) \n- **Velocità**: [velocita.com.br](https://www.velocita.com.br/) \n- **Armadillo**: [armadillo.com.br](https://www.armadillo.com.br/) \n- **Austral**: [austral.com.br](https://austral.com.br/) \n- **Ligaretro**: [ligaretro.com.br](https://www.ligaretro.com.br/) \n- **Uncle K**: [unclek.com.br](https://www.unclek.com.br/) \n- **Openbox2:** [openbox2.com.br](https://www.openbox2.com.br/) \n- **Euro Colchões:** [eurocolchoes.com](https://www.eurocolchoes.com/) \n- **Petfarma:** [petfarma.com](https://www.petfarma.com/) \n\n**Explore more success stories:** [deco.cx/live-projects](https://deco.cx/en/live-projects) \n\n### **Understanding Core Web Vitals**\n\nCore Web Vitals are a set of specific metrics that Google uses to gauge the health and user-friendliness of a website. These metrics focus on three main areas:\n\n- **Largest Contentful Paint (LCP)**: How long it takes for the main content of a page to load. \n- **First Input Delay (FID)**: The time from when a user first interacts with your site to the moment the browser can respond to that interaction. \n- **Cumulative Layout Shift (CLS)**: How stable a page is as it loads (i.e., how much it moves around). \n\nTo help you understand and optimize these metrics, deco.cx offers a CWV app that provides reports and insights. Learn how to use this tool effectively [here](https://deco.cx/en/blog/core-web-vitals-app)\n\n### **Why Choose deco.cx for High Performance?**\n\nSwitching to deco.cx typically results in a substantial boost in site performance — improving PageSpeed scores by 5x on average. This enhancement is due to several built-in optimizations, features, and very intentional tech choices:\n\n- **Server-Side Rendering (SSR)**: Provides faster load times and better SEO performance. \n- **Edge Deployment**: Delivers your content from the closest server to the user, minimizing delays. \n- **Optimized Images**: Automatically adjusts images to the most efficient formats and sizes for faster loading. \n- **Lazy Loading and Cacheable Fonts**: Improves load times and bandwidth usage for a smoother user experience. \n\nThese features ensure that your website is not only fast and responsive but also meets the mobile-first standards that Google now requires.\n\nVisit our [performance docs](https://deco.cx/docs/en/performance/why) to learn more about how deco.cx delivers speed and reliability. \n\n### **See All Green with deco.cx**\n\nChoosing deco.cx means setting your site up for top-tier performance. With our platform, seeing all green on Google’s Core Web Vitals isn’t just a goal—it’s an expectation. Ready to elevate your website's performance and user experience?\n\nGet started with deco.cx today and ensure your site scores impressively across all vital metrics. \n\n[Book a demo](https://deco.cx/en/contact-us) or [Sign in](https://admin.deco.cx/). \n"
+ "content": "In the digital marketplace, performance isn't just a feature—it's a necessity. This is especially true as Google's Core Web Vitals (CWV) become a key determinant of a site's success, reshaping how sites are built and optimized everywhere. \n\nAt [deco.cx](https://deco.cx/), we're not just meeting these standards—we're making it easier than ever to exceed them. Most importantly, we are doing so without sacrificing easy personalization, as well as fast, on-budget execution. \n\nTo find out how your site's Core Web Vitals are, visit [pagespeed.web.dev](https://pagespeed.web.dev/).\n\nHere’s a look at how some of our clients are already seeing significant benefits. These sites aren’t just meeting Google's Core Web Vitals standards; they are fully approved on mobile devices at the origin URL. This approval reflects real-world usability, as it simulates an average mobile navigation session rather than merely testing the homepage. This ensures that the entire user experience, from start to finish, adheres to the highest performance standards set by Google.\n\n- **Lumini**: [lojavirtual.lumini.com.br](https://lojavirtual.lumini.com.br/) \n- **Osklen**: [osklen.com.br](https://www.osklen.com.br/) \n- **Velocità**: [velocita.com.br](https://www.velocita.com.br/) \n- **Armadillo**: [armadillo.com.br](https://www.armadillo.com.br/) \n- **Austral**: [austral.com.br](https://austral.com.br/) \n- **Ligaretro**: [ligaretro.com.br](https://www.ligaretro.com.br/) \n- **Uncle K**: [unclek.com.br](https://www.unclek.com.br/) \n- **Openbox2:** [openbox2.com.br](https://www.openbox2.com.br/) \n- **Euro Colchões:** [eurocolchoes.com](https://www.eurocolchoes.com/) \n- **Petfarma:** [petfarma.com](https://www.petfarma.com/) \n\n**Explore more success stories:** [deco.cx/live-projects](https://deco.cx/en/live-projects) \n\n### **Understanding Core Web Vitals**\n\nCore Web Vitals are a set of specific metrics that Google uses to gauge the health and user-friendliness of a website. These metrics focus on three main areas:\n\n- **Largest Contentful Paint (LCP)**: How long it takes for the main content of a page to load. \n- **First Input Delay (FID)**: The time from when a user first interacts with your site to the moment the browser can respond to that interaction. \n- **Cumulative Layout Shift (CLS)**: How stable a page is as it loads (i.e., how much it moves around). \n\nTo help you understand and optimize these metrics, deco.cx offers a CWV app that provides reports and insights. Learn how to use this tool effectively [here](https://deco.cx/en/blog/core-web-vitals-app)\n\n### **Why Choose deco.cx for High Performance?**\n\nSwitching to deco.cx typically results in a substantial boost in site performance — improving PageSpeed scores by 5x on average. This enhancement is due to several built-in optimizations, features, and very intentional tech choices:\n\n- **Server-Side Rendering (SSR)**: Provides faster load times and better SEO performance. \n- **Edge Deployment**: Delivers your content from the closest server to the user, minimizing delays. \n- **Optimized Images**: Automatically adjusts images to the most efficient formats and sizes for faster loading. \n- **Lazy Loading and Cacheable Fonts**: Improves load times and bandwidth usage for a smoother user experience. \n\nThese features ensure that your website is not only fast and responsive but also meets the mobile-first standards that Google now requires.\n\nVisit our [performance docs](https://docs.deco.cx/en/performance/why) to learn more about how deco.cx delivers speed and reliability. \n\n### **See All Green with deco.cx**\n\nChoosing deco.cx means setting your site up for top-tier performance. With our platform, seeing all green on Google’s Core Web Vitals isn’t just a goal—it’s an expectation. Ready to elevate your website's performance and user experience?\n\nGet started with deco.cx today and ensure your site scores impressively across all vital metrics. \n\n[Book a demo](https://deco.cx/en/contact-us) or [Sign in](https://admin.deco.cx/). \n"
},
"pt": {
"descr": "10 sites on deco.cx with approved Core Web Vitals",
@@ -148,7 +148,7 @@
"image": "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/3753332b-b0bb-4dc7-b43a-803774e535ca",
"description": "Mastering Google Core Web Vitals for Your Site"
},
- "content": "In the digital marketplace, performance isn't just a feature—it's a necessity. This is especially true as Google's Core Web Vitals (CWV) become a key determinant of a site's success, reshaping how sites are built and optimized everywhere. \n\nAt [deco.cx](https://deco.cx/), we're not just meeting these standards—we're making it easier than ever to exceed them. Most importantly, we are doing so without sacrificing easy personalization, as well as fast, on-budget execution. \n\nTo find out how your site's Core Web Vitals are, visit [pagespeed.web.dev](https://pagespeed.web.dev/).\n\nHere’s a look at how some of our clients are already seeing significant benefits. These sites aren’t just meeting Google's Core Web Vitals standards; they are fully approved on mobile devices at the origin URL. This approval reflects real-world usability, as it simulates an average mobile navigation session rather than merely testing the homepage. This ensures that the entire user experience, from start to finish, adheres to the highest performance standards set by Google.\n\n- **Lumini**: [lojavirtual.lumini.com.br](https://lojavirtual.lumini.com.br/) \n- **Osklen**: [osklen.com.br](https://www.osklen.com.br/) \n- **Velocità**: [velocita.com.br](https://www.velocita.com.br/) \n- **Armadillo**: [armadillo.com.br](https://www.armadillo.com.br/) \n- **Austral**: [austral.com.br](https://austral.com.br/) \n- **Ligaretro**: [ligaretro.com.br](https://www.ligaretro.com.br/) \n- **Uncle K**: [unclek.com.br](https://www.unclek.com.br/) \n- **Openbox2:** [openbox2.com.br](https://www.openbox2.com.br/) \n- **Euro Colchões:** [eurocolchoes.com](https://www.eurocolchoes.com/) \n- **Petfarma:** [petfarma.com](https://www.petfarma.com/) \n\n**Explore more success stories:** [deco.cx/live-projects](https://deco.cx/en/live-projects) \n\n### **Understanding Core Web Vitals**\n\nCore Web Vitals are a set of specific metrics that Google uses to gauge the health and user-friendliness of a website. These metrics focus on three main areas:\n\n- **Largest Contentful Paint (LCP)**: How long it takes for the main content of a page to load. \n- **First Input Delay (FID)**: The time from when a user first interacts with your site to the moment the browser can respond to that interaction. \n- **Cumulative Layout Shift (CLS)**: How stable a page is as it loads (i.e., how much it moves around). \n\nTo help you understand and optimize these metrics, deco.cx offers a CWV app that provides reports and insights. Learn how to use this tool effectively [here](https://deco.cx/en/blog/core-web-vitals-app)\n\n### **Why Choose deco.cx for High Performance?**\n\nSwitching to deco.cx typically results in a substantial boost in site performance — improving PageSpeed scores by 5x on average. This enhancement is due to several built-in optimizations, features, and very intentional tech choices:\n\n- **Server-Side Rendering (SSR)**: Provides faster load times and better SEO performance. \n- **Edge Deployment**: Delivers your content from the closest server to the user, minimizing delays. \n- **Optimized Images**: Automatically adjusts images to the most efficient formats and sizes for faster loading. \n- **Lazy Loading and Cacheable Fonts**: Improves load times and bandwidth usage for a smoother user experience. \n\nThese features ensure that your website is not only fast and responsive but also meets the mobile-first standards that Google now requires.\n\nVisit our [performance docs](https://deco.cx/docs/en/performance/why) to learn more about how deco.cx delivers speed and reliability. \n\n### **See All Green with deco.cx**\n\nChoosing deco.cx means setting your site up for top-tier performance. With our platform, seeing all green on Google’s Core Web Vitals isn’t just a goal—it’s an expectation. Ready to elevate your website's performance and user experience?\n\nGet started with deco.cx today and ensure your site scores impressively across all vital metrics. \n\n[Book a demo](https://deco.cx/en/contact-us) or [Sign in](https://admin.deco.cx/). \n"
+ "content": "In the digital marketplace, performance isn't just a feature—it's a necessity. This is especially true as Google's Core Web Vitals (CWV) become a key determinant of a site's success, reshaping how sites are built and optimized everywhere. \n\nAt [deco.cx](https://deco.cx/), we're not just meeting these standards—we're making it easier than ever to exceed them. Most importantly, we are doing so without sacrificing easy personalization, as well as fast, on-budget execution. \n\nTo find out how your site's Core Web Vitals are, visit [pagespeed.web.dev](https://pagespeed.web.dev/).\n\nHere’s a look at how some of our clients are already seeing significant benefits. These sites aren’t just meeting Google's Core Web Vitals standards; they are fully approved on mobile devices at the origin URL. This approval reflects real-world usability, as it simulates an average mobile navigation session rather than merely testing the homepage. This ensures that the entire user experience, from start to finish, adheres to the highest performance standards set by Google.\n\n- **Lumini**: [lojavirtual.lumini.com.br](https://lojavirtual.lumini.com.br/) \n- **Osklen**: [osklen.com.br](https://www.osklen.com.br/) \n- **Velocità**: [velocita.com.br](https://www.velocita.com.br/) \n- **Armadillo**: [armadillo.com.br](https://www.armadillo.com.br/) \n- **Austral**: [austral.com.br](https://austral.com.br/) \n- **Ligaretro**: [ligaretro.com.br](https://www.ligaretro.com.br/) \n- **Uncle K**: [unclek.com.br](https://www.unclek.com.br/) \n- **Openbox2:** [openbox2.com.br](https://www.openbox2.com.br/) \n- **Euro Colchões:** [eurocolchoes.com](https://www.eurocolchoes.com/) \n- **Petfarma:** [petfarma.com](https://www.petfarma.com/) \n\n**Explore more success stories:** [deco.cx/live-projects](https://deco.cx/en/live-projects) \n\n### **Understanding Core Web Vitals**\n\nCore Web Vitals are a set of specific metrics that Google uses to gauge the health and user-friendliness of a website. These metrics focus on three main areas:\n\n- **Largest Contentful Paint (LCP)**: How long it takes for the main content of a page to load. \n- **First Input Delay (FID)**: The time from when a user first interacts with your site to the moment the browser can respond to that interaction. \n- **Cumulative Layout Shift (CLS)**: How stable a page is as it loads (i.e., how much it moves around). \n\nTo help you understand and optimize these metrics, deco.cx offers a CWV app that provides reports and insights. Learn how to use this tool effectively [here](https://deco.cx/en/blog/core-web-vitals-app)\n\n### **Why Choose deco.cx for High Performance?**\n\nSwitching to deco.cx typically results in a substantial boost in site performance — improving PageSpeed scores by 5x on average. This enhancement is due to several built-in optimizations, features, and very intentional tech choices:\n\n- **Server-Side Rendering (SSR)**: Provides faster load times and better SEO performance. \n- **Edge Deployment**: Delivers your content from the closest server to the user, minimizing delays. \n- **Optimized Images**: Automatically adjusts images to the most efficient formats and sizes for faster loading. \n- **Lazy Loading and Cacheable Fonts**: Improves load times and bandwidth usage for a smoother user experience. \n\nThese features ensure that your website is not only fast and responsive but also meets the mobile-first standards that Google now requires.\n\nVisit our [performance docs](https://docs.deco.cx/en/performance/why) to learn more about how deco.cx delivers speed and reliability. \n\n### **See All Green with deco.cx**\n\nChoosing deco.cx means setting your site up for top-tier performance. With our platform, seeing all green on Google’s Core Web Vitals isn’t just a goal—it’s an expectation. Ready to elevate your website's performance and user experience?\n\nGet started with deco.cx today and ensure your site scores impressively across all vital metrics. \n\n[Book a demo](https://deco.cx/en/contact-us) or [Sign in](https://admin.deco.cx/). \n"
}
},
"date": "5/10/2024",
@@ -245,12 +245,12 @@
"seo": {
"title": "Edge Async Rendering"
},
- "content": "## Introduction:\n\nToday, we're thrilled to introduce a groundbreaking feature that will redefine your website's performance. Imagine unlocking the low latencies of the edge, eliminating the dependency on third-party APIs – welcome to the era of Async Rendering.\n\n## Understanding the Current React Rendering Process:\n\nIn the realm of React applications, the conventional approach to Server Side Rendering (SSR) is the [fetch-then-render](https://www.linkedin.com/pulse/fetch-then-render-render-as-you-fetch-fetch-on-render-amit-pal/) model, where rendering is split between two steps, one for data fetching and the other for generating html. To illustrate, let's envision a typical scenario on an e-commerce website's home page. This page comprises two shelves, each displaying a collection of products. To populate these shelves, the application needs to make two requests to the e-commerce API.\n\nNow, here's where the challenge arises: React, following the fetch-then-render paradigm, insists that both requests must be completed before any server-side rendering (SSR) can take place. Picture this – a user lands on the home page, eager to explore the latest products, and two API requests are initiated by the edge server. If, for any reason, one of these requests hangs or encounters a delay, the entire SSR process comes to a standstill, leaving the user in a frustrating waiting game.\n\nThis latency bottleneck becomes particularly evident in data-rich applications, hindering the user experience and potentially leading to abandonment. It's a scenario where the slowest API response time dictates the overall rendering speed, introducing unnecessary delays that impact user satisfaction.\n\nFor the nerds in the audience, we can derive a simple equation that may give us the expected waiting time for the fetch-then-render model. Say that for rendering a page, we perform `n` requests in parallel, and each request has a probability `p` of being considered a \"fast\" request. Then, for the page to be \"fast\", all requests need to be \"fast\", thus the probability of the page being \"fast\" is:\n\n```\np_fast = p^n\n```\n\n99% of requests usually responds within 500ms, and slow requests take around 3 seconds. Let's call these quantities l_fast and l_slow respectively. Thus, the expected latency for a web page in the fetch-then-render model is:\n\n```\nl_page = l_fast * p_fast + l_slow * (1-p_fast)\n```\n\nDue to issues with commerce APIs, we have some customers that, for rendering a page, perform 97 requests. Plugin-in these numbers into the equation we have an expected page latency is around 2 seconds, even tough 99% of the time the requests respond in less than 500ms! This means that even if we improve the APIs, the mathematical model behind this approach prohibits us from being fast. Note that this model can also be used for caching. If our cache hit rate is 99% (which is around 30% in practice), the expected latency is dominated by the slow APIs. Math is cruel my friend, but there's a hope! \n\n## Progressive Loading: A Smarter Approach:\n\nEnter Progressive Loading – a technique that is imune to slow requests. Rather than waiting for all content to be ready on the server before responding to the client, Progressive Loading renders content from fast requests, defaulting to leaving skeletons and loading states on slow requests contents, offering users an immediate visual experience.\n\n \n\nThis approach decreases user anxiety by displaying visual feedback the system is working into the desired state. Highly dynamic systems like Youtube and Instagram implement this kind of skeleton based approach, so internet users are used to this kind of interaction. However, manually implementing Progressive Loading in your website can be challenging and cumbersome.\n\n## Introducing Async Rendering: \nThe Game-Changing Feature:\n\nHere comes Async Rendering, our latest feature designed to simplify the Progressive Loading paradigm. The magic lies in tight coupling Progressive loading into our framework. Here's how it works:\n\nLoaders are now tied to a time budget. Once this threshold is reached, loaders that have finished their work will have their content rendered to the final html as usual. Loaders consuming slow APIs will raise an exception and a loading state will be rendered in sections consuming this loader. This loading state will use our [Partials]() feature to hydrate and replace the missing section lazily. \n\nThis means that there's no need to manually add the `Deferred` section anymore. Any section is now deferred depending on the API they are consuming.\n\n## Customizing Loading States Made Easy:\n\nTo make your website truly yours, we've simplified the customization of loading states. Just export a `LoadingFallback` component from your section and this will be used as your loading state. A standard blank loading state will be used if no `LoadingFallback` component is exported. \n\nFor instance, let's get this Section\n\n```tsx\nexport default function Section(props: Props) { ... }\n```\n\nTo add a custom loading state:\n\n```tsx\nexport default function Section(props: Props) { ... }\n\nexport function LoadingFallback () {\n return loading...
\n}\n```\n\n> Tip: try exporting a component named ErrorFallback to handle any possible error this section may encounter\n\nto learn more, check out or [docs](https://deco.cx/docs/en/developing-capabilities/sections/loading-fallback)\n\n## Seo\n\nAs you may know, partially rendering a page's content is not ideal to SEO. For this reason, whenever our system detects it's google or any other search engine bot requesting your page, out system will fallback to fetch-then-render approach, delivering the best SEO possible. \n\n## Taking a Tour of Async Rendering in Deco.cx's Admin:\n\nReady to experience the power of Async Rendering firsthand? Join us for a guided tour on activating this feature within Deco.cx's admin interface. Discover how easy it is to enhance your website's performance with a few simple steps.\n\n1. Make sure your project is up-to-date to the latest deco and apps versions by running:\n\n```sh\ndeno run -A https://deco.cx/update\n```\n\n2. Open your site's app on deco.cx admin and look for Async Rendering option. Set it to 0 to disable or any other value to enable it. \n \n\nThat's it! now your sections are async rendering! \n\n## Impacts on Core Web Vitals\n\nAsync rendering makes your website more responsive, reducing user anxiety and improving the overall experience. However, it may affect your Web Vitals indicators. Let's analyze how async rendering influences your final score.\n\n### FCP (First Contentful Paint)\n\nFCP is significantly improved because the page doesn't need to wait for slow third-party APIs for responses.\n\n### LCP (Largest Contentful Paint)\n\nLCP may either improve or worsen depending on the source of your LCP element. If images come from APIs, it could lower the score. However, if images are uploaded via Deco's admin, it will notably increase. For example, on home pages where the banner is uploaded using Deco's CMS, the LCP will be much better. However, on product pages, the LCP score might decrease since we need to wait for a few round trips before downloading the product image.\n\n### CLS (Cumulative Layout Shift)\n\nCLS should remain unchanged. Well-designed `LoadingFallback` components shouldn't contribute to any layout shifts. If you observe any changes in CLS, consult your developer to enhance `LoadingFallback` components.\n\n### FID (First Input Delay)\n\nFID might slightly increase since the page isn't rendered all at once, thereby better utilizing CPU time.\n\nOverall, you should notice an improvement in Web Vitals indicators.\n\nCurious to see Async Rendering in action? Head over to our [storefront template](https://storefront-vtex.deco.site/) and witness the transformative impact on website performance."
+ "content": "## Introduction:\n\nToday, we're thrilled to introduce a groundbreaking feature that will redefine your website's performance. Imagine unlocking the low latencies of the edge, eliminating the dependency on third-party APIs – welcome to the era of Async Rendering.\n\n## Understanding the Current React Rendering Process:\n\nIn the realm of React applications, the conventional approach to Server Side Rendering (SSR) is the [fetch-then-render](https://www.linkedin.com/pulse/fetch-then-render-render-as-you-fetch-fetch-on-render-amit-pal/) model, where rendering is split between two steps, one for data fetching and the other for generating html. To illustrate, let's envision a typical scenario on an e-commerce website's home page. This page comprises two shelves, each displaying a collection of products. To populate these shelves, the application needs to make two requests to the e-commerce API.\n\nNow, here's where the challenge arises: React, following the fetch-then-render paradigm, insists that both requests must be completed before any server-side rendering (SSR) can take place. Picture this – a user lands on the home page, eager to explore the latest products, and two API requests are initiated by the edge server. If, for any reason, one of these requests hangs or encounters a delay, the entire SSR process comes to a standstill, leaving the user in a frustrating waiting game.\n\nThis latency bottleneck becomes particularly evident in data-rich applications, hindering the user experience and potentially leading to abandonment. It's a scenario where the slowest API response time dictates the overall rendering speed, introducing unnecessary delays that impact user satisfaction.\n\nFor the nerds in the audience, we can derive a simple equation that may give us the expected waiting time for the fetch-then-render model. Say that for rendering a page, we perform `n` requests in parallel, and each request has a probability `p` of being considered a \"fast\" request. Then, for the page to be \"fast\", all requests need to be \"fast\", thus the probability of the page being \"fast\" is:\n\n```\np_fast = p^n\n```\n\n99% of requests usually responds within 500ms, and slow requests take around 3 seconds. Let's call these quantities l_fast and l_slow respectively. Thus, the expected latency for a web page in the fetch-then-render model is:\n\n```\nl_page = l_fast * p_fast + l_slow * (1-p_fast)\n```\n\nDue to issues with commerce APIs, we have some customers that, for rendering a page, perform 97 requests. Plugin-in these numbers into the equation we have an expected page latency is around 2 seconds, even tough 99% of the time the requests respond in less than 500ms! This means that even if we improve the APIs, the mathematical model behind this approach prohibits us from being fast. Note that this model can also be used for caching. If our cache hit rate is 99% (which is around 30% in practice), the expected latency is dominated by the slow APIs. Math is cruel my friend, but there's a hope! \n\n## Progressive Loading: A Smarter Approach:\n\nEnter Progressive Loading – a technique that is imune to slow requests. Rather than waiting for all content to be ready on the server before responding to the client, Progressive Loading renders content from fast requests, defaulting to leaving skeletons and loading states on slow requests contents, offering users an immediate visual experience.\n\n \n\nThis approach decreases user anxiety by displaying visual feedback the system is working into the desired state. Highly dynamic systems like Youtube and Instagram implement this kind of skeleton based approach, so internet users are used to this kind of interaction. However, manually implementing Progressive Loading in your website can be challenging and cumbersome.\n\n## Introducing Async Rendering: \nThe Game-Changing Feature:\n\nHere comes Async Rendering, our latest feature designed to simplify the Progressive Loading paradigm. The magic lies in tight coupling Progressive loading into our framework. Here's how it works:\n\nLoaders are now tied to a time budget. Once this threshold is reached, loaders that have finished their work will have their content rendered to the final html as usual. Loaders consuming slow APIs will raise an exception and a loading state will be rendered in sections consuming this loader. This loading state will use our [Partials]() feature to hydrate and replace the missing section lazily. \n\nThis means that there's no need to manually add the `Deferred` section anymore. Any section is now deferred depending on the API they are consuming.\n\n## Customizing Loading States Made Easy:\n\nTo make your website truly yours, we've simplified the customization of loading states. Just export a `LoadingFallback` component from your section and this will be used as your loading state. A standard blank loading state will be used if no `LoadingFallback` component is exported. \n\nFor instance, let's get this Section\n\n```tsx\nexport default function Section(props: Props) { ... }\n```\n\nTo add a custom loading state:\n\n```tsx\nexport default function Section(props: Props) { ... }\n\nexport function LoadingFallback () {\n return loading...
\n}\n```\n\n> Tip: try exporting a component named ErrorFallback to handle any possible error this section may encounter\n\nto learn more, check out or [docs](https://docs.deco.cx/en/developing-capabilities/sections/loading-fallback)\n\n## Seo\n\nAs you may know, partially rendering a page's content is not ideal to SEO. For this reason, whenever our system detects it's google or any other search engine bot requesting your page, out system will fallback to fetch-then-render approach, delivering the best SEO possible. \n\n## Taking a Tour of Async Rendering in Deco.cx's Admin:\n\nReady to experience the power of Async Rendering firsthand? Join us for a guided tour on activating this feature within Deco.cx's admin interface. Discover how easy it is to enhance your website's performance with a few simple steps.\n\n1. Make sure your project is up-to-date to the latest deco and apps versions by running:\n\n```sh\ndeno run -A https://deco.cx/update\n```\n\n2. Open your site's app on deco.cx admin and look for Async Rendering option. Set it to 0 to disable or any other value to enable it. \n \n\nThat's it! now your sections are async rendering! \n\n## Impacts on Core Web Vitals\n\nAsync rendering makes your website more responsive, reducing user anxiety and improving the overall experience. However, it may affect your Web Vitals indicators. Let's analyze how async rendering influences your final score.\n\n### FCP (First Contentful Paint)\n\nFCP is significantly improved because the page doesn't need to wait for slow third-party APIs for responses.\n\n### LCP (Largest Contentful Paint)\n\nLCP may either improve or worsen depending on the source of your LCP element. If images come from APIs, it could lower the score. However, if images are uploaded via Deco's admin, it will notably increase. For example, on home pages where the banner is uploaded using Deco's CMS, the LCP will be much better. However, on product pages, the LCP score might decrease since we need to wait for a few round trips before downloading the product image.\n\n### CLS (Cumulative Layout Shift)\n\nCLS should remain unchanged. Well-designed `LoadingFallback` components shouldn't contribute to any layout shifts. If you observe any changes in CLS, consult your developer to enhance `LoadingFallback` components.\n\n### FID (First Input Delay)\n\nFID might slightly increase since the page isn't rendered all at once, thereby better utilizing CPU time.\n\nOverall, you should notice an improvement in Web Vitals indicators.\n\nCurious to see Async Rendering in action? Head over to our [storefront template](https://storefront-vtex.deco.site/) and witness the transformative impact on website performance."
},
"pt": {
"descr": "Novo modo de renderizaçāo para tempo de respostas instantâneos",
"title": "Renderizaçāo Assíncrona na borda",
- "content": "## Introdução:\n\nHoje, estamos entusiasmados em apresentar um recurso inovador que irá redefinir o desempenho do seu site. Imagine desbloquear as baixas latências da borda, eliminando a dependência de APIs de terceiros - bem-vindo à era do Renderização Assíncrona. \n\n## Compreendendo o Processo de Renderização Atual do React:\n\nNo mundo das aplicações React, a abordagem convencional para a Renderização do Lado do Servidor (SSR, na sigla em inglês) é o modelo [fetch-then-render](https://www.linkedin.com/pulse/fetch-then-render-render-as-you-fetch-fetch-on-render-amit-pal/), onde a renderização é dividida em dois passos, um para busca de dados e outro para geração de html. Para ilustrar, vamos imaginar um cenário típico na página inicial de um site de comércio eletrônico. Esta página é composta por duas prateleiras, cada uma exibindo uma coleção de produtos. Para preencher essas prateleiras, a aplicação precisa fazer duas requisições à API de comércio eletrônico.\n\nAqui está onde surge o desafio: o React, seguindo o paradigma fetch-then-render, insiste que ambas as requisições devem ser concluídas antes que qualquer renderização do lado do servidor (SSR) possa ocorrer. Imagine isso - um usuário chega à página inicial, ansioso para explorar os últimos produtos, e duas requisições à API são iniciadas pelo servidor de borda. Se, por qualquer motivo, uma dessas requisições ficar pendente ou encontrar um atraso, todo o processo de SSR fica paralisado, deixando o usuário em um jogo frustrante de espera.\n\nEsse gargalo de latência se torna particularmente evidente em aplicações ricas em dados, prejudicando a experiência do usuário e potencialmente levando ao abandono. É um cenário onde o tempo de resposta mais lento da API dita a velocidade geral de renderização, introduzindo atrasos desnecessários que impactam a satisfação do usuário.\n\nPara os nerds na plateia, podemos derivar uma equação simples que pode nos dar o tempo de espera esperado para o modelo fetch-then-render. Digamos que, para renderizar uma página, realizamos `n` requisições em paralelo, e cada requisição tem uma probabilidade `p` de ser considerada uma requisição \"rápida\". Então, para que a página seja \"rápida\", todas as requisições precisam ser \"rápidas\", assim a probabilidade da página ser \"rápida\" é:\n\n```\np_rápido = p^n\n```\n\n99% das requisições geralmente respondem em menos de 500ms, e as requisições lentas levam cerca de 3 segundos. Vamos chamar essas quantidades de l_rápido e l_lento, respectivamente. Assim, a latência esperada para uma página da web no modelo fetch-then-render é:\n\n```\nl_página = l_rápido * p_rápido + l_lento * (1-p_rápido)\n```\n\nDevido a problemas com APIs de comércio, temos alguns clientes que, para renderizar uma página, realizam 97 requisições. Ao inserir esses números na equação, temos uma latência esperada da página de cerca de 2 segundos, mesmo que 99% do tempo as requisições respondam em menos de 500ms! Isso significa que mesmo se melhorarmos as APIs, o modelo matemático por trás dessa abordagem nos impede de sermos rápidos. Note que este modelo também pode ser usado para caching. Se nossa taxa de acerto no cache for de 99% (o que é cerca de 30% na prática), a latência esperada é dominada pelas APIs lentas. A matemática é cruel, meu amigo, mas há esperança!\n\n## Carregamento Progressivo: Uma Abordagem Mais Inteligente:\n\nIntroduza o Carregamento Progressivo - uma técnica que é imune a requisições lentas. Em vez de esperar que todo o conteúdo esteja pronto no servidor antes de responder ao cliente, o Carregamento Progressivo renderiza o conteúdo das requisições rápidas, recorrendo a esqueletos e estados de carregamento para o conteúdo de requisições lentas, oferecendo aos usuários uma experiência visual imediata.\n\n \n\nEsta abordagem diminui a ansiedade do usuário, mostrando feedback visual de que o sistema está trabalhando para o estado desejado. Sistemas altamente dinâmicos como YouTube e Instagram implementam esse tipo de abordagem baseada em esqueletos, então os usuários da internet estão acostumados a esse tipo de interação. No entanto, implementar manualmente o Carregamento Progressivo em seu site pode ser desafiador e trabalhoso.\n\n## Apresentando a Renderização Assíncrona: O Recurso que Muda o Jogo:\n\nAqui vem a Renderização Assíncrona, nosso recurso mais recente projetado para simplificar o paradigma de Carregamento Progressivo. A magia está na integração estreita do carregamento progressivo em nosso framework. Veja como funciona:\n\nOs carregadores agora estão vinculados a um orçamento de tempo. Uma vez atingido esse limite, os carregadores que concluíram seu trabalho terão seu conteúdo renderizado no html final como de costume. Os carregadores que consomem APIs lentas levantarão uma exceção e um estado de carregamento será renderizado nas seções que consomem este carregador. Este estado de carregamento usará nosso recurso [Partials]() para hidratar e substituir a seção ausente preguiçosamente.\n\nIsso significa que não há necessidade de adicionar manualmente a seção `Deferred` mais. Qualquer seção agora é adiada dependendo da API que estão consumindo.\n\n## Personalização dos Estados de Carregamento Facilitada:\n\nPara tornar seu site verdadeiramente seu, simplificamos a personalização dos estados de carregamento. Basta exportar um componente `LoadingFallback` da sua seção e este será usado como seu estado de carregamento. Um estado de carregamento em branco padrão será usado se nenhum componente `LoadingFallback` for exportado.\n\nPor exemplo, vamos pegar esta Seção\n\n```tsx\nexport default function Section(props: Props) { ... }\n```\n\nPara adicionar um estado de carregamento personalizado:\n\n```tsx\nexport default function Section(props: Props) { ... }\n\nexport function LoadingFallback () {\n return carregando...
\n}\n```\n\n> Dica: tente exportar um componente chamado ErrorFallback para lidar com qualquer possível erro que esta seção possa encontrar\n\nPara saber mais, confira nossos [docs](https://deco.cx/docs/en/developing-capabilities/sections/loading-fallback)\n\n## SEO\n\nComo você deve saber, renderizar parcialmente o conteúdo de uma página não é ideal para SEO. Por esse motivo, sempre que nosso sistema detectar que é o Google ou qualquer outro mecanismo de busca solicitando sua página, nosso sistema recorrerá à abordagem fetch-then-render, oferecendo o melhor SEO possível.\n\n## Faça um Tour pela Renderização Assíncrona no Admin da Deco.cx:\n\nPronto para experimentar o poder da Renderização Assíncrona em primeira mão? Junte-se a nós para um tour guiado sobre como ativar este recurso dentro da interface de administração da Deco.cx. Descubra como é fácil melhorar o desempenho do seu site com alguns passos simples.\n\n1. Certifique-se de que seu projeto esteja atualizado para as últimas versões do deco e dos aplicativos executando:\n\n```sh\ndeno run -A https://deco.cx/update\n```\n\n2. Abra o aplicativo do seu site no admin da deco.cx e procure pela opção de Renderização Assíncrona. Defina-o como 0 para desativar ou qualquer outro valor para ativá-lo.\n\n \n\nÉ isso! agora suas seções estão sendo renderizadas de forma assíncrona!\n\n## Impactos nos Principais Indicadores da Web\n\nA renderização assíncrona torna o seu site mais responsivo, reduzindo a ansiedade dos usuários e melhorando a experiência geral. No entanto, pode afetar os indicadores principais da Web. Vamos analisar como a renderização assíncrona influencia sua pontuação final.\n\n### FCP (First Contentful Paint)\n\nO FCP é significativamente melhorado porque a página não precisa esperar por respostas de APIs de terceiros lentas.\n\n### LCP (Largest Contentful Paint)\n\nO LCP pode melhorar ou piorar dependendo da origem do seu elemento LCP. Se as imagens vêm de APIs, isso pode diminuir a pontuação. No entanto, se as imagens forem carregadas via administração da Deco, isso aumentará consideravelmente. Por exemplo, em páginas iniciais onde o banner é carregado usando o CMS da Deco, o LCP será muito melhor. No entanto, em páginas de produtos, a pontuação do LCP pode diminuir, já que precisamos esperar por algumas viagens antes de baixar a imagem do produto.\n\n### CLS (Cumulative Layout Shift)\n\nO CLS deve permanecer inalterado. Componentes `LoadingFallback` bem projetados não devem contribuir para nenhum deslocamento de layout. Se observar quaisquer mudanças no CLS, consulte seu desenvolvedor para aprimorar os componentes `LoadingFallback`.\n\n### FID (First Input Delay)\n\nO FID pode aumentar ligeiramente, já que a página não é renderizada de uma vez, utilizando melhor o tempo da CPU.\n\nEm geral, uma melhora nos indicadores do Web Vitals deve ser percebido\n\nCurioso para ver a Renderização Assíncrona em ação? Visite nosso [modelo de loja](https://storefront-vtex.deco.site/) e veja o impacto transformador no desempenho do site."
+ "content": "## Introdução:\n\nHoje, estamos entusiasmados em apresentar um recurso inovador que irá redefinir o desempenho do seu site. Imagine desbloquear as baixas latências da borda, eliminando a dependência de APIs de terceiros - bem-vindo à era do Renderização Assíncrona. \n\n## Compreendendo o Processo de Renderização Atual do React:\n\nNo mundo das aplicações React, a abordagem convencional para a Renderização do Lado do Servidor (SSR, na sigla em inglês) é o modelo [fetch-then-render](https://www.linkedin.com/pulse/fetch-then-render-render-as-you-fetch-fetch-on-render-amit-pal/), onde a renderização é dividida em dois passos, um para busca de dados e outro para geração de html. Para ilustrar, vamos imaginar um cenário típico na página inicial de um site de comércio eletrônico. Esta página é composta por duas prateleiras, cada uma exibindo uma coleção de produtos. Para preencher essas prateleiras, a aplicação precisa fazer duas requisições à API de comércio eletrônico.\n\nAqui está onde surge o desafio: o React, seguindo o paradigma fetch-then-render, insiste que ambas as requisições devem ser concluídas antes que qualquer renderização do lado do servidor (SSR) possa ocorrer. Imagine isso - um usuário chega à página inicial, ansioso para explorar os últimos produtos, e duas requisições à API são iniciadas pelo servidor de borda. Se, por qualquer motivo, uma dessas requisições ficar pendente ou encontrar um atraso, todo o processo de SSR fica paralisado, deixando o usuário em um jogo frustrante de espera.\n\nEsse gargalo de latência se torna particularmente evidente em aplicações ricas em dados, prejudicando a experiência do usuário e potencialmente levando ao abandono. É um cenário onde o tempo de resposta mais lento da API dita a velocidade geral de renderização, introduzindo atrasos desnecessários que impactam a satisfação do usuário.\n\nPara os nerds na plateia, podemos derivar uma equação simples que pode nos dar o tempo de espera esperado para o modelo fetch-then-render. Digamos que, para renderizar uma página, realizamos `n` requisições em paralelo, e cada requisição tem uma probabilidade `p` de ser considerada uma requisição \"rápida\". Então, para que a página seja \"rápida\", todas as requisições precisam ser \"rápidas\", assim a probabilidade da página ser \"rápida\" é:\n\n```\np_rápido = p^n\n```\n\n99% das requisições geralmente respondem em menos de 500ms, e as requisições lentas levam cerca de 3 segundos. Vamos chamar essas quantidades de l_rápido e l_lento, respectivamente. Assim, a latência esperada para uma página da web no modelo fetch-then-render é:\n\n```\nl_página = l_rápido * p_rápido + l_lento * (1-p_rápido)\n```\n\nDevido a problemas com APIs de comércio, temos alguns clientes que, para renderizar uma página, realizam 97 requisições. Ao inserir esses números na equação, temos uma latência esperada da página de cerca de 2 segundos, mesmo que 99% do tempo as requisições respondam em menos de 500ms! Isso significa que mesmo se melhorarmos as APIs, o modelo matemático por trás dessa abordagem nos impede de sermos rápidos. Note que este modelo também pode ser usado para caching. Se nossa taxa de acerto no cache for de 99% (o que é cerca de 30% na prática), a latência esperada é dominada pelas APIs lentas. A matemática é cruel, meu amigo, mas há esperança!\n\n## Carregamento Progressivo: Uma Abordagem Mais Inteligente:\n\nIntroduza o Carregamento Progressivo - uma técnica que é imune a requisições lentas. Em vez de esperar que todo o conteúdo esteja pronto no servidor antes de responder ao cliente, o Carregamento Progressivo renderiza o conteúdo das requisições rápidas, recorrendo a esqueletos e estados de carregamento para o conteúdo de requisições lentas, oferecendo aos usuários uma experiência visual imediata.\n\n \n\nEsta abordagem diminui a ansiedade do usuário, mostrando feedback visual de que o sistema está trabalhando para o estado desejado. Sistemas altamente dinâmicos como YouTube e Instagram implementam esse tipo de abordagem baseada em esqueletos, então os usuários da internet estão acostumados a esse tipo de interação. No entanto, implementar manualmente o Carregamento Progressivo em seu site pode ser desafiador e trabalhoso.\n\n## Apresentando a Renderização Assíncrona: O Recurso que Muda o Jogo:\n\nAqui vem a Renderização Assíncrona, nosso recurso mais recente projetado para simplificar o paradigma de Carregamento Progressivo. A magia está na integração estreita do carregamento progressivo em nosso framework. Veja como funciona:\n\nOs carregadores agora estão vinculados a um orçamento de tempo. Uma vez atingido esse limite, os carregadores que concluíram seu trabalho terão seu conteúdo renderizado no html final como de costume. Os carregadores que consomem APIs lentas levantarão uma exceção e um estado de carregamento será renderizado nas seções que consomem este carregador. Este estado de carregamento usará nosso recurso [Partials]() para hidratar e substituir a seção ausente preguiçosamente.\n\nIsso significa que não há necessidade de adicionar manualmente a seção `Deferred` mais. Qualquer seção agora é adiada dependendo da API que estão consumindo.\n\n## Personalização dos Estados de Carregamento Facilitada:\n\nPara tornar seu site verdadeiramente seu, simplificamos a personalização dos estados de carregamento. Basta exportar um componente `LoadingFallback` da sua seção e este será usado como seu estado de carregamento. Um estado de carregamento em branco padrão será usado se nenhum componente `LoadingFallback` for exportado.\n\nPor exemplo, vamos pegar esta Seção\n\n```tsx\nexport default function Section(props: Props) { ... }\n```\n\nPara adicionar um estado de carregamento personalizado:\n\n```tsx\nexport default function Section(props: Props) { ... }\n\nexport function LoadingFallback () {\n return carregando...
\n}\n```\n\n> Dica: tente exportar um componente chamado ErrorFallback para lidar com qualquer possível erro que esta seção possa encontrar\n\nPara saber mais, confira nossos [docs](https://docs.deco.cx/en/developing-capabilities/sections/loading-fallback)\n\n## SEO\n\nComo você deve saber, renderizar parcialmente o conteúdo de uma página não é ideal para SEO. Por esse motivo, sempre que nosso sistema detectar que é o Google ou qualquer outro mecanismo de busca solicitando sua página, nosso sistema recorrerá à abordagem fetch-then-render, oferecendo o melhor SEO possível.\n\n## Faça um Tour pela Renderização Assíncrona no Admin da Deco.cx:\n\nPronto para experimentar o poder da Renderização Assíncrona em primeira mão? Junte-se a nós para um tour guiado sobre como ativar este recurso dentro da interface de administração da Deco.cx. Descubra como é fácil melhorar o desempenho do seu site com alguns passos simples.\n\n1. Certifique-se de que seu projeto esteja atualizado para as últimas versões do deco e dos aplicativos executando:\n\n```sh\ndeno run -A https://deco.cx/update\n```\n\n2. Abra o aplicativo do seu site no admin da deco.cx e procure pela opção de Renderização Assíncrona. Defina-o como 0 para desativar ou qualquer outro valor para ativá-lo.\n\n \n\nÉ isso! agora suas seções estão sendo renderizadas de forma assíncrona!\n\n## Impactos nos Principais Indicadores da Web\n\nA renderização assíncrona torna o seu site mais responsivo, reduzindo a ansiedade dos usuários e melhorando a experiência geral. No entanto, pode afetar os indicadores principais da Web. Vamos analisar como a renderização assíncrona influencia sua pontuação final.\n\n### FCP (First Contentful Paint)\n\nO FCP é significativamente melhorado porque a página não precisa esperar por respostas de APIs de terceiros lentas.\n\n### LCP (Largest Contentful Paint)\n\nO LCP pode melhorar ou piorar dependendo da origem do seu elemento LCP. Se as imagens vêm de APIs, isso pode diminuir a pontuação. No entanto, se as imagens forem carregadas via administração da Deco, isso aumentará consideravelmente. Por exemplo, em páginas iniciais onde o banner é carregado usando o CMS da Deco, o LCP será muito melhor. No entanto, em páginas de produtos, a pontuação do LCP pode diminuir, já que precisamos esperar por algumas viagens antes de baixar a imagem do produto.\n\n### CLS (Cumulative Layout Shift)\n\nO CLS deve permanecer inalterado. Componentes `LoadingFallback` bem projetados não devem contribuir para nenhum deslocamento de layout. Se observar quaisquer mudanças no CLS, consulte seu desenvolvedor para aprimorar os componentes `LoadingFallback`.\n\n### FID (First Input Delay)\n\nO FID pode aumentar ligeiramente, já que a página não é renderizada de uma vez, utilizando melhor o tempo da CPU.\n\nEm geral, uma melhora nos indicadores do Web Vitals deve ser percebido\n\nCurioso para ver a Renderização Assíncrona em ação? Visite nosso [modelo de loja](https://storefront-vtex.deco.site/) e veja o impacto transformador no desempenho do site."
}
},
"date": "02/20/2024",
@@ -302,7 +302,7 @@
"title": "How deco.cx supports SEO: insights from Gear SEO",
"description": "In this blog post we summarize the main points from GearSEO’s article and complement them with real examples of how clients leverage deco.cx to achieve extraordinary results."
},
- "content": "SEO (Search Engine Optimization) practices are important for ecommerce websites because they affect the site's performance on search engines (e.g: Bing, Google), enabling (or not) potential customers to discover online stores and eventually make a purchase.\n\nThe platform where the website is hosted significantly influences SEO success. To understand how this works, Gear SEO, a leading systems integrator (SI), published an article with insights and practical examples on how to choose the best platform to create and host ecommerce experiences. \n\n \n**Original article by Rodrigo Botinhão, CEO and Founder of Gear SEO**: [Read Here](https://gearseo.com.br/mercado/plataforma-de-e-commerce-para-seo/)\n\n**Original article translated to English**: [Read Here](https://deco.cx/en/blog/gear-seo-article-en)\n\n \n\nIn this blog post we summarize the main points from GearSEO’s article and complement them with real examples of how clients leverage [deco.cx](https://deco.cx) to achieve extraordinary results.\n\n### **Key SEO elements for ecommerce platforms**\n\n### **1. Fast, responsive design**\n\nGoogle increasingly prioritizes mobile versions of websites. Your site must be responsive, ensuring content loads quickly across all devices.\n\n\n💨 Every site built on
deco.cx is inherently responsive. Migrating to deco.cx typically results in a 5x boost in PageSpeed, and being approved by Google's Core Web Vitals (CWV) standards. deco.cx supports high website performance through:\n\n
\n Server Side Rendering \n Edge deployment \n Optimized images\n \n Automatic conversion to light formats (webp/avif) \n Different sizes to each device \n Pre-load the main image (LCP of CWV) \n Lazy loading \n \n \n Cacheable fonts \n \n
Click here to read more! \n
\n\n\n\n_[dentalproclin.com.br](https://www.dentalproclin.com.br/), our first client using [wake.tech](https://www.wake.tech/), with CWV approved_\n\n### **2. Customizable URLs**\n\nHaving the flexibility to incorporate keywords into your URLs is an effective optimization strategy.\n\n🔗 By exposing both backend and frontend code to site creators,
deco.cx allows for full control over the URL structure, enabling optimal SEO customization.\n
\n\nFor instance, Gear SEO's project [BolsasJá](http://bolsasja.com.br) achieved significant SEO improvements by customizing category and subcategory URLs to the first level of navigation, enhancing page relevance.\n\nCategory: [https://bolsasja.com.br/bolsas-femininas](https://bolsasja.com.br/bolsas-femininas)\n\nSubcategory: [https://bolsasja.com.br/bolsa-casual](https://bolsasja.com.br/bolsa-casual)\n\n### **3. Integrated content strategy**\n\nMerging ecommerce with content-rich pages is a tactic to both improve the Customer Experience and increase SEO results. This content ranges from embedded ecommerce blogs or customized landing page for products and categories. \n\n 🧩 On
deco.cx , you can seamlessly blend text, images, videos, and other HTML elements into Product Detail Pages (PDPs), as well as manage satellite content within your domain, leveraging built-in blogging and frontend/backend customization for superior SEO results.\n
\n\n\n\n\n_Aviator's [PDP](https://www.aviator.com.br/camisa-oxford-slim-fit-verde-oliva-camisa-oxford-slim-fit-verde-oliva-vde-oliva/p), and [blog](https://www.aviator.com.br/blog)_\n\n### **4. Flexible collections and landing pages**\n\nCustom collections and landing pages are key for targeting long-tail keywords and seasonal traffic.\n\n 🛍️
deco.cx , enables the creation of product collections and landing pages on custom URLs not directly linked to the main catalog tree, facilitating creation of content that is more likely to convert buyers.\n
\n\n\n\n\n_Embelleze's [special Black Friday LP](https://www.embelleze.com/black-friday), with products outside of main catalogue_\n\n### **5. Editable meta elements**\n\nHaving control over and easy access to edit meta tags / titles is key to getting the most out of Google and Bing indexing, since this information is what new users will first see when they discover a website. One of the most relevant meta tags is the canonical tag, which tells the search engine which one is the canonical URL. The canonical URL is the version of a webpage chosen by the search engine as the main version when there are duplicates. This selected URL is prioritized to avoid showing repetitive content that does not provide unique value in search results.\n\n 🎯 [deco.cx](https://deco.cx) allows for full control over meta elements throughout your site (title, description, meta image, and more). When it comes to canonical tags, deco.cx not only assigns canonicals by default to make sure search engines know how to prioritize the most relevant URLs, it also makes these tags totally customizable. This flexibility means that you can avoid secondary URLs created through pagination or filters from being indexed by search engines.\n
\n\n\nFor example, on deco.cx, only option A is indexed by default (although this is 100% editable):\n\nA. yoursite.com/categories/category-1\n\nB. yoursite.com/categories/category-1/?ordenation=true&page=3\n\n\n\n_Form created on deco.cx by [Zee.Dog](http://Zee.Dog) to edit SEO meta elements_\n\n### **7. SEO-friendly frameworks**\n\nSites built with frameworks that ensure search engines can accurately crawl and index pages are generally ranked higher. \n\n ⚙️
deco.cx 's framework is 100% server side by default, meaning that no JavaScript is sent to the client browser. Even if you add client side scripts, they are first rendered on the server side. This guarantees that search engines have access to all the content in your site.\n
\n\n### **8. Product organization and availability**\n\nWhenever a product is out-of-stock or removed, all organic visits to the corresponding URL result in errors (page not found, error 404). Correctly managing these situations to redirect your visitors is important to maintain traffic and search rankings. \n\n🚫 Many platforms allow you to redirect missing URLs to similar addresses or to your site's homepage. On
deco.cx , you can go a step further, keeping the original URL available and directing your visitor to similar products in your store. This practice prevents errors in searches for missing products and enables out-of-stock items to keep on bringing organic traffic into your site.\n
\n\n### **9. Constant site availability**\n\nA high uptime is crucial for maintaining SEO rankings.\n\n✅ Sites on
deco.cx are guaranteed 99.99% uptime on average, ensuring that they are always available to both customers and search engines.
\n\n### **deco.cx: a leader in SEO-focused ecommerce**\n\nGear SEO's analysis positions deco.cx as a leader in implementing SEO recommendations with minimal complexity. Through their \"SEO in Practice\" program, Gear SEO showcased deco.cx's effectiveness using the headless storefront \"Bolsas Já,\" which combines deco.cx's frontend with Shopify's backend.\n\n\n\n### **Why opt for deco.cx?**\n\n- **Headless flexibility**: Offers creative SEO implementations, from responsiveness to meta element management.\n\n- **Seamless integrations**: Works effortlessly with major ecommerce backends.\n\n- **Cost-effective development**: Reduces costs while enhancing focus on SEO.\n\n### **Concluding thoughts**\n\nIn an ecosystem where perfection is elusive, deco.cx stands out for fulfilling comprehensive SEO needs. Its functionalities are designed to align with core SEO principles, ensuring ecommerce success."
+ "content": "SEO (Search Engine Optimization) practices are important for ecommerce websites because they affect the site's performance on search engines (e.g: Bing, Google), enabling (or not) potential customers to discover online stores and eventually make a purchase.\n\nThe platform where the website is hosted significantly influences SEO success. To understand how this works, Gear SEO, a leading systems integrator (SI), published an article with insights and practical examples on how to choose the best platform to create and host ecommerce experiences. \n\n \n**Original article by Rodrigo Botinhão, CEO and Founder of Gear SEO**: [Read Here](https://gearseo.com.br/mercado/plataforma-de-e-commerce-para-seo/)\n\n**Original article translated to English**: [Read Here](https://deco.cx/en/blog/gear-seo-article-en)\n\n \n\nIn this blog post we summarize the main points from GearSEO’s article and complement them with real examples of how clients leverage [deco.cx](https://deco.cx) to achieve extraordinary results.\n\n### **Key SEO elements for ecommerce platforms**\n\n### **1. Fast, responsive design**\n\nGoogle increasingly prioritizes mobile versions of websites. Your site must be responsive, ensuring content loads quickly across all devices.\n\n\n💨 Every site built on
deco.cx is inherently responsive. Migrating to deco.cx typically results in a 5x boost in PageSpeed, and being approved by Google's Core Web Vitals (CWV) standards. deco.cx supports high website performance through:\n\n
\n Server Side Rendering \n Edge deployment \n Optimized images\n \n Automatic conversion to light formats (webp/avif) \n Different sizes to each device \n Pre-load the main image (LCP of CWV) \n Lazy loading \n \n \n Cacheable fonts \n \n
Click here to read more! \n
\n\n\n\n_[dentalproclin.com.br](https://www.dentalproclin.com.br/), our first client using [wake.tech](https://www.wake.tech/), with CWV approved_\n\n### **2. Customizable URLs**\n\nHaving the flexibility to incorporate keywords into your URLs is an effective optimization strategy.\n\n🔗 By exposing both backend and frontend code to site creators,
deco.cx allows for full control over the URL structure, enabling optimal SEO customization.\n
\n\nFor instance, Gear SEO's project [BolsasJá](http://bolsasja.com.br) achieved significant SEO improvements by customizing category and subcategory URLs to the first level of navigation, enhancing page relevance.\n\nCategory: [https://bolsasja.com.br/bolsas-femininas](https://bolsasja.com.br/bolsas-femininas)\n\nSubcategory: [https://bolsasja.com.br/bolsa-casual](https://bolsasja.com.br/bolsa-casual)\n\n### **3. Integrated content strategy**\n\nMerging ecommerce with content-rich pages is a tactic to both improve the Customer Experience and increase SEO results. This content ranges from embedded ecommerce blogs or customized landing page for products and categories. \n\n 🧩 On
deco.cx , you can seamlessly blend text, images, videos, and other HTML elements into Product Detail Pages (PDPs), as well as manage satellite content within your domain, leveraging built-in blogging and frontend/backend customization for superior SEO results.\n
\n\n\n\n\n_Aviator's [PDP](https://www.aviator.com.br/camisa-oxford-slim-fit-verde-oliva-camisa-oxford-slim-fit-verde-oliva-vde-oliva/p), and [blog](https://www.aviator.com.br/blog)_\n\n### **4. Flexible collections and landing pages**\n\nCustom collections and landing pages are key for targeting long-tail keywords and seasonal traffic.\n\n 🛍️
deco.cx , enables the creation of product collections and landing pages on custom URLs not directly linked to the main catalog tree, facilitating creation of content that is more likely to convert buyers.\n
\n\n\n\n\n_Embelleze's [special Black Friday LP](https://www.embelleze.com/black-friday), with products outside of main catalogue_\n\n### **5. Editable meta elements**\n\nHaving control over and easy access to edit meta tags / titles is key to getting the most out of Google and Bing indexing, since this information is what new users will first see when they discover a website. One of the most relevant meta tags is the canonical tag, which tells the search engine which one is the canonical URL. The canonical URL is the version of a webpage chosen by the search engine as the main version when there are duplicates. This selected URL is prioritized to avoid showing repetitive content that does not provide unique value in search results.\n\n 🎯 [deco.cx](https://deco.cx) allows for full control over meta elements throughout your site (title, description, meta image, and more). When it comes to canonical tags, deco.cx not only assigns canonicals by default to make sure search engines know how to prioritize the most relevant URLs, it also makes these tags totally customizable. This flexibility means that you can avoid secondary URLs created through pagination or filters from being indexed by search engines.\n
\n\n\nFor example, on deco.cx, only option A is indexed by default (although this is 100% editable):\n\nA. yoursite.com/categories/category-1\n\nB. yoursite.com/categories/category-1/?ordenation=true&page=3\n\n\n\n_Form created on deco.cx by [Zee.Dog](http://Zee.Dog) to edit SEO meta elements_\n\n### **7. SEO-friendly frameworks**\n\nSites built with frameworks that ensure search engines can accurately crawl and index pages are generally ranked higher. \n\n ⚙️
deco.cx 's framework is 100% server side by default, meaning that no JavaScript is sent to the client browser. Even if you add client side scripts, they are first rendered on the server side. This guarantees that search engines have access to all the content in your site.\n
\n\n### **8. Product organization and availability**\n\nWhenever a product is out-of-stock or removed, all organic visits to the corresponding URL result in errors (page not found, error 404). Correctly managing these situations to redirect your visitors is important to maintain traffic and search rankings. \n\n🚫 Many platforms allow you to redirect missing URLs to similar addresses or to your site's homepage. On
deco.cx , you can go a step further, keeping the original URL available and directing your visitor to similar products in your store. This practice prevents errors in searches for missing products and enables out-of-stock items to keep on bringing organic traffic into your site.\n
\n\n### **9. Constant site availability**\n\nA high uptime is crucial for maintaining SEO rankings.\n\n✅ Sites on
deco.cx are guaranteed 99.99% uptime on average, ensuring that they are always available to both customers and search engines.
\n\n### **deco.cx: a leader in SEO-focused ecommerce**\n\nGear SEO's analysis positions deco.cx as a leader in implementing SEO recommendations with minimal complexity. Through their \"SEO in Practice\" program, Gear SEO showcased deco.cx's effectiveness using the headless storefront \"Bolsas Já,\" which combines deco.cx's frontend with Shopify's backend.\n\n\n\n### **Why opt for deco.cx?**\n\n- **Headless flexibility**: Offers creative SEO implementations, from responsiveness to meta element management.\n\n- **Seamless integrations**: Works effortlessly with major ecommerce backends.\n\n- **Cost-effective development**: Reduces costs while enhancing focus on SEO.\n\n### **Concluding thoughts**\n\nIn an ecosystem where perfection is elusive, deco.cx stands out for fulfilling comprehensive SEO needs. Its functionalities are designed to align with core SEO principles, ensuring ecommerce success."
},
"pt": {
"descr": "Revisão por GearSEO",
@@ -310,7 +310,7 @@
"seo": {
"image": "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/926a24a9-c3dd-41e9-9a02-451b71114e5b"
},
- "content": "Práticas de SEO (Otimização para Motores de Busca) são importantes para sites de e-commerce porque afetam o desempenho do site nos motores de busca (por exemplo: Bing, Google), possibilitando (ou não) que potenciais clientes descubram lojas online e eventualmente realizem uma compra.\n\nA plataforma onde o website é hospedado influencia significativamente o sucesso do SEO. Para entender como isso funciona, a GearSEO, uma líder em integrador de sistemas (SI), publicou um artigo com insights e exemplos práticos sobre como escolher a melhor plataforma para criar e hospedar experiências de comércio eletrônico.\n\n \n**Artigo original por Rodrigo Botinhão, CEO e Fundador da Gear SEO**: [Leia aqui](https://gearseo.com.br/mercado/plataforma-de-e-commerce-para-seo/)\n\n**Artigo original traduzido para Inglês**: [Leia aqui](https://deco.cx/en/blog/gear-seo-article-en)\n\n \n\nNeste post do blog, resumimos os principais pontos do artigo da GearSEO e complementamos com exemplos reais de como os clientes aproveitam a [deco.cx](https://deco.cx) para alcançar resultados extraordinários.\n\n### **Elementos-chave de SEO para plataformas de e-commerce**\n\n### **1. Design rápido e responsivo**\n\nO Google prioriza cada vez mais as versões móveis dos websites. Seu site deve ser responsivo, garantindo que o conteúdo seja carregado rapidamente em todos os dispositivos.\n\n\n💨 Todo site construído na
deco.cx é inerentemente responsivo. Migrar para a deco.cx geralmente resulta em um aumento de 5x no PageSpeed e em ser aprovado pelos padrões de Core Web Vitals (CWV) do Google. A deco.cx suporta alto desempenho do website por meio de:\n\n
\n Renderização Server Side \n Deploy na Edge \n Otimização de imagens\n \n Conversão automática para formatos leves (webp/avif) \n Diferentes tamanhos para cada tipo de dispositivo \n Pré-carregamento da imagem principal (LCP do CWV) \n Lazy loading das imagens \n \n \n Fontes armazenáveis em cache \n \n
Clique aqui para ler mais! \n
\n\n\n\n_[dentalproclin.com.br](https://www.dentalproclin.com.br/), nosso primeiro cliente utilizando [wake.tech](https://www.wake.tech/), com CWV aprovada_\n\n### **2. URLs customizáveis**\n\nTer flexibilidade para incorporar palavras-chave em suas URLs é uma estratégia eficaz de otimização.\n\n🔗 Ao expor o código backend e frontend aos criadores do site,
deco.cx permite controle total sobre a estrutura da URL, possibilitando a personalização ideal de SEO.\n
\n\nPor exemplo, o projeto da Gear SEO [BolsasJá](http://bolsasja.com.br) alcançou melhorias significativas de SEO ao personalizar as URLs de categoria e subcategoria para o primeiro nível de navegação, aumentando a relevância da página.\n\nCategoria: [https://bolsasja.com.br/bolsas-femininas](https://bolsasja.com.br/bolsas-femininas)\n\nSubcategoria: [https://bolsasja.com.br/bolsa-casual](https://bolsasja.com.br/bolsa-casual)\n\n### **3. Estratégia de conteúdo integrada**\n\nMesclar e-commerce com páginas ricas em conteúdo é uma tática para melhorar a Experiência do Cliente e aumentar os resultados de SEO. Esse conteúdo varia desde blogs de e-commerce incorporados até landing pages personalizadas para produtos e categorias. \n\n 🧩 Na
deco.cx , você pode mesclar textos, imagens, vídeos e outros elementos HTML em Páginas de Detalhes do Produto (PDPs), além de gerenciar conteúdo de satélite dentro do seu domínio, aproveitando a escrita integrada de blog e a personalização frontend/backend para resultados de SEO superiores.\n
\n\n\n\n\n_ [PDP](https://www.aviator.com.br/camisa-oxford-slim-fit-verde-oliva-camisa-oxford-slim-fit-verde-oliva-vde-oliva/p) e [blog](https://www.aviator.com.br/blog) da Aviator _\n\n### **4. Coleções e landing pages flexíveis**\n\nColeções e landing pages personalizadas são essenciais para segmentar palavras-chave de cauda longa e tráfego sazonal.\n\n 🛍️
deco.cx , permite a criação de coleções de produtos e landing pages em URLs personalizadas que não estão diretamente vinculadas à árvore de catálogo principal, facilitando a criação de conteúdo que tem mais chances de converter compradores.\n
\n\n\n\n\n_ [LP especial da Black Friday](https://www.embelleze.com/black-friday) da Embelleze, com produtos fora do catálogo principal _\n\n### **5. Elementos meta editáveis**\n\nTer controle e fácil acesso para editar meta tags/títulos é fundamental para obter o máximo proveito da indexação do Google e do Bing, pois essas informações são o que os novos usuários verão primeiro ao descobrir um website. Uma das meta tags mais relevantes é a tag canônica, que informa ao mecanismo de busca qual é a URL canônica. A URL canônica é a versão de uma página da web escolhida pelo mecanismo de busca como a versão principal quando há duplicatas. Esta URL selecionada é priorizada para evitar a exibição de conteúdo repetitivo que não fornece valor único nos resultados da pesquisa.\n\n 🎯 A [deco.cx](https://deco.cx) permite controle total sobre elementos meta em todo o seu site (título, descrição, imagem meta e mais). Quando se trata de tags canônicas, a deco.cx não apenas atribui canônicos por padrão para garantir que os mecanismos de busca saibam como priorizar as URLs mais relevantes, mas também torna essas tags totalmente personalizáveis. Essa flexibilidade significa que você pode evitar que URLs secundárias criadas por paginação ou filtros sejam indexadas pelos mecanismos de busca.\n
\n\n\nPor exemplo, na deco.cx só a opção A é indexada por padrão (embora isso seja 100% editável):\n\nA. yoursite.com/categories/category-1\n\nB. yoursite.com/categories/category-1/?ordenation=true&page=3\n\n\n\n_Formulário criado na deco.cx pela [Zee.Dog](http://Zee.Dog) para editar elementos meta de SEO_\n\n### **7. Frameworks SEO-friendly**\n\nSites construídos com frameworks que garantem que os mecanismos de busca possam rastrear e indexar páginas geralmente são classificados em posições mais altas. \n\n ⚙️ O framework da
deco.cx é 100% server side por padrão, o que significa que nenhum JavaScript é enviado para o navegador do cliente. Mesmo que você adicione scripts do lado do cliente, eles são primeiro renderizados no lado do servidor. Isso garante que os mecanismos de busca tenham acesso a todo o conteúdo do seu site.\n
\n\n### **8. Organização e disponibilidade de produtos**\n\nSempre que um produto estiver fora de estoque ou removido, todas as visitas orgânicas à URL correspondente resultarão em erros (página não encontrada, erro 404). Gerenciar corretamente essas situações para redirecionar seus visitantes é importante para manter o tráfego e as classificações de busca. \n\n🚫 Muitas plataformas permitem que você redirecione URLs ausentes para endereços semelhantes ou para a página inicial do seu site. Na
deco.cx , você pode ir um passo além, mantendo a URL original disponível e direcionando seu visitante para produtos similares em sua loja. Essa prática evita erros em buscas por produtos indisponíveis e permite que itens fora de estoque continuem trazendo tráfego orgânico para seu site.\n
\n\n### **9. Disponibilidade constante do site**\n\nUm alto tempo de atividade é crucial para manter as classificações de SEO.\n\n✅ Os sites na
deco.cx têm garantia de 99,99% de tempo de atividade em média, assegurando que estejam sempre disponíveis tanto para clientes quanto para mecanismos de busca.\n
\n\n### **deco.cx: líder em e-commerce focado em SEO**\n\nA análise da Gear SEO posiciona a deco.cx como líder na implementação de recomendações de SEO com mínima complexidade. Através do programa \"SEO na Prática\", a Gear SEO demonstrou a eficácia da deco.cx usando a headless storefront \"Bolsas Já\", que combina o frontend da deco.cx com o backend da Shopify.\n\n\n\n\n### **Por que optar pela deco.cx?**\n\n- **Flexibilidade headless**: Oferece implementações criativas de SEO, desde responsividade até gerenciamento de elementos meta.\n\n- **Integrações seamless**: Funciona sem esforço com os principais backends de comércio eletrônico.\n\n- **Desenvolvimento econômico**: Reduz custos enquanto aprimora o foco em SEO.\n\n### **Considerações finais**\n\nEm um ecossistema onde a perfeição é elusiva, a deco.cx se destaca por atender às necessidades abrangentes de SEO. Suas funcionalidades são projetadas para se alinhar aos princípios básicos de SEO, garantindo o sucesso do comércio eletrônico."
+ "content": "Práticas de SEO (Otimização para Motores de Busca) são importantes para sites de e-commerce porque afetam o desempenho do site nos motores de busca (por exemplo: Bing, Google), possibilitando (ou não) que potenciais clientes descubram lojas online e eventualmente realizem uma compra.\n\nA plataforma onde o website é hospedado influencia significativamente o sucesso do SEO. Para entender como isso funciona, a GearSEO, uma líder em integrador de sistemas (SI), publicou um artigo com insights e exemplos práticos sobre como escolher a melhor plataforma para criar e hospedar experiências de comércio eletrônico.\n\n \n**Artigo original por Rodrigo Botinhão, CEO e Fundador da Gear SEO**: [Leia aqui](https://gearseo.com.br/mercado/plataforma-de-e-commerce-para-seo/)\n\n**Artigo original traduzido para Inglês**: [Leia aqui](https://deco.cx/en/blog/gear-seo-article-en)\n\n \n\nNeste post do blog, resumimos os principais pontos do artigo da GearSEO e complementamos com exemplos reais de como os clientes aproveitam a [deco.cx](https://deco.cx) para alcançar resultados extraordinários.\n\n### **Elementos-chave de SEO para plataformas de e-commerce**\n\n### **1. Design rápido e responsivo**\n\nO Google prioriza cada vez mais as versões móveis dos websites. Seu site deve ser responsivo, garantindo que o conteúdo seja carregado rapidamente em todos os dispositivos.\n\n\n💨 Todo site construído na
deco.cx é inerentemente responsivo. Migrar para a deco.cx geralmente resulta em um aumento de 5x no PageSpeed e em ser aprovado pelos padrões de Core Web Vitals (CWV) do Google. A deco.cx suporta alto desempenho do website por meio de:\n\n
\n Renderização Server Side \n Deploy na Edge \n Otimização de imagens\n \n Conversão automática para formatos leves (webp/avif) \n Diferentes tamanhos para cada tipo de dispositivo \n Pré-carregamento da imagem principal (LCP do CWV) \n Lazy loading das imagens \n \n \n Fontes armazenáveis em cache \n \n
Clique aqui para ler mais! \n
\n\n\n\n_[dentalproclin.com.br](https://www.dentalproclin.com.br/), nosso primeiro cliente utilizando [wake.tech](https://www.wake.tech/), com CWV aprovada_\n\n### **2. URLs customizáveis**\n\nTer flexibilidade para incorporar palavras-chave em suas URLs é uma estratégia eficaz de otimização.\n\n🔗 Ao expor o código backend e frontend aos criadores do site,
deco.cx permite controle total sobre a estrutura da URL, possibilitando a personalização ideal de SEO.\n
\n\nPor exemplo, o projeto da Gear SEO [BolsasJá](http://bolsasja.com.br) alcançou melhorias significativas de SEO ao personalizar as URLs de categoria e subcategoria para o primeiro nível de navegação, aumentando a relevância da página.\n\nCategoria: [https://bolsasja.com.br/bolsas-femininas](https://bolsasja.com.br/bolsas-femininas)\n\nSubcategoria: [https://bolsasja.com.br/bolsa-casual](https://bolsasja.com.br/bolsa-casual)\n\n### **3. Estratégia de conteúdo integrada**\n\nMesclar e-commerce com páginas ricas em conteúdo é uma tática para melhorar a Experiência do Cliente e aumentar os resultados de SEO. Esse conteúdo varia desde blogs de e-commerce incorporados até landing pages personalizadas para produtos e categorias. \n\n 🧩 Na
deco.cx , você pode mesclar textos, imagens, vídeos e outros elementos HTML em Páginas de Detalhes do Produto (PDPs), além de gerenciar conteúdo de satélite dentro do seu domínio, aproveitando a escrita integrada de blog e a personalização frontend/backend para resultados de SEO superiores.\n
\n\n\n\n\n_ [PDP](https://www.aviator.com.br/camisa-oxford-slim-fit-verde-oliva-camisa-oxford-slim-fit-verde-oliva-vde-oliva/p) e [blog](https://www.aviator.com.br/blog) da Aviator _\n\n### **4. Coleções e landing pages flexíveis**\n\nColeções e landing pages personalizadas são essenciais para segmentar palavras-chave de cauda longa e tráfego sazonal.\n\n 🛍️
deco.cx , permite a criação de coleções de produtos e landing pages em URLs personalizadas que não estão diretamente vinculadas à árvore de catálogo principal, facilitando a criação de conteúdo que tem mais chances de converter compradores.\n
\n\n\n\n\n_ [LP especial da Black Friday](https://www.embelleze.com/black-friday) da Embelleze, com produtos fora do catálogo principal _\n\n### **5. Elementos meta editáveis**\n\nTer controle e fácil acesso para editar meta tags/títulos é fundamental para obter o máximo proveito da indexação do Google e do Bing, pois essas informações são o que os novos usuários verão primeiro ao descobrir um website. Uma das meta tags mais relevantes é a tag canônica, que informa ao mecanismo de busca qual é a URL canônica. A URL canônica é a versão de uma página da web escolhida pelo mecanismo de busca como a versão principal quando há duplicatas. Esta URL selecionada é priorizada para evitar a exibição de conteúdo repetitivo que não fornece valor único nos resultados da pesquisa.\n\n 🎯 A [deco.cx](https://deco.cx) permite controle total sobre elementos meta em todo o seu site (título, descrição, imagem meta e mais). Quando se trata de tags canônicas, a deco.cx não apenas atribui canônicos por padrão para garantir que os mecanismos de busca saibam como priorizar as URLs mais relevantes, mas também torna essas tags totalmente personalizáveis. Essa flexibilidade significa que você pode evitar que URLs secundárias criadas por paginação ou filtros sejam indexadas pelos mecanismos de busca.\n
\n\n\nPor exemplo, na deco.cx só a opção A é indexada por padrão (embora isso seja 100% editável):\n\nA. yoursite.com/categories/category-1\n\nB. yoursite.com/categories/category-1/?ordenation=true&page=3\n\n\n\n_Formulário criado na deco.cx pela [Zee.Dog](http://Zee.Dog) para editar elementos meta de SEO_\n\n### **7. Frameworks SEO-friendly**\n\nSites construídos com frameworks que garantem que os mecanismos de busca possam rastrear e indexar páginas geralmente são classificados em posições mais altas. \n\n ⚙️ O framework da
deco.cx é 100% server side por padrão, o que significa que nenhum JavaScript é enviado para o navegador do cliente. Mesmo que você adicione scripts do lado do cliente, eles são primeiro renderizados no lado do servidor. Isso garante que os mecanismos de busca tenham acesso a todo o conteúdo do seu site.\n
\n\n### **8. Organização e disponibilidade de produtos**\n\nSempre que um produto estiver fora de estoque ou removido, todas as visitas orgânicas à URL correspondente resultarão em erros (página não encontrada, erro 404). Gerenciar corretamente essas situações para redirecionar seus visitantes é importante para manter o tráfego e as classificações de busca. \n\n🚫 Muitas plataformas permitem que você redirecione URLs ausentes para endereços semelhantes ou para a página inicial do seu site. Na
deco.cx , você pode ir um passo além, mantendo a URL original disponível e direcionando seu visitante para produtos similares em sua loja. Essa prática evita erros em buscas por produtos indisponíveis e permite que itens fora de estoque continuem trazendo tráfego orgânico para seu site.\n
\n\n### **9. Disponibilidade constante do site**\n\nUm alto tempo de atividade é crucial para manter as classificações de SEO.\n\n✅ Os sites na
deco.cx têm garantia de 99,99% de tempo de atividade em média, assegurando que estejam sempre disponíveis tanto para clientes quanto para mecanismos de busca.\n
\n\n### **deco.cx: líder em e-commerce focado em SEO**\n\nA análise da Gear SEO posiciona a deco.cx como líder na implementação de recomendações de SEO com mínima complexidade. Através do programa \"SEO na Prática\", a Gear SEO demonstrou a eficácia da deco.cx usando a headless storefront \"Bolsas Já\", que combina o frontend da deco.cx com o backend da Shopify.\n\n\n\n\n### **Por que optar pela deco.cx?**\n\n- **Flexibilidade headless**: Oferece implementações criativas de SEO, desde responsividade até gerenciamento de elementos meta.\n\n- **Integrações seamless**: Funciona sem esforço com os principais backends de comércio eletrônico.\n\n- **Desenvolvimento econômico**: Reduz custos enquanto aprimora o foco em SEO.\n\n### **Considerações finais**\n\nEm um ecossistema onde a perfeição é elusiva, a deco.cx se destaca por atender às necessidades abrangentes de SEO. Suas funcionalidades são projetadas para se alinhar aos princípios básicos de SEO, garantindo o sucesso do comércio eletrônico."
}
},
"date": "02/02/2024",
@@ -743,12 +743,12 @@
"en": {
"descr": "Revolutionizing Web Development",
"title": "Partials",
- "content": "[Fresh](https://fresh.deno.dev/), the web framework used by Deco, is known for enabling the creation of high-performance pages. One of the reasons why pages created in Deco are so efficient is due to the island architecture. This architecture allows developers to remove non-interactive parts of the final JavaScript package, reducing the total amount of JavaScript on the page and freeing up the browser to perform other tasks.\n\nHowever, one of the limitations of this architecture is that very complex pages, with a lot of interactivity and therefore many islands, still require a large amount of JavaScript. Fortunately, this limitation is now a thing of the past, thanks to the introduction of Partials.\n\n## How It Works\n\nPartials, inspired by [htmx](https://htmx.org/docs/), operate with a runtime that intercepts user interactions with button, anchor, and form elements. These interactions are sent to our server, which calculates the new state of the page and responds to the browser. The browser receives the new UI state in pure HTML, which is then processed and the differences are applied, changing the page to its final state. For more detailed information about Partials, see the [Fresh documentation](https://github.com/denoland/fresh/issues/1609).\n\n## Partials in Action\n\nWe are migrating the components of the Deco store to the new Partials solution. So far, we have migrated the SKU selector, which can be viewed in action [here](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). More changes, such as `infinite scroll` and improvements to filters, are coming soon.\n\nAnother unlocked feature is the ability to create folds on the page. E-commerce pages are usually long and contain many elements. Browsers often face problems when there are many elements in the HTML. To deal with this, the fold technique was invented.\n\nThe basic idea of this technique is to divide the content of the page into two parts: the content above and the content below the fold. The content above the fold is loaded on the first request to the server. The content below the fold is loaded as soon as the first request is completed. This type of functionality used to be difficult to implement in older architectures. Fortunately, we have embedded this logic in a new section called `Deferred`. This section accepts a list of sections as a parameter that should have their loading delayed until a later time.\n\nTo use this new section:\n\n1. Access the Deco administration panel and add the `Rendering > Deferred` section to your page.\n2. Move the sections you want to defer to the `Deferred` section.\n3. Save and publish the page.\n4. Done! The sections are now deferred without the need to change the code!\n\nSee `Deferred` in action at this [link](https://storefront-vtex.deco.site/home-partial).\n\n> Note that, for the `Deferred` section to appear, you must be on the latest version of `fresh`, `apps`, and deco!\n\nA question you may be asking yourself now is: How do I choose the sections I should include in the deferred? To do this, use the performance tab and start with the heaviest sections that offer the greatest return!\n\nFor more information, see our [docs](https://www.deco.cx/docs/en/developing-capabilities/interactive-sections/partial)"
+ "content": "[Fresh](https://fresh.deno.dev/), the web framework used by Deco, is known for enabling the creation of high-performance pages. One of the reasons why pages created in Deco are so efficient is due to the island architecture. This architecture allows developers to remove non-interactive parts of the final JavaScript package, reducing the total amount of JavaScript on the page and freeing up the browser to perform other tasks.\n\nHowever, one of the limitations of this architecture is that very complex pages, with a lot of interactivity and therefore many islands, still require a large amount of JavaScript. Fortunately, this limitation is now a thing of the past, thanks to the introduction of Partials.\n\n## How It Works\n\nPartials, inspired by [htmx](https://htmx.org/docs/), operate with a runtime that intercepts user interactions with button, anchor, and form elements. These interactions are sent to our server, which calculates the new state of the page and responds to the browser. The browser receives the new UI state in pure HTML, which is then processed and the differences are applied, changing the page to its final state. For more detailed information about Partials, see the [Fresh documentation](https://github.com/denoland/fresh/issues/1609).\n\n## Partials in Action\n\nWe are migrating the components of the Deco store to the new Partials solution. So far, we have migrated the SKU selector, which can be viewed in action [here](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). More changes, such as `infinite scroll` and improvements to filters, are coming soon.\n\nAnother unlocked feature is the ability to create folds on the page. E-commerce pages are usually long and contain many elements. Browsers often face problems when there are many elements in the HTML. To deal with this, the fold technique was invented.\n\nThe basic idea of this technique is to divide the content of the page into two parts: the content above and the content below the fold. The content above the fold is loaded on the first request to the server. The content below the fold is loaded as soon as the first request is completed. This type of functionality used to be difficult to implement in older architectures. Fortunately, we have embedded this logic in a new section called `Deferred`. This section accepts a list of sections as a parameter that should have their loading delayed until a later time.\n\nTo use this new section:\n\n1. Access the Deco administration panel and add the `Rendering > Deferred` section to your page.\n2. Move the sections you want to defer to the `Deferred` section.\n3. Save and publish the page.\n4. Done! The sections are now deferred without the need to change the code!\n\nSee `Deferred` in action at this [link](https://storefront-vtex.deco.site/home-partial).\n\n> Note that, for the `Deferred` section to appear, you must be on the latest version of `fresh`, `apps`, and deco!\n\nA question you may be asking yourself now is: How do I choose the sections I should include in the deferred? To do this, use the performance tab and start with the heaviest sections that offer the greatest return!\n\nFor more information, see our [docs](https://docs.deco.cx/en/developing-capabilities/interactive-sections/partial)"
},
"pt": {
"descr": "Revolucionando o Desenvolvimento Web",
"title": "Partials",
- "content": "[Fresh](https://fresh.deno.dev/), o framework web utilizado pela Deco, é conhecido por possibilitar a criação de páginas de altíssimo desempenho. Uma das razões pelas quais as páginas criadas na Deco são tão eficientes é devido à arquitetura de ilhas. Essa arquitetura permite que os desenvolvedores removam partes não interativas do pacote final de JavaScript, reduzindo a quantidade total de JavaScript na página e aliviando o navegador para realizar outras tarefas.\n\nNo entanto, uma das limitações dessa arquitetura é que páginas muito complexas, com muita interatividade e, portanto, muitas ilhas, ainda exigem uma grande quantidade de JavaScript. Felizmente, essa limitação agora é coisa do passado, graças à introdução dos Partials.\n\n## Como Funciona?\n\nOs Partials, inspirados no [htmx](https://htmx.org/docs/), operam com um runtime que intercepta as interações do usuário com elementos de botão, âncora e formulário. Essas interações são enviadas para nosso servidor, que calcula o novo estado da página e responde ao navegador. O navegador recebe o novo estado da IU em HTML puro, que é então processado e as diferenças são aplicadas, alterando a página para o seu estado final. Para obter informações mais detalhadas sobre os Partials, consulte a [documentação](https://github.com/denoland/fresh/issues/1609) do Fresh.\n\n## Partials em Ação\n\nEstamos migrando os componentes da loja da Deco para a nova solução de Partials. Até o momento, migramos o seletor de SKU, que pode ser visualizado em ação [aqui](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). Mais mudanças, como `infinite scroll` e melhorias nos filtros, estão por vir.\n\nOutra funcionalidade desbloqueada é a possibilidade de criar dobras na página. As páginas de comércio eletrônico geralmente são longas e contêm muitos elementos. Os navegadores costumam enfrentar problemas quando há muitos elementos no HTML. Para lidar com isso, foi inventada a técnica de dobra.\n\nA ideia básica dessa técnica é dividir o conteúdo da página em duas partes: o conteúdo acima e o conteúdo abaixo da dobra. O conteúdo acima da dobra é carregado na primeira solicitação ao servidor. O conteúdo abaixo da dobra é carregado assim que a primeira solicitação é concluída. Esse tipo de funcionalidade costumava ser difícil de implementar em arquiteturas mais antigas. Felizmente, embutimos essa lógica em uma nova seção chamada `Deferred`. Esta seção aceita uma lista de seções como parâmetro que devem ter seu carregamento adiado para um momento posterior.\n\nPara usar essa nova seção:\n\n1. Acesse o painel de administração da Deco e adicione a seção `Rendering > Deferred` à sua página.\n2. Mova as seções que deseja adiar para a seção `Deferred`.\n3. Salve e publique a página.\n4. Pronto! As seções agora estão adiadas sem a necessidade de alterar o código!\n\nVeja `Deferred` em ação neste [link](https://storefront-vtex.deco.site/home-partial).\n\n> Observe que, para a seção `Deferred` aparecer, você deve estar na versão mais recente do `fresh`, `apps` e deco!\n\nUma pergunta que você pode estar se fazendo agora é: Como escolher as seções que devo incluir no deferred? Para isso, use a aba de desempenho e comece pelas seções mais pesadas que oferecem o maior retorno!\n\nPara mais informações, veja nossas [docs](https://www.deco.cx/docs/en/developing-capabilities/interactive-sections/partial)"
+ "content": "[Fresh](https://fresh.deno.dev/), o framework web utilizado pela Deco, é conhecido por possibilitar a criação de páginas de altíssimo desempenho. Uma das razões pelas quais as páginas criadas na Deco são tão eficientes é devido à arquitetura de ilhas. Essa arquitetura permite que os desenvolvedores removam partes não interativas do pacote final de JavaScript, reduzindo a quantidade total de JavaScript na página e aliviando o navegador para realizar outras tarefas.\n\nNo entanto, uma das limitações dessa arquitetura é que páginas muito complexas, com muita interatividade e, portanto, muitas ilhas, ainda exigem uma grande quantidade de JavaScript. Felizmente, essa limitação agora é coisa do passado, graças à introdução dos Partials.\n\n## Como Funciona?\n\nOs Partials, inspirados no [htmx](https://htmx.org/docs/), operam com um runtime que intercepta as interações do usuário com elementos de botão, âncora e formulário. Essas interações são enviadas para nosso servidor, que calcula o novo estado da página e responde ao navegador. O navegador recebe o novo estado da IU em HTML puro, que é então processado e as diferenças são aplicadas, alterando a página para o seu estado final. Para obter informações mais detalhadas sobre os Partials, consulte a [documentação](https://github.com/denoland/fresh/issues/1609) do Fresh.\n\n## Partials em Ação\n\nEstamos migrando os componentes da loja da Deco para a nova solução de Partials. Até o momento, migramos o seletor de SKU, que pode ser visualizado em ação [aqui](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). Mais mudanças, como `infinite scroll` e melhorias nos filtros, estão por vir.\n\nOutra funcionalidade desbloqueada é a possibilidade de criar dobras na página. As páginas de comércio eletrônico geralmente são longas e contêm muitos elementos. Os navegadores costumam enfrentar problemas quando há muitos elementos no HTML. Para lidar com isso, foi inventada a técnica de dobra.\n\nA ideia básica dessa técnica é dividir o conteúdo da página em duas partes: o conteúdo acima e o conteúdo abaixo da dobra. O conteúdo acima da dobra é carregado na primeira solicitação ao servidor. O conteúdo abaixo da dobra é carregado assim que a primeira solicitação é concluída. Esse tipo de funcionalidade costumava ser difícil de implementar em arquiteturas mais antigas. Felizmente, embutimos essa lógica em uma nova seção chamada `Deferred`. Esta seção aceita uma lista de seções como parâmetro que devem ter seu carregamento adiado para um momento posterior.\n\nPara usar essa nova seção:\n\n1. Acesse o painel de administração da Deco e adicione a seção `Rendering > Deferred` à sua página.\n2. Mova as seções que deseja adiar para a seção `Deferred`.\n3. Salve e publique a página.\n4. Pronto! As seções agora estão adiadas sem a necessidade de alterar o código!\n\nVeja `Deferred` em ação neste [link](https://storefront-vtex.deco.site/home-partial).\n\n> Observe que, para a seção `Deferred` aparecer, você deve estar na versão mais recente do `fresh`, `apps` e deco!\n\nUma pergunta que você pode estar se fazendo agora é: Como escolher as seções que devo incluir no deferred? Para isso, use a aba de desempenho e comece pelas seções mais pesadas que oferecem o maior retorno!\n\nPara mais informações, veja nossas [docs](https://docs.deco.cx/en/developing-capabilities/interactive-sections/partial)"
}
},
"date": "10/06/2023",
@@ -791,14 +791,14 @@
{
"body": {
"pt": {
- "content": "Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://www.deco.cx/docs/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://www.deco.cx/docs/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://www.deco.cx/docs/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://www.deco.cx/docs/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://www.deco.cx/docs/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx).",
+ "content": "Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://docs.deco.cx/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://docs.deco.cx/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://docs.deco.cx/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://docs.deco.cx/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://docs.deco.cx/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx).",
"title": "Como a deco.cx faz sua loja converter mais",
"descr": "Descubra como a nossa plataforma headless ajuda lojas virtuais a converter mais clientes, simplificando a criação e manutenção de lojas rápidas e personalizáveis. "
},
"en": {
"title": "Como a deco.cx faz sua loja converter mais",
"descr": "Descubra como a nossa plataforma headless ajuda lojas virtuais a converter mais clientes, simplificando a criação e manutenção de lojas rápidas e personalizáveis. ",
- "content": "Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://www.deco.cx/docs/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://www.deco.cx/docs/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://www.deco.cx/docs/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://www.deco.cx/docs/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://www.deco.cx/docs/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx)."
+ "content": "Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://docs.deco.cx/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://docs.deco.cx/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://docs.deco.cx/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://docs.deco.cx/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://docs.deco.cx/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx)."
}
},
"path": "como-a-deco-faz-sua-loja-converter-mais.md",
@@ -829,12 +829,12 @@
"pt": {
"title": "Como utilizar apps para adicionar funcionalidades aos seus sites.",
"descr": "Descubra como a nossa plataforma headless ajuda lojas virtuais a converter mais clientes, simplificando a criação e manutenção de lojas rápidas e personalizáveis.",
- "content": "Nesta última versão, a deco está revolucionando a forma como você adiciona funcionalidades em seus **sites**. Dê as boas-vindas à era dos Apps.\n\n**O que são Apps?**\n\nAs Apps são poderosos conjuntos de capacidades de negócios que podem ser importados e configurados em sites deco. Uma App na deco é essencialmente uma coleção de vários componentes, como **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, ou quaisquer outros tipos de blocks que podem ser usados para estender a funcionalidade dos seus sites.\n\nCom as apps, você tem o poder de definir propriedades necessárias para a funcionalidade como um todo, como chaves de aplicação, nomes de contas entre outros.\n\n**Templates de Loja**\n\nIntroduzimos vários templates de lojas integradas com plataformas como - Vnda., VTEX e Shopify. Agora, você tem a flexibilidade de escolher o template que melhor se adapta às suas necessidades e pode criar facilmente sua loja a partir desses templates.\n\n \n\n**DecoHub: Seu Hub de Apps**\n\nCom a estreia do DecoHub, você pode descobrir e instalar uma variedade de apps com base em suas necessidades do seu negócio. Se você é um desenvolvedor, pode criar seus próprios apps fora do repositório do [deco-cx/apps](http://github.com/deco-cx/apps) e enviar um PR para adicioná-los ao DecoHub.\n\n**Transição de Deco-Sites/Std para Apps**\n\nMigramos do hub central de integrações do [deco-sites/std](https://github.com/deco-sites/std) para uma abordagem mais modular com o [deco-cx/apps](http://github.com/deco-cx/apps). O STD agora está em modo de manutenção, portanto, certifique-se de migrar sua loja e seguir as etapas de instalação em nossa [documentação](https://www.deco.cx/docs/en/getting-started/installing-an-app) para aproveitar o novo ecossistema de Apps.\n\n**Comece a Usar os Apps Agora Mesmo!**\n\nDesenvolvedores, mergulhem em nosso [guia](https://www.deco.cx/docs/en/developing-capabilities/apps/creating-an-app) sobre como criar seu primeiro App no Deco. Para lojas existentes, faça a migração executando `deno run -A -r https://deco.cx/upgrade`.\n\nIsso é apenas o começo. Estamos trabalhando continuamente para aprimorar nosso ecossistema de Apps e explorar novos recursos, como transições de visualização e soluções de estilo.\n\nFiquem ligados e vamos construir juntos o futuro do desenvolvimento web!"
+ "content": "Nesta última versão, a deco está revolucionando a forma como você adiciona funcionalidades em seus **sites**. Dê as boas-vindas à era dos Apps.\n\n**O que são Apps?**\n\nAs Apps são poderosos conjuntos de capacidades de negócios que podem ser importados e configurados em sites deco. Uma App na deco é essencialmente uma coleção de vários componentes, como **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, ou quaisquer outros tipos de blocks que podem ser usados para estender a funcionalidade dos seus sites.\n\nCom as apps, você tem o poder de definir propriedades necessárias para a funcionalidade como um todo, como chaves de aplicação, nomes de contas entre outros.\n\n**Templates de Loja**\n\nIntroduzimos vários templates de lojas integradas com plataformas como - Vnda., VTEX e Shopify. Agora, você tem a flexibilidade de escolher o template que melhor se adapta às suas necessidades e pode criar facilmente sua loja a partir desses templates.\n\n \n\n**DecoHub: Seu Hub de Apps**\n\nCom a estreia do DecoHub, você pode descobrir e instalar uma variedade de apps com base em suas necessidades do seu negócio. Se você é um desenvolvedor, pode criar seus próprios apps fora do repositório do [deco-cx/apps](http://github.com/deco-cx/apps) e enviar um PR para adicioná-los ao DecoHub.\n\n**Transição de Deco-Sites/Std para Apps**\n\nMigramos do hub central de integrações do [deco-sites/std](https://github.com/deco-sites/std) para uma abordagem mais modular com o [deco-cx/apps](http://github.com/deco-cx/apps). O STD agora está em modo de manutenção, portanto, certifique-se de migrar sua loja e seguir as etapas de instalação em nossa [documentação](https://docs.deco.cx/en/getting-started/installing-an-app) para aproveitar o novo ecossistema de Apps.\n\n**Comece a Usar os Apps Agora Mesmo!**\n\nDesenvolvedores, mergulhem em nosso [guia](https://docs.deco.cx/en/developing-capabilities/apps/creating-an-app) sobre como criar seu primeiro App no Deco. Para lojas existentes, faça a migração executando `deno run -A -r https://deco.cx/upgrade`.\n\nIsso é apenas o começo. Estamos trabalhando continuamente para aprimorar nosso ecossistema de Apps e explorar novos recursos, como transições de visualização e soluções de estilo.\n\nFiquem ligados e vamos construir juntos o futuro do desenvolvimento web!"
},
"en": {
"title": "How to use apps to add functionality to your sites.",
"descr": "Discover how our headless platform helps e-commerce stores convert more customers by simplifying the creation and maintenance of fast, customizable stores.",
- "content": "In this latest release, deco is revolutionizing the way you add functionality to your **sites**. Welcome to the era of Apps.\n\n**What are Apps?**\n\nApps are powerful sets of business capabilities that can be imported and configured in deco sites. An App in deco is essentially a collection of various components, such as **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, or any other types of blocks that can be used to extend the functionality of your sites.\n\nWith apps, you have the power to define properties necessary for the functionality as a whole, such as application keys, account names, and more.\n\n**Store Templates**\n\nWe've introduced several store templates integrated with platforms like - Vnda., VTEX, and Shopify. Now, you have the flexibility to choose the template that best suits your needs and can easily create your store from these templates.\n\n \n\n**DecoHub: Your App Hub**\n\nWith the debut of DecoHub, you can discover and install a variety of apps based on your business needs. If you're a developer, you can create your own apps outside of the [deco-cx/apps](http://github.com/deco-cx/apps) repository and submit a PR to add them to DecoHub.\n\n**Transition from Deco-Sites/Std to Apps**\n\nWe've migrated from the central integration hub of [deco-sites/std](https://github.com/deco-sites/std) to a more modular approach with [deco-cx/apps](http://github.com/deco-cx/apps). STD is now in maintenance mode, so be sure to migrate your store and follow the installation steps in our [documentation](https://www.deco.cx/docs/en/getting-started/installing-an-app) to take advantage of the new Apps ecosystem.\n\n**Start Using Apps Now!**\n\nDevelopers, dive into our [guide](https://www.deco.cx/docs/en/developing-capabilities/apps/creating-an-app) on how to create your first App in Deco. For existing stores, make the migration by running `deno run -A -r https://deco.cx/upgrade`.\n\nThis is just the beginning. We're continuously working to enhance our Apps ecosystem and explore new features, such as view transitions and styling solutions.\n\nStay tuned and let's build the future of web development together!"
+ "content": "In this latest release, deco is revolutionizing the way you add functionality to your **sites**. Welcome to the era of Apps.\n\n**What are Apps?**\n\nApps are powerful sets of business capabilities that can be imported and configured in deco sites. An App in deco is essentially a collection of various components, such as **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, or any other types of blocks that can be used to extend the functionality of your sites.\n\nWith apps, you have the power to define properties necessary for the functionality as a whole, such as application keys, account names, and more.\n\n**Store Templates**\n\nWe've introduced several store templates integrated with platforms like - Vnda., VTEX, and Shopify. Now, you have the flexibility to choose the template that best suits your needs and can easily create your store from these templates.\n\n \n\n**DecoHub: Your App Hub**\n\nWith the debut of DecoHub, you can discover and install a variety of apps based on your business needs. If you're a developer, you can create your own apps outside of the [deco-cx/apps](http://github.com/deco-cx/apps) repository and submit a PR to add them to DecoHub.\n\n**Transition from Deco-Sites/Std to Apps**\n\nWe've migrated from the central integration hub of [deco-sites/std](https://github.com/deco-sites/std) to a more modular approach with [deco-cx/apps](http://github.com/deco-cx/apps). STD is now in maintenance mode, so be sure to migrate your store and follow the installation steps in our [documentation](https://docs.deco.cx/en/getting-started/installing-an-app) to take advantage of the new Apps ecosystem.\n\n**Start Using Apps Now!**\n\nDevelopers, dive into our [guide](https://docs.deco.cx/en/developing-capabilities/apps/creating-an-app) on how to create your first App in Deco. For existing stores, make the migration by running `deno run -A -r https://deco.cx/upgrade`.\n\nThis is just the beginning. We're continuously working to enhance our Apps ecosystem and explore new features, such as view transitions and styling solutions.\n\nStay tuned and let's build the future of web development together!"
}
},
"path": "apps-era.md",
diff --git a/.deco/blocks/pages-updateddocswithwildcard-fdc3cbd645f6.json b/.deco/blocks/pages-updateddocswithwildcard-fdc3cbd645f6.json
deleted file mode 100644
index 15fb249b..00000000
--- a/.deco/blocks/pages-updateddocswithwildcard-fdc3cbd645f6.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"Updated Docs with wildcard","path":"/docs/*","sections":{"variants":[{"rule":{"path":"*/en/*","__resolveType":"site/matchers/MatchPath.ts"},"value":[{"__resolveType":"GTM"},{"__resolveType":"HeaderV2"},{"__resolveType":"PageContent"},{"__resolveType":"Deco Footer [EN]"}]},{"rule":{"__resolveType":"$live/matchers/MatchAlways.ts"},"value":[{"__resolveType":"GTM"},{"__resolveType":"HeaderV2"},{"__resolveType":"PageContent"},{"__resolveType":"Deco Footer [EN]"}]}],"__resolveType":"$live/flags/multivariate.ts"},"__resolveType":"$live/pages/LivePage.tsx"}
\ No newline at end of file
diff --git a/.deco/blocks/posts.json b/.deco/blocks/posts.json
index 8ab5b0b4..f4e14b7b 100644
--- a/.deco/blocks/posts.json
+++ b/.deco/blocks/posts.json
@@ -1 +1 @@
-{"list":{"posts":[{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/6815764e-1eca-4089-bce3-6d9e37a9171d","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/bc28ef76-67cf-44c7-9ef2-3c5c3713d975"},"date":"07/11/2023","path":"nuvemshop-integration","tags":[],"descr":"Nuvemshop is now available on deco.cx","title":"Nuvemshop Integration","author":"Guilherme Tavano","content":"We're thrilled to bring you the latest chapter in our journey to streamline your e-commerce experience. Introducing the new integration of [deco.cx](https://deco.cx/) with Nuvemshop, an e-commerce platform for growing businesses!\n\n## Seamless Integration for Growth\n\nOur goal is simple: to empower your e-commerce store with the robust capabilities of Nuvemshop, making it easier than ever to expand your business.\n\nSimply fill in your Nuvemshop store details on [deco.cx](https://deco.cx/), and you're all set to fetch your products and customize your frontend.\n\n## Available Features\n\n- Product Shelf\n\n \n\n- Product Listing Pages \n\n- Category and Search\n\n- Product Details Page\n\n- Minicart\n\n- Checkout Proxied\n\nIt's about bringing the functionality of Nuvemshop into [deco.cx](https://deco.cx/), where your e-commerce vision takes on a new life, more customizable and fast.","readTime":"2","authorAvatar":"https://lh3.googleusercontent.com/ogw/AKPQZvxFwHo7yUU95E95OBqFaqXuLRfAGq0mMDuC7cQ7=s64-c-mo"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8242aca6-5215-4321-8e9d-f876fc1d1d58","seo":{"title":"Black Friday 2023","canonical":"/black-friday-2023"},"date":"06/11/2023","lang":"en","path":"black-friday-2023.md","tags":[],"descr":"Checklist for a smooth shopping season","title":"Black Friday 2023","author":"Tiago Gimenes","content":"Black Friday is just around the corner, and it's an incredible opportunity for online businesses to boost their sales. To help you make the most of this shopping period, we've compiled a list of essential tasks to ensure that your online store is fully prepared for Black Friday 2023.\n\n## Adopt Ahead-of-Time Builds\n\nFresh recently introduced an innovative feature called \"ahead of time builds,\" designed to transform how you create and deliver your website. This approach not only stabilizes your store's JavaScript but also significantly improves server boot times. To fully understand this new approach, you can explore the structured documentation provided by Fresh [here](https://fresh.deno.dev/docs/concepts/ahead-of-time-builds).\n\nAt [Deco.cx](https://deco.cx/), we strongly recommend adopting the ahead-of-time version because it provides scalability to your server, which is essential for handling the demands of events like Black Friday. To migrate to this new version, instruct your developer to perform the update using the following command:\n\n```sh\ndeno run -Ar https://deco.cx/upgrade\n```\n\nAfter> completing the update, make sure that:\n\n1. Your store is functioning correctly, including checking the home, product detail (PDP), and product listing (PLP) pages, as well as verifying the add-to-cart functionality and any other critical flows.\n2. Administrative editing is working smoothly, allowing you to edit your store's sections and publish them.\n\nIf your store is already online, the [Deco.cx](https://deco.cx/) team has already run this command for you. To verify, ask your developer to look for a Pull Request (PR) on GitHub with the title \"Preparations for Black Friday.\" If you encounter any issues during this process, don't hesitate to contact us on [Deco.cx Discord](https://deco.cx/discord).\n\n## Support for Mobile Safari\n\nA few months ago, we shared a blog post detailing the [lessons we've learned](https://www.deco.cx/en/blog/licoes-6-meses.md) from our stores in production. We strongly recommend implementing all the suggestions mentioned in the post before Black Friday. However, one of the most critical steps is to ensure that your store functions seamlessly on Safari versions 12, 13, and 14.\n\nTo achieve this, follow these steps:\n\n1. Verify that your `fresh.config.ts` file includes the Safari12 build target.\n2. Ensure that your website does not use the `` tag.\n\nEngage your developer to make the necessary adjustments to remove the `` tag and set Safari12 as the build target. We recommend performing this step after migrating to ahead-of-time builds to ensure a smooth transition.\n\nAs we kick off the holiday shopping season, the [Deco.cx](https://deco.cx/) team is dedicated to providing stability and reliability during this critical period. Starting this week, we will be actively working on stability improvements to enhance your experience on Black Friday. It's crucial to stay up-to-date with the latest Deco versions and keep an eye out for more informative posts on how to optimize your online store for success on Black Friday.","readTime":"5","authorAvatar":"https://avatars.githubusercontent.com/u/1753396?v=4"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/c4f791fe-9f43-400d-94a0-c203a6dc3b37","seo":{"image":"https://github.com/deco-sites/std/assets/18706156/ec92362b-9d18-42d8-9c60-bcb5bfef0d71","title":"deco play is released","description":"Use deco.cx's powerful CMS directly from the command line with Preact, Tailwind and Deno"},"date":"31/10/2023","path":"deco-play.md","descr":"Use deco.cx's powerful CMS directly from the command line","title":"deco play","author":"Héricles Emanuel","content":"## deco play\n\nMaking life easier for developers is at deco's core, and today we're proud to announce deco play, a new way to test our stack in record time!\n\nTo start testing deco play, go to [https://play.deco.cx](https://play.deco.cx) and follow the instructions.\n\n\n\nIt's the fastest way to spin up a deco site or app on your local machine and start developing with Preact, Tailwind, Deno and getting all the benefits of our CMS that automatically extracts the schema from your functions (UI components, loaders, actions…), makes them easily editable and composable on a Web UI that saves the data locally.\n\nAnd you don't need to be logged into [deco.cx](https://deco.cx) to use deco play, it's just one click away from the command line!","readTime":"2","authorAvatar":"https://avatars.githubusercontent.com/u/30700596?v=4"},{"img":"https://user-images.githubusercontent.com/121065272/278081341-14f42eff-92aa-46aa-b282-c3ce2823fcd5.png","seo":{"image":"https://github.com/deco-cx/apps/assets/882438/1b3f06d2-1d2d-4ec8-a9cf-2c14008229a6","title":"New Analytics Tool","description":"Analytics with realtime, goals and conversions!"},"date":"24/10/2023","path":"analytics.md","descr":"Analytics with realtime, goals and conversions!","title":"New Analytics Tool","author":"Matheus Gaudencio and Nathan Luiz","content":"## Introduction\n\nFollowing up on [Updated Redirects configuration](https://www.deco.cx/en/blog/redirects.md), **we're releasing today the new analytics tool**. We comprehend the significance of tracking every step of website users, from their first access to the site, to viewing a product, completing a purchase, and more. That's why we have evolved our tool!\n\n## Analytics on deco\n\nWe understand that data collection tools can impact the platform's performance. For this reason, deco uses a tool that seeks to strike a balance between performance and the collection of essential data needed for the analysis of various website usage metrics.\n\nIn addition to a smaller and more efficient data collector, we also have some exciting updates with the new tool!\n\n### Better UI/UX\n\nOur new, user-friendly and visually appealing analytics tool provides metrics such as location, device, operating system, and bounce rate, making it a more enjoyable experience.\n\n\n\n### Realtime Analytics\n\n\n\nSee your current visitors in real-time. No more waiting two days for data.\n\n### Goals and Funnels\n\n\n\nIt's also possible to see at which point in the purchasing journey the user decides to interrupt the process. This can happen during the initial page view, immediately after adding a product to the cart, or even during the checkout!\n\n## Analytics Apps\n\n[You can view the code that powers Deco Analytics](https://github.com/deco-cx/apps/tree/main/analytics), and even make contributions!\n\nTo use this tool, you need to update the **deco-cx/apps** to version 0.17.3 or higher.\n\nIn the coming days, we will commence the roll-out to our production customers. That's it for today. Keep an eye out for our next release!","readTime":"2","authorAvatar":"https://lh3.googleusercontent.com/a/ACg8ocIjb0LttoalDQynwu_U2A43KTAulDjme3BwrvxzAOOBzQ=s96-c"},{"img":"https://user-images.githubusercontent.com/121065272/278021160-f0fa7e72-ad95-4dfd-b201-fdbee639d7a0.png","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/be8ca70a-6e2f-42ed-965c-6771e1fcda39","title":"Redirects","description":"Create and manage Redirects on deco.cx"},"date":"20/10/2023","path":"redirects.md","descr":"Create and manage Redirects","title":"Redirects","author":"Igor Brasileiro","content":"\nToday, we're excited to introduce a new feature that allows our users to\n**manage redirects on their websites directly** on deco.cx's Admin. Now, users\ncan create, edit and delete redirects without any extra effort.\n\nYou can test this feature right now by accessing the admin panel at\n[https://admin.deco.cx](https://admin.deco.cx/).\n\n\n\n## Types of Redirect\n\nWhen it comes to creating redirects, you have two options: temporary or\npermanent.\n\n- **Temporary**: not indexed, stored or cached by crawlers (e.g: Google) and\n browsers. They provide a short-term solution and are ideal for situations\n where you might want to reroute traffic temporarily.\n\n- **Permanent**: stored by search engines and crawlers. They permanently update\n the path for the current page, and they are hard to undo. If you're unsure\n about which type of redirect to choose, we strongly recommend using temporary\n redirects.\n\n### **Enabling this Feature for Your Site**\n\nFor websites created after the date of this blog post (Oct 23 2023), this\nfeature will be enabled by default.\n\nIf your site was created before this blog post, you can enable this feature by\nupdating your site dependencies to `deco@1.41.11` and `apps@0.15.8`. (Run\n`deno task update`) Next, update your app's **`site`** by adding a new Site Map\nentry named `Redirects`. Once this is done, all managed redirects will function\nseamlessly on your site.\n\n\n\nIf you have any questions, feel free to reach us at\n[deco.cx Discord Server](https://deco.cx/discord).\n\nThat's all for today. Stay tuned for our next release!\n","readTime":"4","authorAvatar":"https://cdn.discordapp.com/avatars/87899733435088896/ae5525772e63fc0f47680e90b0902cd2.webp?size=240"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/b86b6a80-ca1a-478a-ba30-8499105f146b","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7188c283-d2d7-4a38-bbbd-b4e3db275df4","title":"New Editor","description":"Easier to use, refreshed UI, and better JSON editing"},"date":"18/10/2023","path":"new-editor.md","descr":"Easier to use, refreshed UI, and better JSON editing ","title":"New Editor","author":"Lucis and the deco.cx team","content":"## New Editor\n\nFollowing up on our [Admin Reloaded](https://www.deco.cx/en/blog/admin-reloaded.md), we're **releasing today the new CMS editor.** This release includes a redesigned layout based on feedback from our users, an emphasis on content segmentation, and a new inline JSON editor.\n\n \n\nYou can test it right now by accessing the admin via https://admin.deco.cx.\n\n## New Layout\n\nThe editor now sits on the left sidebar and it comes with a simpler UI, without compromises. The dynamic form, which varies based on the current block, takes more of the screen's width and its refined inputs provide a better editing experience.\n\n## Publish instantly\n\nThe action bar on the top of the editor was also simplified. Only one click is necessary to publish content, and secondary actions (like creating a draft of splitting traffic) are available in the submenus.\n\n## Developer Mode\n\nPower users are very important to deco and now they get their own mode in the CMS. Developer Mode provides a powerful JSON editor with IDE-like features and instant data validation. Toggle it on the top-right of the sidebar.\n\n \n\n## Drafts and Variants\n\nTo better suit work-in-progress content, Drafts can now be created directly from the top bar and they stay listed on the Variants portion of the editor. This allows sharing the URL so coworkers can preview the block with changes that were made.\n\nVariants, which are used to segment content to different audiences, are now first-class citizens in the editor and it's easier than ever to, for example, create a different page setup for Mobile users. From the Publish button it's possible to split traffic between the current and new versions \n\nThat's it for today. Keep an eye out for our next release.","readTime":"4","authorAvatar":"https://avatars.githubusercontent.com/u/18706156?v=4"},{"img":"https://user-images.githubusercontent.com/30700596/278155576-9ef0d081-96d0-48af-a967-c83074eb5bca.png","seo":{},"date":"17/10/2023","path":"case-zeedog","descr":"Descubra como a Zee.Dog retomou o controle do seu frontend para oferecer uma experiência de compra na web sem-igual","title":"A jornada da Zee.Dog com deco.cx","author":"Por Maria Cecilia Marques"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7330ca54-003b-44b8-b2a5-0379df6e74a8","seo":{"image":"https://github.com/deco-sites/starting/assets/30700596/94670972-4b40-46f1-a9f9-afb7f492307d"},"date":"12/10/2023","path":"admin-reloaded.md","descr":"Kicking Off October Launch Month 🚀","title":"Admin Reloaded","author":"Guilherme and the deco.cx team","content":"## Welcome to the New Admin Beta and the Start of October Launch Month\n\nHey Deco users, we have something new for you! \n\nToday, we’re excited to introduce the beta version of our revamped admin panel, **available now at [https://admin.deco.cx](https://admin.deco.cx/).** Let’s get straight into what’s new and what you can expect in the coming weeks.\n\n## 1. New Navigation and Topbar Menus\n\n \n\nSwitching teams is now hassle-free. Do it straight from the topbar, no need to return to the home page. Access team members and billing options instantly, and with the new integrated menu, Pages, Sections, and Analytics are just a click away.\n\n## 2. New Site Home\n\n\n \n\nWe’ve made it simpler and more intuitive, focusing on a clean design that puts your site and important info front and center.\n\n## 3. New Admin Pages\n\n## Sections\n\n \n\nYour new Visual Library is here. Easily edit and create headers, footers, banners, and more with the available components.\n\n## Apps\n\n \n\nManage all your installed apps and their settings in one place. And keep an eye out - we’re rolling out improvements throughout the month.\n\n## Deployments\n\n \n\nTrack deno deploy versions, and roll back with ease. Every new commit is displayed, making version management a breeze.\n\n## Logs\n\n \n\nAccess logs from any deployment, filter by date, and pinpoint errors quickly and accurately. Never guess what's happening in production again!\n\n## Coming Up in October Launch Month\n\nWe’re not stopping here. Every week, we’re rolling out new features leading up to the official launch of the new admin panel on October 31st, coinciding with our Fourth Hackathon. Here’s a sneak peek:\n\n* End-to-end New Analytics and VTEX Funnel \n* A new editor with full variant support and enhanced publishing \n* Easy redirects and proxies setup \n* SEO updates and simplified new site creation \n* Quick start on [play.deco.cx](https://play.deco.cx/) \n* Unified release history and easy version restoring with GH + Deco integration \n* A comprehensive library of ecommerce components \n* One-click app installations from Deco hub \n\n## Final Words\n\nThe beta version of the new admin is live, and we’re eager to hear your feedback. Explore, test, and let us know your thoughts in the **#admin-feedback** channel on our [deco.cx Discord server](https://deco.cx/discord). Note that you can continue using the stable version at https://deco.cx/admin.\n\nStay tuned for weekly updates, and get ready for the official launch on October 31st. See you soon!\n\nHappy coding!\n\n_The deco.cx team_","readTime":"5","authorAvatar":"https://avatars.githubusercontent.com/u/1633518?v=4"},{"img":"https://github.com/deco-cx/blog/assets/1753396/20fb996b-4d04-417c-af69-5beb2a7e7969","date":"10/10/2023","path":"licoes-6-meses.md","descr":"Uma jornada de aprendizados","title":"6 meses de lojas em produçāo","author":"Gui Tavano, Tiago Gimenes","content":"Nos últimos seis meses acumulamos um valioso conjunto de lições ao levar lojas para produção. Nesse período, aprendemos o que deve ser evitado, o que não funciona e a melhor maneira de iniciar o desenvolvimento de uma loja online. A seguir, compartilhamos um resumo das lições que adquirimos durante essa jornada.\n\n## Início do Desenvolvimento de uma Loja\n\nTodos projetos criados na Deco partem de um template pré-configurado com diversos componentes, integrações e temas. Observamos que, após criar a loja, alguns desenvolvedores recorrem ao GitHub para modificar componentes e temas diretamente no código. Embora isso seja um reflexo natural do trabalho de um desenvolvedor, notamos que os projetos nos quais o desenvolvimento se concentra principalmente no CMS (Content Management System) tendem a ser concluídos mais rapidamente e com melhor desempenho.\n\nO fluxo que descobrimos ser o ideal é o seguinte:\n\n1. Criar o projeto.\n2. Personalizar o tema, componentes, otimização de SEO, entre outros através do admin da deco.\n3. Apresentar o resultado ao cliente final e coletar feedback.\n4. Com base no feedback, ajustar a loja no CMS, usando as seções predefinidas e voltar ao passo 3.\n6. Se o cliente estiver satisfeito, migrar o domínio para a Deco.\n7. Caso seja necessário fazer alterações no código, adicionar seções específicas para o caso de uso em questão.\n\n## A Tag ``\n\nEm versões anteriores de nossos templates, utilizávamos a tag HTML5 ``. Essa tag permitia a criação de modais com suporte à acessibilidade. No entanto, identificamos dois problemas principais relacionados a ela:\n\n1. Exigia JavaScript para funcionar corretamente, o que ia de encontro à nossa filosofia de minimizar o uso de JavaScript na página.\n2. Versões recentes do iPhone (10, 11 e 12) não oferecem suporte a essa tag, o que nos forçava a inserir \"polyfills\". Essa inserção era síncrona e prejudicava significativamente o desempenho dos sites.\n\nDevido a esses dois pontos mencionados, adotamos uma abordagem alternativa usando a tag ` `, que é amplamente suportada por todos os navegadores. Essa mudança resolveu ambos os problemas. Migramos nossos templates para essa técnica e observamos um aumento na compatibilidade entre nossos sites e dispositivos móveis.\n\nSe o seu site ainda estiver usando a tag ``, recomendamos fazer a migração o mais rápido possível para ` ` para evitar incompatibilidades com iPhones. Para obter mais informações sobre essa abordagem, consulte [este link](https://daisyui.com/components/modal/#method-2-using-a-hidden-checkbox-legacy).\n\n## Unidades absolutas\n\nPercebemos que algumas de nossas lojas apresentavam taxas de conversão abaixo do esperado em determinados dispositivos, especialmente em iPhones e dispositivos Android. Após uma análise mais aprofundada, identificamos que o botão \"Ir para o checkout\" estava sendo ocultado pela barra de endereços dos navegadores Chrome e Safari em alguns desses dispositivos.\n\nEsse problema ocorreu devido ao uso de unidades absolutas, como `vh` (viewport height) e `vw` (viewport width), em vez de unidades relativas. As unidades absolutas fazem referência ao tamanho total da tela do dispositivo, não levando em consideração a área de renderização da janela, o que pode ocultar partes da interface do usuário.\n\nPara evitar esse tipo de problema, é fundamental evitar o uso de unidades absolutas, como `vh` e `vw`. Recomendamos revisar sua loja para garantir que essas unidades não estejam sendo usadas, especialmente no minicart.\n\n## Flexbox e Unidades Percentuais\n\nOutro problema que identificamos em algumas lojas diz respeito ao layout quebrado em versões mais antigas do Safari. Isso ocorre geralmente quando unidades percentuais são usadas em conjunto com flexbox. Um exemplo disso é o seguinte trecho de código:\n\n```html\n\n
\n
\n```\n\nNesse exemplo, estamos combinando flexbox (classe `flex`) com unidades percentuais (`width: 100%`). Isso pode funcionar em navegadores mais recentes, mas causa problemas em versões mais antigas do Safari, como o iPhone 10, 11 e 12.\n\nPara solucionar esse problema, recomendamos substituir `w-full` por classes relacionadas ao flexbox:\n\n ```html\n
\n
\n
\n```\n\nIsso garantirá que o layout funcione corretamente em todos os navegadores.\n\n\nEstamos sempre acompanhando os novos projetos, coletando os apresentados e melhorando o template [Storefront](https://github.com/deco-sites/storefront)."},{"img":"https://user-images.githubusercontent.com/121065272/278023987-b7ab4ae9-6669-4e38-94b8-268049fa6569.png","date":"06/10/2023","path":"partials.md","descr":"Revolucionando o Desenvolvimento Web","title":"Partials","author":"Marcos Candeia, Tiago Gimenes","content":"[Fresh](https://fresh.deno.dev/), o framework web utilizado pela Deco, é conhecido por possibilitar a criação de páginas de altíssimo desempenho. Uma das razões pelas quais as páginas criadas na Deco são tão eficientes é devido à arquitetura de ilhas. Essa arquitetura permite que os desenvolvedores removam partes não interativas do pacote final de JavaScript, reduzindo a quantidade total de JavaScript na página e aliviando o navegador para realizar outras tarefas.\n\nNo entanto, uma das limitações dessa arquitetura é que páginas muito complexas, com muita interatividade e, portanto, muitas ilhas, ainda exigem uma grande quantidade de JavaScript. Felizmente, essa limitação agora é coisa do passado, graças à introdução dos Partials.\n\n## Como Funciona?\n\nOs Partials, inspirados no [htmx](https://htmx.org/docs/), operam com um runtime que intercepta as interações do usuário com elementos de botão, âncora e formulário. Essas interações são enviadas para nosso servidor, que calcula o novo estado da página e responde ao navegador. O navegador recebe o novo estado da IU em HTML puro, que é então processado e as diferenças são aplicadas, alterando a página para o seu estado final. Para obter informações mais detalhadas sobre os Partials, consulte a [documentação](https://github.com/denoland/fresh/issues/1609) do Fresh.\n\n## Partials em Ação\n\nEstamos migrando os componentes da loja da Deco para a nova solução de Partials. Até o momento, migramos o seletor de SKU, que pode ser visualizado em ação [aqui](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). Mais mudanças, como `infinite scroll` e melhorias nos filtros, estão por vir.\n\nOutra funcionalidade desbloqueada é a possibilidade de criar dobras na página. As páginas de comércio eletrônico geralmente são longas e contêm muitos elementos. Os navegadores costumam enfrentar problemas quando há muitos elementos no HTML. Para lidar com isso, foi inventada a técnica de dobra.\n\nA ideia básica dessa técnica é dividir o conteúdo da página em duas partes: o conteúdo acima e o conteúdo abaixo da dobra. O conteúdo acima da dobra é carregado na primeira solicitação ao servidor. O conteúdo abaixo da dobra é carregado assim que a primeira solicitação é concluída. Esse tipo de funcionalidade costumava ser difícil de implementar em arquiteturas mais antigas. Felizmente, embutimos essa lógica em uma nova seção chamada `Deferred`. Esta seção aceita uma lista de seções como parâmetro que devem ter seu carregamento adiado para um momento posterior.\n\nPara usar essa nova seção:\n\n1. Acesse o painel de administração da Deco e adicione a seção `Rendering > Deferred` à sua página.\n2. Mova as seções que deseja adiar para a seção `Deferred`.\n3. Salve e publique a página.\n4. Pronto! As seções agora estão adiadas sem a necessidade de alterar o código!\n\nVeja `Deferred` em ação neste [link](https://storefront-vtex.deco.site/home-partial).\n\n> Observe que, para a seção `Deferred` aparecer, você deve estar na versão mais recente do `fresh`, `apps` e deco!\n\nUma pergunta que você pode estar se fazendo agora é: Como escolher as seções que devo incluir no deferred? Para isso, use a aba de desempenho e comece pelas seções mais pesadas que oferecem o maior retorno!\n\nPara mais informações, veja nossas [docs](https://www.deco.cx/docs/en/developing-capabilities/interactive-sections/partial)"},{"img":"https://user-images.githubusercontent.com/121065272/278021874-91a4ffea-3a22-4631-a4b3-c21bbc056386.png","date":"31/08/2023","path":"case-lojas-torra","descr":"Como a Lojas Torra dobrou sua taxa de conversão após migrar o front do seu ecommerce para a deco.cx","title":"A nova fase da Lojas Torra com a deco.cx.","author":"Por Maria Cecilia Marques"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5a07de58-ba83-4c6c-92e1-bea033350318","date":"23/01/2023","path":"apps-era.md","descr":"A era dos Apps!","title":"Como utilizar apps para adicionar funcionalidades aos seus sites.","author":"Marcos Candeia, Tiago Gimenes","content":"Nesta última versão, a deco está revolucionando a forma como você adiciona funcionalidades em seus **sites**. Dê as boas-vindas à era dos Apps.\n\n**O que são Apps?**\n\nAs Apps são poderosos conjuntos de capacidades de negócios que podem ser importados e configurados em sites deco. Uma App na deco é essencialmente uma coleção de vários componentes, como **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, ou quaisquer outros tipos de blocks que podem ser usados para estender a funcionalidade dos seus sites.\n\nCom as apps, você tem o poder de definir propriedades necessárias para a funcionalidade como um todo, como chaves de aplicação, nomes de contas entre outros.\n\n**Templates de Loja**\n\nIntroduzimos vários templates de lojas integradas com plataformas como - Vnda., VTEX e Shopify. Agora, você tem a flexibilidade de escolher o template que melhor se adapta às suas necessidades e pode criar facilmente sua loja a partir desses templates.\n\n
\n\n**DecoHub: Seu Hub de Apps**\n\nCom a estreia do DecoHub, você pode descobrir e instalar uma variedade de apps com base em suas necessidades do seu negócio. Se você é um desenvolvedor, pode criar seus próprios apps fora do repositório do [deco-cx/apps](http://github.com/deco-cx/apps) e enviar um PR para adicioná-los ao DecoHub.\n\n**Transição de Deco-Sites/Std para Apps**\n\nMigramos do hub central de integrações do [deco-sites/std](https://github.com/deco-sites/std) para uma abordagem mais modular com o [deco-cx/apps](http://github.com/deco-cx/apps). O STD agora está em modo de manutenção, portanto, certifique-se de migrar sua loja e seguir as etapas de instalação em nossa [documentação](https://www.deco.cx/docs/en/getting-started/installing-an-app) para aproveitar o novo ecossistema de Apps.\n\n**Comece a Usar os Apps Agora Mesmo!**\n\nDesenvolvedores, mergulhem em nosso [guia](https://www.deco.cx/docs/en/developing-capabilities/apps/creating-an-app) sobre como criar seu primeiro App no Deco. Para lojas existentes, faça a migração executando `deno run -A -r https://deco.cx/upgrade`.\n\nIsso é apenas o começo. Estamos trabalhando continuamente para aprimorar nosso ecossistema de Apps e explorar novos recursos, como transições de visualização e soluções de estilo.\n\nFiquem ligados e vamos construir juntos o futuro do desenvolvimento web!"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/450efa63-082e-427a-b218-e8b3690823cc","date":"14/04/2023","path":"como-a-deco-faz-sua-loja-converter-mais.md","descr":"Descubra como a nossa plataforma headless ajuda lojas virtuais a converter mais clientes, simplificando a criação e manutenção de lojas rápidas e personalizáveis. ","title":"Como a deco.cx faz sua loja converter mais","author":"Rafael Crespo","content":"Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://www.deco.cx/docs/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://www.deco.cx/docs/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://www.deco.cx/docs/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://www.deco.cx/docs/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://www.deco.cx/docs/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx)."},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9cd72d58-1a57-443f-83a3-d263105670ff","date":"03/12/2023","path":"abertura-ii-hackathon-deco.md","descr":"Discurso da abertura da segunda Hackathon deco.cx.","title":"América Latina e o futuro das experiências digitais","author":"Guilherme Rodrigues","content":"Estou extremamente empolgado em dar início à nossa segunda Hackathon deco.cx! Mas antes de começarmos, eu quero dividir algumas palavras com vocês.\n\nNós estamos reunidos aqui hoje para aprender, criar e, se tudo der certo, levar para casa um prêmio de 500 reais. Mas acreditem, esse prêmio não é o melhor que vocês vão levar daqui — longe disso.\n\nA verdadeira recompensa é a oportunidade de adquirir novas habilidades que os diferenciam e os elevam a outro patamar como desenvolvedores e desenvolvedoras. E ainda maior que isso: a oportunidade de protagonizar a próxima geração de desenvolvimento web global.\n\nO estado atual de complexidade acumulada no desenvolvimento web é insustentável. Os anos de desenvolvimento na \"câmara de eco\" dos frameworks JS gerou uma enorme fricção, uma grande barreira de entrada para desenvolver web apps.\n\nCada vez é necessário aprender mais frameworks, padrões e bibliotecas para ser minimamente produtivo. O tempo de build de sites baseados nessas stacks limitam nossa criatividade no dia a dia. Além disso, temos grandes dificuldades de entregar sites performáticos. Não precisa ser assim!\n\nVivemos em um momento único na história do desenvolvimento web. Deno está no início de uma revolução que transformará a maneira como criamos e entregamos experiências digitais. E nós temos a chance de aproveitar essa janela de oportunidade para nos destacarmos no mercado global.\n\nDeno, junto com tecnologias como Fresh e Tailwind, representam a esperança de uma nova direção. Essas tecnologias nos mostraram como é possível ser simples e eficiente. Estamos vendo nascer o próximo Node.js, diante de nossos olhos — e estamos convidados a participar e a co-criá-lo!\n\nPor outro lado, a demanda global por digitalização só acelera. Demanda por projetos, demanda por sites, demanda por pessoas desenvolvedoras. E nós temos muita oferta de talento brasileiro — jovens pessoas desenvolvedoras, muitas vezes com dificuldade de se colocar no mercado de trabalho apesar de seu grande potencial.\n\nNós temos a oportunidade de atender essa demanda, mostrando o incrível potencial dos desenvolvedores brasileiros. Não precisamos apenas seguir as tendências; podemos liderar e nos tornar referência mundial na criação de experiências digitais de alta performance.\n\nMas a nossa responsabilidade não termina com o domínio dessas tecnologias. Para promover uma mudança estrutural, não basta garantirmos o nosso próprio sucesso. Devemos nos esforçar para sermos mentores, treinarmos a próxima geração e multiplicarmos a tecnologia no Brasil, promovendo a inclusão e dando oportunidades a todos aqueles que desejam ingressar nesse mercado em constante crescimento: especialmente aqueles que previsivelmente não teriam acesso a elas.\n\nEntão, enquanto vocês participam desta Hackathon, lembrem-se do potencial que têm em mãos e da responsabilidade compartilhada. Que vocês aproveitem ao máximo essa oportunidade, tanto para o seu crescimento pessoal quanto para o desenvolvimento da nossa comunidade. Estamos construindo algo muito maior do que cada um de nós.\n\nDesejo a todos vocês um ótimo evento, repleto de aprendizado, colaboração e inovação. Que comecem os trabalhos!"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/179d2e1f-8214-46f4-bc85-497f2313145e","date":"03/01/2023","path":"criando-uma-pagina-com-decocx.md","descr":"Recriando a página da deno-land utilizando a plataforma da deco.cx com as tecnologias: Deno, Fresh, Preact e Twind.","title":"Minha experiência com deco.cx","author":"Guilherme Tavano","content":"## Desafio\n\nRecentemente aceitei um desafio e quero compartilhar como foi a minha experiência.\n\nO desafio era reconstruir a Home da [https://deno.land/](https://deno.land/) utilizando a plataforma deco.cx como CMS.\n\n## O que é deco.cx?\n\nÉ uma plataforma criada por um time de pessoas que trabalharam na Vtex, para construir páginas e lojas virtuais performáticas e em um curto período de tempo.\n\nCom o slogan \"Crie, teste e evolua sua loja. Todos os dias.\", a plataforma foca na simplicidade no desenvolvimento, autonomia para edições/testes e foco em performance.\n\n## Primeira etapa - Conhecendo a Stack\n\nAntes de iniciar o desenvolvimento, precisei correr atrás das tecnologias que a deco.cx sugere para utilização.\n\nSão elas:\n\n### Preact\n\nPreact é uma biblioteca JS baseada no React, mas que promete ser mais leve e mais performática.\n\nA adaptação aqui, para quem já tem o React, não tende a ser complicada.\n\n### Deno\n\nDeno é um ambiente de execução de Javascript e Typescript, criado pelo mesmo criador do Node.js.\n\nCom uma boa aceitação entre os devs, a alternativa melhorada do Node.js promete se destacar no futuro.\n\n### Fresh\n\nFresh é um Framework que me deixou bem curioso. Nessa stack, podemos dizer que ele atua como um Next.\n\nApesar de não ter me aprofundado no Framework, não tive problemas aqui, afinal um dos pilares do Fresh é não precisar de configuração, além de não ter etapa de build.\n\n### Twind\n\nTwind é uma alternativa mais leve, rápida e completa do tão conhecido Tailwind.\n\nA adaptação é extremamente fácil para quem já trabalha com Tailwind, mas não era o meu caso.\n\nPequenos gargalos no começo, mas a curva de aprendizagem é curta e nas últimas seções eu já estava sentindo os efeitos (positivos).\n\n## Segunda Etapa - Conhecendo a ferramenta da deco.cx\n\nMeu objetivo aqui, era entender como a ferramenta me ajudaria a recriar a página deno.land, tornando os componentes editáveis pelo painel CMS.\n\n### Criação da Conta\n\nO Login foi bem simples, pode ser feito com Github ou Google.\n\n### Criação do Projeto\n\nNa primeira página, após logado, temos a opção de Criar um Novo Site.\n\nTive que dar um nome ao projeto e escolher o template padrão para ser iniciado.\n\n\n\nAssim que o site é criado, **automaticamente** um repositório é montado no GitHub da [deco-sites](https://github.com/deco-sites) e um link da sua página na internet também.\n\nA partir dai, cada push que você fizer resultará no Deploy da aplicação no servidor e rapidamente será refletido em produção\n\n### Entendendo páginas e seções\n\nDentro do painel, podemos acessar a aba de \"Pages\"\n\n\n\nNessa parte, cada página do seu site estará listada, e assim que você clicar, você pode ver as seções que estão sendo utilizadas.\n\n\n\nDessa forma, fica fácil para uma pessoa não técnica conseguir criar novas páginas e adicionar/editar as seções.\n\nMas para entender como criar um modelo de seção, vamos para a terceira etapa.\n\n## Terceira Etapa - Integração do Código com a deco.cx\n\nComo eu tinha o objetivo de tornar as seções da página editáveis, eu precisei entender como isso deveria ser escrito no código.\n\nE é tão simples, quanto tipagem em Typescript, literalmente.\n\nDentro da estrutura no GitHub, temos uma pasta chamada _sections_, e cada arquivo _.tsx_ lá dentro se tornará uma daquelas seções no painel.\n\n\n\nEm cada arquivo, deve ser exportado uma função default, que retorna um código HTML.\n\nDentro desse HTML, podemos utilizar dados que vem do painel, e para definir quais dados deverão vir de lá, fazemos dessa forma:\n\nexport interface Props {\n image: LiveImage;\n imageMobile: LiveImage;\n altText: string;\n title: string;\n subTitle: string;\n}\n\nEsses são os campos que configurei para a seção _Banner_, e o resultado é esse no painel:\n\n\n\nDepois recebi esses dados como Props, assim:\n\nexport default function Banner({ image, imageMobile, altText, subTitle, title }: Props,) {\n return (\n <>\n //Your HTML code here\n >\n );\n}\n\nE o resultado final da seção é:\n\n\n\n### Dev Mode\n\nÉ importante ressaltar, que durante o desenvolvimento, a ferramenta oferece uma função \"Dev Mode\".\n\nIsso faz com que os campos editáveis do painel se baseiem no código feito no localhost e não do repositório no Github.\n\nGarantindo a possibilidade de testes durante a criação.\n\n## Resultado Final + Conclusão\n\nO resultado final, pode ser conferido em: [https://deno-land.deco.site/](https://deno-land.deco.site/)\n\nConsegui atingir nota 97 no Pagespeed Mobile e isso me impressionou bastante.\n\nParticularmente, gostei muito dos pilares que a deco.cx está buscando entregar, em especial a autonomia de edição e o foco na velocidade de carregamento.\n\nA ferramenta é nova e já entrega muita coisa legal. A realização desse desafio foi feita após 3 meses do início do desenvolvimento da plataforma da deco.\n\nMinha recomendação a todos é que entrem na [Comunidade no Discord](https://discord.gg/RZkvt5AE) e acompanhem as novidades para não ficar para trás.\n\nSe possível, criem um site na ferramenta e façam os seus próprios testes.\n\nEm parceria com [TavanoBlog](https://tavanoblog.com.br/)."},{"img":"https://i.insider.com/5e6bb1bd84159f39f736ee32?width=2000&format=jpeg&auto=webp","date":"11/29/2022","path":"pg-vb-pt-br.md","descr":"Por Paul Graham, traduzido por ChatGPT.","title":"A vida é curta","author":"Chat GPT","content":"A vida é curta, como todos sabem. Quando era criança, costumava me perguntar sobre isso. A vida realmente é curta ou estamos realmente nos queixando de sua finitude? Seríamos tão propensos a sentir que a vida é curta se vivêssemos 10 vezes mais tempo?\n\nComo não parecia haver maneira de responder a essa pergunta, parei de me perguntar sobre isso. Depois tive filhos. Isso me deu uma maneira de responder à pergunta e a resposta é que a vida realmente é curta.\n\nTer filhos me mostrou como converter uma quantidade contínua, o tempo, em quantidades discretas. Você só tem 52 fins de semana com seu filho de 2 anos. Se o Natal-como-mágica dure, digamos, dos 3 aos 10 anos, só poderá ver seu filho experimentá-lo 8 vezes. E enquanto é impossível dizer o que é muito ou pouco de uma quantidade contínua como o tempo, 8 não é muito de alguma coisa. Se você tivesse uma punhado de 8 amendoins ou uma prateleira de 8 livros para escolher, a quantidade definitivamente pareceria limitada, independentemente da sua expectativa de vida.\n\nOk, então a vida realmente é curta. Isso faz alguma diferença saber disso?\n\nFez para mim. Isso significa que argumentos do tipo \"A vida é muito curta para x\" têm muita força. Não é apenas uma figura de linguagem dizer que a vida é muito curta para alguma coisa. Não é apenas um sinônimo de chato. Se você achar que a vida é muito curta para alguma coisa, deve tentar eliminá-la se puder.\n\nQuando me pergunto o que descobri que a vida é muito curta, a palavra que me vem à cabeça é \"besteira\". Eu percebo que essa resposta é um pouco tautológica. Quase é a definição de besteira que é a coisa de que a vida é muito curta. E ainda assim a besteira tem um caráter distintivo. Há algo falso nela. É o alimento junk da experiência. [1]\n\nSe você perguntar a si mesmo o que gasta o seu tempo em besteira, provavelmente já sabe a resposta. Reuniões desnecessárias, disputas sem sentido, burocracia, postura, lidar com os erros de outras pessoas, engarrafamentos, passatempos viciantes mas pouco gratificantes.\n\nHá duas maneiras pelas quais esse tipo de coisa entra em sua vida: ou é imposto a você ou o engana. Até certo ponto, você tem que suportar as besteiras impostas por circunstâncias. Você precisa ganhar dinheiro e ganhar dinheiro consiste principalmente em realizar tarefas. De fato, a lei da oferta e da demanda garante isso: quanto mais gratificante é algum tipo de trabalho, mais barato as pessoas o farão. Pode ser que menos tarefas sejam impostas a você do que você pensa, no entanto. Sempre houve uma corrente de pessoas que optam por sair da rotina padrão e vão viver em algum lugar onde as oportunidades são menores no sentido convencional, mas a vida parece mais autêntica. Isso pode se tornar mais comum.\n\nVocê pode reduzir a quantidade de besteira em sua vida sem precisar se mudar. A quantidade de tempo que você precisa gastar com besteiras varia entre empregadores. A maioria das grandes organizações (e muitas pequenas) está imersa nelas. Mas se você priorizar conscientemente a redução de besteiras acima de outros fatores, como dinheiro e prestígio, pode encontrar empregadores que irão desperdiçar menos do seu tempo.\n\nSe você é freelancer ou uma pequena empresa, pode fazer isso no nível de clientes individuais. Se você demitir ou evitar clientes tóxicos, pode diminuir a quantidade de besteira em sua vida mais do que diminui sua renda.\n\nMas, enquanto alguma quantidade de besteira é inevitavelmente imposta a você, a besteira que se infiltra em sua vida enganando-o não é culpa de ninguém, mas sua própria. E ainda assim, a besteira que você escolhe pode ser mais difícil de eliminar do que a besteira que é imposta a você. Coisas que o atraem para desperdiçar seu tempo precisam ser muito boas em enganá-lo. Um exemplo que será familiar para muitas pessoas é discutir online. Quando alguém contradiz você, está, de certa forma, atacando você. Às vezes bastante abertamente. Seu instinto quando é atacado é se defender. Mas, assim como muitos instintos, esse não foi projetado para o mundo em que vivemos agora. Contrariamente ao que parece, é melhor, na maioria das vezes, não se defender. Caso contrário, essas pessoas estão literalmente tomando sua vida. [2]\n\nDiscutir online é apenas incidentalmente viciante. Há coisas mais perigosas do que isso. Como já escrevi antes, um subproduto do progresso técnico é que as coisas que gostamos tendem a se tornar mais viciantes. Isso significa que precisaremos fazer um esforço consciente para evitar vícios, para nos colocarmos fora de nós mesmos e perguntarmos: \"é assim que quero estar gastando meu tempo?\"\n\nAlém de evitar besteiras, devemos procurar ativamente coisas que importam. Mas coisas diferentes importam para pessoas diferentes e a maioria precisa aprender o que importa para elas. Alguns são afortunados e percebem cedo que adoram matemática, cuidar de animais ou escrever e, então, descobrem uma maneira de passar muito tempo fazendo isso. Mas a maioria das pessoas começa com uma vida que é uma mistura de coisas que importam e coisas que não importam e só gradualmente aprende a distinguir entre elas.\n\nPara os jovens, especialmente, muita dessa confusão é induzida pelas situações artificiais em que se encontram. Na escola intermediária e na escola secundária, o que os outros estudantes acham de você parece ser a coisa mais importante do mundo. Mas quando você pergunta aos adultos o que eles fizeram de errado nessa idade, quase todos dizem que se importavam demais com o que os outros estudantes achavam deles.\n\nUma heurística para distinguir coisas que importam é perguntar a si mesmo se você se importará com elas no futuro. A coisa falsa que importa geralmente tem um pico afiado de parecer importar. É assim que o engana. A área sob a curva é pequena, mas sua forma se crava em sua consciência como uma alfinete.\n\nAs coisas que importam nem sempre são aquelas que as pessoas chamariam de \"importantes\". Tomar café com um amigo importa. Você não vai sentir depois que isso foi um desperdício de tempo.\n\nUma coisa ótima em ter crianças pequenas é que elas fazem você gastar tempo em coisas que importam: elas. Elas puxam sua manga enquanto você está olhando para o seu celular e dizem: \"você vai brincar comigo?\". E as chances são de que essa seja, de fato, a opção de minimização de besteira.\n\nSe a vida é curta, devemos esperar que sua brevidade nos surpreenda. E é exatamente isso que costuma acontecer. Você assume as coisas como garantidas e, então, elas desaparecem. Você acha que sempre pode escrever aquele livro, ou subir aquela montanha, ou o que quer que seja, e então percebe que a janela se fechou. As janelas mais tristes fecham quando outras pessoas morrem. Suas vidas também são curtas. Depois que minha mãe morreu, eu desejei ter passado mais tempo com ela. Eu vivi como se ela sempre estivesse lá. E, de maneira típica e discreta, ela incentivou essa ilusão. Mas era uma ilusão. Acho que muitas pessoas cometem o mesmo erro que eu cometi.\n\nA maneira usual de evitar ser surpreendido por algo é estar consciente disso. Quando a vida era mais precária, as pessoas costumavam ser conscientes da morte em um grau que agora pareceria um pouco morboso. Não tenho certeza do porquê, mas não parece ser a resposta certa lembrar constantemente da caveira pairando no ombro de todos. Talvez uma solução melhor seja olhar o problema pelo outro lado. Cultive o hábito de ser impaciente com as coisas que mais quer fazer. Não espere antes de subir aquela montanha ou escrever aquele livro ou visitar sua mãe. Você não precisa se lembrar constantemente por que não deve esperar. Apenas não espere.\n\nPosso pensar em mais duas coisas que alguém faz quando não tem muito de algo: tentar obter mais disso e saborear o que tem. Ambos fazem sentido aqui.\n\nComo você vive afeta por quanto tempo você vive. A maioria das pessoas poderia fazer melhor. Eu entre elas.\n\nMas você provavelmente pode obter ainda mais efeito prestando mais atenção ao tempo que tem. É fácil deixar os dias passarem voando. O \"fluxo\" que as pessoas imaginativas adoram tanto tem um parente mais sombrio que impede você de pausar para saborear a vida no meio da rotina diária de tarefas e alarmes. Uma das coisas mais impressionantes que já li não estava em um livro, mas no título de um: Burning the Days (Queimando os Dias), de James Salter.\n\nÉ possível diminuir um pouco o tempo. Eu melhorei nisso. As crianças ajudam. Quando você tem crianças pequenas, há muitos momentos tão perfeitos que você não consegue deixar de notar.\n\nTambém ajuda sentir que você tirou tudo de alguma experiência. O motivo pelo qual estou triste por minha mãe não é apenas porque sinto falta dela, mas porque penso em tudo o que poderíamos ter feito e não fizemos. Meu filho mais velho vai fazer 7 anos em breve. E, embora sinta falta da versão dele de 3 anos, pelo menos não tenho nenhum arrependimento pelo que poderia ter sido. Tivemos o melhor tempo que um pai e um filho de 3 anos poderiam ter.\n\nCorte implacavelmente as besteiras, não espere para fazer coisas que importam e saboreie o tempo que tem. É isso o que você faz quando a vida é curta. \n\n---\n\nNotas\n\n[1] No começo, eu não gostei que a palavra que me veio à mente tivesse outros significados. Mas então percebi que os outros significados estão bastante relacionados. Besteira no sentido de coisas em que você desperdiça seu tempo é bastante parecida com besteira intelectual.\n\n[2] Escolhi esse exemplo de forma deliberada como uma nota para mim mesmo. Eu sou atacado muito online. As pessoas contam as mentiras mais loucas sobre mim. E até agora eu fiz um trabalho bastante medíocre de suprimir a inclinação natural do ser humano de dizer \"Ei, isso não é verdade!\".\n\nObrigado a Jessica Livingston e Geoff Ralston por ler rascunhos deste."},{"tags":[],"body":{}}]},"__resolveType":"site/loaders/blogPostLoader.ts"}
\ No newline at end of file
+{"list":{"posts":[{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/6815764e-1eca-4089-bce3-6d9e37a9171d","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/bc28ef76-67cf-44c7-9ef2-3c5c3713d975"},"date":"07/11/2023","path":"nuvemshop-integration","tags":[],"descr":"Nuvemshop is now available on deco.cx","title":"Nuvemshop Integration","author":"Guilherme Tavano","content":"We're thrilled to bring you the latest chapter in our journey to streamline your e-commerce experience. Introducing the new integration of [deco.cx](https://deco.cx/) with Nuvemshop, an e-commerce platform for growing businesses!\n\n## Seamless Integration for Growth\n\nOur goal is simple: to empower your e-commerce store with the robust capabilities of Nuvemshop, making it easier than ever to expand your business.\n\nSimply fill in your Nuvemshop store details on [deco.cx](https://deco.cx/), and you're all set to fetch your products and customize your frontend.\n\n## Available Features\n\n- Product Shelf\n\n
\n\n- Product Listing Pages \n\n- Category and Search\n\n- Product Details Page\n\n- Minicart\n\n- Checkout Proxied\n\nIt's about bringing the functionality of Nuvemshop into [deco.cx](https://deco.cx/), where your e-commerce vision takes on a new life, more customizable and fast.","readTime":"2","authorAvatar":"https://lh3.googleusercontent.com/ogw/AKPQZvxFwHo7yUU95E95OBqFaqXuLRfAGq0mMDuC7cQ7=s64-c-mo"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8242aca6-5215-4321-8e9d-f876fc1d1d58","seo":{"title":"Black Friday 2023","canonical":"/black-friday-2023"},"date":"06/11/2023","lang":"en","path":"black-friday-2023.md","tags":[],"descr":"Checklist for a smooth shopping season","title":"Black Friday 2023","author":"Tiago Gimenes","content":"Black Friday is just around the corner, and it's an incredible opportunity for online businesses to boost their sales. To help you make the most of this shopping period, we've compiled a list of essential tasks to ensure that your online store is fully prepared for Black Friday 2023.\n\n## Adopt Ahead-of-Time Builds\n\nFresh recently introduced an innovative feature called \"ahead of time builds,\" designed to transform how you create and deliver your website. This approach not only stabilizes your store's JavaScript but also significantly improves server boot times. To fully understand this new approach, you can explore the structured documentation provided by Fresh [here](https://fresh.deno.dev/docs/concepts/ahead-of-time-builds).\n\nAt [Deco.cx](https://deco.cx/), we strongly recommend adopting the ahead-of-time version because it provides scalability to your server, which is essential for handling the demands of events like Black Friday. To migrate to this new version, instruct your developer to perform the update using the following command:\n\n```sh\ndeno run -Ar https://deco.cx/upgrade\n```\n\nAfter> completing the update, make sure that:\n\n1. Your store is functioning correctly, including checking the home, product detail (PDP), and product listing (PLP) pages, as well as verifying the add-to-cart functionality and any other critical flows.\n2. Administrative editing is working smoothly, allowing you to edit your store's sections and publish them.\n\nIf your store is already online, the [Deco.cx](https://deco.cx/) team has already run this command for you. To verify, ask your developer to look for a Pull Request (PR) on GitHub with the title \"Preparations for Black Friday.\" If you encounter any issues during this process, don't hesitate to contact us on [Deco.cx Discord](https://deco.cx/discord).\n\n## Support for Mobile Safari\n\nA few months ago, we shared a blog post detailing the [lessons we've learned](https://www.deco.cx/en/blog/licoes-6-meses.md) from our stores in production. We strongly recommend implementing all the suggestions mentioned in the post before Black Friday. However, one of the most critical steps is to ensure that your store functions seamlessly on Safari versions 12, 13, and 14.\n\nTo achieve this, follow these steps:\n\n1. Verify that your `fresh.config.ts` file includes the Safari12 build target.\n2. Ensure that your website does not use the `
` tag.\n\nEngage your developer to make the necessary adjustments to remove the `` tag and set Safari12 as the build target. We recommend performing this step after migrating to ahead-of-time builds to ensure a smooth transition.\n\nAs we kick off the holiday shopping season, the [Deco.cx](https://deco.cx/) team is dedicated to providing stability and reliability during this critical period. Starting this week, we will be actively working on stability improvements to enhance your experience on Black Friday. It's crucial to stay up-to-date with the latest Deco versions and keep an eye out for more informative posts on how to optimize your online store for success on Black Friday.","readTime":"5","authorAvatar":"https://avatars.githubusercontent.com/u/1753396?v=4"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/c4f791fe-9f43-400d-94a0-c203a6dc3b37","seo":{"image":"https://github.com/deco-sites/std/assets/18706156/ec92362b-9d18-42d8-9c60-bcb5bfef0d71","title":"deco play is released","description":"Use deco.cx's powerful CMS directly from the command line with Preact, Tailwind and Deno"},"date":"31/10/2023","path":"deco-play.md","descr":"Use deco.cx's powerful CMS directly from the command line","title":"deco play","author":"Héricles Emanuel","content":"## deco play\n\nMaking life easier for developers is at deco's core, and today we're proud to announce deco play, a new way to test our stack in record time!\n\nTo start testing deco play, go to [https://play.deco.cx](https://play.deco.cx) and follow the instructions.\n\n\n\nIt's the fastest way to spin up a deco site or app on your local machine and start developing with Preact, Tailwind, Deno and getting all the benefits of our CMS that automatically extracts the schema from your functions (UI components, loaders, actions…), makes them easily editable and composable on a Web UI that saves the data locally.\n\nAnd you don't need to be logged into [deco.cx](https://deco.cx) to use deco play, it's just one click away from the command line!","readTime":"2","authorAvatar":"https://avatars.githubusercontent.com/u/30700596?v=4"},{"img":"https://user-images.githubusercontent.com/121065272/278081341-14f42eff-92aa-46aa-b282-c3ce2823fcd5.png","seo":{"image":"https://github.com/deco-cx/apps/assets/882438/1b3f06d2-1d2d-4ec8-a9cf-2c14008229a6","title":"New Analytics Tool","description":"Analytics with realtime, goals and conversions!"},"date":"24/10/2023","path":"analytics.md","descr":"Analytics with realtime, goals and conversions!","title":"New Analytics Tool","author":"Matheus Gaudencio and Nathan Luiz","content":"## Introduction\n\nFollowing up on [Updated Redirects configuration](https://www.deco.cx/en/blog/redirects.md), **we're releasing today the new analytics tool**. We comprehend the significance of tracking every step of website users, from their first access to the site, to viewing a product, completing a purchase, and more. That's why we have evolved our tool!\n\n## Analytics on deco\n\nWe understand that data collection tools can impact the platform's performance. For this reason, deco uses a tool that seeks to strike a balance between performance and the collection of essential data needed for the analysis of various website usage metrics.\n\nIn addition to a smaller and more efficient data collector, we also have some exciting updates with the new tool!\n\n### Better UI/UX\n\nOur new, user-friendly and visually appealing analytics tool provides metrics such as location, device, operating system, and bounce rate, making it a more enjoyable experience.\n\n\n\n### Realtime Analytics\n\n\n\nSee your current visitors in real-time. No more waiting two days for data.\n\n### Goals and Funnels\n\n\n\nIt's also possible to see at which point in the purchasing journey the user decides to interrupt the process. This can happen during the initial page view, immediately after adding a product to the cart, or even during the checkout!\n\n## Analytics Apps\n\n[You can view the code that powers Deco Analytics](https://github.com/deco-cx/apps/tree/main/analytics), and even make contributions!\n\nTo use this tool, you need to update the **deco-cx/apps** to version 0.17.3 or higher.\n\nIn the coming days, we will commence the roll-out to our production customers. That's it for today. Keep an eye out for our next release!","readTime":"2","authorAvatar":"https://lh3.googleusercontent.com/a/ACg8ocIjb0LttoalDQynwu_U2A43KTAulDjme3BwrvxzAOOBzQ=s96-c"},{"img":"https://user-images.githubusercontent.com/121065272/278021160-f0fa7e72-ad95-4dfd-b201-fdbee639d7a0.png","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/be8ca70a-6e2f-42ed-965c-6771e1fcda39","title":"Redirects","description":"Create and manage Redirects on deco.cx"},"date":"20/10/2023","path":"redirects.md","descr":"Create and manage Redirects","title":"Redirects","author":"Igor Brasileiro","content":"\nToday, we're excited to introduce a new feature that allows our users to\n**manage redirects on their websites directly** on deco.cx's Admin. Now, users\ncan create, edit and delete redirects without any extra effort.\n\nYou can test this feature right now by accessing the admin panel at\n[https://admin.deco.cx](https://admin.deco.cx/).\n\n\n\n## Types of Redirect\n\nWhen it comes to creating redirects, you have two options: temporary or\npermanent.\n\n- **Temporary**: not indexed, stored or cached by crawlers (e.g: Google) and\n browsers. They provide a short-term solution and are ideal for situations\n where you might want to reroute traffic temporarily.\n\n- **Permanent**: stored by search engines and crawlers. They permanently update\n the path for the current page, and they are hard to undo. If you're unsure\n about which type of redirect to choose, we strongly recommend using temporary\n redirects.\n\n### **Enabling this Feature for Your Site**\n\nFor websites created after the date of this blog post (Oct 23 2023), this\nfeature will be enabled by default.\n\nIf your site was created before this blog post, you can enable this feature by\nupdating your site dependencies to `deco@1.41.11` and `apps@0.15.8`. (Run\n`deno task update`) Next, update your app's **`site`** by adding a new Site Map\nentry named `Redirects`. Once this is done, all managed redirects will function\nseamlessly on your site.\n\n\n\nIf you have any questions, feel free to reach us at\n[deco.cx Discord Server](https://deco.cx/discord).\n\nThat's all for today. Stay tuned for our next release!\n","readTime":"4","authorAvatar":"https://cdn.discordapp.com/avatars/87899733435088896/ae5525772e63fc0f47680e90b0902cd2.webp?size=240"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/b86b6a80-ca1a-478a-ba30-8499105f146b","seo":{"image":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7188c283-d2d7-4a38-bbbd-b4e3db275df4","title":"New Editor","description":"Easier to use, refreshed UI, and better JSON editing"},"date":"18/10/2023","path":"new-editor.md","descr":"Easier to use, refreshed UI, and better JSON editing ","title":"New Editor","author":"Lucis and the deco.cx team","content":"## New Editor\n\nFollowing up on our [Admin Reloaded](https://www.deco.cx/en/blog/admin-reloaded.md), we're **releasing today the new CMS editor.** This release includes a redesigned layout based on feedback from our users, an emphasis on content segmentation, and a new inline JSON editor.\n\n \n\nYou can test it right now by accessing the admin via https://admin.deco.cx.\n\n## New Layout\n\nThe editor now sits on the left sidebar and it comes with a simpler UI, without compromises. The dynamic form, which varies based on the current block, takes more of the screen's width and its refined inputs provide a better editing experience.\n\n## Publish instantly\n\nThe action bar on the top of the editor was also simplified. Only one click is necessary to publish content, and secondary actions (like creating a draft of splitting traffic) are available in the submenus.\n\n## Developer Mode\n\nPower users are very important to deco and now they get their own mode in the CMS. Developer Mode provides a powerful JSON editor with IDE-like features and instant data validation. Toggle it on the top-right of the sidebar.\n\n \n\n## Drafts and Variants\n\nTo better suit work-in-progress content, Drafts can now be created directly from the top bar and they stay listed on the Variants portion of the editor. This allows sharing the URL so coworkers can preview the block with changes that were made.\n\nVariants, which are used to segment content to different audiences, are now first-class citizens in the editor and it's easier than ever to, for example, create a different page setup for Mobile users. From the Publish button it's possible to split traffic between the current and new versions \n\nThat's it for today. Keep an eye out for our next release.","readTime":"4","authorAvatar":"https://avatars.githubusercontent.com/u/18706156?v=4"},{"img":"https://user-images.githubusercontent.com/30700596/278155576-9ef0d081-96d0-48af-a967-c83074eb5bca.png","seo":{},"date":"17/10/2023","path":"case-zeedog","descr":"Descubra como a Zee.Dog retomou o controle do seu frontend para oferecer uma experiência de compra na web sem-igual","title":"A jornada da Zee.Dog com deco.cx","author":"Por Maria Cecilia Marques"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7330ca54-003b-44b8-b2a5-0379df6e74a8","seo":{"image":"https://github.com/deco-sites/starting/assets/30700596/94670972-4b40-46f1-a9f9-afb7f492307d"},"date":"12/10/2023","path":"admin-reloaded.md","descr":"Kicking Off October Launch Month 🚀","title":"Admin Reloaded","author":"Guilherme and the deco.cx team","content":"## Welcome to the New Admin Beta and the Start of October Launch Month\n\nHey Deco users, we have something new for you! \n\nToday, we’re excited to introduce the beta version of our revamped admin panel, **available now at [https://admin.deco.cx](https://admin.deco.cx/).** Let’s get straight into what’s new and what you can expect in the coming weeks.\n\n## 1. New Navigation and Topbar Menus\n\n \n\nSwitching teams is now hassle-free. Do it straight from the topbar, no need to return to the home page. Access team members and billing options instantly, and with the new integrated menu, Pages, Sections, and Analytics are just a click away.\n\n## 2. New Site Home\n\n\n \n\nWe’ve made it simpler and more intuitive, focusing on a clean design that puts your site and important info front and center.\n\n## 3. New Admin Pages\n\n## Sections\n\n \n\nYour new Visual Library is here. Easily edit and create headers, footers, banners, and more with the available components.\n\n## Apps\n\n \n\nManage all your installed apps and their settings in one place. And keep an eye out - we’re rolling out improvements throughout the month.\n\n## Deployments\n\n \n\nTrack deno deploy versions, and roll back with ease. Every new commit is displayed, making version management a breeze.\n\n## Logs\n\n \n\nAccess logs from any deployment, filter by date, and pinpoint errors quickly and accurately. Never guess what's happening in production again!\n\n## Coming Up in October Launch Month\n\nWe’re not stopping here. Every week, we’re rolling out new features leading up to the official launch of the new admin panel on October 31st, coinciding with our Fourth Hackathon. Here’s a sneak peek:\n\n* End-to-end New Analytics and VTEX Funnel \n* A new editor with full variant support and enhanced publishing \n* Easy redirects and proxies setup \n* SEO updates and simplified new site creation \n* Quick start on [play.deco.cx](https://play.deco.cx/) \n* Unified release history and easy version restoring with GH + Deco integration \n* A comprehensive library of ecommerce components \n* One-click app installations from Deco hub \n\n## Final Words\n\nThe beta version of the new admin is live, and we’re eager to hear your feedback. Explore, test, and let us know your thoughts in the **#admin-feedback** channel on our [deco.cx Discord server](https://deco.cx/discord). Note that you can continue using the stable version at https://deco.cx/admin.\n\nStay tuned for weekly updates, and get ready for the official launch on October 31st. See you soon!\n\nHappy coding!\n\n_The deco.cx team_","readTime":"5","authorAvatar":"https://avatars.githubusercontent.com/u/1633518?v=4"},{"img":"https://github.com/deco-cx/blog/assets/1753396/20fb996b-4d04-417c-af69-5beb2a7e7969","date":"10/10/2023","path":"licoes-6-meses.md","descr":"Uma jornada de aprendizados","title":"6 meses de lojas em produçāo","author":"Gui Tavano, Tiago Gimenes","content":"Nos últimos seis meses acumulamos um valioso conjunto de lições ao levar lojas para produção. Nesse período, aprendemos o que deve ser evitado, o que não funciona e a melhor maneira de iniciar o desenvolvimento de uma loja online. A seguir, compartilhamos um resumo das lições que adquirimos durante essa jornada.\n\n## Início do Desenvolvimento de uma Loja\n\nTodos projetos criados na Deco partem de um template pré-configurado com diversos componentes, integrações e temas. Observamos que, após criar a loja, alguns desenvolvedores recorrem ao GitHub para modificar componentes e temas diretamente no código. Embora isso seja um reflexo natural do trabalho de um desenvolvedor, notamos que os projetos nos quais o desenvolvimento se concentra principalmente no CMS (Content Management System) tendem a ser concluídos mais rapidamente e com melhor desempenho.\n\nO fluxo que descobrimos ser o ideal é o seguinte:\n\n1. Criar o projeto.\n2. Personalizar o tema, componentes, otimização de SEO, entre outros através do admin da deco.\n3. Apresentar o resultado ao cliente final e coletar feedback.\n4. Com base no feedback, ajustar a loja no CMS, usando as seções predefinidas e voltar ao passo 3.\n6. Se o cliente estiver satisfeito, migrar o domínio para a Deco.\n7. Caso seja necessário fazer alterações no código, adicionar seções específicas para o caso de uso em questão.\n\n## A Tag ``\n\nEm versões anteriores de nossos templates, utilizávamos a tag HTML5 ``. Essa tag permitia a criação de modais com suporte à acessibilidade. No entanto, identificamos dois problemas principais relacionados a ela:\n\n1. Exigia JavaScript para funcionar corretamente, o que ia de encontro à nossa filosofia de minimizar o uso de JavaScript na página.\n2. Versões recentes do iPhone (10, 11 e 12) não oferecem suporte a essa tag, o que nos forçava a inserir \"polyfills\". Essa inserção era síncrona e prejudicava significativamente o desempenho dos sites.\n\nDevido a esses dois pontos mencionados, adotamos uma abordagem alternativa usando a tag ` `, que é amplamente suportada por todos os navegadores. Essa mudança resolveu ambos os problemas. Migramos nossos templates para essa técnica e observamos um aumento na compatibilidade entre nossos sites e dispositivos móveis.\n\nSe o seu site ainda estiver usando a tag ``, recomendamos fazer a migração o mais rápido possível para ` ` para evitar incompatibilidades com iPhones. Para obter mais informações sobre essa abordagem, consulte [este link](https://daisyui.com/components/modal/#method-2-using-a-hidden-checkbox-legacy).\n\n## Unidades absolutas\n\nPercebemos que algumas de nossas lojas apresentavam taxas de conversão abaixo do esperado em determinados dispositivos, especialmente em iPhones e dispositivos Android. Após uma análise mais aprofundada, identificamos que o botão \"Ir para o checkout\" estava sendo ocultado pela barra de endereços dos navegadores Chrome e Safari em alguns desses dispositivos.\n\nEsse problema ocorreu devido ao uso de unidades absolutas, como `vh` (viewport height) e `vw` (viewport width), em vez de unidades relativas. As unidades absolutas fazem referência ao tamanho total da tela do dispositivo, não levando em consideração a área de renderização da janela, o que pode ocultar partes da interface do usuário.\n\nPara evitar esse tipo de problema, é fundamental evitar o uso de unidades absolutas, como `vh` e `vw`. Recomendamos revisar sua loja para garantir que essas unidades não estejam sendo usadas, especialmente no minicart.\n\n## Flexbox e Unidades Percentuais\n\nOutro problema que identificamos em algumas lojas diz respeito ao layout quebrado em versões mais antigas do Safari. Isso ocorre geralmente quando unidades percentuais são usadas em conjunto com flexbox. Um exemplo disso é o seguinte trecho de código:\n\n```html\n\n
\n
\n```\n\nNesse exemplo, estamos combinando flexbox (classe `flex`) com unidades percentuais (`width: 100%`). Isso pode funcionar em navegadores mais recentes, mas causa problemas em versões mais antigas do Safari, como o iPhone 10, 11 e 12.\n\nPara solucionar esse problema, recomendamos substituir `w-full` por classes relacionadas ao flexbox:\n\n ```html\n
\n
\n
\n```\n\nIsso garantirá que o layout funcione corretamente em todos os navegadores.\n\n\nEstamos sempre acompanhando os novos projetos, coletando os apresentados e melhorando o template [Storefront](https://github.com/deco-sites/storefront)."},{"img":"https://user-images.githubusercontent.com/121065272/278023987-b7ab4ae9-6669-4e38-94b8-268049fa6569.png","date":"06/10/2023","path":"partials.md","descr":"Revolucionando o Desenvolvimento Web","title":"Partials","author":"Marcos Candeia, Tiago Gimenes","content":"[Fresh](https://fresh.deno.dev/), o framework web utilizado pela Deco, é conhecido por possibilitar a criação de páginas de altíssimo desempenho. Uma das razões pelas quais as páginas criadas na Deco são tão eficientes é devido à arquitetura de ilhas. Essa arquitetura permite que os desenvolvedores removam partes não interativas do pacote final de JavaScript, reduzindo a quantidade total de JavaScript na página e aliviando o navegador para realizar outras tarefas.\n\nNo entanto, uma das limitações dessa arquitetura é que páginas muito complexas, com muita interatividade e, portanto, muitas ilhas, ainda exigem uma grande quantidade de JavaScript. Felizmente, essa limitação agora é coisa do passado, graças à introdução dos Partials.\n\n## Como Funciona?\n\nOs Partials, inspirados no [htmx](https://htmx.org/docs/), operam com um runtime que intercepta as interações do usuário com elementos de botão, âncora e formulário. Essas interações são enviadas para nosso servidor, que calcula o novo estado da página e responde ao navegador. O navegador recebe o novo estado da IU em HTML puro, que é então processado e as diferenças são aplicadas, alterando a página para o seu estado final. Para obter informações mais detalhadas sobre os Partials, consulte a [documentação](https://github.com/denoland/fresh/issues/1609) do Fresh.\n\n## Partials em Ação\n\nEstamos migrando os componentes da loja da Deco para a nova solução de Partials. Até o momento, migramos o seletor de SKU, que pode ser visualizado em ação [aqui](http://storefront-vtex.deco.site/camisa-masculina-xadrez-sun-e-azul/p?skuId=120). Mais mudanças, como `infinite scroll` e melhorias nos filtros, estão por vir.\n\nOutra funcionalidade desbloqueada é a possibilidade de criar dobras na página. As páginas de comércio eletrônico geralmente são longas e contêm muitos elementos. Os navegadores costumam enfrentar problemas quando há muitos elementos no HTML. Para lidar com isso, foi inventada a técnica de dobra.\n\nA ideia básica dessa técnica é dividir o conteúdo da página em duas partes: o conteúdo acima e o conteúdo abaixo da dobra. O conteúdo acima da dobra é carregado na primeira solicitação ao servidor. O conteúdo abaixo da dobra é carregado assim que a primeira solicitação é concluída. Esse tipo de funcionalidade costumava ser difícil de implementar em arquiteturas mais antigas. Felizmente, embutimos essa lógica em uma nova seção chamada `Deferred`. Esta seção aceita uma lista de seções como parâmetro que devem ter seu carregamento adiado para um momento posterior.\n\nPara usar essa nova seção:\n\n1. Acesse o painel de administração da Deco e adicione a seção `Rendering > Deferred` à sua página.\n2. Mova as seções que deseja adiar para a seção `Deferred`.\n3. Salve e publique a página.\n4. Pronto! As seções agora estão adiadas sem a necessidade de alterar o código!\n\nVeja `Deferred` em ação neste [link](https://storefront-vtex.deco.site/home-partial).\n\n> Observe que, para a seção `Deferred` aparecer, você deve estar na versão mais recente do `fresh`, `apps` e deco!\n\nUma pergunta que você pode estar se fazendo agora é: Como escolher as seções que devo incluir no deferred? Para isso, use a aba de desempenho e comece pelas seções mais pesadas que oferecem o maior retorno!\n\nPara mais informações, veja nossas [docs](https://docs.deco.cx/en/developing-capabilities/interactive-sections/partial)"},{"img":"https://user-images.githubusercontent.com/121065272/278021874-91a4ffea-3a22-4631-a4b3-c21bbc056386.png","date":"31/08/2023","path":"case-lojas-torra","descr":"Como a Lojas Torra dobrou sua taxa de conversão após migrar o front do seu ecommerce para a deco.cx","title":"A nova fase da Lojas Torra com a deco.cx.","author":"Por Maria Cecilia Marques"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/5a07de58-ba83-4c6c-92e1-bea033350318","date":"23/01/2023","path":"apps-era.md","descr":"A era dos Apps!","title":"Como utilizar apps para adicionar funcionalidades aos seus sites.","author":"Marcos Candeia, Tiago Gimenes","content":"Nesta última versão, a deco está revolucionando a forma como você adiciona funcionalidades em seus **sites**. Dê as boas-vindas à era dos Apps.\n\n**O que são Apps?**\n\nAs Apps são poderosos conjuntos de capacidades de negócios que podem ser importados e configurados em sites deco. Uma App na deco é essencialmente uma coleção de vários componentes, como **Actions**, **Sections**, **Loaders**, **Workflows**, **Handlers**, ou quaisquer outros tipos de blocks que podem ser usados para estender a funcionalidade dos seus sites.\n\nCom as apps, você tem o poder de definir propriedades necessárias para a funcionalidade como um todo, como chaves de aplicação, nomes de contas entre outros.\n\n**Templates de Loja**\n\nIntroduzimos vários templates de lojas integradas com plataformas como - Vnda., VTEX e Shopify. Agora, você tem a flexibilidade de escolher o template que melhor se adapta às suas necessidades e pode criar facilmente sua loja a partir desses templates.\n\n
\n\n**DecoHub: Seu Hub de Apps**\n\nCom a estreia do DecoHub, você pode descobrir e instalar uma variedade de apps com base em suas necessidades do seu negócio. Se você é um desenvolvedor, pode criar seus próprios apps fora do repositório do [deco-cx/apps](http://github.com/deco-cx/apps) e enviar um PR para adicioná-los ao DecoHub.\n\n**Transição de Deco-Sites/Std para Apps**\n\nMigramos do hub central de integrações do [deco-sites/std](https://github.com/deco-sites/std) para uma abordagem mais modular com o [deco-cx/apps](http://github.com/deco-cx/apps). O STD agora está em modo de manutenção, portanto, certifique-se de migrar sua loja e seguir as etapas de instalação em nossa [documentação](https://docs.deco.cx/en/getting-started/installing-an-app) para aproveitar o novo ecossistema de Apps.\n\n**Comece a Usar os Apps Agora Mesmo!**\n\nDesenvolvedores, mergulhem em nosso [guia](https://docs.deco.cx/en/developing-capabilities/apps/creating-an-app) sobre como criar seu primeiro App no Deco. Para lojas existentes, faça a migração executando `deno run -A -r https://deco.cx/upgrade`.\n\nIsso é apenas o começo. Estamos trabalhando continuamente para aprimorar nosso ecossistema de Apps e explorar novos recursos, como transições de visualização e soluções de estilo.\n\nFiquem ligados e vamos construir juntos o futuro do desenvolvimento web!"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/450efa63-082e-427a-b218-e8b3690823cc","date":"14/04/2023","path":"como-a-deco-faz-sua-loja-converter-mais.md","descr":"Descubra como a nossa plataforma headless ajuda lojas virtuais a converter mais clientes, simplificando a criação e manutenção de lojas rápidas e personalizáveis. ","title":"Como a deco.cx faz sua loja converter mais","author":"Rafael Crespo","content":"Com dezenas de milhões de e-commerces, o varejo digital nunca enfrentou tanta competição. Por outro lado, com o grande aumento do número de consumidores online, nunca houve maior oportunidade pra crescer. Neste contexto, **oferecer experiências distintas é crucial.**\n\nContudo, mesmo as maiores marcas tem dificuldade construir algo além do previsível - páginas lentas e estáticas para todos os usuários. O resultado todos já sabem: **baixa conversão** -- pessoas deixam de comprar na loja porque não viram um conteúdo que lhe agrada ou porquê as páginas demoraram pra carregar em seus celulares.\n\nVamos entender primeiro porque isso acontece.\n\n\n## Por quê seu site performa mal?\n\n### 1. Sua loja demora para construir\n\nO time de tecnologia para ecommerce é pouco produtivo pois trabalha com frameworks e tech stacks complexas de aprender e fazer manutenção - e que vão ficando ainda mais complexas com o tempo, além do talento em tech ser escasso.\n\nPessoas desenvolvedoras gastam horas e horas cada mês com a complexidade acidental das tecnologias usadas: esperando o tempo de deploy, cuidando de milhares de linhas de código, ou lidando com dependências no npm - sobra pouco tempo para codar de verdade.\n\nResultado: o custo de novas funcionalidades é caro e a entrega é demorada, além de ser operacionalmente complexo contratar e treinar devs.\n\n\n### 2. Sua loja demora para carregar\n\nSabe-se que a velocidade de carregamento de uma página afeta drastricamente a taxa de conversão e o SEO. Em um site \"médio\", é esperado que cada 100ms a menos no tempo de carregamento de uma página, aumente em 1% a conversão.\n\nAinda assim, a maior parte das lojas tem storefronts (frentes de loja de ecommerce) com nota abaixo de 50 no [Google Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/). E poucos parecem saber resolver.\n\nCom isso, o ecommerce global perde trilhões (!) de dólares em vendas.\n\nParte do problema é a escolha do framework e das tecnologias envolvidas:\n\n- a. SPA (Single Page Application) não é a tecnologia ideal para ecommerce, especialmente para performance e SEO.\n\n- b. A complexidade de criar código com esse paradigma cria bases de código difíceis de manter e adicionar novas funcionalidades.\n\n\n### 3. Sua loja demora para evoluir\n\nNos negócios e na vida, a evolução contínua e o aprendizado diário é o que gera sucesso. Especialmente no varejo, que vive de otimização contínua de margem.\n\nContudo, times de ecommerce dependem de devs para editar, testar, aprender e evoluir suas lojas.\n\nDevs, por sua vez, estão geralmente sobrecarregadas de demandas, e demoram demais para entregar o que foi pedido, ainda que sejam tasks simples.\n\nPara piorar, as ferramentas necessárias para realizar o ciclo completo de CRO (conversion rate optimization) como teste A/B, analytics, personalização e content management system (CMS) estão fragmentadas, o que exige ter que lidar com várias integrações e diversos serviços terceirizados diferentes.\n\nTudo isso aumenta drasticamente a complexidade operacional, especialmente em storefronts de alta escala, onde o ciclo de evolução é lento e ineficaz.\n\n\n## Nossa solução\n\nNosso time ficou mais de 10 anos lidando com estes mesmo problemas. Sabemos que existem tecnologias para criar sites e lojas de alto desempenho, mas a maioria parece não ter a coragem de utilizá-las.\n\nFoi quando decidimos criar a deco.cx.\n\nPara habilitarmos a criação de experiências de alto desempenho foi necessário um novo paradigma, que simplifique a criação de lojas rápidas, sem sacrificar a capacidade de **personalização e de evolução contínua.**\n\nCriamos uma plataforma headless que integra tudo o que uma marca ou agência precisa para gerenciar e otimizar sua experiência digital, tornando fácil tomar decisões em cima de dados reais, e aumentando continuamente as taxas de conversão.\n\n## Como fazemos isso:\n\n### 1. Com deco.cx fica rápido de construir\n\nAceleramos desenvolvimento de lojas, apostando em uma combinação de tecnologias de ponta que oferecem uma experiência de desenvolvimento frontend otimizada e eficiente. A stack inclui:\n\n- [**Deno**](https://deno.land)\n Um runtime seguro para JavaScript e TypeScript, criado para resolver problemas do Node.js, como gerenciamento de dependências e configurações TypeScript.\n\n- [**Fresh**](https://fresh.deno.dev)\nUm framework web minimalista e rápido, que proporciona uma experiência de desenvolvimento mais dinâmica e eficiente, com tempos de compilação rápidos ou inexistentes.\n\n- [**Twind**](https://twind.dev)\nUma biblioteca de CSS-in-JS que permite a criação de estilos dinâmicos, sem sacrificar o desempenho, e oferece compatibilidade com o popular framework Tailwind CSS.\n\n- [**Preact**](https://deno.land)\nUma alternativa leve ao React, que oferece desempenho superior e menor tamanho de pacote para aplicações web modernas.\n\nEssa combinação de tecnologias permite que a deco.cx ofereça uma plataforma de desenvolvimento frontend que melhora a produtividade e reduz o tempo de implementação, além de proporcionar sites de alto desempenho.\n\nOs principais ganhos de produtividade da plataforma e tecnologia deco são:\n\n- O deploy (e rollback) instantâneo na edge oferecido pelo [deno Deploy](https://deno.com/deploy)\n\n- A bibliotecas de componentes universais e extensíveis ([Sections](https://docs.deco.cx/en/concepts/section)), além de funções pré-construídas e totalmente customizáveis ([Loaders](https://docs.deco.cx/en/concepts/loader)).\n\n- A facilidade de aprendizado. Qualquer desenvolvedor junior que sabe codar em React, Javascript, HTML e CSS consegue aprender rapidamente a nossa stack, que foi desenhada pensando na melhor experiência de desenvolvimento.\n\n\n### 2. Com deco.cx fica ultrarrápido de navegar\n\nAs tecnologias escolhidas pela deco também facilitam drasticamente a criação de lojas ultrarrápidas.\n\nNormalmente os storesfronts são criados com React e Next.Js - frameworks JavaScript que usam a abordagem de Single-Page Applications (SPA) para construir aplicativos web. Ou seja, o site é carregado em uma única página e o conteúdo é transportado dinamicamente com JavaScript.\n\nDeno e Fresh, tecnologias que usamos aqui, são frameworks de JavaScript que trabalham com outro paradigma: o server-side-rendering, ou seja, o processamento dos componentes da página é feito em servidores antes de ser enviado para o navegador, ao invés de ser processado apenas no lado do cliente.\n\nIsso significa que a página já vem pronta para ser exibida quando é carregada no navegador, o que resulta em um carregamento mais rápido e uma melhor experiência do usuário.\n\nAlém disso, essas tecnologias trabalham nativamente com computação na edge, o que significa que a maior parte da lógica é executada em servidores perto do usuário, reduzindo a latência e melhorando a velocidade de resposta. Como o processamento é feito em servidores na edge, ele é capaz de realizar tarefas mais pesadas, como buscar e processar dados de fontes externas, de forma mais eficiente.\n\nAo usar essas ferramentas em conjunto, é possível construir e-commerces de alto desempenho, com tempos de carregamento de página mais rápidos e uma experiência geral melhorada.\n\n\n### 3. Com deco.cx fica fácil de evoluir\n\nA plataforma deco oferece, em um mesmo produto, tudo o que as agências e marcas precisam para rodar o ciclo completo de evolução da loja:\n\n- **Library**: Onde os desenvolvedores criam (ou customizam) [loaders](https://docs.deco.cx/en/concepts/loader) que puxam dados de qualquer API externa, e usam os dados coletados para criar componentes de interface totalmente editáveis pelos usuários de negócio ([Sections](https://docs.deco.cx/en/concepts/section)).\n\n- **Pages**: Nosso CMS integrado, para que o time de negócio consiga [compor e editar experiências rapidamente](https://docs.deco.cx/en/concepts/page), usando as funções e componentes de alto desempenho pré-construidos pelos seus desenvolvedores, sem precisar de uma linha de código.\n\n- **Campanhas**: Nossa ferramenta de personalização que te permite agendar ou customizar a mudança que quiser por data ou audiência. Seja uma landing page para a Black Friday ou uma sessão para um público específico, você decide como e quando seu site se comporta para cada usuário.\n\n- **Experimentos**: Testes A/B ou multivariados em 5 segundos - nossa ferramenta te permite acompanhar, em tempo real, a performance dos seus experimentos e relação à versão de controle.\n\n- **Analytics**: Dados em tempo real sobre toda a jornada de compra e a performance da loja. Aqui você cria relatórios personalizados, que consolidam dados de qualquer API externa.\n\n\n## O que está por vir\n\nEstamos só começando. Nossa primeira linha de código na deco foi em Setembro 2022. De lá pra cá montamos [uma comunidade no Discord](https://deco.cx/discord), que já conta com 1.050+ membros, entre agências, estudantes, marcas e experts.\n\nSe você está atrás de uma forma de criar sites e lojas ultrarrápidos, relevantes para cada audiência, e que evoluem diariamente através de experimentos e dados, [agende uma demo](https://deco.cx)."},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/9cd72d58-1a57-443f-83a3-d263105670ff","date":"03/12/2023","path":"abertura-ii-hackathon-deco.md","descr":"Discurso da abertura da segunda Hackathon deco.cx.","title":"América Latina e o futuro das experiências digitais","author":"Guilherme Rodrigues","content":"Estou extremamente empolgado em dar início à nossa segunda Hackathon deco.cx! Mas antes de começarmos, eu quero dividir algumas palavras com vocês.\n\nNós estamos reunidos aqui hoje para aprender, criar e, se tudo der certo, levar para casa um prêmio de 500 reais. Mas acreditem, esse prêmio não é o melhor que vocês vão levar daqui — longe disso.\n\nA verdadeira recompensa é a oportunidade de adquirir novas habilidades que os diferenciam e os elevam a outro patamar como desenvolvedores e desenvolvedoras. E ainda maior que isso: a oportunidade de protagonizar a próxima geração de desenvolvimento web global.\n\nO estado atual de complexidade acumulada no desenvolvimento web é insustentável. Os anos de desenvolvimento na \"câmara de eco\" dos frameworks JS gerou uma enorme fricção, uma grande barreira de entrada para desenvolver web apps.\n\nCada vez é necessário aprender mais frameworks, padrões e bibliotecas para ser minimamente produtivo. O tempo de build de sites baseados nessas stacks limitam nossa criatividade no dia a dia. Além disso, temos grandes dificuldades de entregar sites performáticos. Não precisa ser assim!\n\nVivemos em um momento único na história do desenvolvimento web. Deno está no início de uma revolução que transformará a maneira como criamos e entregamos experiências digitais. E nós temos a chance de aproveitar essa janela de oportunidade para nos destacarmos no mercado global.\n\nDeno, junto com tecnologias como Fresh e Tailwind, representam a esperança de uma nova direção. Essas tecnologias nos mostraram como é possível ser simples e eficiente. Estamos vendo nascer o próximo Node.js, diante de nossos olhos — e estamos convidados a participar e a co-criá-lo!\n\nPor outro lado, a demanda global por digitalização só acelera. Demanda por projetos, demanda por sites, demanda por pessoas desenvolvedoras. E nós temos muita oferta de talento brasileiro — jovens pessoas desenvolvedoras, muitas vezes com dificuldade de se colocar no mercado de trabalho apesar de seu grande potencial.\n\nNós temos a oportunidade de atender essa demanda, mostrando o incrível potencial dos desenvolvedores brasileiros. Não precisamos apenas seguir as tendências; podemos liderar e nos tornar referência mundial na criação de experiências digitais de alta performance.\n\nMas a nossa responsabilidade não termina com o domínio dessas tecnologias. Para promover uma mudança estrutural, não basta garantirmos o nosso próprio sucesso. Devemos nos esforçar para sermos mentores, treinarmos a próxima geração e multiplicarmos a tecnologia no Brasil, promovendo a inclusão e dando oportunidades a todos aqueles que desejam ingressar nesse mercado em constante crescimento: especialmente aqueles que previsivelmente não teriam acesso a elas.\n\nEntão, enquanto vocês participam desta Hackathon, lembrem-se do potencial que têm em mãos e da responsabilidade compartilhada. Que vocês aproveitem ao máximo essa oportunidade, tanto para o seu crescimento pessoal quanto para o desenvolvimento da nossa comunidade. Estamos construindo algo muito maior do que cada um de nós.\n\nDesejo a todos vocês um ótimo evento, repleto de aprendizado, colaboração e inovação. Que comecem os trabalhos!"},{"img":"https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/179d2e1f-8214-46f4-bc85-497f2313145e","date":"03/01/2023","path":"criando-uma-pagina-com-decocx.md","descr":"Recriando a página da deno-land utilizando a plataforma da deco.cx com as tecnologias: Deno, Fresh, Preact e Twind.","title":"Minha experiência com deco.cx","author":"Guilherme Tavano","content":"## Desafio\n\nRecentemente aceitei um desafio e quero compartilhar como foi a minha experiência.\n\nO desafio era reconstruir a Home da [https://deno.land/](https://deno.land/) utilizando a plataforma deco.cx como CMS.\n\n## O que é deco.cx?\n\nÉ uma plataforma criada por um time de pessoas que trabalharam na Vtex, para construir páginas e lojas virtuais performáticas e em um curto período de tempo.\n\nCom o slogan \"Crie, teste e evolua sua loja. Todos os dias.\", a plataforma foca na simplicidade no desenvolvimento, autonomia para edições/testes e foco em performance.\n\n## Primeira etapa - Conhecendo a Stack\n\nAntes de iniciar o desenvolvimento, precisei correr atrás das tecnologias que a deco.cx sugere para utilização.\n\nSão elas:\n\n### Preact\n\nPreact é uma biblioteca JS baseada no React, mas que promete ser mais leve e mais performática.\n\nA adaptação aqui, para quem já tem o React, não tende a ser complicada.\n\n### Deno\n\nDeno é um ambiente de execução de Javascript e Typescript, criado pelo mesmo criador do Node.js.\n\nCom uma boa aceitação entre os devs, a alternativa melhorada do Node.js promete se destacar no futuro.\n\n### Fresh\n\nFresh é um Framework que me deixou bem curioso. Nessa stack, podemos dizer que ele atua como um Next.\n\nApesar de não ter me aprofundado no Framework, não tive problemas aqui, afinal um dos pilares do Fresh é não precisar de configuração, além de não ter etapa de build.\n\n### Twind\n\nTwind é uma alternativa mais leve, rápida e completa do tão conhecido Tailwind.\n\nA adaptação é extremamente fácil para quem já trabalha com Tailwind, mas não era o meu caso.\n\nPequenos gargalos no começo, mas a curva de aprendizagem é curta e nas últimas seções eu já estava sentindo os efeitos (positivos).\n\n## Segunda Etapa - Conhecendo a ferramenta da deco.cx\n\nMeu objetivo aqui, era entender como a ferramenta me ajudaria a recriar a página deno.land, tornando os componentes editáveis pelo painel CMS.\n\n### Criação da Conta\n\nO Login foi bem simples, pode ser feito com Github ou Google.\n\n### Criação do Projeto\n\nNa primeira página, após logado, temos a opção de Criar um Novo Site.\n\nTive que dar um nome ao projeto e escolher o template padrão para ser iniciado.\n\n\n\nAssim que o site é criado, **automaticamente** um repositório é montado no GitHub da [deco-sites](https://github.com/deco-sites) e um link da sua página na internet também.\n\nA partir dai, cada push que você fizer resultará no Deploy da aplicação no servidor e rapidamente será refletido em produção\n\n### Entendendo páginas e seções\n\nDentro do painel, podemos acessar a aba de \"Pages\"\n\n\n\nNessa parte, cada página do seu site estará listada, e assim que você clicar, você pode ver as seções que estão sendo utilizadas.\n\n\n\nDessa forma, fica fácil para uma pessoa não técnica conseguir criar novas páginas e adicionar/editar as seções.\n\nMas para entender como criar um modelo de seção, vamos para a terceira etapa.\n\n## Terceira Etapa - Integração do Código com a deco.cx\n\nComo eu tinha o objetivo de tornar as seções da página editáveis, eu precisei entender como isso deveria ser escrito no código.\n\nE é tão simples, quanto tipagem em Typescript, literalmente.\n\nDentro da estrutura no GitHub, temos uma pasta chamada _sections_, e cada arquivo _.tsx_ lá dentro se tornará uma daquelas seções no painel.\n\n\n\nEm cada arquivo, deve ser exportado uma função default, que retorna um código HTML.\n\nDentro desse HTML, podemos utilizar dados que vem do painel, e para definir quais dados deverão vir de lá, fazemos dessa forma:\n\nexport interface Props {\n image: LiveImage;\n imageMobile: LiveImage;\n altText: string;\n title: string;\n subTitle: string;\n}\n\nEsses são os campos que configurei para a seção _Banner_, e o resultado é esse no painel:\n\n\n\nDepois recebi esses dados como Props, assim:\n\nexport default function Banner({ image, imageMobile, altText, subTitle, title }: Props,) {\n return (\n <>\n //Your HTML code here\n >\n );\n}\n\nE o resultado final da seção é:\n\n\n\n### Dev Mode\n\nÉ importante ressaltar, que durante o desenvolvimento, a ferramenta oferece uma função \"Dev Mode\".\n\nIsso faz com que os campos editáveis do painel se baseiem no código feito no localhost e não do repositório no Github.\n\nGarantindo a possibilidade de testes durante a criação.\n\n## Resultado Final + Conclusão\n\nO resultado final, pode ser conferido em: [https://deno-land.deco.site/](https://deno-land.deco.site/)\n\nConsegui atingir nota 97 no Pagespeed Mobile e isso me impressionou bastante.\n\nParticularmente, gostei muito dos pilares que a deco.cx está buscando entregar, em especial a autonomia de edição e o foco na velocidade de carregamento.\n\nA ferramenta é nova e já entrega muita coisa legal. A realização desse desafio foi feita após 3 meses do início do desenvolvimento da plataforma da deco.\n\nMinha recomendação a todos é que entrem na [Comunidade no Discord](https://discord.gg/RZkvt5AE) e acompanhem as novidades para não ficar para trás.\n\nSe possível, criem um site na ferramenta e façam os seus próprios testes.\n\nEm parceria com [TavanoBlog](https://tavanoblog.com.br/)."},{"img":"https://i.insider.com/5e6bb1bd84159f39f736ee32?width=2000&format=jpeg&auto=webp","date":"11/29/2022","path":"pg-vb-pt-br.md","descr":"Por Paul Graham, traduzido por ChatGPT.","title":"A vida é curta","author":"Chat GPT","content":"A vida é curta, como todos sabem. Quando era criança, costumava me perguntar sobre isso. A vida realmente é curta ou estamos realmente nos queixando de sua finitude? Seríamos tão propensos a sentir que a vida é curta se vivêssemos 10 vezes mais tempo?\n\nComo não parecia haver maneira de responder a essa pergunta, parei de me perguntar sobre isso. Depois tive filhos. Isso me deu uma maneira de responder à pergunta e a resposta é que a vida realmente é curta.\n\nTer filhos me mostrou como converter uma quantidade contínua, o tempo, em quantidades discretas. Você só tem 52 fins de semana com seu filho de 2 anos. Se o Natal-como-mágica dure, digamos, dos 3 aos 10 anos, só poderá ver seu filho experimentá-lo 8 vezes. E enquanto é impossível dizer o que é muito ou pouco de uma quantidade contínua como o tempo, 8 não é muito de alguma coisa. Se você tivesse uma punhado de 8 amendoins ou uma prateleira de 8 livros para escolher, a quantidade definitivamente pareceria limitada, independentemente da sua expectativa de vida.\n\nOk, então a vida realmente é curta. Isso faz alguma diferença saber disso?\n\nFez para mim. Isso significa que argumentos do tipo \"A vida é muito curta para x\" têm muita força. Não é apenas uma figura de linguagem dizer que a vida é muito curta para alguma coisa. Não é apenas um sinônimo de chato. Se você achar que a vida é muito curta para alguma coisa, deve tentar eliminá-la se puder.\n\nQuando me pergunto o que descobri que a vida é muito curta, a palavra que me vem à cabeça é \"besteira\". Eu percebo que essa resposta é um pouco tautológica. Quase é a definição de besteira que é a coisa de que a vida é muito curta. E ainda assim a besteira tem um caráter distintivo. Há algo falso nela. É o alimento junk da experiência. [1]\n\nSe você perguntar a si mesmo o que gasta o seu tempo em besteira, provavelmente já sabe a resposta. Reuniões desnecessárias, disputas sem sentido, burocracia, postura, lidar com os erros de outras pessoas, engarrafamentos, passatempos viciantes mas pouco gratificantes.\n\nHá duas maneiras pelas quais esse tipo de coisa entra em sua vida: ou é imposto a você ou o engana. Até certo ponto, você tem que suportar as besteiras impostas por circunstâncias. Você precisa ganhar dinheiro e ganhar dinheiro consiste principalmente em realizar tarefas. De fato, a lei da oferta e da demanda garante isso: quanto mais gratificante é algum tipo de trabalho, mais barato as pessoas o farão. Pode ser que menos tarefas sejam impostas a você do que você pensa, no entanto. Sempre houve uma corrente de pessoas que optam por sair da rotina padrão e vão viver em algum lugar onde as oportunidades são menores no sentido convencional, mas a vida parece mais autêntica. Isso pode se tornar mais comum.\n\nVocê pode reduzir a quantidade de besteira em sua vida sem precisar se mudar. A quantidade de tempo que você precisa gastar com besteiras varia entre empregadores. A maioria das grandes organizações (e muitas pequenas) está imersa nelas. Mas se você priorizar conscientemente a redução de besteiras acima de outros fatores, como dinheiro e prestígio, pode encontrar empregadores que irão desperdiçar menos do seu tempo.\n\nSe você é freelancer ou uma pequena empresa, pode fazer isso no nível de clientes individuais. Se você demitir ou evitar clientes tóxicos, pode diminuir a quantidade de besteira em sua vida mais do que diminui sua renda.\n\nMas, enquanto alguma quantidade de besteira é inevitavelmente imposta a você, a besteira que se infiltra em sua vida enganando-o não é culpa de ninguém, mas sua própria. E ainda assim, a besteira que você escolhe pode ser mais difícil de eliminar do que a besteira que é imposta a você. Coisas que o atraem para desperdiçar seu tempo precisam ser muito boas em enganá-lo. Um exemplo que será familiar para muitas pessoas é discutir online. Quando alguém contradiz você, está, de certa forma, atacando você. Às vezes bastante abertamente. Seu instinto quando é atacado é se defender. Mas, assim como muitos instintos, esse não foi projetado para o mundo em que vivemos agora. Contrariamente ao que parece, é melhor, na maioria das vezes, não se defender. Caso contrário, essas pessoas estão literalmente tomando sua vida. [2]\n\nDiscutir online é apenas incidentalmente viciante. Há coisas mais perigosas do que isso. Como já escrevi antes, um subproduto do progresso técnico é que as coisas que gostamos tendem a se tornar mais viciantes. Isso significa que precisaremos fazer um esforço consciente para evitar vícios, para nos colocarmos fora de nós mesmos e perguntarmos: \"é assim que quero estar gastando meu tempo?\"\n\nAlém de evitar besteiras, devemos procurar ativamente coisas que importam. Mas coisas diferentes importam para pessoas diferentes e a maioria precisa aprender o que importa para elas. Alguns são afortunados e percebem cedo que adoram matemática, cuidar de animais ou escrever e, então, descobrem uma maneira de passar muito tempo fazendo isso. Mas a maioria das pessoas começa com uma vida que é uma mistura de coisas que importam e coisas que não importam e só gradualmente aprende a distinguir entre elas.\n\nPara os jovens, especialmente, muita dessa confusão é induzida pelas situações artificiais em que se encontram. Na escola intermediária e na escola secundária, o que os outros estudantes acham de você parece ser a coisa mais importante do mundo. Mas quando você pergunta aos adultos o que eles fizeram de errado nessa idade, quase todos dizem que se importavam demais com o que os outros estudantes achavam deles.\n\nUma heurística para distinguir coisas que importam é perguntar a si mesmo se você se importará com elas no futuro. A coisa falsa que importa geralmente tem um pico afiado de parecer importar. É assim que o engana. A área sob a curva é pequena, mas sua forma se crava em sua consciência como uma alfinete.\n\nAs coisas que importam nem sempre são aquelas que as pessoas chamariam de \"importantes\". Tomar café com um amigo importa. Você não vai sentir depois que isso foi um desperdício de tempo.\n\nUma coisa ótima em ter crianças pequenas é que elas fazem você gastar tempo em coisas que importam: elas. Elas puxam sua manga enquanto você está olhando para o seu celular e dizem: \"você vai brincar comigo?\". E as chances são de que essa seja, de fato, a opção de minimização de besteira.\n\nSe a vida é curta, devemos esperar que sua brevidade nos surpreenda. E é exatamente isso que costuma acontecer. Você assume as coisas como garantidas e, então, elas desaparecem. Você acha que sempre pode escrever aquele livro, ou subir aquela montanha, ou o que quer que seja, e então percebe que a janela se fechou. As janelas mais tristes fecham quando outras pessoas morrem. Suas vidas também são curtas. Depois que minha mãe morreu, eu desejei ter passado mais tempo com ela. Eu vivi como se ela sempre estivesse lá. E, de maneira típica e discreta, ela incentivou essa ilusão. Mas era uma ilusão. Acho que muitas pessoas cometem o mesmo erro que eu cometi.\n\nA maneira usual de evitar ser surpreendido por algo é estar consciente disso. Quando a vida era mais precária, as pessoas costumavam ser conscientes da morte em um grau que agora pareceria um pouco morboso. Não tenho certeza do porquê, mas não parece ser a resposta certa lembrar constantemente da caveira pairando no ombro de todos. Talvez uma solução melhor seja olhar o problema pelo outro lado. Cultive o hábito de ser impaciente com as coisas que mais quer fazer. Não espere antes de subir aquela montanha ou escrever aquele livro ou visitar sua mãe. Você não precisa se lembrar constantemente por que não deve esperar. Apenas não espere.\n\nPosso pensar em mais duas coisas que alguém faz quando não tem muito de algo: tentar obter mais disso e saborear o que tem. Ambos fazem sentido aqui.\n\nComo você vive afeta por quanto tempo você vive. A maioria das pessoas poderia fazer melhor. Eu entre elas.\n\nMas você provavelmente pode obter ainda mais efeito prestando mais atenção ao tempo que tem. É fácil deixar os dias passarem voando. O \"fluxo\" que as pessoas imaginativas adoram tanto tem um parente mais sombrio que impede você de pausar para saborear a vida no meio da rotina diária de tarefas e alarmes. Uma das coisas mais impressionantes que já li não estava em um livro, mas no título de um: Burning the Days (Queimando os Dias), de James Salter.\n\nÉ possível diminuir um pouco o tempo. Eu melhorei nisso. As crianças ajudam. Quando você tem crianças pequenas, há muitos momentos tão perfeitos que você não consegue deixar de notar.\n\nTambém ajuda sentir que você tirou tudo de alguma experiência. O motivo pelo qual estou triste por minha mãe não é apenas porque sinto falta dela, mas porque penso em tudo o que poderíamos ter feito e não fizemos. Meu filho mais velho vai fazer 7 anos em breve. E, embora sinta falta da versão dele de 3 anos, pelo menos não tenho nenhum arrependimento pelo que poderia ter sido. Tivemos o melhor tempo que um pai e um filho de 3 anos poderiam ter.\n\nCorte implacavelmente as besteiras, não espere para fazer coisas que importam e saboreie o tempo que tem. É isso o que você faz quando a vida é curta. \n\n---\n\nNotas\n\n[1] No começo, eu não gostei que a palavra que me veio à mente tivesse outros significados. Mas então percebi que os outros significados estão bastante relacionados. Besteira no sentido de coisas em que você desperdiça seu tempo é bastante parecida com besteira intelectual.\n\n[2] Escolhi esse exemplo de forma deliberada como uma nota para mim mesmo. Eu sou atacado muito online. As pessoas contam as mentiras mais loucas sobre mim. E até agora eu fiz um trabalho bastante medíocre de suprimir a inclinação natural do ser humano de dizer \"Ei, isso não é verdade!\".\n\nObrigado a Jessica Livingston e Geoff Ralston por ler rascunhos deste."},{"tags":[],"body":{}}]},"__resolveType":"site/loaders/blogPostLoader.ts"}
\ No newline at end of file
diff --git a/.env b/.env
index 7b5c60f7..b6a7c28c 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,2 @@
DECO_SITE_NAME=starting
-DECO_ENV_NAME=deena
\ No newline at end of file
+DECO_ENV_NAME=tavano
\ No newline at end of file
diff --git a/components/decohelp/pages/ui/DocsOverviewContent/DocsOverviewContent.tsx b/components/decohelp/pages/ui/DocsOverviewContent/DocsOverviewContent.tsx
index c166f02c..1dd88182 100644
--- a/components/decohelp/pages/ui/DocsOverviewContent/DocsOverviewContent.tsx
+++ b/components/decohelp/pages/ui/DocsOverviewContent/DocsOverviewContent.tsx
@@ -45,7 +45,7 @@ export default function OverviewContent(
icon: "Book",
label: labels.readTutorials[props.language],
href:
- `https://deco.cx/docs/${props.language}/getting-started/creating-a-site`,
+ `https://docs.deco.cx/${props.language}/getting-started/creating-a-site`,
},
{
icon: "Sparkle",
diff --git a/docs/api-reference/invoke/en.md b/docs/api-reference/invoke/en.md
deleted file mode 100644
index 420361d2..00000000
--- a/docs/api-reference/invoke/en.md
+++ /dev/null
@@ -1,293 +0,0 @@
----
-description: Invoke Client API Reference
----
-
-## Description
-
-The Invoke API is a typed RPC (Remote Procedure Call) client. It makes
-interacting programatically with loaders and actions safer and as easy as
-calling a function, abstracting away the details of the underlying network
-transport.
-
-A single invoke client can be used to interact with actions and loaders from
-your site and from any installed App. The Invoke client have ways to be used
-both from the Client and from the Server, and supports more complex patterns out
-of the box, like calling multiple loaders/actions in a single request (See
-Example 4: Batch Invoke), or sending files via a multipart request.
-
-A Invoke type signature will always be dynamic, and will be inferred based on
-the type of your manifest and the type of the action/loader you are calling:
-
-For example:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-const result = await invoke.site.loaders.example(
- props: T, // This will be the type of the props of the action/loader being called
- init?: InvokerRequestInit // This is a fetch request init object extended with some extra options
-);
-
-console.log(result); // This will be the type of the return value of the action/loader
-```
-
-## Importing the API
-
-### Client-side usage
-
-For client-side usage, the Invoke client is exported from the `runtime.ts` file,
-at the root of the project.
-
-Below is an example of a typical `runtime.ts` file, that creates a client for
-interacting with actions and loaders from your site, and from two apps: VTEX and
-Linx Impulse. All Apps can be used in the same way, since they all export a
-`Manifest`.
-
-```typescript
-import { proxy } from "deco/clients/withManifest.ts";
-import type { Manifest } from "./manifest.gen.ts";
-import type { Manifest as ManifestVTEX } from "apps/vtex/manifest.gen.ts";
-import type { Manifest as ManifestLinxImpulse } from "apps/linx-impulse/manifest.gen.ts";
-
-export const invoke = proxy
();
-```
-
-### Server-side usage
-
-For server-side usage, the Invoke client can always be accessed from the
-_Application Context_. This makes it easy to use invoke inside actions and
-loaders.
-
-Below is an example of a loader that uses the Invoke client to call another
-loader from the same application:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export const async function getUserNotes(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- const user = await ctx.invoke.site.loaders.getUser({ token: req.headers.get("Authorization") });
-
- if (!user) {
- throw new Error("User not found");
- }
-
- return user.notes;
-}
-```
-
-## Usage Examples
-
-### Example 1: Calling an Action or Loader from the Browser
-
-Suppose we have a loader called `getUser`, that returns a user object, based on
-a given user id.
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export interface Props {
- id: string;
-}
-
-export const async function getUser(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- return fetchUser(props.id);
-}
-```
-
-We can now call this loader from the Browser, using the `invoke` client exported
-from the `runtime.ts` file:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-const user = await invoke.site.loaders.getUser({ id: "123" });
-```
-
-Since the Invoke client is typed, the return type of the `getUser` function is
-automatically inferred, and the type of the `user` variable is `User`. All of
-the parameter types are also inferred, so we get more confidence for interacting
-with our APIs.
-
-**Important**: This should only be used in the Browser. Trying to import and use
-the Invoke client from the `runtime.ts` file on the server-side will result in
-an error. For calling actions/loaders from the server, refer to the next
-section.
-
-### Example 2: Calling an Action or Loader on the Server
-
-Suppose we are creating an action called `addItem`, that adds an item to a cart.
-
-Suppose we also already have a loader called `cart`, that returns the current
-cart for a given user, based on a session contained in the request cookies:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-import { getSessionFromRequest } from "site/lib/session.ts";
-import { getCartFromDatabase } from "site/lib/cart.ts";
-
-export interface CartItem {
- productId: string;
- quantity: number;
-}
-
-export interface Cart {
- items: CartItem[];
- id: string;
-}
-
-export const async function cart(
- _props: unknown, req: Request, ctx: AppContext
-): Promise {
- // Get the session from the request cookies
- const session = await getSessionFromRequest(req);
-
- // Get the cart from the database using
- const cart = await getCartFromDatabase(session.cartId);
-
- return cart;
-}
-```
-
-Now, when creating the `addItem` action, we can reuse the `cart` loader to fetch
-the current cart, and then add the item to the cart:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-import { saveCartToDatabase } from "site/lib/cart.ts";
-
-export interface Props {
- item: CartItem;
-}
-
-export const async function addItem(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- const currentCart = await ctx.invoke.site.loaders.cart();
-
- // Add the item to the cart
- cart.items.push(props.item);
-
- // Save the cart to the database
- await saveCartToDatabase(cart);
-
- return cart;
-}
-```
-
-The Invoke client that comes from the Application Context is also typed, based
-on the `AppContext` type exported by convention from your `site` app.
-
-### Example 3: Uploading a file to the Server
-
-Suppose we have an action called `uploadFile`, that uploads a file to a given
-destination. The action receives a `file` property, which is a file object that
-contains the file data, and a `destination` property, which is a string that
-specifies the destination path for where the file should be uploaded.
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export interface Props {
- file: File;
- destination: string;
-}
-
-export const async function uploadFile(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- // Upload the file to the destination
- await uploadFileToDestination(props.file, props.destination);
-}
-```
-
-We're using the `File` Web API as a prop type here, but this creates a problem:
-
-The `File` object is not serializable via JSON, but the Invoke client uses JSON
-under the hood. This means that trying to pass a `File` object as a prop to an
-action will result in an error when trying to access the `file` property.
-
-To solve this, the Invoke client provides a way to upload files via a multipart
-request, which is a nice way to send files to the server, using the `FormData`
-API and the `multipart/form-data` content type under the hood.
-
-To make use of this, you only need to add a `multipart: true` option to the
-Invoke `InvokerRequestInit` (Which is the second argument to any invoke call),
-and the client will automatically use a custom protocol to send the payload via
-multipart, thus making it possible to send files to the server.
-
-We can now call this action from the Browser, using the `invoke` client exported
-from the `runtime.ts` file:
-
-```tsx
-import { invoke } from "site/runtime.ts";
-
-export function UploadFileInput() {
- const uploadFile = async (file: File) => {
- await invoke.site.actions.uploadFile({
- file: file,
- destination: "/uploads/files",
- }, { multipart: true });
- };
-
- return (
- {
- const file = e.target.files[0];
- if (file) {
- await uploadFile(file);
- }
- }}
- />
- );
-}
-```
-
-Now the `file` property can be safely accessed in the action!
-
-**Important**: When using the `multipart` option, the Invoke client will send a
-FormData object to the server, which only supports Files and strings. This means
-that any property that is a number or a boolean will be converted to a string.
-
-### Example 4: Batch Invoke
-
-Batch invoke is useful when you need to perform multiple operations
-simultaneously and want to minimize network latency by reducing the number of
-individual requests. Here’s an example scenario where using batch invoke makes
-sense: retrieving multiple sets of related data in a single request.
-
-Suppose we have a user logged in, and we have three different loaders that
-return data related to the user: One for notes, one for the address and one for
-the orders.
-
-We can retrieve all three of these sets of data in a single request by using a
-batch invoke:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-// We can always destructure the invoke client properties
-// to write easier to read code
-const { loaders } = invoke.site;
-
-const user = ...; // Get the current user from somewhere
-
-const {
- userNotes,
- userAddress,
- userOrders,
-} = await invoke({
- userNotes: loaders.getUserNotes({ userId: user.id, orderBy: "latest" }),
- userAddress: loaders.getUserAddress({ token: user.token }),
- userOrders: loaders.getUserOrders({ userId: user.id }),
-});
-```
-
-By passing an object with the loaders/actions as properties, the Invoke client
-will automatically batch the requests, and return the results in the same format
-as the passed object. We still have automatically inferred types when batch
-invoking this way!
diff --git a/docs/api-reference/invoke/pt.md b/docs/api-reference/invoke/pt.md
deleted file mode 100644
index cab9a176..00000000
--- a/docs/api-reference/invoke/pt.md
+++ /dev/null
@@ -1,296 +0,0 @@
----
-description: Invoke Client API Reference
----
-
-A API Invoke é um cliente RPC (Remote Procedure Call) tipado. Ela torna a
-interação com loaders e actions mais segura e tão fácil quanto chamar uma
-função, abstraindo os detalhes do transporte de rede acontecendo por baixo dos
-panos.
-
-Um único cliente Invoke pode ser usado para interagir com ações e carregadores
-do seu site e de qualquer App instalado. O Invoke pode ser usado tanto no
-Cliente quanto no Servidor e suporta padrões mais complexos, como chamar
-múltiplos loaders/actions em uma única requisição (Veja o Exemplo 4: Invoke em
-Batch) ou enviar arquivos via uma requisição multipart.
-
-A assinatura de tipo de Invoke será sempre dinâmica e será inferida com base no
-tipo do seu manifesto e no tipo da ação/carregador que você está chamando:
-
-Por exemplo:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-const resultado = await invoke.site.loaders.exemplo(
- props: T, // Este será o tipo das props da action/loader sendo chamado
- init?: InvokerRequestInit // Este é um objeto de inicialização de requisição fetch estendido com algumas opções extras
-);
-
-console.log(resultado); // Este será o tipo do valor de retorno da action/loader
-```
-
-## Importando a API
-
-### Uso no Browser (client-side)
-
-Para uso no Cliente, o Invoke é exportado da `runtime.ts` no raiz do projeto.
-
-Abaixo está um exemplo de um arquivo `runtime.ts` típico, que cria um cliente
-para interagir com actions e loaders do seu site, e de dois apps: VTEX e Linx
-Impulse. Todos os Apps podem ser usados da mesma forma, já que exportam um
-`Manifest`.
-
-```typescript
-import { proxy } from "deco/clients/withManifest.ts";
-import type { Manifest } from "./manifest.gen.ts";
-import type { Manifest as ManifestVTEX } from "apps/vtex/manifest.gen.ts";
-import type { Manifest as ManifestLinxImpulse } from "apps/linx-impulse/manifest.gen.ts";
-
-export const invoke = proxy();
-```
-
-### Uso no Servidor
-
-Para uso no Servidor, o Invoke pode sempre ser acessado a partir do _Contexto_
-da Aplicação. Isso torna o Invoke mais fácil de usar dentro de actions e
-loaders.
-
-Abaixo está um exemplo de um loader que utiliza o Invoke para chamar outro
-loader da mesma Aplicação:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export const async function getUserNotes(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- const user = await ctx.invoke.site.loaders.getUser({ token: req.headers.get("Authorization") });
-
- if (!user) {
- throw new Error("Usuário não encontrado");
- }
-
- return user.notes;
-}
-```
-
-## Exemplos de Uso
-
-### Exemplo 1: Chamando uma Action ou Loader a partir do Navegador
-
-Suponha que temos um loader chamado `getUser`, que retorna um objeto de usuário,
-baseado em um `id` de usuário enviado.
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export interface Props {
- id: string;
-}
-
-export const async function getUser(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- return fetchUser(props.id);
-}
-```
-
-Podemos agora chamar esse loader a partir do Navegador, usando o cliente invoke
-exportado do arquivo runtime.ts:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-const user = await invoke.site.loaders.getUser({ id: "123" });
-```
-
-Como o cliente Invoke é tipado, o tipo de retorno do `getUser` é automaticamente
-inferido, e o tipo da variável `user` é `User`. Todos os tipos de parâmetros são
-também inferidos, então temos mais confiança para interagir com nossas APIs.
-
-**Importante**: Isso deve ser usado apenas no Navegador. Tentar importar e usar
-o cliente Invoke do arquivo `runtime.ts` no servidor resultará em um erro. Para
-chamar actions/loaders a partir do servidor, veja o próximo exemplo.
-
-### Exemplo 2: Chamando uma Action ou Loader a partir do Servidor
-
-Suponha que estamos criando uma ação chamada `addItem` que adiciona um item a um
-carrinho.
-
-Suponha também que já temos um loader chamado `cart`, que retorna o carrinho
-atual para um usuário, baseado em uma sessão contida nos cookies da requisição:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-import { getSessionFromRequest } from "site/lib/session.ts";
-import { getCartFromDatabase } from "site/lib/cart.ts";
-
-export interface CartItem {
- productId: string;
- quantity: number;
-}
-
-export interface Cart {
- items: CartItem[];
- id: string;
-}
-
-export const async function cart(
- _props: unknown, req: Request, ctx: AppContext
-): Promise {
- // Pegar a sessão a partir da requisição
- const session = await getSessionFromRequest(req);
-
- // Pegar o carrinho a partir da base de dados usando o ID vindo da sessão
- const cart = await getCartFromDatabase(session.cartId);
-
- return cart;
-}
-```
-
-Agora, quando criamos a ação `addItem`, podemos reutilizar o loader `cart` para
-buscar o carrinho atual e então adicionar o item ao carrinho:
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-import { saveCartToDatabase } from "site/lib/cart.ts";
-
-export interface Props {
- item: CartItem;
-}
-
-export const async function addItem(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- const currentCart = await ctx.invoke.site.loaders.cart();
-
- // Adicionar o item ao carrinho
- cart.items.push(props.item);
-
- // Salvar o carrinho atualizado na base de dados
- await saveCartToDatabase(cart);
-
- return cart;
-}
-```
-
-O cliente Invoke que vem do Contexto da Aplicação é também tipado, baseado no
-tipo `AppContext` exportado por convenção do seu `site` app.
-
-### Exemplo 3: Enviando um arquivo para o Servidor
-
-Suponha que temos uma ação chamada `uploadFile`, que envia um arquivo para um
-destino. A ação recebe uma propriedade `file`, que é um objeto de arquivo que
-contém os dados do arquivo, e uma propriedade `destination`, que é uma string
-que especifica o destino para onde o arquivo deve ser enviado.
-
-```typescript
-import type { AppContext } from "site/apps/site.ts";
-
-export interface Props {
- file: File;
- destination: string;
-}
-
-export const async function uploadFile(
- props: Props, req: Request, ctx: AppContext
-): Promise {
- // Enviar o arquivo para o destino
- await uploadFileToDestination(props.file, props.destination);
-}
-```
-
-Estamos usando a web API `File` como tipo de propriedade aqui, mas isso cria um
-problema:
-
-O objeto `File` não é serializável via JSON, que é o que o Invoke usa
-internamente. Isso significa que tentar passar um objeto File como propriedade
-para uma ação resultará em um erro ao tentar acessar a propriedade file dentro
-da sua action.
-
-Para resolver isso, o cliente Invoke oferece uma maneira de fazer upload de
-arquivos via uma requisição multipart, que é uma maneira prática de enviar
-arquivos para o servidor, usando a API FormData e o tipo de conteúdo
-multipart/form-data.
-
-Para usar isso, você só precisa adicionar uma opção multipart: true ao
-`InvokerRequestInit` do Invoke (que é o segundo argumento para qualquer chamada
-de invoke), e o cliente usará automaticamente um protocolo personalizado para
-enviar o payload via multipart, tornando possível enviar arquivos para o
-servidor.
-
-Podemos agora chamar essa ação a partir do Navegador, usando o cliente invoke
-exportado do arquivo runtime.ts:
-
-```tsx
-import { invoke } from "site/runtime.ts";
-
-export function UploadFileInput() {
- const uploadFile = async (file: File) => {
- await invoke.site.actions.uploadFile({
- file: file,
- destination: "/uploads/files",
- }, { multipart: true });
- };
-
- return (
- {
- const file = e.target.files[0];
- if (file) {
- await uploadFile(file);
- }
- }}
- />
- );
-}
-```
-
-Agora o arquivo `file` pode ser acessado seguramente na action!
-
-**Importante**: Quando usando a opção `multipart`, o cliente Invoke enviará um
-FormData objeto para o servidor, que só suporta arquivos e strings. Isso
-significa que qualquer propriedade que seja um número ou um booleano será
-convertida para uma string.
-
-### Exemplo 4: Batch Invoke
-
-Batch Invoke é útil quando você precisa realizar múltiplas operações
-simultaneamente e quer minimizar a latência de rede, reduzindo o número de
-requisições.
-
-Aqui está um exemplo de cenário onde usar Batch Invoke faz sentido: recuperar
-múltiplos conjuntos de dados relacionados em uma única requisição.
-
-Suponha que temos um usuário logado e temos três diferentes loaders que retornam
-dados relacionados ao usuário: um para anotações (notes), um para o endereço
-(address) e um para os pedidos (orders).
-
-Podemos recuperar todos esses três conjuntos de dados em uma única requisição
-usando um Batch Invoke:
-
-```typescript
-import { invoke } from "site/runtime.ts";
-
-// Podemos sempre desstructurar o cliente Invoke
-// para escrever código mais fácil de ler
-const { loaders } = invoke.site;
-
-const user = ...; // Obtenha o usuário atual de alguma maneira
-
-const {
- userNotes,
- userAddress,
- userOrders,
-} = await invoke({
- userNotes: loaders.getUserNotes({ userId: user.id, orderBy: "latest" }),
- userAddress: loaders.getUserAddress({ token: user.token }),
- userOrders: loaders.getUserOrders({ userId: user.id }),
-});
-```
-
-Passando um objeto com os loaders/actions como propriedades, o cliente Invoke
-automaticamente faz o batch das requisições e retorna os resultados no mesmo
-formato que o objeto passado. Continuamos tendo todos os tipos inferidos
-automaticamente ao fazer Batch Invoke desta maneira!
diff --git a/docs/api-reference/use-script/en.md b/docs/api-reference/use-script/en.md
deleted file mode 100644
index e24855e9..00000000
--- a/docs/api-reference/use-script/en.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-description: useScript API reference
----
-
-### Description
-
-The `useScript` function is designed to help developers inline scripts into a
-web page with minimal payload. It receives a function and its arguments as
-parameters and returns the stringified, minified version of the function. This
-is particularly useful for inlining event handlers and other scripts directly
-into HTML, optimizing performance by reducing the amount of JavaScript sent over
-the network. It integrates seamlessly with the `hx-on:` handlers of HTMX.
-
-### Importing
-
-```typescript
-import { useScript } from "deco/hooks/useScript.ts";
-```
-
-### Parameters
-
-- **fn**: `Function`
- - The function to be stringified and minified.
-
-- **args**: `...any[]`
- - The arguments to be passed to the function when it is called.
-
-### Return Value
-
-- **string**
- - A stringified, minified version of the function, ready to be inlined into
- HTML.
-
-### Usage Examples
-
-#### Example 1: Inline Script with `dangerouslySetInnerHTML`
-
-In this example, `useScript` is used to inline a simple script that logs a
-message when the window loads.
-
-```tsx
-import { useScript } from "deco/hooks/useScript.ts";
-
-const onLoad = () => {
- console.log("Window loaded");
-};
-
-function ExampleComponent() {
- return (
-
-
Hello, World!
-
-
- );
-}
-
-export default ExampleComponent;
-```
-
-#### Example 2: Inline Script with `hx-on` Attribute
-
-In this example, `useScript` is used to create a minified event handler for an
-`hx-on:click` attribute that changes the text of a button when clicked.
-
-```tsx
-import { useScript } from "deco/hooks/useScript.ts";
-
-const onClick = () => {
- event!.currentTarget.innerText = "Clicked!";
-};
-
-function ExampleButton() {
- return (
-
- Click me
-
- );
-}
-
-export default ExampleButton;
-```
-
-### Notes
-
-- Ensure that the function you pass to `useScript` does not rely on external
- variables or closures that won't be available when the script is executed
- inline.
-- When using with `hx-on:` handlers, make sure the minified function does not
- exceed any attribute length limits that might be imposed by browsers or HTML
- specifications.
diff --git a/docs/api-reference/use-script/pt.md b/docs/api-reference/use-script/pt.md
deleted file mode 100644
index 4e148e79..00000000
--- a/docs/api-reference/use-script/pt.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-description: useScript API reference
----
-
-### Descrição
-
-A função `useScript` foi projetada para ajudar os desenvolvedores a inserir
-scripts diretamente em uma página da web com uma carga mínima. Ela recebe uma
-função e seus argumentos como parâmetros e retorna a versão convertida em string
-e minificada da função. Isso é particularmente útil para inserir manipuladores
-de eventos e outros scripts diretamente no HTML, otimizando o desempenho ao
-reduzir a quantidade de JavaScript enviado pela rede. Ela se integra
-perfeitamente com os manipuladores `hx-on:` do HTMX.
-
-### Importação
-
-```typescript
-import { useScript } from "deco/hooks/useScript.ts";
-```
-
-### Parâmetros
-
-- **fn**: `Function`
- - A função a ser convertida em string e minificada.
-
-- **args**: `...any[]`
- - Os argumentos a serem passados para a função quando ela for chamada.
-
-### Valor de Retorno
-
-- **string**
- - Uma versão convertida em string e minificada da função, pronta para ser
- inserida no HTML.
-
-### Exemplos de Uso
-
-#### Exemplo 1: Script Inline com `dangerouslySetInnerHTML`
-
-Neste exemplo, `useScript` é usado para inserir um script simples que registra
-uma mensagem quando a janela é carregada.
-
-```tsx
-import { useScript } from "deco/hooks/useScript.ts";
-
-const onLoad = () => {
- console.log("Window loaded");
-};
-
-function ExampleComponent() {
- return (
-
-
Hello, World!
-
-
- );
-}
-
-export default ExampleComponent;
-```
-
-#### Exemplo 2: Script Inline com Atributo `hx-on`
-
-Neste exemplo, `useScript` é usado para criar um manipulador de eventos
-minificado para um atributo `hx-on:click` que altera o texto de um botão quando
-clicado.
-
-```tsx
-import { useScript } from "deco/hooks/useScript.ts";
-
-const onClick = () => {
- event!.currentTarget.innerText = "Clicked!";
-};
-
-function ExampleButton() {
- return (
-
- Click me
-
- );
-}
-
-export default ExampleButton;
-```
-
-### Notas
-
-- Certifique-se de que a função passada para `useScript` não dependa de
- variáveis externas ou closures que não estarão disponíveis quando o script for
- executado inline.
-- Ao usar com manipuladores `hx-on:`, certifique-se de que a função minificada
- não exceda os limites de comprimento de atributos que podem ser impostos pelos
- navegadores ou especificações HTML.
diff --git a/docs/api-reference/use-section/en.md b/docs/api-reference/use-section/en.md
deleted file mode 100644
index cae7e083..00000000
--- a/docs/api-reference/use-section/en.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-description: useSection API reference
----
-
-The `useSection` hook in deco.cx is a powerful tool designed to automatically
-generate links for updating and rendering sections. With this hook you can use
-HTMX or Fresh's Partials to render specific section states. Below is a detailed
-explanation of its usage, parameters, and examples.
-
-## Importing the useSection Hook
-
-To use the useSection hook, you need to import it from the
-deco/hooks/useSection.ts file:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-```
-
-## Parameters
-
-The useSection hook accepts an options object with the following properties:
-
-1. props: An object containing the section props to override. This allows you to
- specify new values for props that will be used to render the section. Keep in
- mind that props are merged with those from the current section instance.
-2. href: A string representing the new URL to evaluate this section. This URL
- will be used for the `Request` parameter on all loaders/actions this section
- may depend on.
-
-## Return Value
-
-The useSection hook returns a URL string of the section with the props partially
-applied
-
-## Example Usage
-
-Let's build a component that print an integer and allow us to see the next
-integer. Here's a print
-
-
-
-This component can be built with the following code:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-
-export default function Section({ count = 0 }: { count: number }) {
- return (
-
- );
-}
-```
-
-Where useSection returns a link for the next integer.
-
-## Warnings
-
-1. URL Size Limits: Be mindful of the URL size limits when passing props to
- useSection. Try to keep payloads small and use lightweight data types like
- booleans and IDs.
-2. Security: Ensure that any sensitive data passed as props is properly secured
- and does not expose vulnerabilities through the URL.
diff --git a/docs/api-reference/use-section/pt.md b/docs/api-reference/use-section/pt.md
deleted file mode 100644
index c9a8d95b..00000000
--- a/docs/api-reference/use-section/pt.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-description: useSection API reference
----
-
-O hook `useSection` no deco.cx é uma ferramenta poderosa projetada para gerar
-automaticamente links para atualização e renderização de seções. Com este hook,
-você pode usar os Partials do HTMX ou Fresh para renderizar estados específicos
-de seções. Abaixo está uma explicação detalhada de seu uso, parâmetros e
-exemplos.
-
-## Importando o Hook useSection
-
-Para usar o hook useSection, você precisa importá-lo do arquivo
-deco/hooks/useSection.ts:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-```
-
-## Parâmetros
-
-O hook useSection aceita um objeto de opções com as seguintes propriedades:
-
-1. **props**: Um objeto contendo as propriedades da seção a serem substituídas.
- Isso permite que você especifique novos valores para as propriedades que
- serão usadas para renderizar a seção. Lembre-se de que as propriedades são
- mescladas com aquelas da instância atual da seção.
-2. **href**: Uma string que representa a nova URL para avaliar esta seção. Esta
- URL será usada para o parâmetro `Request` em todos os loaders/actions dos
- quais esta seção pode depender.
-
-## Valor de Retorno
-
-O hook useSection retorna uma string de URL da seção com as propriedades
-aplicadas parcialmente.
-
-## Exemplo de Uso
-
-Vamos construir um componente que imprime um número inteiro e nos permite ver o
-próximo número inteiro. Aqui está uma ilustração:
-
-
-
-Este componente pode ser construído com o seguinte código:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-
-export default function Section({ count = 0 }: { count: number }) {
- return (
-
- );
-}
-```
-
-Onde useSection retorna um link para o próximo número inteiro.
-
-## Avisos
-
-1. **Limites de Tamanho de URL**: Esteja atento aos limites de tamanho da URL ao
- passar propriedades para useSection. Tente manter os payloads pequenos e use
- tipos de dados leves, como booleanos e IDs.
-2. **Segurança**: Garanta que quaisquer dados sensíveis passados como
- propriedades estejam devidamente protegidos e não exponham vulnerabilidades
- através da URL.
diff --git a/docs/cms-capabilities/advanced/actions/en.md b/docs/cms-capabilities/advanced/actions/en.md
deleted file mode 100644
index 78415ab8..00000000
--- a/docs/cms-capabilities/advanced/actions/en.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-description: Actions (execution of actions)
-since: 2.0
----
-
-Actions represent functions that are typically invoked by users in the browser.
-For example, signing up for a newsletter, adding an item to a shopping cart, or
-any operation that requires server intervention.
-
-In the platform, you can test such actions, or even have actions that are only
-executed in this administrative interface.
-
-Unlike sections and loaders, it is possible to save pre-configured entities, but
-there is not much usefulness in this. In this sense, by accessing the sidebar
-`Advanced > Actions`, you will have access to the actions library and the
-ability to create, save, edit, and execute existing actions.
-
-
-
-The different categories present in the listing are obtained from the directory
-where the action is located or from the originating **App** (an **App** can
-import different actions).
-
-From this screen, you can:
-
-- **Saved**: List saved actions
-- **Library**: List and test all available actions for use
-- **Create new Action**: Create new actions
-
-## Listing and testing actions
-
-When listing actions in the library, and when clicking on an action, you gain
-access to a preview of the Action, as well as access to the original code of
-that element. It is also possible to edit the code to test changes in the
-functionality of the component.
-
-
-
-In the right sidebar, you can access:
-
-- `🌐` Element preview
-- `☰` Form with properties
-- `{}` Textual description of properties
-- `>` Code editor
-- `🖥️` Logs related to the loader preview
-- `✨` Decopilot: AI for code modification
-
-## Create new Action
-
-It is possible to create a saved action or the base (template) of an action.
-
-
-
-- **Create template**: Creates an action that will be available in the component
- library. This means creating a code base that will define a set of properties
- and a program to return data.
-- **Using a template**: Creates a saved action from an existing base. The name
- will be the identification of this element.
diff --git a/docs/cms-capabilities/advanced/actions/pt.md b/docs/cms-capabilities/advanced/actions/pt.md
deleted file mode 100644
index c9d76fdf..00000000
--- a/docs/cms-capabilities/advanced/actions/pt.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-description: Actions (execução de ações)
-since: 2.0
----
-
-As actions representam funções que tipicamente são invocadas pelos usuários no
-browser. Por exemplo, se cadastrar em uma newsletter, adicionar um item a um
-carrinho de compras ou qualquer operação que exija a intervenção de um servidor.
-
-Na plataforma, você pode testar tais ações, ou mesmo ter actions que são apenas
-executadas nessa interface administrativa.
-
-Ao contrário de sections e loaders, é possível salvar entidades
-pré-configuradas, mas não há muita utilidade nisto. Neste sentido, acessando a
-barra lateral `Advanced > Actions`, você terá acesso a biblioteca de actions e a
-possibilidade de criar, salver, editar e executar actions existentes.
-
-
-
-As diferentes categorias presentes na listagem são obtidas a partir do diretório
-que a action se encontra ou da **App** na qual ela origina (uma **App** pode
-importar diferentes actions).
-
-A partir desta tela é possível:
-
-- **Saved**: Listar as actions salvas
-- **Library**: Listar e testar todas as actions disponíveis para uso
-- **Create new Action**: Criar novas actions
-
-## Listar e testar actions
-
-Ao listar as actions na library, e ao clicar em uma action, você passa a ter
-acesso a uma visualização da Action, bem como acesso ao código original daquele
-elemento. É também possível editar o código, para testar alterações na
-funcionalidade do componente.
-
-
-
-Na barra lateral a direita, é possível acessar:
-
-- `🌐` Visuzalização do elemento
-- `☰` Formulário com propriedades
-- `{}` Descrição textual das propriedades
-- `>` Editor de código
-- `🖥️` Logs relacionados a visualização do loader
-- `✨` Decopilot: IA para alteração do código
-
-## Criar nova Action
-
-É possível criar uma action salva ou a base (template) de uma action.
-
-
-
-- **Create template**: Cria uma action que será disponibilizada na biblioteca de
- componentes. Isto significa criar uma base de código que definirá um conjunto
- de propriedades e um programa para retornar dados.
-- **Using a template**: Cria uma action salva a partir de uma base existente. O
- nome será a identificação deste elemento.
diff --git a/docs/cms-capabilities/advanced/apps/en.md b/docs/cms-capabilities/advanced/apps/en.md
deleted file mode 100644
index f61d5591..00000000
--- a/docs/cms-capabilities/advanced/apps/en.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Installing Apps
-since: 1.33.2
----
-
-# Prerequisites
-
-Before you begin, make sure you have a ready Deco site, and the desired App
-should be available in the Apps directory. If you're unsure how to do this,
-refer to the
-[tutorial on making an app installable](/docs/en/developing/making-an-app-installable).
-
-# Apps
-
-An `App` allows you to add new functionalities to your site in a straightforward
-manner.
-
-# Installing the App
-
-1. **Access the Deco Admin:** Start by logging into your
- [Deco Admin](https://admin.deco.cx) account.
-
-2. **Choose the Target Site:** After logging in, select the specific site where
- you want to install the App. You will be directed to the site's homepage.
-
-3. **Access the "Apps" Section:** On the site's homepage, navigate to the "Apps"
- section. This is where you will find all the Apps available for installation.
- Select to view all "available Apps".
-
- 
-
-4. **Add an App Block:** Click on "Add" to install an App. This starts the
- process of creating a block. Configure the block and click on "Create" (give
- it a name; it's common to use the version, like `site@v0`).
-
-5. **Explore Installed Blocks:** Once installed, you will have access to all the
- blocks and components that an App includes. These blocks can be integrated
- into your Deco site to provide additional functionality.
-
-Congratulations! You have successfully installed an App using the Deco Admin.
-Explore the new capabilities and features that an installed App brings to your
-Deco site. Feel free to further customize the App or explore other available
-Apps to expand the functionality of your Deco project. Enjoy managing and
-enhancing your Deco site! 🚀
-
-> You can always change the App settings by clicking on the created block.
-
-
diff --git a/docs/cms-capabilities/advanced/apps/pt.md b/docs/cms-capabilities/advanced/apps/pt.md
deleted file mode 100644
index 52ae2bab..00000000
--- a/docs/cms-capabilities/advanced/apps/pt.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-description: Instalando apps
-since: 1.33.2
----
-
-# Pré-requisitos
-
-Antes de começar, certifique-se de ter um site deco pronto, e a App desejado
-deve estar disponível no diretório Apps. Se você não tem certeza de como fazer
-isso, consulte o
-[tutorial de tornar uma app instalável](/docs/pt/developing/making-an-app-installable).
-
-# Apps
-
-Uma `App` permite adicionar novas funcionalidades no seu site de maneira bem
-direta.
-
-# Instalando a app
-
-1. **Acesse o deco Admin:** Comece fazendo login na sua conta do
- [deco Admin](https://admin.deco.cx).
-
-2. **Escolha o Site de Destino:** Após fazer login, selecione o site específico
- onde deseja instalar o App. Você será direcionado para a página inicial do
- site.
-
-3. **Acesse a Seção "Apps":** Na página inicial do site, navegue até a seção
- "Apps". Esta é a seção onde você encontrará todos os Apps disponíveis para
- instalação. Selecione para ver todos os Apps disponíveis.
-
- 
-
-4. **Adicione um Bloco da app:** Clique em adicionar App. Isto inicia o processo
- de criar um bloco. Configure o bloco e clique em criar. (dê a ele um nome; é
- comum usar a versão, como `site@v0`).
-
-5. **Explore os Blocos Instalados:** Depois de instalado, você terá acesso a
- todos os blocos e componentes que um App inclui. Esses blocos podem ser
- integrados ao seu site deco para fornecer funcionalidades adicionais.
-
-Parabéns! Você instalou com sucesso um App usando o deco Admin. Explore as novas
-capacidades e recursos que um App instalado traz para o seu site deco. Sinta-se
-à vontade para personalizar o App ainda mais ou explorar outros Apps disponíveis
-para expandir as funcionalidades do seu projeto deco. Aproveite para gerenciar e
-aprimorar o seu site deco! 🚀
-
-> É possível sempre alterar as configurações do Apps clicando no bloco criado.
-
-
diff --git a/docs/cms-capabilities/advanced/en.md b/docs/cms-capabilities/advanced/en.md
deleted file mode 100644
index 5e7a0170..00000000
--- a/docs/cms-capabilities/advanced/en.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: |
- Guide on advanced website capabilities
----
-
-In the advanced part of the website, including global settings for sites.
-
-- [SEO](advanced/seo): Editing meta tags and site media sharing as a whole.
-- [Theme](advanced/themes): Configuration of the theme and styling of the site.
-- [Redirects](advanced/redirects): Creation and editing of redirects and proxies
- for the web.
-- [Loaders](advanced/loaders): Creation, editing, and visualization of loaders,
- entities for loading data.
-- [Actions](advanced/actions): Creation, editing, and visualization of actions,
- entities for users and administrators to perform operations.
-- [Segments](advanced/segments): Control of variants present on the site.
-- [Apps](advanced/apps): Management of apps (additional functionalities that can
- be incorporated into the site).
-- [Experiments](advanced/experiments): Creation and control of experiments (A/B
- testing).
diff --git a/docs/cms-capabilities/advanced/experiments/en.md b/docs/cms-capabilities/advanced/experiments/en.md
deleted file mode 100644
index 2e09db09..00000000
--- a/docs/cms-capabilities/advanced/experiments/en.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: |
- Guide on experiments.
----
-
-Functionality still under development.
-
-To learn more, access the documentation on
-[A/B Testing](/docs/en/developing-capabilities/apps/ab-test).
diff --git a/docs/cms-capabilities/advanced/experiments/pt.md b/docs/cms-capabilities/advanced/experiments/pt.md
deleted file mode 100644
index f526d1d7..00000000
--- a/docs/cms-capabilities/advanced/experiments/pt.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-description: |
- Guia sobre experimentos.
----
-
-Funcionalidade ainda em desenvolvimento.
-
-Para saber mais, acesse a documentação sobre
-[Teste A/B](/docs/pt/developing-capabilities/apps/ab-test).
diff --git a/docs/cms-capabilities/advanced/loaders/en.md b/docs/cms-capabilities/advanced/loaders/en.md
deleted file mode 100644
index a9c4c2f1..00000000
--- a/docs/cms-capabilities/advanced/loaders/en.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-description: Loaders (data loading)
-since: 2.0
----
-
-Loaders represent components that can be used to load data. Specifically,
-loaders can be used to populate data for section properties. If a section
-expects to receive structured data representing a product, it can be manually
-filled in for a page, but it can also be loaded through a loader.
-
-Loaders can make use of the request context that the user makes, for example,
-the URL the user used to access, their location, or other data to determine the
-data to be loaded. Similarly, loaders can also make use of the configurations of
-an App that it is a part of.
-
-And finally, loaders themselves can have properties that are defined by the
-users who use them.
-
-When opening the loaders (sidebar `Advanced > Loaders`), you will have access to
-a set of saved loaders, the library of loaders, and the ability to create, edit,
-and save loaders.
-
-
-
-The different categories present in the listing are obtained from the directory
-where the loader is located or from the **App** from which it originates (an
-**App** can import different loaders).
-
-From this screen, it is possible to:
-
-
-
-- **Saved**: List the saved loaders
-- **Library**: List and test all available loaders for use
-- **Create new Loader**: Create new loaders
-
-## Modify saved loaders
-
-A **saved loader** represents a loader that can be used in different sections.
-This way, the same loader can have the same configuration applied in different
-parts of the site. At the same time, this allows a single change to the saved
-loader to impact multiple parts of the system.
-
-> If a page uses the same saved loader in different sections of a page, this
-> loader is loaded only once. This makes the system extremely efficient! For
-> example, a component like `SearchResult` and `SEOPLP` may need to load
-> products from a shelf during page loading. If both sections on that page use
-> the same saved loader (e.g., `PLP Loader`), it will be loaded only once.
-
-By clicking on a saved loader, it is possible to modify its previously
-configured properties.
-
-
-
-When selecting a loader, it will be possible to define its properties. Some of
-the properties may require selecting an image, text, item selection, or even
-another **loader**!
-
-It is possible to execute a loader to verify which data is returned during its
-execution. To do so, you can click on the `Run` button, which will execute the
-code associated with that loader and display the response data.
-
-## List and test other loaders
-
-When listing the loaders in the library and clicking on a loader, you will have
-access to a preview of the Loader, as well as access to the original code of
-that element. It is also possible to edit the code to test changes in the
-functionality of the component.
-
-
-
-In the right sidebar, you can access:
-
-- `🌐` Element preview
-- `☰` Form with properties
-- `{}` Textual description of properties
-- `>` Code editor
-- `🖥️` Logs related to the loader preview
-- `✨` Decopilot: AI for code modification
-
-## Create a new Loader
-
-It is possible to create a saved loader (a component that can be shared among
-multiple sections or blocks) or the base (template) of a loader.
-
-
-
-- **Create template**: Creates a loader that will be available in the component
- library. This means creating a code base that defines a set of properties and
- a program to return data.
-- **Using a template**: Creates a saved loader from an existing base. The name
- will be the identification of this element.
diff --git a/docs/cms-capabilities/advanced/loaders/pt.md b/docs/cms-capabilities/advanced/loaders/pt.md
deleted file mode 100644
index 198a3ac8..00000000
--- a/docs/cms-capabilities/advanced/loaders/pt.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-description: Loaders (carregamento de dados)
-since: 2.0
----
-
-Os loaders representam componentes que podem ser utilizados para carregar dados.
-Especialmente, os loaders podem ser usados para preencher dados de propriedades
-de sections. Se uma section espera receber um dado estruturado que representa um
-produto, isto pode ser preenchido manualmente para uma página, mas pode ser
-carregado através de um loader.
-
-Loaders podem fazer uso do contexto da requisição que o usuário faz, por
-exemplo, a URL que o usuário usou para acessar, sua localização, ou outros dados
-para determinar o dado a ser carregado. Da mesma forma, os Loaders também podem
-fazer uso das configuraçãoes de uma App que ele faz parte.
-
-E, por fim, os próprios loaders podem ter propriedades que são definidas pelos
-usuários que os usam.
-
-Ao abrir os loaders (barra lateral `Advanced > Loaders`), você terá acesso a um
-conjunto de loaders salvos, a biblioteca de loaders e a possibilidade de criar,
-editar e salvar loaders.
-
-
-
-As diferentes categorias presentes na listagem são obtidas a partir do diretório
-que o loader se encontra ou da **App** na qual ele origina (uma **App** pode
-importar diferentes loaders).
-
-A partir desta tela é possível:
-
-
-
-- **Saved**: Listar os loaders salvos
-- **Library**: Listar e testar todos os loaders disponíveis para uso
-- **Create new Loader**: Criar novos Loaders
-
-## Alterar loaders salvos
-
-Um **loader salvo** representa um loader que pode ser utilizado em diferentes
-sections. Desta forma, um mesmo loader pode ter a mesma configuração a ser
-aplicada em diferentes lugares do site. Ao mesmo tempo, isto permite que uma
-única alteração ao loader salvo impacte várias partes do sistema.
-
-> Caso uma página faça uso de um mesmo loader salvo em diferentes sections de
-> uma página, este loader é carregado apenas uma vez. Isto torna o sistema
-> extremamente eficiente! Por exemplo, um componente como `SearchResult` e
-> `SEOPLP` podem precisar carregar os produtos de uma prateleira durante o
-> carregamento de uma página. Caso ambas as sections que estejam nessa página
-> façam uso de um mesmo loader salvo (ex.: `PLP Loader`), este será carregado
-> apenas uma vez.
-
-Ao clicar em um loader salvo é possível alterar suas propriedades configuradas
-anteriormente.
-
-
-
-Ao selecionar um loader, será possível definir suas propriedades. Algumas das
-propriedades podem pedir a seleção de uma imagem, texto, seleção de itens, ou
-mesmo outro **loader**!
-
-É possível executar um loader para verificar quais dados são retornados durante
-sua execução. Para tanto, é possível cirar no botão `Run`, que executará o
-código associado a esse loader, e mostrará os dados de resposta.
-
-## Listar e testar demais loaders
-
-Ao listar os loaders na library, e clicar em um loader, você passa a ter acesso
-a uma visualização do Loader, bem como acesso ao código original daquele
-elemento. É também possível editar o código, para testar alterações na
-funcionalidade do componente.
-
-
-
-Na barra lateral a direita, é possível acessar:
-
-- `🌐` Visuzalização do elemento
-- `☰` Formulário com propriedades
-- `{}` Descrição textual das propriedades
-- `>` Editor de código
-- `🖥️` Logs relacionados a visualização do loader
-- `✨` Decopilot: IA para alteração do código
-
-## Criar novo Loader
-
-É possível criar um loader salvo (um componente compartilhável entre várias
-sections ou blocos) ou a base (template) de um loader.
-
-
-
-- **Create template**: Cria um loader que será disponibilizado na biblioteca de
- componentes. Isto significa criar uma base de código que definirá um conjunto
- de propriedades e um programa para retornar dados.
-- **Using a template**: Cria um loader salvo a partir de uma base existente. O
- nome será a identificação deste elemento.
diff --git a/docs/cms-capabilities/advanced/pt.md b/docs/cms-capabilities/advanced/pt.md
deleted file mode 100644
index a6e1206e..00000000
--- a/docs/cms-capabilities/advanced/pt.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: |
- Guia sobre funcionalidades avançadas do site
----
-
-Na parte avançada do site, incluindo configurações globais sobr sites.
-
-- [SEO](advanced/seo): Edição de meta-tags e media share do site como um todo.
-- [Theme](advanced/themes): Configuração do tema e estilização do site.
-- [Redirects](advanced/redirects): Criação e edição de `redirects` e `proxies`
- para web.
-- [Loaders](advanced/loaders): Criação, edição e visualização de `loaders`,
- entidades para carregar dados.
-- [Actions](advanced/actions): Criação, edição e visualização de `actions`,
- entidades para usuário e administradores realizarem operações.
-- [Segments](advanced/segments): Controle de variantes presentes no site.
-- [Apps](advanced/apps): Gerência de `apps` (funcionalidades adicionais que
- podem ser incorporadas ao site).
-- [Expirments](advanced/experiments): Criação e controle de experimentos (test
- A/B).
diff --git a/docs/cms-capabilities/advanced/redirects/en.md b/docs/cms-capabilities/advanced/redirects/en.md
deleted file mode 100644
index 1f88d246..00000000
--- a/docs/cms-capabilities/advanced/redirects/en.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-description: Learn how to create proxies and redirects for a specific route
-since: 2.0
----
-
-Adding **proxies** and **redirects** are common practices in web development to
-improve the user experience and optimize content delivery. Proxies and redirects
-serve different purposes and can be beneficial in various scenarios.
-
-**Redirects** are mainly used when you have a page that may no longer exist but
-is still accessed by users through saved bookmarks or external links. Instead of
-returning a 404 error (not found), you can create a redirect to ensure a smooth
-transition for your users. By implementing redirects, your site can continue to
-serve the desired content for these specific routes, maintaining a positive user
-experience.
-
-By using proxies and redirects, you can optimize content delivery, manage
-transitions, and provide a seamless user experience. In the following sections,
-we will explore how to add proxies and redirects using the Deco Admin, step by
-step.
-
-The general process involves modifying the site's route map and associating a
-proxy or redirect, depending on the specific use case. At the end of the
-process, we will know how to create an example route `/example-proxy` that
-proxies requests to deco.cx and a route `/example-redirect` that redirects to
-the homepage of google.com. Note the difference: the first will keep you within
-the same domain, while the latter will take you outside the domain of your site.
-
-## Adding a redirect
-
-### 1. Access the Redirects Page
-
-Access the `redirects` page. This allows access to redirect creation.
-
-
-
-### 2. Press the Create a redirect button
-
-Configure the redirect according to your needs:
-
-- **From**: the source field, which represents the path that the user is trying
- to access and where they will be redirected. This field supports
- [URLPattern](http://mdn.io/urlpattern).
-- **To**: the destination field. It can be an absolute address or a relative
- path.
-- **Type**: the definition of the redirect type (`permanent` or `temporary`)
-
-> Choose the type as `temporary` when the redirect may change over time. If the
-> redirect should not change over time, you can select `permanent` (which may
-> result in faster responses, as permanent redirects are cached by the user's
-> browser).
-
-
-
-### 3. Create the redirect
-
-To make the redirect take effect, you need to publish the changes to your site.
-
-Then, you can access `https://your-site.deco.site/example-redirect` and check if
-the redirect is working correctly.
-
-## Adding a Proxy \[via ecommerce apps and website\]
-
-Proxies are used when you want to keep the user within the same site but provide
-different content. Proxies allow the sharing of resources under the same domain,
-providing a unified user experience. This can be especially useful when you need
-to serve content from different sources or platforms while maintaining a
-consistent user interface. Proxies are commonly used during platform migration
-processes, allowing you to gradually adopt Deco and decide whether a specific
-page should be proxied or served directly by Deco.
-
-To create or edit a proxy instead of a redirect, you can follow these steps:
-
-### 1. Access the Site App
-
-Access the site app view and look for the Site App. To edit it, click on the app
-description.
-
-
-
-### 2. Look for the Routes Map
-
-Look for the routes map property in the app's editing form.
-
-
-
-Edit the existing proxy to add new routes to be proxied (when applicable) or add
-a proxy obtained from an ecommerce app.
-
-Publish the changes for the new proxy route to take effect.
-
-## Adding a redirects file.
-
-Repeat step 1 from the previous section and look for the `Route Maps`.
-
-Then:
-
-1. Upload a file like `redirect.csv` to the project's base. It should have the
- indicated format below:
-
- ```
- from,to,type
- /example-redirect,/test,temporary
- /google,https://www.google.com,permanent
- ```
-
-2. Add the route of type `redirectsFromCsv.ts`.
-
-3. Select `redirect.csv` as the redirects file.
-
-4. Publish the changes.
diff --git a/docs/cms-capabilities/advanced/redirects/pt.md b/docs/cms-capabilities/advanced/redirects/pt.md
deleted file mode 100644
index 3d5e70d9..00000000
--- a/docs/cms-capabilities/advanced/redirects/pt.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-description: Aprenda como criar proxies e redirecionamentos para uma rota específica
-since: 2.0
----
-
-Adicionar **proxies** e **redirecionamentos** são práticas comuns no
-desenvolvimento web para _melhorar a experiência do usuário_ e _otimizar a
-entrega de conteúdo_. Proxies e redirecionamentos têm finalidades diferentes e
-podem ser benéficos em diversos cenários.
-
-Os **redirecionamentos** são principalmente utilizados quando você tem uma
-página que pode _não existir mais_, mas que ainda é acessada pelos usuários
-através de marcadores salvos ou links externos. Em vez de retornar um erro 404
-(não encontrado), você pode criar um redirecionamento para garantir uma
-transição tranquila para seus usuários. Ao implementar redirecionamentos, seu
-site pode continuar servindo o conteúdo desejado para essas rotas específicas,
-mantendo uma experiência positiva para o usuário.
-
-Ao utilizar proxies e redirecionamentos, você pode otimizar a entrega de
-conteúdo, gerenciar transições e fornecer uma experiência de usuário perfeita.
-Nas seções a seguir, vamos explorar como adicionar proxies e redirecionamentos
-usando o Admin da deco, passo a passo.
-
-O processo geral envolve a alteração do mapa de rotas do site e a associação de
-um proxy ou redirecionamento, dependendo do caso de uso específico. Ao final do
-processo, saberemos como criar uma rota de exemplo `/example-proxy` que faz
-proxy de solicitações para o deco.cx e uma rota `/example-redirect` que
-redireciona para a página inicial do google.com. Observe a diferença: o primeiro
-manterá você no mesmo domínio, enquanto o último o levará para fora do domínio
-do seu site.
-
-## Adicionando um redirect
-
-### 1. Acessar a Página de Redirects
-
-Acesse a página de `redirects`. Isto permite acesso a criação de redirects.
-
-
-
-### 2. Pressione o Create a redirect
-
-Faça a configuração do redirecionamento de acordo com sua necessidade:
-
-- **From**: o campo de origem, que representa o caminho que o usuário está
- tentando acessar, e na qual ele será redirecionado. Este campo suporta o
- [URLPattern](http://mdn.io/urlpattern).
-- **To**: o campo de destino. Pode ser um endereço absoluto ou um caminho
- relativo
-- **Type**: a definição do tipo de redirect (`permanent` ou `temporary`)
-
-> Escolha o tipo como `temporary`, quando o redirecionamento pode mudar ao longo
-> do tempo. Se o redirecionamento não deve mudar ao longo do tempo, você pode
-> selecionar `permanent` (o que pode resultar em respostas mais rápidas, já que
-> os redirecionamentos permanentes são armazenados em cache pelo navegador do
-> usuário).
-
-
-
-### 3. Crie o redirect
-
-Para o redirect entrar em efeito, é preciso publicar as alterações do seu site.
-
-Em seguida, você pode acessar `https://seu-site.deco.site/example-redirect` e
-verificar se o redirecionamento está funcionando corretamente.
-
-## Adicionando um Proxy \[via apps de ecommerce e website\]
-
-Proxies são utilizados quando você deseja _manter o usuário_ dentro do _mesmo
-site, mas fornecendo um conteúdo diferente_. Os **proxies** permitem o
-compartilhamento de recursos sob o mesmo domínio, proporcionando uma experiência
-de usuário unificada. Isso pode ser especialmente útil quando você precisa
-servir conteúdo de diferentes fontes ou plataformas, mantendo uma interface de
-usuário consistente. Os proxies são comumente usados durante processos de
-migração de plataforma, permitindo que você adote gradualmente o Deco e decida
-se uma página específica deve ser proxied ou servida diretamente pelo Deco.
-
-Para criar ou editar um proxy em vez de um redirecionamento, você pode seguir os
-seguintes passos:
-
-### 1. Acesso o `App` de site
-
-Acesse a visualização de apps do site, e procure pelo `App` de site. Para
-editá-lo, clique na descrição do app.
-
-
-
-### 2. Procure peloRoutes Map
-
-Procure no formulário de edição do app, pela propriedade de routes map.
-
-
-
-Edite o proxy existente para adicionar novas rotas a serem proxiadas (quando for
-o caso) ou adicione um proxy obtido de algum app de e-commerce.
-
-Publique as alterações para que a nova rota de proxy entre em efeito.
-
-## Adicionando um arquivo de redirects.
-
-Repita o passo 1 da seção anterior e procure pelo `Route Maps`.
-
-Em seguida:
-
-1. Suba um arquivo como `redirect.csv` para a base do projeto. Ele deve ter o
- formato indicado abaixo:
-
- ```
- from,to,type
- /example-redirect,/test,temporary
- /google,https://www.google.com,permanent
- ```
-
-2. Adicione a rota do tipo `redirectsFromCsv.ts`.
-
-3. Selecione `redirect.csv` como arquivo de redirects.
-
-4. Publique as alterações.
diff --git a/docs/cms-capabilities/advanced/segments/en.md b/docs/cms-capabilities/advanced/segments/en.md
deleted file mode 100644
index afb3c3fb..00000000
--- a/docs/cms-capabilities/advanced/segments/en.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-description: Learn how to create content variations based on specific conditions
-since: 2.0
----
-
-**Variants** allow you to target content based on certain _conditions_, enabling
-you to customize and adapt pages for different user _segments_. For example, you
-can create a variant to change the layout of the entire page every **Friday**
-for **50% of users**. By using variants, you can dynamically modify content
-targeted at specific segments of your audience.
-
-Variants are powered by **Matchers** (or **Segments**), which are _blocks_ used
-to evaluate specific _conditions_ based on _user characteristics_, _date and
-time_, _random selection_ (A/B testing), _user browsing history_, _user device_,
-or _any external information extracted from the request_. Matchers are
-configured to determine whether a user belongs to a particular segment or not.
-Segments refer to a subset of users on your site that satisfy the conditions
-defined by the matchers. A user can belong to multiple segments simultaneously.
-For example, a user can be part of the `São Paulo` segment, which targets users
-located in `São Paulo`, and also be part of an experiment that includes 50% of
-users. Segments can be combined to create more specific targeting criteria.
-
-The segments screen allows you to list the saved **Matchers**/**Segments**,
-where they are used, and create new segments.
-
-
-
-Matchers can be used _inline_ or saved with a **specific name**. The main
-difference between the two approaches is that a saved matcher will be evaluated
-only once, and its result will remain consistent throughout the request cycle.
-This means that once a matcher is evaluated as `true` or `false` for a
-particular user's page view, that value will be maintained throughout the
-request.
-
-This behavior allows you to reuse the **same matcher result in multiple variants
-within the same page or in different places on your site**. This ensures
-consistent behavior and avoids redundant evaluations of the same condition.
-
-Additionally, some matchers have a `sticky` behavior, which means that the
-matcher result can be stored in the user's session and remain consistent until
-the end of the session. This is especially useful for A/B testing, where users
-are assigned to a specific variant and should have a consistent experience
-during the session.
-
-By leveraging Matchers and their capabilities, you can create dynamic and
-personalized experiences for your users while optimizing performance, reducing
-redundant evaluations, and maintaining consistency across variants.
-
-## A/B Testing
-
-You can manually create **A/B tests** by selecting the `Random Matcher`
-condition and configuring the percentage of traffic to be split. Alternatively,
-if you are not using a `Random Matcher` condition, our "Publish" button will
-automatically prompt the creation of a new test. The result is exactly the same
-as creating the test manually.
-
-## Creating Segments
-
-To create a segment to be used across different sites, simply enter the "Create
-New Segment" operation.
-
-
-
-You can:
-
-- **Create template**: Create a segment that will be available in the segments
- library. This means creating a codebase that defines a set of properties and a
- program to return data.
-- **Using a template**: Create a saved segment based on an existing base. The
- name will be the identification of this element.
-
-The default implementation offers a rich set of possible selections for use, but
-you can create any segment that is based on the request, site context, or
-user-defined properties.
-
-
diff --git a/docs/cms-capabilities/advanced/segments/pt.md b/docs/cms-capabilities/advanced/segments/pt.md
deleted file mode 100644
index 247106ee..00000000
--- a/docs/cms-capabilities/advanced/segments/pt.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-description: Aprenda como criar variações de conteúdo com base em condições específicas
-since: 2.0
----
-
-**Variantes** permitem segmentar o conteúdo com base em certas _condições_,
-permitindo personalizar e adaptar as páginas para diferentes _segmentos_ de
-usuários. Por exemplo, você pode criar uma variante para alterar o layout da
-página toda **sexta-feira** para **50% dos usuários**. Ao utilizar variantes,
-você pode modificar dinamicamente o conteúdo direcionado a segmentos específicos
-de sua audiência.
-
-As **variantes** são impulsionadas por **Matchers** (ou **Segments**), que são
-_blocos_ usados para avaliar _condições_ específicas com base em
-_características do usuário_, _data e hora_, _seleção aleatória_ (testes A/B),
-_histórico de navegação do usuário_, _dispositivo do usuário_, ou _qualquer
-informação externa extraída da solicitação_. **Matchers** são configurados para
-determinar se um usuário pertence a um determinado **Segmento** ou não.
-**Segmentos** se referem a uma parte dos usuários do seu site que satisfazem as
-condições definidas pelos matchers. Um usuário pode pertencer a vários
-**segmentos** simultaneamente. Por exemplo, um usuário pode fazer parte do
-segmento `São Paulo`, que segmenta usuários localizados em `São Paulo`, e também
-pode fazer parte de um experimento que inclui 50% dos usuários. **Segmentos**
-podem ser combinados para criar critérios de segmentação mais específicos.
-
-A tela de segmentos permite listar os **Matchers**/**Segmentos** salvos, uma
-listagem de onde são utilizados, e bem como criar novos Segmentos.
-
-
-
-**Matchers** podem ser usados _inline_ ou salvos com um **nome específico**. A
-principal diferença entre as duas abordagens é que um matcher salvo será
-avaliado apenas uma vez, e seu resultado permanecerá consistente durante todo o
-ciclo de solicitação. Isso significa que, uma vez que um matcher é avaliado como
-`true` ou `false` para uma determinada visualização de página do usuário, esse
-valor será mantido durante toda a solicitação.
-
-Esse comportamento permite que você reutilize o **mesmo resultado do matcher em
-várias variantes dentro da mesma página ou em lugares diferentes em seu site**.
-Dessa forma, você garante um comportamento consistente e evita avaliações
-redundantes da mesma condição.
-
-Além disso, alguns matchers têm um comportamento `sticky`, o que significa que o
-resultado do matcher pode ser armazenado na sessão do usuário e permanecer
-consistente até o término da sessão. Isso é especialmente útil para testes A/B,
-onde os usuários são atribuídos a uma variante específica e devem ter uma
-experiência consistente durante a sessão.
-
-Aproveitando os Matchers e suas capacidades, você pode criar experiências
-dinâmicas e personalizadas para seus usuários, ao mesmo tempo em que otimiza o
-desempenho, reduzindo avaliações redundantes e mantendo a consistência entre as
-variantes.
-
-## Testes A/B
-
-Você pode criar **testes A/B** manualmente selecionando a condição
-`Random Matcher` e configurando a porcentagem de tráfego a ser dividido.
-Alternativamente, se você não estiver usando uma condição `Random Matcher`,
-nosso botão "Publicar" solicitará automaticamente a criação de um novo teste. O
-resultado é exatamente o mesmo que criar o teste manualmente.
-
-## Criando segmentos
-
-Para criar um segmento a ser usado em diferentes sites, basta entrar na operação
-de "Create New Segment".
-
-
-
-É possível:
-
-- **Create template**: Cria um segmento que será disponibilizado na biblioteca
- de segmentos. Isto significa criar uma base de código que definirá um conjunto
- de propriedades e um programa para retornar dados.
-- **Using a template**: Cria um segmento salvo a partir de uma base existente. O
- nome será a identificação deste elemento.
-
-A implementação padrão oferece um conjunto rico de seleções possíveis para uso,
-mas é possível criar qualquer segmento que se baseie na requisição, contexto do
-site ou propriedades definidas pelo usuário.
-
-
diff --git a/docs/cms-capabilities/advanced/seo/en.md b/docs/cms-capabilities/advanced/seo/en.md
deleted file mode 100644
index e04c6299..00000000
--- a/docs/cms-capabilities/advanced/seo/en.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-description: |
- How to configure meta-tags and media sharing in the admin
----
-
-SEO (Search Engine Optimization) represents a set of actions taken on a website
-to facilitate its search and indexing by robots, especially search engines. On
-this page, we configure some of these elements (meta-tags) that are used by
-search engines, but also by systems for generating the visualization of shared
-links.
-
-In this edition, it is possible to configure changes that will be applied to the
-entire site.
-
-
-
-Pay attention to some of the available settings for configuring the page title:
-
-- Title: Site title
-- Title template: Base for dynamically created titles by other components (in
- the ecommerce `app`, we have the `SEOPLP` and `SEOPDP` blocks)
-
-And the configuration of whether the site should be indexed or not
-(`Disable indexing`).
-
-## Configuring SEO for a page
-
-Despite the global SEO configuration, it is possible to specialize the SEO for a
-specific page. To do this, you need to enter the page's edit mode and list the
-SEO properties of the page.
-
-## Sitemap
-
-The deco sitemap is automatically generated from the page listing. Ecommerce
-sites process the sitemap received from the backend to generate a valid sitemap.
-
-## Robots.txt
-
-The `robots.txt` represents a standard file used by bots on the internet to
-define how they should process your site.
-
-To do this, it is possible to edit the file in the admin itself:
-
-
-
-The robots file follows a well-defined format that must be respected to allow
-proper processing of your site.
-
-```
-User-agent: AIBadBot
-Disallow: /
-
-User-agent: Googlebot
-Allow: /
-
-User-agent: BotName
-User-agent: BotName2
-Disallow: /
-Allow: /cgi-bin
-Allow: /institutional
-```
-
-Each directive (a set of rules for a bot) is made up of one (or more)
-`User-agent`s, at least one `allow` or `disallow` rule, and other optional rules
-(depending on the bot).
-
-The values for these rules can include `*` to represent all or any set of bots
-or paths.
-
-> With the growth of generative AI bots, we do not recommend granting access to
-> any bot and any path by default. An ideal configuration:
-
-> - for search engines (like google/bing/etc): allow access to all paths, with
-> some exceptions
-> - for all bots, block everything except very specific or AI-oriented paths,
-> such as institutional pages, or even representative product shelves or
-> catalogs for AI.
diff --git a/docs/cms-capabilities/advanced/seo/pt.md b/docs/cms-capabilities/advanced/seo/pt.md
deleted file mode 100644
index de12a842..00000000
--- a/docs/cms-capabilities/advanced/seo/pt.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-description: |
- Como configurar meta-tags e media sharing no admin
----
-
-O SEO (Search Engine Optimization) representa um conjunto de ações feitas ao
-site para facilitar sua busca e indexação por robôs, especialmente de busca.
-Nesta página configuramos parte desses elementos (meta-tags) que são utilizados
-pelos buscadores, mas também por sistemas para geração da visualização de links
-compartilhados.
-
-Nesta edição, é possível configurar alterações que serão aplicadas a todo o
-site.
-
-
-
-Fique atento a algumas das configurações disponíveis para configuração do título
-da página:
-
-- Title: Título do site
-- Title template: Base para títulos criados dinamicamentes por outros
- componentes (no `app` de ecommerce, temos os blocos `SEOPLP` e `SEOPDP`)
-
-E a configuração se o site deve, ou não, ser indexado (`Disable indexing`).
-
-## Configurando SEO de uma página
-
-Apesar da configuração global de SEO, é possível especializar o SEO de uma
-página específica. Para isto, é preciso entrar na edição da página, e listar as
-propriedades de SEO da página.
-
-## Sitemap
-
-O sitemap da deco é gerado automaticamente a partir da listagem de páginas.
-Sites de ecommerce processam o sitemap recebido do backend para gerar um sitemap
-válido.
-
-## Robots.txt
-
-O `robots.txt` representa um arquivo padrão usado por bots na internet para
-definir como devem processar o seu site.
-
-Para isto, é possível editar o arquivo no próprio admin:
-
-
-
-O robots segue um formato bem definido e que deve ser respeitado para permitir o
-processamento adequado do seu site.
-
-```
-User-agent: AIBadBot
-Disallow: /
-
-User-agent: Googlebot
-Allow: /
-
-User-agent: NomeDoBot
-User-agent: NomeDoBot2
-Disallow: /
-Allow: /cgi-bin
-Allow: /institucional
-```
-
-Cada diretiva (conjunto de regras para um bot), é feita por um (ou mais)
-`User-agent`s, pelo menos uma regra de `allow` ou `disallow`, e outras regras
-opcionais (a depender do bot).
-
-Os valores para essas regras podem incluir `*` para representar todos ou
-qualquer conjunto de bots ou paths.
-
-> Com o crescimento de bots de AI generativas, nós não recomendamos liberar por
-> padrão o acesso para qualquer bot e qualquer path. Uma configuração ideal:
-
-> - para os buscadores (como google/bing/etc): liberar ao acesso a todos os
-> paths, com algumas exceções
-> - para todos os bots, barrar tudo exceto paths bem precisos ou orientados a
-> AI, como páginas institucionais, ou mesmo pratileiras ou catalogos de
-> produtos representativos para a AI
diff --git a/docs/cms-capabilities/content/assets/en.md b/docs/cms-capabilities/content/assets/en.md
deleted file mode 100644
index c764a1f5..00000000
--- a/docs/cms-capabilities/content/assets/en.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-description: Website digital assets
-since: 2.0
----
-
-`Assets` represent digital goods such as images that are uploaded to the deco
-infrastructure.
-
-This is the management screen for these resources, where you can add new digital
-media, copy the final URL of the resource, and delete what has been uploaded.
-
-
diff --git a/docs/cms-capabilities/content/assets/pt.md b/docs/cms-capabilities/content/assets/pt.md
deleted file mode 100644
index 5151f720..00000000
--- a/docs/cms-capabilities/content/assets/pt.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-description: Recursos digitais do site
-since: 2.0
----
-
-Os `assets` representam bens digitais como as imagens que são carregadas na
-infraestrutura da deco.
-
-Esta é a tela de gerência desses recursos e, por ela, é possível adicionar novas
-mídias digitais, bem como copiar a URL final do recurso, bem como apagar o que
-foi carregado.
-
-
diff --git a/docs/cms-capabilities/content/blog/en.md b/docs/cms-capabilities/content/blog/en.md
deleted file mode 100644
index 61624b0f..00000000
--- a/docs/cms-capabilities/content/blog/en.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-description: Adding a blog
-since: 2.0
----
-
-The Blog represents a space for managing a blog on your website. In this
-documentation, we will add a blog to your site, which is one of the deco Apps.
-An `App` allows you to add new functionalities to your site in a simple way.
-
-To add an app to your site, click on the Apps tab. You will see all the
-available apps. In this case, we will add the Blog App, which adds sections,
-integrations, and functionalities to write and manage blog posts to your site.
-Click on the toggle button and the app will be installed on your site.
-
-
-
-Now you can manage your blog and add posts, authors, and categories.
-
-
-
-> Specifically for the Blog app, you can access the app's functionalities
-> through its own space. For most apps, their functions and components will be
-> displayed in other spaces (sections, actions, loaders, ...).
-
-## Blog pages
-
-The blog template already has configured `sections` and `pages`.
-
-If you have created your site from another template, we recommend copying these
-elements from the blog template repository.
diff --git a/docs/cms-capabilities/content/blog/pt.md b/docs/cms-capabilities/content/blog/pt.md
deleted file mode 100644
index f4e29b96..00000000
--- a/docs/cms-capabilities/content/blog/pt.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-description: Adicionando um blog
-since: 2.0
----
-
-O Blog representa um espaço para gestão de um blog no seu site. Nesta
-documentação, vamos adicionar um blog ao seu site, que é um dos Apps do deco. Um
-`App` permite que você adicione novas funcionalidades ao seu site de maneira
-simples.
-
-Para adicionar um app ao seu site, clique na guia Apps. Você verá todos os apps
-disponíveis. Neste caso, vamos adicionar o App de Blog, que adiciona ao seu site
-seções, integrações e funcionalidades para escrever e gerenciar posts de blog.
-Clique no botão de alternância e o app será instalado no seu site.
-
-
-
-Agora você pode gerenciar seu blog e adicionar posts, autores e categorias.
-
-
-
-> Especificamente para o app de Blog, você pode acessar as funcionalidades do
-> app através do seu próprio espaço. Para a maioria dos apps, suas funções e
-> componentes serão exibidos nos outros espaços (seções, ações, carregadores,
-> ...).
-
-## Páginas de blog
-
-O template de blog já apresenta `sections` e `pages` configuradas.
-
-Caso tenha criado seu site a partir de outro template, recomendamos copiar estes
-elementos do repositório do template de blog.
diff --git a/docs/cms-capabilities/content/en.md b/docs/cms-capabilities/content/en.md
deleted file mode 100644
index 49c5e009..00000000
--- a/docs/cms-capabilities/content/en.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-description: |
- Guide on content-related functionalities of the website
----
-
-The content of a website represents pages, visual elements, resources, and
-content that are made available to users.
-
-- [Pages](content/pages): Creation and editing of pages, their sections, SEO,
- and addresses.
-- [Sections](content/sections): Components for page assembly. View available
- elements and edit global elements (shared between pages).
-- [Blog](content/blog): Creation and editing of blog posts.
-- [Releases](content/releases): View the site's update history and create and
- define work environments (environments).
-- [Assets](content/assets): Set of images and files uploaded to the site.
-- [Records](content/records): Data saved in the deco, through an embedded
- database.
diff --git a/docs/cms-capabilities/content/pages/en.md b/docs/cms-capabilities/content/pages/en.md
deleted file mode 100644
index 2bd45a21..00000000
--- a/docs/cms-capabilities/content/pages/en.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-description: Learn how to create pages on deco.cx without needing code
-since: 2.0
----
-
-The listing of pages on a website can be accessed in the sidebar under
-`Content > Pages`.
-
-
-
-A **Page** is a fundamental building block in creating a deco.cx website, which
-typically consists of multiple pages. Each page consists of:
-
-- **one or more [Sections](/docs/en/concepts/section)** configured, which can be
- considered as modular components that make up the content of the page.
-- **a name:** a meaningful name to understand what this page represents. It does
- not affect the user interface or page metadata, only displayed in the page
- listing in the admin.
-- **a path:** represents the URL that page will be accessible to your users. It
- can be static (e.g., `/posts`) or dynamic (e.g., `/posts/:slug`, `/search/*`),
- following the [URLPattern](http://mdn.io/urlpattern) scheme.
-
-## Creating a new page
-
-Click on **Pages** in the top menu and you will be able to see all the published
-pages on the website, along with the path they are accessible to your users.
-
-
-
-> You can duplicate or delete pages using the extra actions in the page listing
-> (3-dot icon).
-
-To create a new page on your website, **click on the Create button in the top
-right corner of the page list**. A form will open with the fields: **name**,
-**path**, and **template**. Template allows you to create a page based on the
-content of another page (optional field).
-
-Once created, you will be redirected to the page editor. Now you can edit and
-add new Sections available on your website and configure the page the way you
-want.
-
-## Editing a page
-
-To add a new Section to the page, click on the **Add Sections** button in the
-editor and check all the available options.
-
-
-
-When adding a new section, you can select sections that are either global or
-local (obtained from the library). There is a difference between them:
-
-- A global section has already been configured and can be used by one or more
- pages. Changing the properties of a global section will reflect that change in
- all the pages that use it.
-- A local section will be configured within the page and only exists with that
- configuration on that page (not shared among other pages).
-
-
-
-When selecting a section, you can define its properties. Some of the properties
-may require selecting an image, text, item selection, or even a **loader**. A
-**loader** is an entity that loads data and can receive configurations (by
-selecting a loader from the library) or already be configured (saved loaders).
-
-
-
-Additionally, you can vary a section by selecting the flag icon (🏳️).
-
-## Varying a Section
-
-A variant allows the section to have a different configuration when a certain
-condition (**matcher**) is satisfied. This condition can be something previously
-configured (from a saved **matcher**) or you can configure it based on an
-element from the matcher library.
-
-
-
-It is quite common to create variants especially for limited-time campaigns or
-events. For this, a strategy is to configure a date and time matcher.
-
-
-
-The "default" variant represents the page to be displayed when no matcher is
-satisfied.
-
-> **Important**: Matchers are tested in the order they are placed, from the
-> first (top) to the last (default). When a matcher is satisfied, it is
-> immediately executed and no other subsequent conditions are tested, regardless
-> of any other matcher that may satisfy the configured condition.
-
-## Editing the SEO of a page
-
-The SEO of a page follows the defined pattern on the website. It is possible to
-customize the SEO of a page by editing the SEO from the SEO editing option.
-
-
-
-## Publishing changes
-
-The page will be updated with every edit made. These changes are specific to the
-environment you are working on (initially, staging). A change in the environment
-is not reflected in the production environment until that change is published.
-
-
-
-## Varying a page (segmenting pages)
-
-A variant allows you to create a different view of a page based on specific
-conditions. A variant can be added by clicking on the flag symbol (🏳️).
-
-
-
-Add a "**Matcher**" that represents a rule to be tested to evaluate which
-sections will be served. In our example, we selected a local matcher to select a
-device type and specifically the desktop.
-
-
-
-The variant is created with all the sections copied from the original page. Each
-variant can have sections edited independently. Click on the created variant and
-modify the sections as desired. The "default" variant represents the page to be
-displayed when no matcher is satisfied.
-
-When you have multiple variants on a single page, deco automatically displays
-the preview of the selected variant by default. If no variant is selected, deco
-shows what the user would see if assigned to the variant. This allows you to
-navigate between the selected variants and visualize the user experience for
-each variant.
-
-You can also have a variant within another variant. You can use different
-matchers or a combination of them.
-
-> **Important**: Matchers are tested in the order they are placed, from the
-> first (top) to the last (default). When a matcher is satisfied, it is
-> immediately executed and no other subsequent conditions are tested, regardless
-> of any other matcher that may satisfy the configured condition.
diff --git a/docs/cms-capabilities/content/pages/pt.md b/docs/cms-capabilities/content/pages/pt.md
deleted file mode 100644
index 02cde92a..00000000
--- a/docs/cms-capabilities/content/pages/pt.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-description: Aprenda como criar páginas na deco.cx sem precisar de código
-since: 2.0
----
-
-A listagem de páginas de um site pode ser acessada na barra lateral em
-`Content > Pages`.
-
-
-
-Uma **Page** é um bloco fundamental na criação de um Site _deco.cx_ que
-normalmente terá várias Pages. Cada `Page` consiste em:
-
-- **uma ou mais [Sections](/docs/pt/concepts/section)** configuradas, que podem
- ser consideradas como componentes modulares que compõem o conteúdo da página.
-- **um nome:** um nome significativo para entender o que essa página representa.
- Não afeta a interface do usuário ou os metadados da página, apenas exibido na
- listagem de páginas do admin.
-- **um path:** representa a URL que aquela página estará acessível para seus
- usuários. Pode ser estático (por exemplo: `/posts`) ou dinâmico (por exemplo:
- `/posts/:slug`, `/search/*`), seguindo o esquema
- [URLPattern](http://mdn.io/urlpattern).
-
-## Criar uma nova página
-
-Clique em **Pages** no menu superior e você poderá ver todas as páginas
-publicadas no site, juntamente com o _path_ que elas são acessíveis aos seus
-usuários.
-
-
-
-> É possível duplicar ou apagar páginas usando as ações extras na listagem de
-> páginas (ícone de 3 pontos).
-
-Para criar uma nova página em seu site, **clique no botão Criar no canto
-superior direito da lista de páginas**. Um formulário será aberto com os campo:
-**nome**, **path** e **template**. Template permite criar uma página tomando o
-conteúdo de outra como base (campo opcional).
-
-Após criada, você será redirecionado para o editor de página. Agora é possível
-editar e adicionar novas Sections disponíveis em seu site e configurar a página
-do jeito que você quiser.
-
-## Editar uma página
-
-Para adicionar uma nova Section à página, clique no botão **Add Sections** no
-editor e verifique todas as opções disponíveis.
-
-
-
-Ao adicionar uma nova section, é possível selecionar sections que são globais ou
-locais (obtidas da library). Há uma diferença entre elas:
-
-- Uma section global já foi configurada e pode ser utilizada por 1 ou mais
- páginas. Ao alterar a propriedade de uma section global, essa alteração é
- refletida em todas as páginas que as usam
-- Uma section local será configurada dentro da página, e só existe com essa
- configuração nessa página (não é compartilhada entre outras páginas).
-
-
-
-Ao selecionar uma section, será possível definir suas propriedades. Algumas das
-propriedades podem pedir a seleção de uma imagem, texto, seleção de itens, ou
-mesmo de um **loader**. Um **loader** é uma entidade que carrega dados e que
-pode receber configurações (selecionando um loader da library) ou já estar
-configurado (loaders salvos).
-
-
-
-Além disso, é possível variar uma section a partir da seleção do ícone de
-bandeira (🏳️).
-
-## Variar uma Section
-
-Uma variante permite que a section tenha outra configuração quando determinada
-condição (**matcher**) é satisfeita. Essa condição pode ser algo já previamente
-configurado (a partir de um **matcher** salvo) ou você poderá configurar a
-partir de um elemento da biblioteca de matchers.
-
-
-
-É bem comum criar variantes especialmente para campanhas ou eventos de tempo
-limitado. Para isso, uma estratégia é configurar um matcher de data e hora.
-
-
-
-A variante "default" representa a página a ser exibida quando nenhum matcher é
-satisfeito.
-
-> **Importante**: os matchers são testado na ordem que são colocados do primeiro
-> (mais acima) até o último (default). Quando um matcher é satisfeito, ele é
-> imeditamente executado e nenhuma outra condição posterior é testada,
-> independente de qualquer outro matcher em seguida que possa satisfazer a
-> condição configurada.
-
-## Editar um SEO de uma página
-
-O SEO de uma página segue o padrão definido no site. É possível especializar o
-SEO de uma página editando o SEO a partir da opção de edição de SEO.
-
-
-
-## Publicar alterações
-
-A página será alterada a cada edição feita. Estas alterações são pertinentes ao
-ambiente que você esteja trabalhando (inicialmente, staging). Uma alteração no
-ambiente não é refletido no ambiente em produção até que essa alteração esteja
-publicada.
-
-
-
-## Variar uma página (segmentando uma páginas)
-
-Uma variante permite criar uma visão diferente de uma página a partir de
-condições específicas. Uma variante pode ser adicionada a partir do símbolo de
-banderira (🏳️).
-
-
-
-Adicione um "**Matcher**" que representa uma regra que será testada para avaliar
-quais sections serão atendidas. No nosso exemplo, selecionamos um Matcher local
-para selecionar um tipo de dispositivo e, mais especificamente, o desktop.
-
-
-
-A variante é criada com todas as sections copiadas da página original. Cada
-variante pode ter sections editadas de forma independente. Clique na variante
-criada e altera as sections da forma que quiser. A variante "default" representa
-a página a ser exibida quando nenhum matcher é satisfeito.
-
-Quando você tem várias variantes em uma única página, a deco automaticamente
-exibe a pré-visualização da variante selecionada por padrão. Se nenhuma variante
-estiver selecionada, a deco mostra o que o usuário veria se fosse atribuído à
-variante. Isso permite que você navegue entre as variantes selecionadas e
-visualize como seria a experiência do usuário para cada variante.
-
-Você também pode ter uma variante dentro de outra variante. Você pode usar
-matchers diferentes ou uma combinação deles.
-
-> **Importante**: os matchers são testado na ordem que são colocados do primeiro
-> (mais acima) até o último (default). Quando um matcher é satisfeito, ele é
-> imeditamente executado e nenhuma outra condição posterior é testada,
-> independente de qualquer outro matcher em seguida que possa satisfazer a
-> condição configurada.
diff --git a/docs/cms-capabilities/content/pt.md b/docs/cms-capabilities/content/pt.md
deleted file mode 100644
index 828976a4..00000000
--- a/docs/cms-capabilities/content/pt.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-description: |
- Guia sobre funcionalidades relacionadas ao conteúdo do site
----
-
-O conteúdo de um site representa páginas, elementos visuais, recursos e
-conteúdos que são disponibilizados aos usuários.
-
-- [Pages](content/pages): Criação e edição de páginas, suas sections, SEO e
- endereços.
-- [Sections](content/sections): Componentes para montagem de páginas.
- Visualização dos elementos disponíveis e edição de elementos globais
- (compartilhados entre páginas).
-- [Blog](content/blog): Criação e edição de postagens a serem usadas em blogs.
-- [Releases](content/releases): Visualização do histórico de atualizações do
- site, e criação e definição de ambientes de trabalho (environments).
-- [Assets](content/assets): Conjunto de imagens e arquivos carregados no site.
-- [Records](content/records): Dados salvos na deco, através de um banco de dado
- embutido.
diff --git a/docs/cms-capabilities/content/records/en.md b/docs/cms-capabilities/content/records/en.md
deleted file mode 100644
index 3120faae..00000000
--- a/docs/cms-capabilities/content/records/en.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-description: Records - Embedded database
-since: 2.0
----
-
-`deco` offers an embedded database that can be used as a data source for website
-components.
-
-On this screen, you can manage this database by listing table elements or adding
-new data.
-
-
diff --git a/docs/cms-capabilities/content/records/pt.md b/docs/cms-capabilities/content/records/pt.md
deleted file mode 100644
index f317b1d8..00000000
--- a/docs/cms-capabilities/content/records/pt.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-description: Records - Banco de dados embutido
-since: 2.0
----
-
-A `deco` oferece um banco de dados embutido que pode ser usado como fonte de
-dados para os componentes do site.
-
-Nesta tela, é possível gerenciar esta base de dados, listando elementos da
-tabela ou adicionando novos dados.
-
-
diff --git a/docs/cms-capabilities/content/releases/en.md b/docs/cms-capabilities/content/releases/en.md
deleted file mode 100644
index e3944b0b..00000000
--- a/docs/cms-capabilities/content/releases/en.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-description: Site editing environments and releases evolution
-since: 2.0
----
-
-On the releases screen, it is possible to evaluate the different editing
-environments (`environment`) of the site, as well as the different publications
-(`releases`) made. Each editing environment offers a unique space for multiple
-users to make changes and send those changes to production (to the official site
-address).
-
-
-
-When making any changes to the site, the environment selector indicates that
-there are changes made in the current environment. The `Staging` is the default
-environment and starts without any changes. This is indicated in the top right
-corner, in the environment selector. The name staging, without an associated
-number and in green, indicates that the current environment does not differ from
-the production environment.
-
-
-
-To publish an environment, it is necessary to go to the `publish` option. There,
-it will be possible to check the changes made, as well as publish them to the
-production address. Note that each environment can make changes independently.
-Before publishing a change, or whenever necessary, the user will perform a
-`Rebase`.
-
-The `rebase` process translates into incorporating the current state of the
-production environment into the own environment. Keep in mind the following
-usage tips about environments:
-
-- To make a set of changes, do it in a separate environment. This allows you to
- see changes that are specific to that environment.
-- For example, create a **home** environment for changes to the home page, or
- **header** for changes to the global header, or a **blackfriday** environment
- for specific changes related to an event.
-- If you want to test changes, but they will be discarded, create an environment
- like **draft** or **test**.
-- When starting to work in an environment, and also before publishing changes,
- perform a **rebase** and test the page. This ensures that the current
- environment will have what is in production plus the changes made.
-
-Let's give an example of changes in a scenario with two environments: `staging`
-and `matheus`. The following actions were performed:
-
-
-
-1. One or two users made a total of two changes in the `staging` environment.
-2. One user made a change in the `matheus` environment. At this point, both
- environments diverge from each other and differ from the production
- environment.
-3. A publication is made from the staging environment. At this point, the
- current state of the `staging` and production environments are the same.
-4. In the `matheus` environment, a user performs a rebase. This way, the
- `matheus` environment incorporates the changes that were made from staging,
- but keeps the existing change.
-5. Next, a publication is made from the `matheus` environment. At this point,
- the `matheus` environment and production have the same state.
-6. Finally, `staging` performs a rebase, ensuring that all environments are in
- the same state.
-
-# Environment (development environments)
-
-An environment represents a workspace where it is possible to make a set of
-changes or modifications that can be published. Every environment is shareable:
-meaning multiple users can make changes in the same environment, so that all
-changes can be published at the same time.
-
-O `Staging` é o ambiente padrão e inicia sem alterações. Isto é indicado no
-canto superior direito, no seletor de ambientes. O nome staging, sem um número
-associado e na cor verde, indica que o ambiente atual não difere do ambiente em
-produção.
-
-
-
-# Releases (Lançamentos)
-
-`Releases` contém o histórico de todas as versões publicadas do seu site e
-permite que você restaure para versões anteriores, se necessário.
-
-
-
-## Passo a passo
-
-1. Apenas o primeiro lançamento representa o estado atual no site. Procure a
- versão para qual deseja retornar e acesse a operação de `Revert`.
-2. Essa operação irá restaurar o código para o estado anterior, incluindo
- alterações no estado da páginas e código do repositório.
diff --git a/docs/cms-capabilities/content/releases/pt.md b/docs/cms-capabilities/content/releases/pt.md
deleted file mode 100644
index 39a48924..00000000
--- a/docs/cms-capabilities/content/releases/pt.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-description: Ambientes de edição e evoluções do site
-since: 2.0
----
-
-Na tela de releases, é possível avaliar os diferentes ambientes de edição
-(`environment`) do site, bem como as diferentes publicações (`releases`)
-realizadas. Cada ambiente de edição oferece um espaço único para que múltiplos
-usuários possam fazer alterações e possa enviar tais alterações para produção
-(para o endereço do site oficial).
-
-
-
-Ao realizar qualquer alteração no site, o seletor de ambientes sinaliza que há
-alterações realizadas no ambiente atual. O `Staging` é o ambiente padrão e
-inicia sem alterações. Isto é indicado no canto superior direito, no seletor de
-ambientes. O nome staging, sem um número associado e na cor verde, indica que o
-ambiente atual não difere do ambiente em produção.
-
-
-
-Para publicar um ambiente, é preciso ir na opção de `publish`. Nela, será
-possível verificar as alterações realizadas, bem como realizar a publicação para
-o endereço em produção. Observe que cada ambiente pode realizar mudanças e
-alterações de forma independente. Antes de publicar uma alteração, ou mesmo
-quando achar necessário, o usuário realizará um `Rebase`.
-
-O processo de `rebase` se traduz em incorporar o estado atual do ambiente de
-produção na próprio ambiente. Tenha em mente as seguintes dicas de uso sobre
-ambientes:
-
-- Para realizar um conjunto de alterações, faça isso num ambiente em separado.
- Isto permite ver alterações que são específicas daquele ambiente.
-- Por exemplo, crie um ambiente **home** para alterações na home, ou **header**
- para alterações no header global, ou um ambiente **blackfriday** para
- alterações especificas de um evento.
-- Caso queira testar alterações, mas que serão descartadas, crie um ambiente
- como **rascunho** ou **teste**.
-- Ao começar a trabalhar em um ambiente, e também antes de publicar alterações,
- faça **rebase** e teste a página. Isto garante que o ambiente atual terá o que
- está em produção mais suas alterações realizadas.
-
-Vamos dar um exemplo de mudanças em um cenário com dois ambientes: `staging` e
-`matheus`. As seguintes ações foram realizadas:
-
-
-
-1. Um, ou dois usuários, realizaram o total de duas mudanças no ambiente
- `staging`
-2. Um usuário realizou uma alteração no ambiente `matheus`. Neste momento, todos
- os dois ambientes divergem entre si e divergem do ambiente em produção.
-3. Uma publicação é feita a partir do ambiente staging. Neste momento, o estado
- atual do `staging` e produção são iguais.
-4. No ambiente `matheus` um usuário faz o rebase. Dessa forma, o ambiente
- `matheus` incorpora as alterações que foram inseridas a partir de staging,
- mas mantendo a alteração que existia antes.
-5. Em seguida, é feita uma publicação a partir do ambiente `matheus`. Neste
- momento, o ambiente `matheus` e produção apresentam o mesmo estado.
-6. Por fim, `staging` faz um rebase, fazendo com que todos os ambientes estejam
- no mesmo estado.
-
-# Environment (ambientes de desenvolvimento)
-
-Um ambiente representa um espaço de trabalho onde é possível realizar um
-conjunto de alterações ou modificações que poderão ser publicadas. Todo ambiente
-é compartilhável: ou seja, multiplos usuários podem fazer alterações no mesmo
-ambiente, de forma que todas possam ser publicadas ao mesmo tempo.
-
-O `Staging` é o ambiente padrão e inicia sem alterações. Isto é indicado no
-canto superior direito, no seletor de ambientes. O nome staging, sem um número
-associado e na cor verde, indica que o ambiente atual não difere do ambiente em
-produção.
-
-
-
-# Releases (Lançamentos)
-
-`Releases` contém o histórico de todas as versões publicadas do seu site e
-permite que você restaure para versões anteriores, se necessário.
-
-
-
-## Passo a passo
-
-1. Apenas o primeiro lançamento representa o estado atual no site. Procure a
- versão para qual deseja retornar e acesse a operação de `Revert`.
-2. Essa operação irá restaurar o código para o estado anterior, incluindo
- alterações no estado da páginas e código do repositório.
diff --git a/docs/cms-capabilities/content/sections/en.md b/docs/cms-capabilities/content/sections/en.md
deleted file mode 100644
index 132c23f8..00000000
--- a/docs/cms-capabilities/content/sections/en.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-description: Working with sections
-since: 2.0
----
-
-Sections represent components that can be used to build a page. A section is a
-Preact component, which means it transforms the properties passed to it into
-HTML.
-
-When you open the sections (sidebar `Content > Sections`), you will have access
-to a set of saved sections, the component library, and the ability to create and
-save sections.
-
-
-
-The different categories in the listing are obtained from the directory where
-the section is located or from the originating **App** (an **App** can import
-different sections).
-
-From this screen, you can:
-
-
-
-- **Saved**: List saved sections
-- **Library**: List and test all available sections for use
-- **Create new Section**: Create new sections
-
-## Modifying saved sections
-
-A **saved section** represents a component that can be shared across multiple
-pages. Elements like **Footer** and **Header** can be shared between different
-pages, allowing their properties to be configured only once.
-
-
-
-Saved sections can be configured from this screen, affecting all sections in the
-system. By clicking on a saved section, you can modify its previously configured
-properties.
-
-
-
-## Configuring a section
-
-When selecting a section, you can define its properties. Some properties may
-require selecting an image, text, item selection, or even a **loader**. A
-**loader** is an entity that loads data and can receive configurations (by
-selecting a loader from the library) or already be configured (saved loaders).
-
-
-
-## Listing and testing other sections
-
-When listing sections in the library and clicking on a section, you gain access
-to a preview of the section, as well as access to the original code of that
-element. It is also possible to edit the code to test changes in the
-functionality of the component.
-
-
-
-In the right sidebar, you can access:
-
-- `🌐` Element preview
-- `☰` Form with properties
-- `{}` Textual description of properties
-- `>` Code editor
-- `🖥️` Logs related to section preview
-- `✨` Decopilot: AI for code modification
-
-## Creating a new Section
-
-You can create a saved section (a shareable component across multiple pages) or
-the base (template) of a section.
-
-
-
-- **New template**: Creates a section that will be available in the component
- library. This means creating a code base that defines a set of properties and
- a program to generate the associated HTML.
-- **Using a template**: Creates a saved section based on an existing base. The
- name will be the identifier of this element among different pages.
diff --git a/docs/cms-capabilities/content/sections/pt.md b/docs/cms-capabilities/content/sections/pt.md
deleted file mode 100644
index 5d44db0a..00000000
--- a/docs/cms-capabilities/content/sections/pt.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-description: Trabalhando com sections
-since: 2.0
----
-
-As sections representam componentes que podem ser utilizadas para montar uma
-página. Uma section é um componente Preact, ou seja, um elemento que transforma
-algumas propriedades passadas para este componente em HTML.
-
-Ao abrir as sections (barra lateral `Content > Sections`), você terá acesso a um
-conjunto de sections salvas, a biblioteca de componentes e a possibilidade de
-criar e salvar sections.
-
-
-
-As diferentes categorias presentes na listagem são obtidas a partir do diretório
-que a section se encontra ou da **App** na qual ela origina (uma **App** pode
-importar diferentes sections).
-
-A partir desta tela é possível:
-
-
-
-- **Saved**: Listar as sections salvas
-- **Library**: Listar e testar todas as sections disponíveis pra uso
-- **Create new Section**: Criar novas Sections
-
-## Alterar sections salvas
-
-Uma **sections salva** representa um compoente que pode ser comparitlhado entre
-várias páginas. Elementos como **Footer** e **Header** podem ser compartilhado
-entre diferentes páginas, da forma que estes elementos podem ter suas
-propriedades configuradas apenas uma vez.
-
-
-
-As sections salvas podem ser configuradas a partir desta tela, de forma afetar
-todas as sections do sistema. Ao clicar em uma section salva é possível alterar
-suas propriedades configuradas anteriormente.
-
-
-
-## Configurando uma section
-
-Ao selecionar uma section, será possível definir suas propriedades. Algumas das
-propriedades podem pedir a seleção de uma imagem, texto, seleção de itens, ou
-mesmo de um **loader**. Um **loader** é uma entidade que carrega dados e que
-pode receber configurações (selecionando um loader da library) ou já estar
-configurado (loaders salvos).
-
-
-
-## Listar e testar demais sections
-
-Ao listar as sections na library, e clicar em uma section, você passa a ter
-acesso a uma visualização da Section, bem como acesso ao código original daquele
-elemento. É também possível editar o código, para testar alterações na
-funcionalidade do componente.
-
-
-
-Na barra lateral a direita, é possível acessar:
-
-- `🌐` Visuzalização do elemento
-- `☰` Formulário com propriedades
-- `{}` Descrição textual das propriedades
-- `>` Editor de código
-- `🖥️` Logs relacionados a visualização da section
-- `✨` Decopilot: IA para alteração do código
-
-## Criar nova Section
-
-É possível criar uma section salva (um componente compartilhável entre várias
-páginas) ou a base (template) de uma section.
-
-
-
-- **New template**: Cria uma section que será disponibilizada na biblioteca de
- componentes. Isto significa criar uma base de código que definirá um conjunto
- de propriedades e um programa para gerar o HTML associado.
-- **Using a template**: Cria uma section salva a partir de uma base existente. O
- nome será a identificação deste elemento entre as diferentes páginas.
diff --git a/docs/cms-capabilities/home/en.md b/docs/cms-capabilities/home/en.md
deleted file mode 100644
index ea7e3d2c..00000000
--- a/docs/cms-capabilities/home/en.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-description: |
- Home: team management, sites, and user profile
----
-
-The `home` represents the user's initial space. From this screen, it is possible
-to access sites, teams, as well as the deco documentation itself.
-
-
-
-## Command Bar
-
-On the home page, and throughout the use of the admin, a `command bar` will
-always be available in the top bar of the screen. The command bar operates
-according to the open context. On the `home` page, it allows searching for and
-opening user sites and teams.
-
-
-
-In addition, it is possible to perform specific commands. The following commands
-are available on the `home` page:
-
-- **/open**: to open sites or teams (default command when selecting a team or
- site from the search)
-- **/delete**: to delete sites or teams
-
-## Profile
-
-In addition to the `command bar`, it is always possible to access your user
-profile from any space in the admin. To do this, access your user photo in the
-upper right corner.
-
-
-
-In it, it is possible to define settings regarding your profile (including your
-photo), payment details (for users who perform tasks), and an API key for admin
-usage.
-
-
-
-### API Key (Dev)
-
-The API Key allows you to perform operations in the admin (loaders and actions)
-with the permissions of your user. In the request for admin loaders/actions,
-define the `x-api-key` header that is provided on this screen.
-
-
-
-## Teams
-
-Team management allows configuration of:
-
-- **Sites**: Listing of team sites, as well as the ability to move, delete, and
- open sites
-- **Members**: Listing of team members, allowing role management and member
- invitation
-- **Billing**: Allows hiring and management of the account type for the team
-- **Settings**: Changes the team name or deletes the team itself
-
-
diff --git a/docs/cms-capabilities/home/pt.md b/docs/cms-capabilities/home/pt.md
deleted file mode 100644
index bf565564..00000000
--- a/docs/cms-capabilities/home/pt.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-description: |
- Home: gestão de times, sites e perfil do usuário
----
-
-A `home` representa o espaço inicial do usuário. A partir desta tela, é possível
-acessar sites, times, bem como a própria documentação da deco.
-
-
-
-## Command Bar
-
-Na home, e ao longo do uso do admin, uma `command bar` estará sempre disponível
-na barra superior da tela. A barra de comando opera de acordo com o contexto
-aberto. Na `home`, ela permite buscar, e abrir, sites e times do usuário.
-
-
-
-Além disso, é possível realizar comandos específicos. Na `home` estão
-disponíveis os comandos:
-
-- **/open**: para abrir sites ou times (comando padrão ao selecionar um time ou
- site a partir da busca)
-- **/delete**: para apagar sites ou times
-
-## Perfil
-
-Além da `command bar`, é sempre possível acessar o perfil do seu usuário a
-partir de qualquer espaço no admin. Para isto, acesse a foto do seu usuário no
-canto superior direito.
-
-
-
-Nele, é possível definir configurações a respeito de seu perfil (incluindo sua
-foto), detalhes de pagamento (para usuários que executam tarefas), e uma API key
-para uso do admin.
-
-
-
-### API Key (Dev)
-
-A API Key permite executar operações no admin (loaders e actions), com as
-permissões do seu usuário. Na requisição para loaders/actions do admin, defina o
-header `x-api-key` que é disponibilizado nesta tela.
-
-
-
-## Times
-
-A gestão de time permite a configuração de:
-
-- **Sites**: Listagem dos sites do time, bem como capacidade de mover, apagar e
- abrir site
-- **Members**: Listagem dos membros do time, permitindo a gerência de papéis e o
- convite de membros
-- **Billing**: Permite a contratação e gestão do tipo de conta para o time
-- **Settings**: Altera o nome do time ou apaga o próprio time
-
-
diff --git a/docs/cms-capabilities/management/apex-domains/en.md b/docs/cms-capabilities/management/apex-domains/en.md
deleted file mode 100644
index 77d23894..00000000
--- a/docs/cms-capabilities/management/apex-domains/en.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: How to Redirect a Non-www Domain
-since: 1.1.0
----
-
-## What is an Apex Domain?
-
-An apex domain is the term used for a root domain, without a subdomain.
-
-Example:
-
-- `www.example.com.br` -> Subdomain
-- `loja.example.com.br` -> Subdomain
-- `example.com.br` - Apex Domain
-
-## Can I point a deco.cx site to the apex domain?
-
-No, it is not yet possible to point a deco.cx site to your apex domain.
-
-Therefore, we have created an easy redirection solution so that access to the
-Apex domain is not lost.
-
-## How to Redirect an Apex Domain in deco.cx?
-
-1 - In the control panel of your site on deco.cx, go to the Settings page.
-
-2 - Click on "Add existing domain"
-
-3 - Enter your apex domain (without subdomain):
-
-
-
-4 - Define which subdomain to redirect to:
-
-
-
-5 - Now, you will see the settings that must be made in your domain hosting
-platform:
-
-
-
-6 - After making the configurations, click on Validate Domain.
-
-The validation step is essential for functionality and depends on the DNS
-propagation set up in the hosting service.
-
-Generally, propagation occurs within a few hours, but it can take up to 48 hours
-in some cases.
diff --git a/docs/cms-capabilities/management/apex-domains/pt.md b/docs/cms-capabilities/management/apex-domains/pt.md
deleted file mode 100644
index 3fed5059..00000000
--- a/docs/cms-capabilities/management/apex-domains/pt.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Como redirecionar domínio sem www
-since: 1.1.0
----
-
-## O que é domínio apex?
-
-Domínio apex é o termo utilizado para domínio raiz, sem subdomínio.
-
-Exemplo:
-
-- `www.example.com.br` -> Subdomínio
-- `loja.example.com.br` -> Subdomínio
-- `example.com.br` - Domínio Apex
-
-## Posso apontar um site deco.cx para o domínio apex?
-
-Não, ainda não é possível apontar um site deco.cx para o seu domínio apex.
-
-Por isso, criamos uma solução fácil de redirecionamento, para que os acessos ao
-domínio Apex não sejam perdidos.
-
-## Como redirecionar um domínio apex na deco.cx?
-
-1 - No painel do seu site na deco.cx, acesse a página de Configurações.
-
-2 - Clique em "Adicionar domínio existente"
-
-3 - Insira o seu domínio apex (sem subdomínio):
-
-
-
-4 - Defina para qual subdomínio redirecionar:
-
-
-
-5 - Agora, você verá os apontamentos que devem ser feitos na sua plataforma de
-hospedagem de domínio:
-
-
-
-6 - Após realizar as configurações, clique em Validar Domínio.
-
-A etapa de validação é essencial para o funcionamento e ela depende da
-propagação do DNS configurado no serviço de hospedagem.
-
-No geral, a propagação ocorre dentro algumas horas, mas pode levar até 48 horas
-em alguns casos.
diff --git a/docs/cms-capabilities/management/custom-domains/en.md b/docs/cms-capabilities/management/custom-domains/en.md
deleted file mode 100644
index 72f7e64a..00000000
--- a/docs/cms-capabilities/management/custom-domains/en.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-description: Adding custom domains.
-since: 1.1.0
----
-
-# Summary
-
-1. What is a custom domain?
-2. Adding a custom domain
- - Requirements
- - Adding a domain in the admin panel
-3. Validating the added domain
- - Step-by-step
- - Testing your configuration
-4. Troubleshooting
-
-# What is a custom domain?
-
-Each deco site is assigned a public domain through which it can be accessed,
-such as the domain `your.deco.site` used in the address
-`https://your.deco.site`. However, it is common to acquire a custom domain to
-strengthen the brand or simplify access to a site.
-
-Deco does not currently provide a domain name server, but it is possible to hire
-this service from other companies such as GoDaddy, Google, and Cloudflare. From
-a technical standpoint, this server must allow the creation of `CNAME` records.
-It's necessary to be cautious as some hosting services may offer name server
-services but not allow this type of configuration!
-
-# Adding a custom domain
-
-## Requirements
-
-To add a domain:
-
-- The site needs to have a `deco.site` domain provided by Deco.
-- The user needs to be an administrator of the site.
-- The user needs to acquire a custom domain from a name server provider that
- allows `CNAME` configuration.
-- The user or administrator of the custom domain needs to create a `CNAME`
- record as indicated in the validation step.
-- ONLY if the domain already has any "CAA" records, it is necessary to add new
- records.
-
-## Before adding a domain
-
-Additional configuration may be required on your website depending on the
-integration used.
-
-If the domain has a `CAA` record, you need to add new domains so that we can
-generate the certificate for your new domain. Important:
-`If your domain doesn't have CAA records, this step is not necessary (and not recommended)`.
-
-You can check if the domain has these records using the
-[Google Admin Toolbox Dig](https://toolbox.googleapps.com/apps/dig/#CAA/) or the
-command `dig yourdomain.com.br caa +short`. If the query doesn't return data
-(`Record not found!`), skip this step.
-
-If your site has certificates, you need to add the following records, especially
-the last two (`pki.goog`). Add them to your site's domain (or use `@` as the
-field name).
-
-```
-0 issue "digicert.com; cansignhttpexchanges=yes"
-0 issuewild "digicert.com; cansignhttpexchanges=yes"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog; cansignhttpexchanges=yes"
-0 issuewild "pki.goog; cansignhttpexchanges=yes"
-```
-
-Some domain providers do not accept CAA with `cansignhttpexchanges`. In that
-case, configure it without this property:
-
-```
-0 issue "digicert.com"
-0 issuewild "digicert.com"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog"
-0 issuewild "pki.goog"
-```
-
-Check with your domain provider for further instructions on how to add these
-records.
-
-## Adding a domain in the admin panel
-
-1. Go to the home page of the site and navigate to the Settings tab.
-
- 
-
-2. In Settings, under the Domains listing, check that there is a `deco.site`
- domain and add an existing domain. **Contact us if you don't have a
- `deco.site` domain**.
-
-3. Add your domain for the site in the opened modal. The domain should only be
- the name, without any protocol (http/https) or slashes. Wait for the initial
- configuration process.
-
- 
-
-4. After adding, the domain is registered with Deco but is not yet operational.
- You now need to set up the domain. Under `...`, click on setup to view the
- configuration instructions.
-
-5. Add the domain configuration to your domain server. This represents a `CNAME`
- record from the custom domain to the deco domain. In the example, this would
- be a record from the domain `www.example.com` to `startest.deco.site`.
-
- 
-
-6. Once configured, click on validate configuration for Deco to verify if the
- record was set up correctly. Important: The domain will remain in an
- "awaiting" state until we complete the configuration on our infrastructure.
-
-7. Wait a few minutes and test accessing your domain in the browser.
-
-# Troubleshooting
-
-## Domain is not validated
-
-Verify that it was correctly registered in the name server. Use a tool like
-[Google's DNS](https://dns.google/) to check if there is a `CNAME` record
-correctly pointing to the `deco.site` domain.
-
-## After validation, the settings still show my domain as "Awaiting"
-
-Sometimes, the domain can generate certificates even after leaving the
-validation screen. However, even in this case, the custom domain may already be
-operational.
-
-## I want to transfer the apex (root) to Deco.
-
-Currently, it is not possible to make this setup in Deco.
-
-## Other situations
-
-If you need further assistance, please reach out to Deco's Discord server.
diff --git a/docs/cms-capabilities/management/custom-domains/pt.md b/docs/cms-capabilities/management/custom-domains/pt.md
deleted file mode 100644
index a334e464..00000000
--- a/docs/cms-capabilities/management/custom-domains/pt.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-description: Adicionando domínios próprios
-since: 1.1.0
----
-
-# Tópicos
-
-1. O que é um domínio próprio?
-2. Adicionando um domínio
- - Requisitos
- - Adicionando um domínio no admin
-3. Validando o domínio adicionado
- - Passo-a-passo
- - Testando sua configuração
-4. Erros comuns
-
-# O que é um domínio próprio?
-
-Cada site deco recebe um domínio público na qual ela é acessível, como o domínio
-`your.deco.site` que é usado no endereço `https://your.deco.site`. No entanto, é
-comum contratar um domínio próprio para fortalecer a marca ou facilitar o acesso
-a um site.
-
-A deco não oferece (ainda) um servidor próprio de nomes de domínios, mas é
-possível contratar esse serviço por outras empresas como godaddy, google e
-cloudflare. Do ponto de vista técnico, é importante que esse servidor permita a
-criação de apontamentos do tipo `CNAME`. É preciso ter cuidado pois alguns
-serviços de hospedagem podem oferecer o serviço de nomes, mas não permitir este
-tipo de configuração!
-
-# Adicionando um domínio próprio
-
-## Requisitos
-
-Para adicionar um domínio:
-
-- o site precisa ter um domínio `deco.site` oferecido pela deco
-- o usuário precisa ser administrador do site
-- o usuário precisa contratar um domínio próprio em um servidor de nomes que
- permita configuração de `CNAME`
-- o usuário ou administrador do domínio próprio precisa criar um apontamento
- `CNAME` indicado na etapa de validação
-- APENAS caso o domínio já tenha algum apontamento `CAA`, é preciso adicionar
- novos apontamentos
-
-## Antes de adicionar um domínio
-
-Pode ser necessária alguma configuração adicional em seu site dependendo da
-integração utilizada.
-
-Caso o domínio tenha algum apontamento `CAA`, é preciso adicionar novos domínios
-para que possamos gerar o certificado do seu novo domínio. Importante:
-`caso seu domínio não tenha apontamentos CAA, esta etapa não é necessária (e não é recomendada)`.
-
-É possível verificar se o domínio tem esses apontamentos através da ferramenta
-[Google Admin Toolbox Dig](https://toolbox.googleapps.com/apps/dig/#CAA/) ou o
-comando `dig seudominio.com.br caa +short`. Caso a consulta não retorne dados
-(`Record not found!`), ignore esta etapa.
-
-Caso seu site tenha certificados, é preciso adicionar os registros abaixo,
-especialmente os dois últimos (`pki.goog`). Adicione no domínio do seu site (ou
-`@` como nome do campo).
-
-```
-0 issue "digicert.com; cansignhttpexchanges=yes"
-0 issuewild "digicert.com; cansignhttpexchanges=yes"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog; cansignhttpexchanges=yes"
-0 issuewild "pki.goog; cansignhttpexchanges=yes"
-```
-
-Alguns provedores de domínios não aceitam o CAA com `cansignhttpexchanges`,
-neste caso, configure sem essa propriedade:
-
-```
-0 issue "digicert.com"
-0 issuewild "digicert.com"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog"
-0 issuewild "pki.goog"
-```
-
-Veja mais instruções no seu provedor de domínios em como adicionar esses campos.
-
-## Adicionando um domínio no admin
-
-1. Entre na página inicial do site, e navegue para a aba de Configurações.
-
- 
-
-2. Em Configurações, na listagem de Domínios, verifique que há um domínio
- `deco.site` e adicione um domínio existente. **Caso não tenha um domínio
- `deco.site`, entre em contato conosco**.
-
-3. Adicione o domínio próprio do site no modal aberto. O domínio deve ser apenas
- o nome, sem protocolo (http/https) ou barras. Aguarde o processo de
- configuração inicial.
-
- 
-
-4. Depois da adição, o domínio está registrado na deco, mas ainda não é
- operante. É preciso agora fazer o setup do domínio. Em `...`, clicando em
- setup, haverá instruções de configuração.
-
-5. Adicione a configuração de domínio no seu servidor de domínios. Isto
- representa um apontamento `CNAME` do domínio própio, para o domínio da deco.
- No exemplo, isto representa um apontamento do domínio `www.example.com` para
- `startest.deco.site`.
-
- 
-
-6. Uma vez configurado, clique em validar configuração para que a deco valide se
- o apontamento foi corretamente realizado. **Importante: O domínio continuará
- no estado de em espera por validação até que o apontamento seja realizado na
- nossa infraestrutura**.
-
-7. Aguarde alguns minutos e teste acessar seu domínio no browser.
-
-# Erros Comuns
-
-## O domínio não é validado
-
-Verifique se o mesmo foi cadastrado corretamente no servidor de nomes. Use uma
-ferramenta como o ][DNS da google](https://dns.google/) para verificar se há um
-registro de `CNAME` apontando o domínio corretamente para um domínio
-`deco.site`. Alguns provedores de domínios podem levar até 12 horas para
-efetivar o novo apontamento.
-
-## Após a validação, as configurações ainda exibem meu domínio como "Awaiting"
-
-Por vezes, o domínio pode fazer a geração de certificados mesmo depois de sair
-da tela de validação. No entanto, mesmo nesse caso, o domínio próprio pode já
-estar operante.
-
-## Quero transferir o apex (nome raíz) para a deco.
-
-Atualmente, não é possível fazer esse apontamento na deco.
-
-## Outras situações
-
-Procure o discord da deco caso precise de ajuda!
diff --git a/docs/cms-capabilities/management/en.md b/docs/cms-capabilities/management/en.md
deleted file mode 100644
index a496a337..00000000
--- a/docs/cms-capabilities/management/en.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-description: |
- Guide on site management functionalities
----
-
-Site management involves settings (access to GIT repository, domains), and
-monitoring site logs and analytics.
-
-- [Settings (Domains)](management/custom-domains): Management of custom domains
- for the site (www.example.com).
-- [Settings (APEX Domains)](management/apex-domains): Management of redirect
- domains (example.com -> www.example.com).
diff --git a/docs/cms-capabilities/management/pt.md b/docs/cms-capabilities/management/pt.md
deleted file mode 100644
index c79ffe0f..00000000
--- a/docs/cms-capabilities/management/pt.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-description: |
- Guia sobre funcionalidades relacionadas as configurações do site
----
-
-O gerenciamento do site envolve configurações (acesso ao repositório GIT,
-domínios), e acompanhamento de logs e analytics do site.
-
-- [Settings (Domains)](management/custom-domains): Gerenciamento de domínios
- customizados do site (www.example.com).
-- [Settings (APEX Domains)](management/apex-domains): Gerenciamento de domínios
- de redirect (example.com -> www.example.com).
diff --git a/docs/composable-apis/gtm/en.md b/docs/composable-apis/gtm/en.md
deleted file mode 100644
index df7c0405..00000000
--- a/docs/composable-apis/gtm/en.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-description: Learn how to integrate Google Tag Manager with a deco.cx website
----
-
-## What will you learn?
-
-- Integrate [Google Tag Manager](https://tagmanager.google.com/) with your
- website deco.cx, allowing the addition of tags configured by the GTM
- interface.
-- Integrate [Google Analytics](https://analytics.google.com/) through GTM.
-
-## Prerequisites
-
-- A `trackingId` from a Google Tag Manager container, formatted in the style:
- `GTM - XXXXXX`.([help](https://support.rocketspark.com/hc/en-us/articles/900002470443-How-do-I-get-my-Google-Tag-Manager-Tracking-ID-or-GTM-Number))
-
-- _Optional:_ Google Analytics 4 configured tag
- ([help](https://support.google.com/tagmanager/answer/9442095?hl=en))
-
-## Introduction
-
-**Google Tag Manager (GTM)** is a free tool offered by Google that allows you to
-easily manage and implement tracking tags and third parties on your website or
-application. These tags can include analytics scripts data such as Google
-Analytics, advertising conversion pixels or other custom codes. However,
-excessive use of tags in GTM can **degrade the performance of a site** as
-scripts can increase the loading time of pages and compromise the user
-experience. Therefore, the integration by deco.cx uses
-[Partytown](https://partytown.builder.io/), which allows you to execution of the
-tags in a service worker and improves the load time of the page.
-
-## Integrating GTM in deco.cx
-
-If you have created a website on deco.cx based on our
-[ecommerce starter](https://fashion.deco.site/), it **already has all the
-necessary code to integrate with GTM**. However, you need to configure a section
-block called **Analytics** by adding the `trackingId` property with the ID of
-the
-[container](https://developers.google.com/tag-platform/tag-manager/web#standard_web_page_installation)
-previously configured.
-
-For that, follow the steps:
-
-1. Open the **Blocks** page in the deco.cx Admin.
-2. Select **Sections**.
-3. Search for **Analytics**.
-4. Edit the **Analytics** section by adding or editing the **Tracking ID**
- property with the ID of your container in GTM.
-5. Save and Publish the block.
-
-All pages that use this section (**Analytics**) will be automatically updated.
-
-And that! To test that everything is working, do the following:
-
-1. Go to your deco site `https://<>.deco.site`.
-2. Go to the developer tools and access the **Network** tab.
-3. Reload the page and make sure the script
- `https://www.googletagmanager.com/gtm.js?id={GTM-ID}` is being loaded.
-
-## Integrating Google Analytics 4
-
-> We recommend using Google Analytics as the GTM tag to avoid interference. If
-> you are using Google Analytics with GTag, add your `GA measurement id` to the
-> `GA measurement ids` property of the analytics section.
-
-If there is already a Google Analytics 4 (GA4) tag in the GTM container
-configured, your deco.cx site will automatically be sending events to the GA4.
-To verify this, go to the **Network** tab again and look for a request with the
-name `collect`. Example:
-
-
-_Example of collect request that sends data to GA4_
-
-> If you don't see this request, make sure there is no adblock configured (ex:
-> uBlock Origin). Some browsers already integrate adblocks by default.
-
-However, if you want to analyze your metrics **according to tests A/B created in
-deco.cx**, it is necessary to make an extra configuration in the container GTM.
-For that, follow the steps:
-
-1. In GTM, enter the **Variables** section.
-2. Under **User Variables**, click **Create New**.
-3. Fill in the variable name with `Flags` (this name will be used posteriorly).
-4. Click the edit button to select the variable type and select **Custom
- Javascript**.
-5. Paste the following code into the text area:
-
-```javascript
-function main() {
- return window.LIVE.flags.map(function (flag) {
- if (flag.value) return flag.name;
- else return null;
- }).filter(Boolean);
-}
-```
-
-5. Click Save.
-
-After the variable has been created, it is still necessary to associate it with
-the Google tag Analytics. For that, follow the steps:
-
-1. From the **Tags** menu, select your GA4 tag. (By default,
- `Google Analytics GA4`).
-2. Under **Tag Configuration**, click the edit button.
-3. In the **User Property** section, click **Add Row**.
-4. Fill the **Property name** with `flags` and the **Value** with `{{Flags}}`,
- this being the same name as the variable created earlier.
-5. That's it, the integration is set up!
-
-
-_Screenshot of `flags` property configuration_
-
-It is now possible to segment your views according to groups of user configured
-in deco.cx.
-
-## Troubleshooting
-
-- **A tag I configured is not working properly**
-
-By using Web Workers technology to include external scripts, there are some
-limitations related to CORS (Cross-origin resource sharing). Depending on the
-tag being included, it is possible that the request for fetch a `.js` script
-fails.
-
-To solve this problem, you need to create a **requests proxy** in your store
-([read more about proxying requests here](https://partytown.builder.io/proxying-requests)).
-Like deco.cx websites are traditional [Fresh](https://fresh.deno.dev/) projects,
-just follow the following steps to create this proxy:
-
-1. In your project, inside the `routes/` folder, create a file called
- `proxy.ts`.
-2. Paste the following code into this file, noting the comments:
-
-```ts
-import { Handlers } from "$fresh/server.ts";
-
-// Add here the scripts you want to proxy
-const ALLOWLIST_URLS = ["https://xxxx.collect.igodigital.com/collect.js"];
-
-export const handler: Handlers = {
- GET: async (req) => {
- const url = (new URL(req.url)).searchParams.get("url");
-
- if (!url || !ALLOWLIST_URLS.includes(url)) {
- return new Response(null, { status: 404 });
- }
-
- const proxyRequest = new Request(
- url,
- {
- headers: req.headers,
- method: req.method,
- body: req.body,
- redirect: "follow",
- },
- );
-
- const response = await fetch(proxyRequest);
- const headers = new Headers(response.headers);
- headers.set("access-control-allow-origin", "*");
-
- return new Response(response.body, {
- status: response.status,
- statusText: response.statusText,
- headers,
- });
- },
-};
-```
-
-4. Push your code changes to the `main` branch.
-5. Replace the URLs of the added scripts in the GTM settings with
- `https://www.yourdecostore.com.br/proxy?url={urlDoScript}`.
-
-For example, if the script you are trying to load is in
-`https://xxxx.collect.igodigital.com/collect.js`, replace this URL with
-`https://www.yourdecostore.com.br/proxy?url=https%3A%2F%2Fxxxx.collect.igodigital.com%2Fcollect.js`.
-Use the `encodeURIComponent` Javascript function if necessary.
diff --git a/docs/composable-apis/gtm/pt.md b/docs/composable-apis/gtm/pt.md
deleted file mode 100644
index dac63fa1..00000000
--- a/docs/composable-apis/gtm/pt.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-description: Aprenda como integrar o Google Tag Manager com um site deco.cx
----
-
-## O que você aprenderá?
-
-- Integrar o [Google Tag Manager](https://tagmanager.google.com/) com seu site
- deco.cx, permitindo a adição de tags configuradas pela interface do GTM.
-- Integrar o [Google Analytics](https://analytics.google.com/) através do GTM.
-
-## Pré-requisitos
-
-- Um `trackingId` de um container do Google Tag Manager, formatado no estilo:
- `GTM - XXXXXX`.
- ([ajuda](https://support.rocketspark.com/hc/en-us/articles/900002470443-How-do-I-get-my-Google-Tag-Manager-Tracking-ID-or-GTM-Number-))
-
-- _Opcional:_ Tag configurada do Google Analytics 4
- ([ajuda](https://support.google.com/tagmanager/answer/9442095?hl=en))
-
-## Introdução
-
-O **Google Tag Manager (GTM)** é uma ferramenta gratuita oferecida pelo Google
-que permite gerenciar e implementar facilmente tags de rastreamento e códigos de
-terceiros em seu site ou aplicativo. Essas tags podem incluir scripts de análise
-de dados, como o Google Analytics, pixels de conversão de publicidade ou outros
-códigos personalizados.
-
-Entretanto, o uso excessivo de tags no GTM pode **prejudicar a performance de um
-site** comum, uma vez que os scripts podem aumentar o tempo de carregamento das
-páginas e comprometer a experiência do usuário. Por isso, a integração feita
-pela deco.cx utiliza o [Partytown](https://partytown.builder.io/), que permite a
-execução das tags em um service worker e melhora o tempo de carregamento da
-página.
-
-## Integrando o GTM na deco.cx
-
-Se você criou um site na deco.cx baseado no nosso
-[starter de ecommerce](https://fashion.deco.site/), ele **já tem todo o código
-necessário para se integrar com o GTM**. No entanto, é necessário configurar um
-bloco section chamado analytics **Analytics** adicionando a propriedade
-`trackingId` com o ID do
-[container](https://developers.google.com/tag-platform/tag-manager/web#standard_web_page_installation)
-previamente configurado.
-
-Para isso, siga os passos:
-
-1. Abra a página **Blocos** no Admin da deco.cx
-2. Selecione `Sections`.
-3. Busque por `Analytics`.
-4. Edite a Section `Analytics`, adicionando ou editando a propriedade **Tracking
- ID** com o ID do seu container no GTM.
-5. Salve e Publique o bloco.
-
-Todas as páginas que utilizam esta section (`Analytics`) será atualizada
-automaticamente.
-
-É isso! Para testar que está tudo funcionando, faça o seguinte:
-
-1. Acesse seu site deco `https://<>.deco.site`.
-2. Vá até as ferramentas de desenvolvedor e acesse a aba **Network**.
-3. Recarregue a página e certifique-se que o script
- `https://www.googletagmanager.com/gtm.js?id=` está sendo carregado.
-
-## Integrando o Google Analytics 4
-
-> Recomendamos que utilize o Google Analytics como tag do GTM para evitar
-> interferência. Caso utilize Google Analytics pelo GTag, adicione seu
-> `GA measurement id` na propriedade `GA measurement ids` da section analytics.
-
-Se já existe uma tag do Google Analytics 4 (GA4) no container do GTM
-configurado, automaticamente o seu site deco.cx já estará enviando eventos para
-o GA4. Para verificar isso, acesse a aba **Network** novamente e busque por uma
-requisição com o nome `collect`. Exemplo:
-
-
-_Exemplo de requisição collect que envia dados para o GA4_
-
-> Caso não veja esse request, certifique-se que não há nenhum adblock
-> configurado (ex: uBlock Origin). Alguns navegadores já integram adblocks por
-> padrão.
-
-Entretanto, caso você queira analisar suas métricas **de acordo com os testes
-A/B criados na deco.cx**, é necessário fazer uma configuração extra no container
-GTM. Para isso, siga os passos:
-
-1. No GTM, entre na seção **Variáveis**.
-2. Em **Variáveis definidas pelo usuário**, clique em **Criar Nova**.
-3. Preencha o nome da variável com `Flags` (esse nome será utilizado
- posteriormente).
-4. Clique no botão de edição para selecionar o tipo de variável e selecione
- **Javascript personalizado**.
-5. Cole o seguinte código na área de texto:
-
-```javascript
-function main() {
- return window.LIVE.flags.map(function (flag) {
- if (flag.value) return flag.name;
- else return null;
- }).filter(Boolean);
-}
-```
-
-5. Clique em Salvar.
-
-Após a variável ter sido criada, ainda é necessário associá-la à tag do Google
-Analytics. Para isso, siga os passos:
-
-1. No menu **Tags**, selecione a sua tag do GA4. (Por padrão,
- `Google Analytics GA4`).
-2. Em **Configuração da tag**, clique no botão de edição.
-3. Na seção **Propriedade do usuário**, clique em **Adicionar Linha**.
-4. Preencha o **Nome da propriedade** com `flags` e o **Valor** com `{{Flags}}`,
- este sendo o mesmo nome da variável criada anteriormente.
-5. Pronto, a integração está configurada!
-
-
-_Screenshot de configuração da propriedade `flags`_
-
-Agora, é possível segmentar suas visualizações de acordo com os grupos de
-usuário configurados na deco.cx.
-
-## Troubleshooting
-
-- **Uma tag que configurei não está funcionando corretamente**
-
-Por utilizar a tecnologia de Web Workers para incluir os scripts externos,
-existem algumas limitações relacionadas à CORS (Cross-origin resouce sharing).
-Dependendo da tag que está sendo incluída, é possível que a requisição para
-buscar um script `.js` falhe.
-
-Para resolver esse problema, é necessário criar um **proxy de requests** na sua
-loja
-([leia mais sobre proxys de requests aqui](https://partytown.builder.io/proxying-requests)).
-Como os sites deco.cx são projetos [Fresh](https://fresh.deno.dev/)
-tradicionais, basta seguir os seguintes passos para criar este proxy:
-
-1. No seu projeto, dentro da pasta `routes/`, crie um arquivo chamado
- `proxy.ts`.
-2. Cole o seguinte código neste arquivo, observando os comentários:
-
-```ts
-import { Handlers } from "$fresh/server.ts";
-
-// Adicione aqui os scripts que você deseja proxiar
-const ALLOWLIST_URLS = ["https://xxxx.collect.igodigital.com/collect.js"];
-
-export const handler: Handlers = {
- GET: async (req) => {
- const url = (new URL(req.url)).searchParams.get("url");
-
- if (!url || !ALLOWLIST_URLS.includes(url)) {
- return new Response(null, { status: 404 });
- }
-
- const proxyRequest = new Request(
- url,
- {
- headers: req.headers,
- method: req.method,
- body: req.body,
- redirect: "follow",
- },
- );
-
- const response = await fetch(proxyRequest);
- const headers = new Headers(response.headers);
- headers.set("access-control-allow-origin", "*");
-
- return new Response(response.body, {
- status: response.status,
- statusText: response.statusText,
- headers,
- });
- },
-};
-```
-
-4. Suba suas alterações de código para a branch `main`.
-5. Substitua nas configurações do GTM as URLs dos scripts adicionados por
- `https://www.sualojanadeco.com.br/proxy?url={urlDoScript}`.
-
-Por exemplo, se o script que você está tentando carregar está em
-`https://xxxx.collect.igodigital.com/collect.js`, troque essa URL por
-`https://www.sualojanadeco.com.br/proxy?url=https%3A%2F%2Fxxxx.collect.igodigital.com%2Fcollect.js`.
-Utilize a função `encodeURIComponent` do Javascript caso seja necessário.
diff --git a/docs/composable-apis/nuvemshop/en.md b/docs/composable-apis/nuvemshop/en.md
deleted file mode 100644
index b5cac039..00000000
--- a/docs/composable-apis/nuvemshop/en.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-description: Learn how to integrate Deco with the Nuvemshop e-commerce platform.
----
-
-This article guides you through creating and configuring a website on
-[**deco.cx**](https://deco.cx) for an online store using data from the Nuvemshop
-e-commerce platform [Nuvemshop](https://www.nuvemshop.com.br/).
-
-# Table of Contents
-
-1. Prerequisites
-1. Creating the Website
-1. Connecting to Nuvemshop
-
-# Prerequisites
-
-- A website on Deco. Create one for free at
- [Deco Admin](https://admin.deco.cx/).
-- An account on Nuvemshop.
-
-# Creating the Website
-
-If you already have a website on deco.cx, proceed to the next section.
-Otherwise, follow the steps in this
-[guide](/docs/pt-br/getting-started/creating-a-site) to create one.
-
-> Ensure that your site is created based on the **Store Nuvemshop** template
-> below:
-
-
-
-# Connecting to Nuvemshop
-
-To connect to your Nuvemshop account:
-
-1. Access the admin panel of your site at [Deco Admin](https://admin.deco.cx/).
-2. In the top bar, select _apps_.
-3. Select the **Nuvemshop** App. You will se something like:
-
-
-4. Change the account configuration from
- `https://lojadolucis.lojavirtualnuvem.com.br` to your Nuvemshop Store public
- URL.
-
-5. After that, you will se a button to get your Store Id and Access Token. Click
- on this button to be redirected to install the deco.cx App on the Nuvemshop
- panel.
-
-
-6. You will see a Pop-up like this:
-
-
-7. Click on `Accept and start using`.
-
-8. Finally, you will be redirected to a screen with the Store Id and Access
- Token:
-
-
-9. Enter these details into the fields on the deco.cx Panel.
-
-🎉 Congratulations, you have set up the integration with Nuvemshop. To ensure
-that the integration is working correctly, continue reading and create a
-reusable collection block.
-
-# Adding Your Products to Your Website
-
-After the Nuvemshop setup is complete, try adding a shelf to your website.
-
-1. Access the admin panel of your site at [Deco Admin](https://admin.deco.cx/).
-2. In the top bar, select _sections_.
-3. Select the `ProductShelf` block and click on the `+` button.
-
-
-4. In the `products` field, select the Nuvemshop integration.
-
-
-5. Fill in the `term` field with a search, for example, "chá".
-
-6. Fill in the `limit` attribute with the number of products to display, let's
- say 4
-
-
-7. Now, in the top right corner, click on `Create` and give it a name, for
- example, `Coleção 1`.
-
-
-8. In the top right corner, click on `Publish`.
-9. Now you can use the `Coleção 1` block on any page of your site.
-
diff --git a/docs/composable-apis/nuvemshop/pt.md b/docs/composable-apis/nuvemshop/pt.md
deleted file mode 100644
index 01bdaca4..00000000
--- a/docs/composable-apis/nuvemshop/pt.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-description: Aprenda a integrar o Deco com a plataforma de comércio eletrônico Nuvemshop.
----
-
-Este artigo orienta você na criação e configuração de um website no
-[**deco.cx**](https://deco.cx) para uma _loja virtual_ utilizando dados da
-plataforma de comércio eletrônico [Nuvemshop](https://www.nuvemshop.com.br/).
-
-# Sumário
-
-1. Pré-requisitos
-1. Criando o website
-1. Conectando à Nuvemshop
-
-# Pré-requisito
-
-- Um website no Deco. Crie um gratuitamente em
- [Deco Admin](https://admin.deco.cx/).
-- Uma conta na Nuvemshop.
-
-# Criando o website
-
-Caso você já tenha um website no deco.cx, avance para a próxima seção. Caso
-contrário, siga as etapas deste
-[guia](/docs/pt-br/getting-started/creating-a-site) para criar um.
-
-> Certifique-se de que seu site foi criado com base no modelo **Store
-> Nuvemshop** abaixo:
-
-
-
-# Conectando à Nuvemshop
-
-Para se conectar à sua conta na Nuvemshop:
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _Apps_.
-3. Selecione o App da **Nuvemshop**. Você verá algo como:
-
-
-4. Altere a configuração da conta de
- `https://lojadolucis.lojavirtualnuvem.com.br` para a URL pública da sua conta
- loja na Nuvemshop.
-
-5. Após isso, você verá um botão para pegar o Store Id e o Access Token. Clique
- nesse botão para ser redirecionado a instalação do App da deco.cx no painel
- da Nuvemshop.
-
-
-6. Após, você verá um Pop-up como esse no painel da Nuvemshop:
-
-
-7. Clique em `Aceitar e começar a usar`
-
-8. Enfim, você será redirecionado para uma tela com o Store Id e Access Token:
-
-
-9. Insira essas informações nos campos do Painel da deco.cx
-
-🎉 Parabéns, você configurou a integração com a Nuvemshop. Para garantir que a
-integração esteja funcionando corretamente, continue lendo e crie um bloco de
-coleção reutilizável.
-
-# Adicionando seus produtos ao seu website.
-
-Após a configuração da Nuvemshop ser concluída, tente adicionar uma prateleira
-ao seu website.
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _sections_.
-3. Selecione o bloco `ProductShelf` e clique no botão `+`.
-
-
-4. No campo `products`, selecione a integração Nuvemshop.
-
-
-5. Preencha o campo `term` com uma busca, por exemplo, "chá".
-
-6. Preencha o campo `limit` com o número de produtos a serem exibidos,
- digamos 4.
-
-
-7. Agora, no canto superior direito, clique em `Criar` e dê um nome, por
- exemplo, `Coleção 1`.
-
-
-8. No canto superior direito, clique em `Publicar`.
-9. Agora você pode utilizar o bloco `Coleção 1` em qualquer página do seu site.
-
diff --git a/docs/composable-apis/shopify/en.md b/docs/composable-apis/shopify/en.md
deleted file mode 100644
index 67878114..00000000
--- a/docs/composable-apis/shopify/en.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-description: Learn how to integrate Deco with the Shopify e-commerce platform.
----
-
-This article guides you through creating and configuring a website on
-[**deco.cx**](https://deco.cx) for an online store using data from the Shopify
-e-commerce platform [Shopify](https://www.shopify.com/).
-
-# Table of Contents
-
-1. Prerequisites
-1. Creating the Website
-1. Connecting to Shopify
-
-# Prerequisites
-
-- A website on Deco. Create one for free at
- [Deco Admin](https://admin.deco.cx/).
-- An account on Shopify.
-
-# Creating the Website
-
-If you already have a website on deco.cx, proceed to the next section.
-Otherwise, follow the steps in this
-[guide](/docs/pt-br/getting-started/creating-a-site) to create one.
-
-> Ensure that your site is created based on the **Store Shopify** template
-> below:
-
-
-
-# Connecting to Shopify
-
-To connect to your Shopify account:
-
-1. Access the admin panel of your site at [Deco Admin](https://admin.deco.cx/).
-2. In the top bar, select _blocks_.
-3. Choose the _Apps_ tab.
-4. Select the **shopify.ts** App and click on the shopify block. You will see
- something like:
-
-
-5. Change the account configuration from `gimenesdevstore` to your Shopify
- account name. The account name is necessarily what's in your public URL, for
- example: `gimenesdevstore.myshopify.com`.
-6. Set the Storefront Access Token with all permissions
- [(help)](https://help.withkoji.com/en/articles/6619709-how-to-find-your-shopify-storefront-api-access-token).
-7. Set the Admin Access Token only with the permissions you want (the process is
- the same as the Storefront token).
-8. Click on `Save` and then `Publish`.
-
-🎉 Congratulations, you have set up the integration with Shopify. To ensure the
-integration is working correctly, continue reading and create a reusable
-collection block.
-
-# Adding Your Collections to Your Website
-
-After the Shopify setup is complete, try adding a shelf to your website.
-
-1. Access the admin panel of your site at [Deco Admin](https://admin.deco.cx/).
-2. In the top bar, select _blocks_ and then _sections_.
-3. Select the `/Products/ProductShelf.tsx` block and click on the `+` button.
-
-
-4. In the `products` field, select the Shopify integration.
-
-
-5. Fill in the `query` field with a search term, for example, "t-shirt.".
-6. Fill in the `count` attribute with the number of products to display, let's
- say 4.
-
-
-7. Now, in the top right corner, click on `Create` and give it a name, for
- example, `Collection 139`.
-
-
-8. In the top right corner, click on `Publish`.
-9. Now you can drag and drop the `Collection 139` block onto any page.
-
diff --git a/docs/composable-apis/shopify/pt.md b/docs/composable-apis/shopify/pt.md
deleted file mode 100644
index c0130253..00000000
--- a/docs/composable-apis/shopify/pt.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-description: Aprenda a integrar o Deco com a plataforma de comércio eletrônico Shopify.
----
-
-Este artigo orienta você na criação e configuração de um website no
-[**deco.cx**](https://deco.cx) para uma _loja virtual_ utilizando dados da
-plataforma de comércio eletrônico [Shopify](https://www.shopify.com/).
-
-# Sumário
-
-1. Pré-requisitos
-1. Criando o website
-1. Conectando à Shopify
-
-# Pré-requisito
-
-- Um website no Deco. Crie um gratuitamente em
- [Deco Admin](https://admin.deco.cx/).
-- Uma conta na Shopify.
-
-# Criando o website
-
-Caso você já tenha um website no deco.cx, avance para a próxima seção. Caso
-contrário, siga as etapas deste
-[guia](/docs/pt-br/getting-started/creating-a-site) para criar um.
-
-> Certifique-se de que seu site foi criado com base no modelo **Store Shopify**
-> abaixo:
-
-
-
-# Conectando à Shopify
-
-Para se conectar à sua conta na Shopify:
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _blocos_.
-3. Escolha a guia _Apps_.
-4. Selecione o App **shopify.ts** e clique no bloco shopify. Você verá algo
- como:
-
-
-5. Altere a configuração da conta de `gimenesdevstore` para o nome da sua conta
- Shopify. O nome da conta é necessariamente o que está na sua URL pública
- myshopify, no exemplo: `gimenesdevstore.myshopify.com`.
-6. Defina o Storefront Access Token com todas as permissões
- [(ajuda)](https://help.withkoji.com/en/articles/6619709-how-to-find-your-shopify-storefront-api-access-token).
-7. Defina o Admin Access Token apenas com as permissões que deseja (o passo é o
- mesmo do token de Storefront).
-8. Clique em `Salvar` e depois em `Publicar`.
-
-🎉 Parabéns, você configurou a integração com a Shopify. Para garantir que a
-integração esteja funcionando corretamente, continue lendo e crie um bloco de
-coleção reutilizável.
-
-# Adicionando suas coleções ao seu website.
-
-Após a configuração da Shopify ser concluída, tente adicionar uma prateleira ao
-seu website.
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _blocos_ e depois _sections_.
-3. Selecione o bloco `/Products/ProductShelf.tsx` e clique no botão `+`.
-
-
-4. No campo `products`, selecione a integração Shopify.
-
-
-5. Preencha o campo `query` com uma busca, por exemplo, "camiseta".
-6. Preencha o atributo `count` com o número de produtos a serem exibidos,
- digamos 4.
-
-
-7. Agora, no canto superior direito, clique em `Criar` e dê um nome, por
- exemplo, `Coleção 139`.
-
-
-8. No canto superior direito, clique em `Publicar`.
-9. Agora você pode arrastar e soltar o bloco `Coleção 139` em qualquer página.
-
diff --git a/docs/composable-apis/vtex/en.md b/docs/composable-apis/vtex/en.md
deleted file mode 100644
index ca420afe..00000000
--- a/docs/composable-apis/vtex/en.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-description: Learn how to integrate deco with VTEX ecommerce platform.
----
-
-This article guides you on creating and configuring a website at
-[**deco.cx**](https://deco.cx) for a _storefront_ using data from
-[VTEX](https://vtex.com/ "https://vtex.com/") ecommerce platform.
-
-> TL;DR: To connect to VTEX you need to change `vtex` app configuration at
-> `https://deco.cx/admin/sites/{site}/library?type=apps`
-
-> **Video**:
-> [Watch the content of this article here](https://www.loom.com/share/ff6dc0fdaa064ac5948133ed5b0b8463)
-
-# Summary
-
-1. Prerequisites
-1. Creating the website
-1. Setting up the `Public store URL`
-1. Connecting to VTEX
-1. Adding your collections to your website.
-1. Troubleshooting
-
-# Prerequisites
-
-- A deco webiste. Create one for free at [Deco Admin](https://admin.deco.cx/).
-- A VTEX account
- [(help)](https://help.vtex.com/tutorial/what-is-an-account-name--i0mIGLcg3QyEy8OCicEoC).
-
-# Creating the website
-
-In case you already have a website at deco.cx, advance to the next section.
-Follow the steps in this [guide](/docs/en/getting-started/creating-a-site)
-otherwise.
-
-> Make sure your site was created based on the **Storefront-Vtex** template
-> below
-
-
-
-# Setting up the `Public store URL`
-
-_Deco commerce_ template currently proxies VTEX's own _checkout_ and
-_my-account_ services. This means that your final user will NOT be redirected to
-any other domain when checking out. For instance, let's say, before any
-migration to deco, your store is hosted on `www.mystore.com` and the checkout
-url is `https://www.mystore.com/checkout`. After migrating to deco, your store
-will continue being served on `www.mystore.com` and your checkout url will still
-be `https://www.mystore.com/checkout`.
-
-Currently, VTEX does not expose its UI services through a public URL on the
-internet. For this reason, we need a secondary URL for enabling proxying
-_checkout_ and _my-account_ services. Following our example above, create a new
-subdomain, let's say `proxy.mystore.com` and point it to VTEX following this
-[guide](https://help.vtex.com/tutorial/configuring-domains-in-account-management--tutorials_2450).
-After that, the `proxy.mystore.com` will be the `Public store URL` required on
-the next step
-
-The final architecture of the setup is:
-
-
-**Important:** When creating a secondary URL, you should add a
-` ` in the `` after Go Live to avoid
-unwanted indexing.
-
-# Connecting to VTEX
-
-To connect to your VTEX account:
-
-1. Access your site's administrative panel at
- [Deco Admin](https://admin.deco.cx/).
-2. On the topbar, select _blocks_
-3. Choose the _Apps_ tab
-4. Select the **vtex** app. You should see something like:
-
-
-5. Change the account configuration from `bravtexfashionstore` to your VTEX
- [account name](https://help.vtex.com/tutorial/what-is-an-account-name--i0mIGLcg3QyEy8OCicEoC)
-6. Set the `Public store URL`.
-7. Click on `Save` and then `Publish`.
-
-🎉 Congratulations, you have setup the VTEX integration. To ensure the
-integration is working properly, keep reading and create a reuseable collection
-block.
-
-# Adding your collections to your website.
-
-After the VTEX setup is complete, try adding a shelf to your webiste.
-
-1. Access your site's administrative panel at
- [Deco Admin](https://admin.deco.cx/).
-2. On the topbar, select _blocks_
-3. Select the block `/Products/ProductShelf.tsx` and click on the `+` button
-
-
-4. On the `products` field, select any VTEX integration (legacy or Intelligent
- Search).
-
-
-5. Fill the `Collection ID` with a valid collection, e.g. 139
-6. Fill the `count` attribute with the number of products to display, let's
- say 6.
-
-
-7. Now, on the top right corner, click on `Create` and name it, e.g.
- `Collection 139`
-
-
-8. On the top right corner click on `Publish`.
-9. You can now drag&drop the block `Collection 139` in any page.
-
-
-# Troubleshooting
-
-Common issues when connecting to VTEX arises from:
-
-1. VTEX Intelligent Search (IS) **is not installed on the account** If you are
- not sure IS is installed in your account, please use the traditional (VTEX
- Catalog) loaders. Beware some features of
- [Fashion starter](https://github.com/deco-sites/fashion) like _autocomplete_
- depend on Intelligent Search.
-2. Wrong salesChannel/defaultLocale setup. Setting up the wrong
- salesChannel/defaultLocale may lead to the wrong products/prices being
- displayed. To find the correct values:
- 1. With _Dev Tools_ open, go to **Application** or **Storage**.
- 1. On the left side, select the **Cookies** item and select the store's URL.
- 1. Look for Cookie `vtex_segment` and **copy its value,**.
- 1. Go to the [JWT website](https://jwt.io) and paste the value.
- 1. Check the returned JSON. The `channel` field brings the `salesChannel`
- value and the `cultureInfo` field brings the `defaultLocale`.
-
- > In most cases the `salesChannel` is 1
-
-
-3. Wrong accountName setup. To figure out the right accountName:
- 1. Access your current store URL, e.g.: `https://www.mystore.com.br`.
- 1. Right-click and select **Inspect**.
- 1. With _Dev Tools_ open, type _Ctrl + F_ to open the search within the HTML.
- 1. Search for `vtexassets` or `vteximg` (depending on the store's current
- CMS).
- 1. The `accountName` will be in URLs in the format:
- `{accountName}.vtexassets.com` or `{accountName}.vteximg.com.br`.
-
- 
diff --git a/docs/composable-apis/vtex/installing-vtex-is/en.md b/docs/composable-apis/vtex/installing-vtex-is/en.md
deleted file mode 100644
index 37f299a5..00000000
--- a/docs/composable-apis/vtex/installing-vtex-is/en.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-description: Learn how to install VTEX Intelligent Search to a VTEX account and leverage deco.cx's built-in connectors
----
-
-
-
-## What is VTEX Intelligent Search?
-
-[VTEX Intelligent Search](https://help.vtex.com/tracks/vtex-intelligent-search)
-(VTEX IS) is a powerful search solution that helps customers find the products
-they are looking for using Artificial Intelligence. It uses historical click and
-order data to dynamically improve search, and offers features such as
-autocomplete, search and product suggestions, and filters that make it easier
-for shoppers to find the products they want.
-
-_deco.cx_ offers **native integration with VTEX Intelligent Search** via the
-[Loaders](/docs/en/concepts/loader) available in
-[deco-cx/apps](https://github.com/deco-cx/apps). You can see it in action in the
-[Storefront starter](https://storefront-vtex.deco.site).
-
-Unfortunately, VTEX IS **does not come pre-installed in all VTEX accounts**, and
-you need to install it to use its APIs in your _deco.cx_ Site. Don't worry:
-installing Intelligent Search **does not have any negative implications** in the
-VTEX account, only making the APIs available. VTEX IS is also offered **free of
-charge** by VTEX (2023).
-
-> If you want to use legacy search APIs from VTEX read more about it
-> [here](/docs/en/tutorials/connecting-vtex)
-
-## Prerequisites
-
-- Access to the VTEX Account you want to perform this operation.
-- Having the
- [VTEX IO CLI](https://developers.vtex.com/docs/guides/vtex-io-documentation-vtex-io-cli-installation-and-command-reference)
- installed on your machine.
-
-## How to install it
-
-1. Login into the VTEX account with `vtex login {accountName}`.
-2. Make sure you're into the `master` workspace with `vtex use master`.
-3. Run `vtex install vtex.admin-search@1.x vtex.intelligent-search-api@0.x`.
-4. In VTEX Admin, go to `Store Setup -> Search -> Integration Settings` and
- check if indexing has started. If not, click on **Start Integration**.
-
-
-
-**That's it!** Now you're able to use the _deco.cx_ loaders that fetch data from
-VTEX Intelligent Search in your [Sections](/docs/en/concepts/page) and
-[Pages](/docs/en/concepts/page).
-
-## Reference
-
-- [VTEX Intelligent Search docs](https://help.vtex.com/tracks/vtex-intelligent-search)
diff --git a/docs/composable-apis/vtex/installing-vtex-is/pt.md b/docs/composable-apis/vtex/installing-vtex-is/pt.md
deleted file mode 100644
index f77dca5e..00000000
--- a/docs/composable-apis/vtex/installing-vtex-is/pt.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-description: Aprenda como instalar a VTEX Intelligent Search em uma conta VTEX e aproveitar os conectores integrados da deco.cx
----
-
-## O que é a VTEX Intelligent Search?
-
-[VTEX Intelligent Search](https://help.vtex.com/tracks/vtex-intelligent-search)
-(VTEX IS) é uma solução de _search_ poderosa que ajuda os clientes a encontrar
-os produtos que procuram utilizando Inteligência Artificial. A IS usa dados
-históricos de cliques e pedidos para melhorar dinamicamente a pesquisa e
-oferecer recursos como preenchimento automático, sugestões de pesquisa de
-produtos e filtros que tornam mais fácil para os compradores encontrarem os
-produtos que desejam.
-
-A _deco.cx_ oferece **integração nativa com a VTEX Intelligent Search** através
-dos [Loaders](/docs/pt/concepts/loader) disponíveis em
-[deco-cx/apps](https://github.com/deco-cx/apps). Você pode vê-la em ação no
-[Fashion starter](https://storefront-vtex.deco.site).
-
-Infelizmente, a VTEX IS **não vem pré-instalada em todas as contas VTEX**, e
-você precisa instalá-la para usar as APIs em seu Site _deco.cx_. Não se
-preocupe: a instalação da Intelligent Search **não tem nenhuma implicação
-negativa** na conta VTEX, apenas disponibilizando as APIs. O VTEX IS também é
-oferecida **gratuitamente** pela VTEX em 2023.
-
-> Se você quer usar as APIs de busca _legacy_ da VTEX leia mais
-> [aqui](/docs/en/tutorials/connecting-vtex)
-
-## Pré-requisitos
-
-- Acesso à conta VTEX que deseja realizar esta operação.
-- Ter o
- [VTEX IO CLI](https://developers.vtex.com/docs/guides/vtex-io-documentation-vtex-io-cli-installation-and-command-reference)
- instalado em sua máquina.
-
-## Como instalar
-
-1. Faça login na conta VTEX com `vtex login {accountName}`.
-2. Certifique-se de estar no _workspace_ `master` com `vtex use master`.
-3. Rode `vtex install vtex.admin-search@1.x vtex.intelligent-search-api@0.x`.
-4. No VTEX Admin, vá para `Store Setup -> Search -> Integration Settings` e
- verifique se a indexação foi iniciada. Caso contrário, clique em **Start
- Integration**.
-
-
-
-**É isso!** Agora você pode usar os Loaders da _deco.cx_ que buscam dados da
-Intelligent Search em suas [Sections](/docs/pt/concepts/section) e
-[Pages](/docs/pt/concepts/page).
-
-## Referência
-
-- [VTEX Intelligent Search](https://help.vtex.com/tracks/vtex-intelligent-search)
diff --git a/docs/composable-apis/vtex/pt.md b/docs/composable-apis/vtex/pt.md
deleted file mode 100644
index ac983d12..00000000
--- a/docs/composable-apis/vtex/pt.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-description: Aprenda a integrar o Deco com a plataforma de comércio eletrônico VTEX.
----
-
-Este artigo orienta você na criação e configuração de um website no
-[**deco.cx**](https://deco.cx) para uma _loja virtual_ utilizando dados da
-plataforma de comércio eletrônico [VTEX](https://vtex.com/ "https://vtex.com/").
-
-> TL;DR: Para se conectar à VTEX, você precisa alterar a configuração do app
-> `vtex` em `https://deco.cx/admin/sites/{site}/library?type=apps`
-
-> **Vídeo**:
-> [Assista ao conteúdo deste artigo aqui](https://www.loom.com/share/ff6dc0fdaa064ac5948133ed5b0b8463)
-
-# Sumário
-
-1. Pré-requisitos
-1. Criando o website
-1. Configurando a `URL Pública da Loja`
-1. Conectando à VTEX
-1. Adicionando suas coleções ao seu website.
-1. Solução de problemas
-
-# Pré-requisitos
-
-- Um website no Deco. Crie um gratuitamente em
- [Deco Admin](https://admin.deco.cx/).
-- Uma conta na VTEX
- [(ajuda)](https://help.vtex.com/tutorial/what-is-an-account-name--i0mIGLcg3QyEy8OCicEoC).
-
-# Criando o website
-
-Caso você já tenha um website no deco.cx, avance para a próxima seção. Caso
-contrário, siga as etapas deste
-[guia](/docs/pt-br/getting-started/creating-a-site) para criar um.
-
-> Certifique-se de que seu site foi criado com base no modelo
-> **Storefront-Vtex** abaixo:
-
-
-
-# Configurando a `URL Pública da Loja`
-
-O modelo _Deco Commerce_ atualmente faz o proxy dos serviços _checkout_ e
-_my-account_ da própria VTEX. Isso significa que seu usuário final NÃO será
-redirecionado para nenhum outro domínio ao fazer o checkout. Por exemplo, vamos
-supor que, antes de migrar para o Deco, sua loja esteja hospedada em
-`www.minhaloja.com` e a URL de checkout seja
-`https://www.minhaloja.com/checkout`.
-
-Após migrar para o Deco, sua loja continuará sendo servida em
-`www.minhaloja.com` e a URL de checkout ainda será
-`https://www.minhaloja.com/checkout`.
-
-Atualmente, a VTEX não expõe seus serviços de interface de usuário por meio de
-uma URL pública na internet. Por esse motivo, precisamos de uma URL secundária
-para habilitar o proxy dos serviços de _checkout_ e _my-account_. Seguindo nosso
-exemplo acima, crie um subdomínio novo, por exemplo `proxy.minhaloja.com`, e
-aponte-o para a VTEX seguindo este
-[guia](https://help.vtex.com/tutorial/configuring-domains-in-account-management--tutorials_2450).
-Depois disso, o `proxy.minhaloja.com` será a `URL Pública da Loja` necessária na
-próxima etapa.
-
-A arquitetura final da configuração é:
-
-
-**Importante:** Ao criar a URL secundária, você deve adicionar um
-` ` no `` após o Go Live para evitar
-indexação indesejada.
-
-# Conectando à VTEX
-
-Para se conectar à sua conta na VTEX:
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _blocos_.
-3. Escolha a guia _Apps_.
-4. Selecione o app **vtex.ts** Você verá algo como:
-
-
-5. Altere a configuração da conta de `bravtexfashionstore` para o nome da sua
- [conta VTEX](https://help.vtex.com/tutorial/what-is-an-account-name--i0mIGLcg3QyEy8OCicEoC).
-6. Defina a `URL Pública da Loja`.
-7. Clique em `Salvar` e depois em `Publicar`.
-
-🎉 Parabéns, você configurou a integração com a VTEX. Para garantir que a
-integração esteja funcionando corretamente, continue lendo e crie um bloco de
-coleção reutilizável.
-
-# Adicionando suas coleções ao seu website.
-
-Após a configuração da VTEX ser concluída, tente adicionar uma prateleira ao seu
-website.
-
-1. Acesse o painel administrativo do seu site em
- [Deco Admin](https://admin.deco.cx/).
-2. Na barra superior, selecione _blocos_.
-3. Selecione o bloco `/Products/ProductShelf.tsx` e clique no botão `+`.
-
-
-4. No campo `products`, selecione qualquer integração VTEX (legacy ou
- Intelligent Search).
-
-
-5. Preencha o campo `Collection ID` com uma coleção válida, por exemplo, 139.
-6. Preencha o atributo `count` com o número de produtos a serem exibidos,
- digamos 6.
-
-
-7. Agora, no canto superior direito, clique em `Criar` e dê um nome, por
- exemplo, `Coleção 139`.
-
-
-8. No canto superior direito, clique em `Publicar`.
-9. Agora você pode arrastar e soltar
-
-o bloco `Coleção 139` em qualquer página.
-
-
-# Solução de problemas
-
-Problemas comuns ao conectar-se à VTEX surgem de:
-
-1. VTEX Intelligent Search (IS) **não está instalada na conta** Se você não tem
- certeza se a IS está instalada em sua conta, use os carregadores tradicionais
- (VTEX Catalog). Cuidado, algumas funcionalidades do
- [Fashion starter](https://github.com/deco-sites/fashion), como o
- _autocomplete_, dependem da VTEX Intelligent Search.
-2. salesChannel/defaultLocale errado. Um salesChannel/defaultLocale mal
- configurado pode levar a produtos e preços errados serem renderizados. Para
- descobrir o valor correto:
- 1. Abra o _Dev Tools_, e va para **Application** ou **Storage**.
- 1. No lado esquerdo, selecione **Cookies** e a url do site.
- 1. Procure pelo Cookie `vtex_segment` e **copie o valor**.
- 1. Em outra aba, abra [o site do JWT](https://jwt.io) e cole o valor do
- cookie copiado no paço anterior.
- 1. No JSON retornado: A propriedade `channel` traz o valor do `salesChannel`.
- A propriedade `cultureInfo` traz o valor de `defaultLocale`.
-
- > Na maioria dos casos `salesChannel` is 1
-
-
-3. Configuração de accountName incorreta. Para descobrir o accountName correto:
- 1. Acesse a URL da sua loja atual, por exemplo:
- `https://www.minhaloja.com.br`.
- 1. Clique com o botão direito e selecione **Inspecionar**.
- 1. Com as _Ferramentas de Desenvolvedor_ abertas, pressione _Ctrl + F_ para
- abrir a busca dentro do código HTML.
- 1. Procure por `vtexassets` ou `vteximg` (dependendo do CMS atual da loja).
- 1. O `accountName` estará nas URLs com o formato:
- `{accountName}.vtexassets.com` ou `{accountName}.vteximg.com.br`.
-
- 
diff --git a/docs/concepts/action/en.md b/docs/concepts/action/en.md
deleted file mode 100644
index b918a8ab..00000000
--- a/docs/concepts/action/en.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-description: An Action in deco.cx is a function that mutates data.
-since: 1.0.0
----
-
-An **Action** in deco.cx is a typescript function that mutates data within the
-application. Actions are triggered by specific user interactions or events and
-are responsible for updating the application's state accordingly. Unlike
-Loaders, which fetch data from external sources, Actions focus on modifying the
-data already present in the application. They can perform operations such as
-**updating**, **creating**, or **deleting** data based on the specified logic.
-Actions provide precise control and flexibility over data mutation and
-seamlessly integrate with other blocks like Loaders to enable a seamless flow of
-data within the application.
-
-Actions, like **Loaders**, are implemented as typescript functions and reside
-locally in the `/actions/` folder of your project. They can be invoked in
-response to user interactions, form submissions, or any other defined triggers.
-By encapsulating data mutation logic within Actions, developers can manage and
-track changes made to the application's state, providing users with dynamic and
-interactive experiences.
-
-> Note: While Loaders focus on fetching data from external sources, Actions
-> concentrate on mutating data within the application. By leveraging both
-> Loaders and Actions in deco.cx, developers can create powerful applications
-> that fetch and manipulate data seamlessly.
-
-One of the great benefits of **Actions** is their ability to work in conjunction
-with **Loaders** and other blocks. While **Loaders** focus on fetching data,
-**Actions** focus on mutating data. This means that multiple **Actions** can be
-invoked from the same interface, allowing users to modify data from different
-sources or perform a series of related operations. By leveraging both
-**Loaders** and **Actions**, developers can create flexible and powerful
-applications that seamlessly integrate data fetching and mutation.
-
-In addition to mutating data, **Actions** in _deco.cx_ **can also export a
-typescript props type,** which allows them to be configured in the
-[Admin](https://deco.cx/admin) just like [Sections](/docs/en/concepts/section).
-
-## Example Code
-
-This is the implementation of the `newsletter/subscribe.ts` Action:
-
-```tsx
-import { AppContext } from "../../mod.ts";
-
-export interface Props {
- email: string;
- name?: string;
- page?: string;
- part?: string;
- campaign?: string;
-}
-
-const action = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { vcsDeprecated } = ctx;
- const form = new FormData();
- const {
- email,
- name = "",
- part = "newsletter",
- page = "_",
- campaign = "newsletter:opt-in",
- } = props;
-
- form.append("newsletterClientName", name);
- form.append("newsletterClientEmail", email);
- form.append("newsInternalPage", page);
- form.append("newsInternalPart", part);
- form.append("newsInternalCampaign", campaign);
-
- await vcsDeprecated["POST /no-cache/Newsletter.aspx"]({}, {
- body: form,
- });
-};
-
-export default action;
-```
-
-[Source](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/actions/newsletter/subscribe.ts#L1C1-L37C23)
-
-## Recommended Reading
-
-- [Fetching data from APIs](/docs/en/developing-guide/fetching-data)
-- [Client-side function invocation](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/action/pt.md b/docs/concepts/action/pt.md
deleted file mode 100644
index 1c6f5cd6..00000000
--- a/docs/concepts/action/pt.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-description: Uma Action na deco.cx é uma função que modifica dados.
-since: 1.0.0
----
-
-Uma **Action** no deco.cx é uma função em typescript que **modifica** dados
-dentro da aplicação. As **Action** são acionadas por _interações_ específicas do
-**usuário** ou **eventos** e são responsáveis por atualizar o estado da
-aplicação de acordo. Ao contrário dos **Loaders**, que buscam dados de fontes
-externas, as **Action** concentram-se em modificar os dados já presentes na
-aplicação. Elas podem realizar operações como **atualização**, **criação** ou
-**exclusão** de dados com base na lógica especificada. As **Action**
-proporcionam _controle_ preciso e flexibilidade sobre a mutação de dados e
-integram-se perfeitamente a outros blocos, como os **Loaders**, para permitir um
-fluxo contínuo de dados na aplicação.
-
-As **Action**, assim como os **Loaders**, são implementadas como funções em
-typescript e estão localizadas na pasta `/actions/` do seu projeto. Elas podem
-ser invocadas em resposta a interações do usuário, envios de formulários ou
-qualquer outro gatilho definido. Ao encapsular a lógica de mutação de dados nas
-**Action**, os desenvolvedores podem gerenciar e rastrear as alterações feitas
-no estado da aplicação, proporcionando aos usuários experiências dinâmicas e
-interativas.
-
-## Código de exemplo
-
-Esta é a implementação da Action `newsletter/subscribe.ts`:
-
-```tsx
-import { AppContext } from "../../mod.ts";
-
-export interface Props {
- email: string;
- name?: string;
- page?: string;
- part?: string;
- campaign?: string;
-}
-
-const action = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { vcsDeprecated } = ctx;
- const form = new FormData();
- const {
- email,
- name = "",
- part = "newsletter",
- page = "_",
- campaign = "newsletter:opt-in",
- } = props;
-
- form.append("newsletterClientName", name);
- form.append("newsletterClientEmail", email);
- form.append("newsInternalPage", page);
- form.append("newsInternalPart", part);
- form.append("newsInternalCampaign", campaign);
-
- await vcsDeprecated["POST /no-cache/Newsletter.aspx"]({}, {
- body: form,
- });
-};
-
-export default action;
-```
-
-[Fonte](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/actions/newsletter/subscribe.ts#L1C1-L37C23)
-
-## Leitura recomendada
-
-- [Buscando dados de API](/docs/pt/developing-guide/fetching-data)
-- [Invocando funções através da API](/docs/pt/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/app/en.md b/docs/concepts/app/en.md
deleted file mode 100644
index 2d4f97bc..00000000
--- a/docs/concepts/app/en.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-description: Apps - Business Capabilities for Your deco Sites
-since: 1.24.0
----
-
-Deco Apps are powerful bundles of business capabilities that can be imported and
-configured into deco sites. An App in deco is essentially a **collection** of
-various **components**, such as **actions**, **sections**, **loaders**,
-**workflows**, **handlers**, or any other deco elements that can be used to
-enhance the functionality of your deco projects.
-
-## Overview
-
-In deco, Apps serve as modular building blocks that encapsulate specific
-features or capabilities. They enable developers to package and share
-business-specific functionalities across different projects, making it easier to
-maintain and scale your deco sites.
-
-By running the command `deno run -Ar https://deco.cx/start` in your terminal,
-you can start developing an App from scratch and get it up and running quickly.
-
-## App Configuration
-
-Each App can be configured with specific parameters, making it versatile and
-adaptable to different use cases. Developers can import and configure Apps in
-their deco sites, allowing for seamless integration and customization of
-functionality.
-
-## Monorepo Support
-
-deco Apps can be managed in a monorepo, providing a centralized location to
-store and organize multiple Apps. This approach streamlines the development
-process and allows for efficient version control and maintenance of Apps.
-
-## Getting Started
-
-To create your own deco Apps, follow these steps:
-
-1. Run the command `deno run -Ar https://deco.cx/start` to initialize a new deco
- App.
-2. Define the functionalities or components you want to bundle into the App.
-3. Organize the functions, sections, loaders, or other deco components within
- the App directory.
-4. Configure the App to accept parameters and be customizable within the deco
- Admin.
-5. Export the App for use in other deco projects.
-
-## Importing and Uninstalling Apps
-
-To use a deco App in your deco site, you can run the following commands:
-
-1. To install the App:
-
- ```sh
- deno task install $APP_URL
- ```
-
- Replace `$APP_URL` with the path location or HTTP URL of the App.
-
-2. To uninstall the App:
-
- ```sh
- deno task uninstall $APP_URL
- ```
-
- Replace `$APP_URL` with the path location or HTTP URL of the App.
-
-## Note
-
-Deco Apps provide a powerful mechanism for creating and sharing reusable
-business capabilities across your deco projects. By organizing components into
-modular Apps, you can significantly enhance the maintainability and scalability
-of your deco sites. Feel free to explore existing deco Apps and create your own
-to streamline your development process and build robust deco projects.
-
-## Recommended Reading
-
-- [deco Concepts: Understanding Sections](/docs/en/concepts/section)
-- [Fetching Data from APIs in deco](/docs/en/developing-guide/fetching-data)
-- [Client-Side Function Invocation in deco](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/app/pt.md b/docs/concepts/app/pt.md
deleted file mode 100644
index 3366df2a..00000000
--- a/docs/concepts/app/pt.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-description: Apps - Capacidades de Negócios para os seus Sites deco
-since: 1.24.0
----
-
-As Apps são poderosos conjuntos de capacidades de negócios que podem ser
-importados e configurados em sites deco. Uma App na deco é essencialmente uma
-**coleção** de vários **componentes**, como **ações**, **seções**,
-**carregadores**, **fluxos de trabalho**, **manipuladores**, ou quaisquer outros
-elementos deco que podem ser usados para aprimorar a funcionalidade dos seus
-projetos deco.
-
-## Visão Geral
-
-Na deco, os Apps funcionam como blocos de construção modulares que encapsulam
-recursos ou capacidades específicas. Eles permitem que os desenvolvedores
-empacotem e compartilhem funcionalidades específicas do negócio em diferentes
-projetos, tornando mais fácil a manutenção e a expansão dos seus sites deco.
-
-Ao executar o comando `deno run -Ar https://deco.cx/start` no terminal, você
-pode começar a desenvolver um App do zero e colocá-lo em funcionamento
-rapidamente.
-
-## Configuração da App
-
-Cada App pode ser configurado com parâmetros específicos, tornando-o versátil e
-adaptável a diferentes casos de uso. Os desenvolvedores podem importar e
-configurar Apps em seus sites deco, permitindo uma integração perfeita e
-personalização da funcionalidade.
-
-## Suporte a Monorepo
-
-Os deco Apps podem ser gerenciados em um monorepo, proporcionando um local
-centralizado para armazenar e organizar vários Apps. Essa abordagem agiliza o
-processo de desenvolvimento e permite um controle de versão e manutenção
-eficiente dos Apps.
-
-## Primeiros Passos
-
-Para criar seus próprios deco Apps, siga estes passos:
-
-1. Execute o comando `deno run -Ar https://deco.cx/start` para inicializar um
- novo deco App.
-2. Defina as funcionalidades ou componentes que você deseja empacotar na app.
-3. Organize as funções, seções, carregadores ou outros componentes deco dentro
- do diretório do App.
-4. Configure o App para aceitar parâmetros e ser personalizável dentro do deco
- Admin.
-5. Exporte o App para ser usado em outros projetos deco.
-
-## Importando e Desinstalando Apps
-
-Para usar um deco App no seu site deco, você pode executar os seguintes
-comandos:
-
-1. Para instalar o App:
-
- ```sh
- deno task install $APP_URL
- ```
-
- Substitua `$APP_URL` pelo local do diretório ou URL HTTP do App.
-
-2. Para desinstalar o App:
-
- ```sh
- deno task uninstall $APP_URL
- ```
-
- Substitua `$APP_URL` pelo local do diretório ou URL HTTP do App.
-
-## Observação
-
-Os deco Apps fornecem um mecanismo poderoso para criar e compartilhar
-capacidades de negócios reutilizáveis em seus projetos deco. Ao organizar
-componentes em Apps modulares, você pode melhorar significativamente a
-manutenção e a escalabilidade dos seus sites deco. Sinta-se à vontade para
-explorar as Apps existentes e criar os seus próprios para agilizar o processo de
-desenvolvimento e construir projetos deco robustos.
-
-## Leitura Recomendada
-
-- [Conceitos da deco: Entendendo Seções](/docs/pt-br/concepts/section)
-- [Buscando Dados de APIs](/docs/pt-br/developing-guide/fetching-data)
-- [Invocação de Funções no Lado do Cliente](/docs/pt-br/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/block/en.md b/docs/concepts/block/en.md
deleted file mode 100644
index 407153e0..00000000
--- a/docs/concepts/block/en.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-description: Block empowers deco's ecosystem
-since: 1.0.0
----
-
-## Overview
-
-Imagine being able to **serialize** a function and save it in a **database**.
-What if this function could be composed together with multiple options? How
-would that change the way you develop web applications?
-
-In deco, the world revolves around **Blocks**. These Blocks are serialized
-functions that can be seamlessly composed together, allowing for limitless
-possibilities and customization.
-
-With deco, you have the flexibility to use an `Inline Block` where you can
-create and use Blocks on the fly, or you can create a Block with a specific name
-and save it for future use, known as a `Saved Block`.
-
-Using _deco_, developers have the ability to define **Blocks**. These **Blocks**
-are built on top of Deno, providing reusable and configurable _"packaged
-capabilities"_ that can be combined to create and deploy robust web applications
-within minutes. They enable developers to create modular and composable units of
-functionality. With Blocks, you can easily combine and integrate different
-capabilities to build complex and customized applications tailored to your
-specific needs.
-
-## Customizing the Admin UI
-
-The deco Admin UI itself is built using **Blocks**, making it highly
-customizable and extensible. Developers have the freedom to compose their own
-bespoke digital experience admin UIs that perfectly align with the requirements
-of their business users. With deco, you have complete control over your admin
-interface, ensuring that it precisely caters to your unique needs.
-
-## Visual Library: Explore and Customize Blocks
-
-In addition to the powerful **Blocks** framework, deco offers a _comprehensive
-visual library_ that allows you to **navigate through your blocks**. This visual
-library empowers you to explore various options and configurations for your
-site's components and features.
-
-With the Visual Library, you have the flexibility to customize and fine-tune
-Blocks according to your specific requirements. You can easily edit and preview
-Blocks with different configurations, ensuring they align perfectly with your
-desired visual and functional elements.
diff --git a/docs/concepts/block/pt.md b/docs/concepts/block/pt.md
deleted file mode 100644
index abdff00a..00000000
--- a/docs/concepts/block/pt.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-description: O Block empoderam o ecossistema da deco
-since: 1.0.0
----
-
-## Visão Geral
-
-Imagine poder **serializar** uma função e salvá-la em um **banco de dados**. E
-se essa função pudesse ser combinada com várias opções diferentes? Como isso
-mudaria a forma como você desenvolve aplicações web?
-
-No deco, tudo gira em torno dos **Blocks** (blocos). Esses Blocks são funções
-serializadas que podem ser combinadas perfeitamente, permitindo possibilidades e
-personalizações ilimitadas.
-
-Com o deco, você tem a flexibilidade de usar um `Inline Block` (bloco em linha),
-onde você pode criar e usar Blocks instantaneamente, ou criar um Block com um
-nome específico e salvá-lo para uso futuro, conhecido como `Saved Block` (bloco
-salvo).
-
-Usando o _deco_, os desenvolvedores têm a capacidade de definir **Blocks**
-(blocos). Esses **Blocks** são construídos em cima do Deno, fornecendo
-_"capacidades encapsuladas"_ reutilizáveis e configuráveis que podem ser
-combinadas para criar e implantar aplicações web robustas em questão de minutos.
-Eles permitem que os desenvolvedores criem unidades de funcionalidade modulares
-e combináveis. Com os Blocks, você pode facilmente combinar e integrar
-diferentes capacidades para construir aplicações complexas e personalizadas
-adaptadas às suas necessidades específicas.
-
-## Personalizando a Interface do Admin
-
-O próprio Admin UI do deco é construído usando **Blocks**, tornando-o altamente
-personalizável e expansível. Os desenvolvedores têm a liberdade de compor suas
-próprias interfaces personalizadas de administração de experiência digital que
-se adequam perfeitamente aos requisitos de seus usuários de negócios. Com o
-deco, você tem total controle sobre sua interface de administração, garantindo
-que ela atenda precisamente às suas necessidades exclusivas.
-
-## Biblioteca Visual: Explore e Personalize os Blocks
-
-Além do poderoso framework de **Blocks**, o deco oferece uma _abrangente
-biblioteca visual_ que permite que você **navegue por seus blocos**. Essa
-biblioteca visual capacita você a explorar várias opções e configurações para os
-componentes e recursos do seu site.
-
-Com a Biblioteca Visual, você tem a flexibilidade de personalizar e ajustar os
-Blocks de acordo com seus requisitos específicos. Você pode editar e visualizar
-facilmente os Blocks com diferentes configurações, garantindo que eles se
-alinhem perfeitamente com os elementos visuais e funcionais desejados.
diff --git a/docs/concepts/loader/en.md b/docs/concepts/loader/en.md
deleted file mode 100644
index adcbdc30..00000000
--- a/docs/concepts/loader/en.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-description: A Loader in deco.cx is a function that returns data needed for a Site.
-since: 1.0.0
----
-
-A **Loader** in _deco.cx_ is a Typescript function that returns data typically
-needed in a [Section](/docs/en/concepts/section). These functions are executed
-before page renders, and their main purpose is to **fetch data from external
-sources**, transform it if necessary, and **provide it to the site Sections that
-need it.** Loaders can be used to fetch data from APIs, databases, or any other
-external source. They live locally on the `/loaders/` folder of your project,
-but it's also possible to
-[Installing apps](/docs/en/getting-started/installing-an-app) that contain
-loaders.
-
-
-
-In addition to fetching data, Loaders in _deco.cx_ **can also export a
-Typescript Props type,** which allows them to be configured in the
-[Admin](https://deco.cx/admin) just like [Sections](/docs/en/concepts/section).
-This means that business users can configure details about how the Loader will
-operate, such as **setting up filters or passing parameters to APIs.** By making
-Loaders configurable in this way, it becomes easier to manage the data flowing
-into Sections and ensure that the Site is displaying the right information to
-visitors.
-
-One other great benefit of Loaders in _deco.cx_ is that **multiple loaders can
-return the same data type**. This allows [Sections](/docs/en/concepts/section)
-that receive, for example, an array of canonical Product to get data from
-different Loaders, depending on the user's configuration. This means that UIs
-can be reused across [Sites](/docs/en/concepts/site) or across teams, making it
-easier to manage and scale your project.
-
-> All Sections for ecommerce stores created by _deco.cx_ in the
-> [Storefront](https://github.com/deco-sites/storefront) start use a canonical
-> Product type, and also every Loader that connects to ecommerce providers's
-> APIs. This means that you can reuse the same UI to show data from different
-> places, depending on the configuration.
-
-
-
-## Example Code
-
-This is the implementation of the `shopify/loaders/ProductList.ts` Loader:
-
-```tsx
-import type { Product } from "../../commerce/types.ts";
-import { AppContext } from "../../shopify/mod.ts";
-import { ListProducts } from "../utils/storefront/queries.ts";
-import {
- ListProductsQuery,
- ListProductsQueryVariables,
-} from "../utils/storefront/storefront.graphql.gen.ts";
-import { toProduct } from "../utils/transform.ts";
-
-export interface Props {
- /** @description search term to use on search */
- query: string;
- /** @description total number of items to display */
- count: number;
-}
-
-/**
- * @title Shopify Integration
- * @description Product List loader
- */
-const loader = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { storefront } = ctx;
-
- const count = props.count ?? 12;
- const query = props.query || "";
-
- const data = await storefront.query<
- ListProductsQuery,
- ListProductsQueryVariables
- >({
- variables: { first: count, query },
- ...ListProducts,
- });
-
- // Transform Shopify product format into schema.org's compatible format
- // If a property is missing from the final `products` array you can add
- // it in here
- const products = data?.products.nodes.map((p) =>
- toProduct(p, p.variants.nodes[0], new URL(_req.url))
- );
-
- return products ?? [];
-};
-
-export default loader;
-```
-
-[Source](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-## Recommended Reading
-
-- [Fetching data from APIs](/docs/en/developing-guide/fetching-data)
-- [Client-side function invocation](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/loader/pt.md b/docs/concepts/loader/pt.md
deleted file mode 100644
index 2a795f27..00000000
--- a/docs/concepts/loader/pt.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-description: Um Loader na deco.cx é uma função que retorna os dados necessários para um Site.
-since: 1.0.0
----
-
-Um **Loader** em _deco.cx_ é uma função Typescript que retorna tipicamente os
-dados necessários em uma [Section](/docs/pt/concepts/section). Essas funções são
-executadas antes da renderização de cada página e seu principal objetivo é
-**buscar dados de fontes externas**, transformá-los se necessário e
-**fornecê-los às Seções do site que precisam.** Os Loaders podem ser usados para
-buscar dados de APIs, bancos de dados ou qualquer outra fonte externa. As
-implementações locais de Loaders vivem na pasta `/loaders` do seu projeto, porém
-é possível [Instalar novas apps](/docs/pt/getting-started/installing-an-app) que
-contém outros loaders.
-
-Além de buscar dados, os Loaders na _deco.cx_ **também podem exportar um tipo de
-Props Typescript**, o que permite que sejam configurados no
-[Admin](https://deco.cx/admin) assim como as
-[Sections](/docs/pt/concepts/section). Isso significa que os usuários de negócio
-podem configurar detalhes sobre como o Loader irá operar, como **configurar
-filtros** ou **passar parâmetros para APIs.** Ao tornar os Loaders configuráveis
-dessa maneira, fica mais fácil gerenciar os dados que fluem para as Sections e
-garantir que o Site esteja exibindo as informações corretas para os visitantes.
-
-Outro benefício dos Loaders na _deco.cx_ é que **vários loaders podem retornar o
-mesmo tipo de dados**. Isso permite que as [Sections](/docs/pt/concepts/section)
-que recebem, por exemplo, um _array_ de Produtos canônico obtenham dados de
-diferentes Loaders, dependendo da configuração do usuário. Isso significa que as
-UIs podem ser reutilizadas em [Sites](/docs/pt/concepts/site) ou entre times,
-facilitando o gerenciamento e a escala do seu projeto.
-
-> Todas as Sections para lojas de _ecommerce_ criadas por _deco.cx_ na
-> [Fashion](https://github.com/deco-sites/fashion) usam um tipo de Produt
-> canônico e também cada Loader que se conecta às APIs dos _ecommerce
-> providers_. Isso significa que você pode reutilizar a mesma UI para mostrar
-> dados de diferentes locais, dependendo da configuração.
-
-
-
-## Código de exemplo
-
-Esta é a implementação do Loader `shopify/loaders/ProductList.ts`:
-
-```tsx
-import type { Product } from "../../commerce/types.ts";
-import { AppContext } from "../../shopify/mod.ts";
-import { ListProducts } from "../utils/storefront/queries.ts";
-import {
- ListProductsQuery,
- ListProductsQueryVariables,
-} from "../utils/storefront/storefront.graphql.gen.ts";
-import { toProduct } from "../utils/transform.ts";
-
-export interface Props {
- /** @description search term to use on search */
- query: string;
- /** @description total number of items to display */
- count: number;
-}
-
-/**
- * @title Shopify Integration
- * @description Product List loader
- */
-const loader = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { storefront } = ctx;
-
- const count = props.count ?? 12;
- const query = props.query || "";
-
- const data = await storefront.query<
- ListProductsQuery,
- ListProductsQueryVariables
- >({
- variables: { first: count, query },
- ...ListProducts,
- });
-
- // Transform Shopify product format into schema.org's compatible format
- // If a property is missing from the final `products` array you can add
- // it in here
- const products = data?.products.nodes.map((p) =>
- toProduct(p, p.variants.nodes[0], new URL(_req.url))
- );
-
- return products ?? [];
-};
-
-export default loader;
-```
-
-[Fonte](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-## Leitura recomendada
-
-- [Buscando dados de API](/docs/pt/develping/fetching-data)
-- [Invocando um loader através da API](/docs/pt/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/concepts/matcher/en.md b/docs/concepts/matcher/en.md
deleted file mode 100644
index 0e85b0b2..00000000
--- a/docs/concepts/matcher/en.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-description: A Matcher in deco.cx is a function that returns a boolean.
-since: 1.18.0
----
-
-## Matchers: Empowering Variants
-
-**Matchers** are essential building blocks in deco that play a pivotal role in
-empowering [Variants](/docs/en/getting-started/variants). They allow you to
-evaluate specific conditions and segment your audience based on various
-criteria. By leveraging Matchers, you can create personalized and dynamic
-experiences for your users. When you create a new **Matcher Block** you may call
-it a [Segment](/docs/en/concepts/segment).
-
-### Understanding Matchers
-
-In deco, **Matchers** are created using _functions_ within your site's code.
-They are powerful tools that enable you to define conditions and evaluate
-whether a user belongs to a particular segment. **Matchers** serve as the
-foundation for targeting specific user groups and personalizing content based on
-their characteristics or behaviors.
-
-_Standard Matchers_ are readily available in deco and cover a range of common
-conditions such as user traits, date and time, device type, geographic location,
-and random selection (A/B testing). These predefined Matchers offer
-_flexibility_ and allow you to customize content variations based on these
-conditions.
-
-However, the power of Matchers extends beyond the standard options. deco
-provides the capability to create **custom Matchers** to meet the specific needs
-of your business. With custom Matchers, you can extend deco's functionality to
-integrate external data sources, such as fetching data from a Salesforce ERP
-system, and then use that data to determine the segment to which a user belongs.
-
-### Native Matchers
-
-| Matcher | Common Use Cases | Sticky |
-| -------------- | ------------------------------------------------------------------------------------ | ------- |
-| Random Matcher | A/B test your page with 50% of traffic. | session |
-| Cron Matcher | Change a page every Friday between 10 AM and 11 AM. | none |
-| Date Matcher | Create a Black Friday page / Schedule banners to appear at specific dates and times. | none |
-| Device Matcher | Show a different page based on the user's device. | none |
-
-### Developing a new Matcher
-
-In your repository, matchers are located within the `matchers` folder, similar
-to sections and loaders. Let's create a new matcher called `MyMatcher.ts` to
-illustrate the process.
-
-The signature of our matcher will follow this structure:
-
-```ts
-import { MatchContext } from "deco/blocks/matcher.ts";
-
-export interface Props {
-}
-
-/**
- * @title My Matcher
- */
-export default function MyMatcher(
- props: Props,
- ctx: MatchContext,
-) {
- return true;
-}
-```
-
-In the example above, the `MyMatcher` function accepts `props` as the input,
-allowing you to pass any necessary data to the matcher. Additionally, it
-receives a `ctx` object of type `MatchContext`, which contains the request
-information. You have the flexibility to perform any desired operations within
-the matcher function and return a boolean value based on the evaluation.
-
-Let's take a look at the `MatchDate` example from the deco library:
-
-```ts
-/**
- * @titleBy start
- */
-export interface Props {
- /**
- * @format date-time
- */
- start?: string;
- /**
- * @format date-time
- */
- end?: string;
-}
-
-/**
- * @title Date Matcher
- */
-const MatchDate = (props: Props) => {
- const now = new Date();
- const start = props.start ? now > new Date(props.start) : true;
- const end = props.end ? now < new Date(props.end) : true;
- return start && end;
-};
-
-export default MatchDate;
-```
-
-In this example, the `MatchDate` function serves as a Matcher. It accepts
-`props` as input, which includes `start` and `end` properties. The function
-evaluates whether the current date falls within the specified date range. If no
-`start` or `end` value is provided, it defaults to `true`. The `MatchDate`
-function returns a boolean value based on the evaluation.
-
-Matchers can also have a "sticky" behavior, which is particularly useful for A/B
-testing scenarios. To make a Matcher sticky on the user's session, you can
-export a constant named `sticky` with the value `"session"`, as shown below:
-
-```ts
-export const sticky = "session";
-```
-
-Here is an example of the `MatchRandom` implementation using the sticky session
-feature:
-
-```ts
-/**
- * @title ABTest {{{percentage traffic}}}
- */
-export interface Props {
- traffic: number;
-}
-
-// Once selected, the session will reuse the same value
-export const sticky = "session";
-
-/**
- * @title Random Matcher
- */
-const MatchRandom = ({ traffic }: Props) => {
- return Math.random() < traffic;
-};
-
-export default MatchRandom;
-```
-
-In the `MatchRandom` example, the matcher function `MatchRandom` accepts
-`traffic` as a prop, representing the percentage of traffic that should match
-the condition. By generating a random number between 0 and 1, the function
-determines whether the generated value is less than the specified `traffic`
-percentage. The Matcher returns `true` or `false` based on this evaluation.
-
-Matchers provide great flexibility to customize and extend deco's functionality
-to meet your specific needs. With the ability to create custom Matchers, you can
-integrate external data sources, perform complex calculations, and implement
-intricate logic to determine user segmentation and deliver personalized
-experiences.
-
-### Harnessing the Power of Matchers in Variants
-
-**Matchers** form the backbone of Variants in deco. By _combining Matchers with
-different conditions_, you can create targeted content variations for specific
-user **segments**. **Variants** enable you to modify and personalize content
-dynamically based on the evaluation of **Matchers**.
-
-When configuring **Variants**, you can select the appropriate Matcher for each
-segment and define the conditions that determine whether a user belongs to that
-segment. By utilizing Matchers in Variants, you can fine-tune the user
-experience, optimize content delivery, and deliver personalized interactions.
diff --git a/docs/concepts/matcher/pt.md b/docs/concepts/matcher/pt.md
deleted file mode 100644
index ff01839a..00000000
--- a/docs/concepts/matcher/pt.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-description: Um Matcher na deco é uma função que retorna um booleano
-since: 1.18.0
----
-
-## Matchers: Potencializando as Variants
-
-Os **Matchers** são blocos essenciais no deco que desempenham um papel
-fundamental ao potencializar as [Variants](/docs/pt/getting-started/variants).
-Eles permitem que você avalie condições específicas e segmente seu público com
-base em vários critérios. Ao aproveitar os Matchers, você pode criar
-experiências personalizadas e dinâmicas para seus usuários. Ao criar um novo
-**Matcher Block**, você pode chamá-lo de [Segmento](/docs/pt/concepts/segment).
-
-### Compreendendo os Matchers
-
-No deco, os **Matchers** são criados usando _funções_ dentro do código do seu
-site. Eles são ferramentas poderosas que permitem que você defina condições e
-avalie se um usuário pertence a um determinado segmento. Os Matchers servem como
-base para segmentar grupos específicos de usuários e personalizar o conteúdo com
-base em suas características ou comportamentos.
-
-Os **Matchers padrão** estão prontamente disponíveis no deco e abrangem uma
-variedade de condições comuns, como características do usuário, data e horário,
-tipo de dispositivo, localização geográfica e seleção aleatória (testes A/B).
-Esses Matchers predefinidos oferecem _flexibilidade_ e permitem que você
-personalize as variações de conteúdo com base nessas condições.
-
-No entanto, o poder dos Matchers vai além das opções padrão. O deco oferece a
-capacidade de criar **Matchers personalizados** para atender às necessidades
-específicas do seu negócio. Com Matchers personalizados, você pode estender a
-funcionalidade do deco para integrar fontes de dados externas, como buscar dados
-de um sistema Salesforce ERP, e usar esses dados para determinar o segmento ao
-qual um usuário pertence.
-
-### Matchers Nativos
-
-| Matcher | Casos de Uso Comuns | Sticky |
-| -------------- | ----------------------------------------------------------------------------------------------- | ------- |
-| Random Matcher | Testar A/B na página com 50% do tráfego | session |
-| Cron Matcher | Alterar uma página toda sexta-feira entre 10h e 11h | none |
-| Date Matcher | Criar a página da Black Friday/ Agendar banners para aparecerem em datas e horários específicos | none |
-| Device Matcher | Exibir uma página diferente com base no dispositivo do usuário | none |
-
-### Desenvolvendo um Novo Matcher
-
-Em seu repositório, os Matchers estão localizados na pasta `matchers`, assim
-como as seções e loaders. Vamos criar um novo matcher chamado `MeuMatcher.ts`
-para ilustrar o processo.
-
-A assinatura do nosso matcher seguirá a seguinte estrutura:
-
-```ts
-import { MatchContext } from "deco/blocks/matcher.ts";
-
-export interface Props {
-}
-
-/**
- * @title Meu Matcher
- */
-export default function MeuMatcher(
- props: Props,
- ctx: MatchContext,
-) {
- return true;
-}
-```
-
-No exemplo acima, a função `MeuMatcher` aceita `props` como entrada, permitindo
-que você passe quaisquer dados necessários para o matcher. Além disso, ela
-recebe um objeto `ctx` do tipo `MatchContext`, que contém as informações da
-solicitação. Você tem a flexibilidade de realizar as operações desejadas dentro
-da função do matcher e retornar um valor booleano com base na avaliação.
-
-Vamos dar uma olhada no exemplo `MatchDate` da biblioteca do deco:
-
-```ts
-/**
- * @title Por início
- */
-export interface Props {
- /**
- * @format date-time
- */
- start?: string;
- /**
- * @format date-time
- */
- end?: string;
-}
-
-/**
- * @title Matcher de Data
- */
-const MatchDate = (props: Props) => {
- const now = new Date();
- const start = props.start ? now > new Date(props.start) : true;
- const end = props.end ? now < new Date(props.end) : true;
- return start && end;
-};
-
-export default MatchDate;
-```
-
-Neste exemplo, a função `MatchDate` atua como um Matcher. Ela aceita `props`
-como entrada, que inclui as propriedades `start` e `end`. A função avalia se a
-data atual está dentro do intervalo de datas especificado. Se nenhum valor de
-`start` ou `end` for fornecido, ele será considerado `true`. A função
-`MatchDate` retorna um valor booleano com base na avaliação.
-
-Os
-
-Matchers também podem ter um comportamento "sticky", o que é particularmente
-útil para cenários de testes A/B. Para tornar um Matcher "sticky" na sessão do
-usuário, você pode exportar uma constante chamada `sticky` com o valor
-`"session"`, conforme mostrado abaixo:
-
-```ts
-export const sticky = "session";
-```
-
-Aqui está um exemplo de implementação do `MatchRandom` usando a funcionalidade
-de sessão "sticky":
-
-```ts
-/**
- * @title Teste A/B {{{percentage traffic}}}
- */
-export interface Props {
- traffic: number;
-}
-
-// Uma vez selecionado, a sessão reutilizará o mesmo valor
-export const sticky = "session";
-
-/**
- * @title Matcher Aleatório
- */
-const MatchRandom = ({ traffic }: Props) => {
- return Math.random() < traffic;
-};
-
-export default MatchRandom;
-```
-
-No exemplo `MatchRandom`, a função matcher `MatchRandom` aceita `traffic` como
-prop, representando a porcentagem de tráfego que deve corresponder à condição.
-Ao gerar um número aleatório entre 0 e 1, a função determina se o valor gerado é
-menor que a porcentagem `traffic` especificada. O Matcher retorna `true` ou
-`false` com base nessa avaliação.
-
-Os Matchers oferecem grande flexibilidade para personalizar e estender a
-funcionalidade do deco para atender às suas necessidades específicas. Com a
-capacidade de criar Matchers personalizados, você pode integrar fontes de dados
-externas, realizar cálculos complexos e implementar lógicas intrincadas para
-determinar a segmentação do usuário e fornecer experiências personalizadas.
-
-### Aproveitando o Poder dos Matchers nas Variants
-
-Os **Matchers** são a base das Variants no deco. Ao _combinar Matchers com
-diferentes condições_, você pode criar variações de conteúdo direcionadas para
-segmentos de usuários específicos. As **Variants** permitem que você modifique e
-personalize o conteúdo dinamicamente com base na avaliação dos **Matchers**.
-
-Ao configurar as **Variants**, você pode selecionar o Matcher apropriado para
-cada segmento e definir as condições que determinam se um usuário pertence a
-esse segmento. Ao utilizar Matchers nas Variants, você pode ajustar a
-experiência do usuário, otimizar a entrega de conteúdo e fornecer interações
-personalizadas.
diff --git a/docs/concepts/section/en.md b/docs/concepts/section/en.md
deleted file mode 100644
index 7e9b721b..00000000
--- a/docs/concepts/section/en.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: |
- A Section represents a configurable UI element for a deco.cx site.
----
-
-Sections are **UI components built with [Preact](https://preactjs.com/)** that
-can receive props configured by users on _deco.cx_'s Admin. The Section local
-implementations live on the `sections/` folder in the Site's code, but it's also
-possible to [Install Apps](/docs/en/getting-started/installing-an-app).
-
-Some examples of Sections for an ecommerce store would be:
-
-- **ProductShelf.tsx:** displays a product shelf with image, title and price.
-- **Header.tsx:** displays the standard header of the store, containing logo,
- menu categories and links for cart and login.
-- **Banner.tsx:** displays image, text and some _Call to action_ for campaign or
- specific department.
-
-## Interactivity
-
-Note that Sections run on the **server-side only**, so state and lifecycle such
-as `useState`, `useEffect` and callbacks such as `onClick`, `onInput` will not
-work. In order for those to work, you'll need to use
-[interactive Islands](https://fresh.deno.dev/docs/concepts/islands)
-
-In _deco.cx_'s Admin, it's possible to interact with Sections in two places:
-
-- **Library:** Allows developers to configure the properties of Sections and
- automatically see the generated UI. (Works similar to
- [Storybook](https://storybook.js.org/))
-- **Pages:** Allows Section to be added to Page on the site, also being
- configurable.
-
-## Further reading
-
-- [Tutorial: Coding a new Section](/docs/en/developing-guide/hello-world)
-- [Developing: Editable sections](/docs/en/developing-guide/editable-sections)
diff --git a/docs/concepts/section/pt.md b/docs/concepts/section/pt.md
deleted file mode 100644
index c3b349e5..00000000
--- a/docs/concepts/section/pt.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: Uma Section representa um elemento de UI configurável para um Site deco.cx.
----
-
-As Sections são **componentes de UI criados com
-[Preact](https://preactjs.com/)** que pode receber `props` configuradas por
-usuários no Admin da _deco.cx_. As implementações locais de Section vivem na
-pasta `sections/` no código do Site, porém é possível
-[Instalar novas apps](/docs/pt/getting-started/installing-an-app).
-
-Alguns exemplos de Section para uma loja de ecomemerce seriam:
-
-- **ProductShelf.tsx:** exibe uma prateleira com imagem, título e preço.
-- **Header.tsx:** exibe o cabeçalho padrão da loja, contendo logotipo,
- categorias de menu e links para carrinho e login.
-- **Banner.tsx:** exibe imagem, texto e alguns _Call to action_ para campanha ou
- departamento específico.
-
-## Interatividade
-
-Observe que as seções são executadas **somente no lado do servidor**, portanto,
-gerenciamento de estado e ciclo de vida como `useState`, `useEffect` e callbacks
-como `onClick`, `onInput` não irão funcionar. Para que funcionem, você precisará
-usar [Islands](https://fresh.deno.dev/docs/concepts/islands).
-
-No Admin da _deco.cx_ é possível interagir com as Sections em dois locais:
-
-- **Library:** permite que desenvolvedores configurem as propriedades das
- Section e visualizaem automaticamente a UI renderizada. (Funciona semelhante
- ao [Storybook](https://storybook.js.org/))
-- **Pages:** Permite que a Section seja adicionada à Pages no Site, sendo também
- configuráveis por lá.
-
-## Leitura adicional
-
-- [Tutorial: Codificando uma nova seção](/docs/en/developing-guide/hello-world)
-- [Desenvolvendo: Seções personalizáveis](/docs/en/developing-guide/editable-sections)
diff --git a/docs/concepts/segment/en.md b/docs/concepts/segment/en.md
deleted file mode 100644
index 25895095..00000000
--- a/docs/concepts/segment/en.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-description: A deco Segment is a configured Matcher used together with a Variation
-since: 1.18.0
----
-
-## Segment: Targeting Specific User Groups
-
-In deco, a **Segment** refers to a specific group or subset of users that meet
-certain conditions or criteria. Segments are a powerful tool that allow you to
-target and personalize content for specific user groups, providing tailored
-experiences and optimizing content delivery.
-
-### Understanding Segments
-
-Segments are defined by [Matchers](/docs/en/concepts/matchers), which evaluate
-conditions and determine whether a user belongs to a particular segment.
-Matchers can consider various factors such as user traits, date and time, device
-type, geographic location, and more. By leveraging Matchers, you can create
-dynamic and customized content variations based on these conditions.
-
-### Utilizing Segments
-
-Segments play a crucial role in various areas of deco, particularly in the
-context of [Variants](/docs/en/getting-started/variants). Variants enable you to
-create content variations and personalize the user experience based on different
-segments. By combining Matchers with different conditions, you can target
-specific user groups and deliver tailored content to enhance engagement and
-satisfaction.
-
-Segments offer great flexibility and enable you to define different targeting
-strategies based on your specific goals and audience characteristics. Whether
-it's conducting A/B tests, displaying different content based on user traits, or
-customizing experiences based on location or device type, Segments empower you
-to optimize your website's performance and deliver a personalized user journey.
-
-With the ability to define and utilize Segments in deco, you can create a highly
-targeted and engaging user experience, improving user satisfaction and achieving
-your business objectives.
-
-Remember, Segments are defined by Matchers, so understanding how Matchers work
-and creating customized Matchers that suit your specific requirements will allow
-you to effectively leverage the power of Segments in deco.
diff --git a/docs/concepts/segment/pt.md b/docs/concepts/segment/pt.md
deleted file mode 100644
index bf855359..00000000
--- a/docs/concepts/segment/pt.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-description: Um Segment na deco é um Matcher configurado juntamente com uma Variant
-since: 1.18.0
----
-
-## Segmento: Direcionando Grupos Específicos de Usuários
-
-No Deco, um **Segmento** se refere a um grupo específico ou subset de usuários
-que atendem a certas condições ou critérios. Segmentos são uma ferramenta
-poderosa que permite direcionar e personalizar o conteúdo para grupos de
-usuários específicos, proporcionando experiências sob medida e otimizando a
-entrega de conteúdo.
-
-### Compreendendo os Segmentos
-
-Segmentos são definidos por [Matchers](/docs/pt/concepts/matchers), que avaliam
-condições e determinam se um usuário pertence a um segmento específico. Matchers
-podem considerar vários fatores, como características do usuário, data e
-horário, tipo de dispositivo, localização geográfica e muito mais. Ao aproveitar
-os Matchers, você pode criar variações de conteúdo dinâmicas e personalizadas
-com base nessas condições.
-
-### Utilizando os Segmentos
-
-Segmentos desempenham um papel crucial em várias áreas do Deco, especialmente no
-contexto de [Variants](/docs/pt/getting-started/variants). Variantes permitem
-criar variações de conteúdo e personalizar a experiência do usuário com base em
-diferentes segmentos. Ao combinar Matchers com diferentes condições, você pode
-direcionar grupos específicos de usuários e fornecer conteúdo personalizado para
-melhorar o envolvimento e a satisfação.
-
-Segmentos oferecem grande flexibilidade e permitem definir diferentes
-estratégias de direcionamento com base em seus objetivos específicos e
-características do público. Seja conduzindo testes A/B, exibindo conteúdo
-diferente com base nas características do usuário ou personalizando experiências
-com base em localização ou tipo de dispositivo, Segmentos capacitam você a
-otimizar o desempenho do seu site e fornecer uma jornada personalizada ao
-usuário.
-
-Com a capacidade de definir e utilizar Segmentos no Deco, você pode criar uma
-experiência do usuário altamente direcionada e envolvente, melhorando a
-satisfação do usuário e alcançando seus objetivos de negócios.
-
-Lembre-se de que Segmentos são definidos por Matchers, portanto, compreender
-como os Matchers funcionam e criar Matchers personalizados que atendam aos seus
-requisitos específicos permitirá que você aproveite efetivamente o poder dos
-Segmentos no Deco.
diff --git a/docs/decopilot/assistant/en.md b/docs/decopilot/assistant/en.md
deleted file mode 100644
index c6761715..00000000
--- a/docs/decopilot/assistant/en.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-description: Decopilot as your code assistant
----
-
-## Decopilot: your code assistant
-
-As your assistant, Decopilot can help to improve and develop your website.
-Below, you can see different examples of using it, but feel free to explore the
-power of AI. For code generation, Decopilot supports both text with the desired
-request and the insertion of local images. In both cases, you can choose to
-**accept the changes**, **discard** them, or **recreate** the provided code.
-
-### Creating blocks
-
-Blocks are one of the most important concepts on deco.cx, so Decopilot is ready
-to be called to create any of this components. Just ask! From loaders and
-actions to sections, Decopilot will ask if it can proceed with the process of
-creation or not. Heres a exemple how it work with sections:
-
-> Prompt: Create a section saying Hello World!
-
-
-
-### Creating and Editing code
-
-You can explore code generation and edition based on your current code and the
-creation of new components with Decopilot. For example, when using the prompt:
-
-> Prompt: Create a Hero saying Hello World in green tones.
-
-After generating the code, Decopilot replaces your used code, and you can see
-the result in the preview.
-
-
-
-### Creating and Editing Based on an Image
-
-If you wish to use an image as inspiration, Decopilot can reproduce it when
-receiving a local image in one of the supported formats (JPEG, PNG, GIF, and
-WebP) along with the request of what to do. Here is an example of prompt:
-
-> Prompt: Reproduce this component to me.
-
-
-
-### Explain and Fix Errors
-
-To further assist the development process, Decopilot can help explain something
-to you or even fixing errors on your code. Example of prompt:
-
-> Prompt: What does this code do?
-
-
-
-### Analyze Performance
-
-Your code assistant can be useful to consult your website's performance and give
-feedback on how to improve it. Here is an example of prompt:
-
-> Prompt: How's my website performance?
-
-## Conclusion
-
-Based on the features presented, Decopilot's potential to simplify and speed up
-code development is evident. [Try it out](https://admin.deco.cx/) now and
-discover how it can transform your programming experience, making it more
-efficient and productive!
diff --git a/docs/decopilot/assistant/pt.md b/docs/decopilot/assistant/pt.md
deleted file mode 100644
index e17f5eed..00000000
--- a/docs/decopilot/assistant/pt.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-description: Decopilot como seu assistente de código
----
-
-## Decopilot: Seu Assistente de Código
-
-Como seu assistente, o Decopilot pode ajudar a melhorar e desenvolver seu site.
-Abaixo, você pode ver diferentes exemplos de uso, mas sinta-se à vontade para
-explorar o poder da IA. Para a geração de código, o Decopilot suporta tanto
-texto com a solicitação desejada quanto a inserção de imagens locais. Em ambos
-os casos, você pode escolher **aceitar as alterações**, **descartar** ou
-**recriar o código fornecido.**
-
-### Criando Blocos
-
-Blocos são um dos conceitos mais importantes na deco.cx, então o Decopilot está
-pronto para ser chamado para criar qualquer um desses componentes. É só pedir!
-Desde loaders e actions até sections, o Decopilot perguntará se pode prosseguir
-com o processo de criação ou não. Aqui está um exemplo de como funciona com
-sections:
-
-> Prompt: Crie uma section dizendo Olá Mundo!
-
-
-
-### Criando e Editando Código
-
-Você pode explorar a geração e edição de código com base no seu código atual e
-na criação de novos componentes com o Decopilot. Por exemplo, ao usar o prompt:
-
-> Prompt: Crie um Hero dizendo Hello World em tons de verde.
-
-Após gerar o código, o Decopilot substitui o código usado, e você pode ver o
-resultado na pré-visualização.
-
-
-
-### Criando e Editando com Base em uma Imagem
-
-Se você deseja usar uma imagem como inspiração, o Decopilot pode reproduzi-la ao
-receber uma imagem local em um dos formatos suportados (JPEG, PNG, GIF e WebP)
-junto com a solicitação do que fazer. Aqui está um exemplo de prompt:
-
-> Prompt: Reproduza este componente para mim.
-
-
-
-### Explicar e Corrigir Erros
-
-Para ajudar ainda mais no processo de desenvolvimento, o Decopilot pode ajudar a
-explicar algo para você ou até mesmo corrigir erros no seu código. Exemplo de
-prompt:
-
-> Prompt: O que este código faz?
-
-
-
-### Analisar Desempenho
-
-Seu assistente de código pode ser útil para consultar o desempenho do seu site e
-fornecer feedback sobre como melhorá-lo. Aqui está um exemplo de prompt:
-
-> Prompt: Como está o desempenho do meu site?
-
-## Conclusão
-
-Com base nas funcionalidades apresentadas, o potencial do Decopilot para
-simplificar e acelerar o desenvolvimento de código é evidente.
-[Experimente agora](https://admin.deco.cx/) e descubra como ele pode transformar
-sua experiência de programação, tornando-a mais eficiente e produtiva!
diff --git a/docs/decopilot/how-to-access/en.md b/docs/decopilot/how-to-access/en.md
deleted file mode 100644
index 5ca0f3ec..00000000
--- a/docs/decopilot/how-to-access/en.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: How to access the Decopilot
----
-
-## Introduction
-
-The Decopilot is a code generation tool designed to further streamline the
-website creation process. Seeking to combine the convenience of using artificial
-intelligence with the agility provided by [Deco Admin](https://admin.deco.cx/)
-for web application development, Decopilot provides the freedom to develop a
-website and its content within minutes while assisting you in identifying and
-fixing any potential errors during development.
-
-## How to access
-
-After
-[creating your site](https://deco.cx/docs/en/getting-started/creating-a-site),
-open a code file in any section of your site. You can do this through the search
-bar of our CMS or by clicking the code icon as shown below:
-
-
-On the right sidebar, you can access the Decopilot as shown in the image:
-
-
-There you go! Now you can explore the functionalities of our Decopilot. To do
-so, it's worth accessing the
-[Assistant](https://deco.cx/docs/en/decopilot/assistant).
diff --git a/docs/decopilot/how-to-access/pt.md b/docs/decopilot/how-to-access/pt.md
deleted file mode 100644
index e696da11..00000000
--- a/docs/decopilot/how-to-access/pt.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Como acessar o decopilot
----
-
-## Introdução
-
-O Decopilot é uma ferramenta de geração de código projetada para acelerar ainda
-mais o processo de criação de sites. Buscando combinar a praticidade do uso de
-inteligência artificial com a agilidade proporcionada pelo
-[Admin da Deco](https://admin.deco.cx/) para o desenvolvimento de aplicações
-web, o Decopilot oferece a liberdade para criar um site e seu conteúdo em
-questão de minutos, enquanto auxilia você na identificação e correção de
-eventuais erros durante o desenvolvimento.
-
-## Como acessar
-
-Após [criar seu site](https://deco.cx/docs/pt/getting-started/creating-a-site),
-abra um arquivo de código em qualquer section do seu site. Você pode fazer isso
-através da barra de pesquisa do nosso CMS ou clicando no ícone de código como
-mostrado abaixo:
-
-
-Na barra lateral direita você poderá acessar o decopilot conforme a imagem:
-
-
-Pronto! Agora você pode experimentar as funcionalidades do nosso decopilot. Para
-isso, vale a pena acessar o
-[Assistant](https://deco.cx/docs/pt/decopilot/assistant).
diff --git a/docs/developing-capabilities/apps/ab-test/en.md b/docs/developing-capabilities/apps/ab-test/en.md
deleted file mode 100644
index 9c3adc38..00000000
--- a/docs/developing-capabilities/apps/ab-test/en.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-description: How to create and track an A/B test?
----
-
-# How to Create and Track an A/B Test?
-
-A/B tests for websites involve splitting the audience and directing them to two
-different versions of the site to see which one generates more engagement.
-
-Let's explore each step:
-
-- Creating an experiment
-- Traffic segmentation
-- Editing your variant
-- Creating events and collecting data
-- Funnel and results
-- GA4 Setup for A/B Testing
-
-## Creating an Experiment
-
-In the sidebar, click on "Experiments"
-
-
-
-This screen lists your experiments. Click on "Create new Experiment"
-
-Some information will be required:
-
-- Name
-- Description
-- Traffic (percentage that will go to the new version)
-
-## Traffic Segmentation
-
-You have just chosen the traffic percentage for your test, but you can customize
-this even further.
-
-The creation of the Experiment has generated a new Segment, which can be checked
-in the sidebar, under "Segments":
-
-
-
-Thus, you can also combine segments to conduct tests for specific audiences:
-
-Select the created test and make the desired changes.
-
-Examples of segmentation:
-
-- **50%** of **Mobile** traffic
-- **30%** of **Facebook Campaign** traffic
-- **10%** of traffic from **Rio de Janeiro**
-
-## Editing Your Variant
-
-Now with the segment created, you can choose whether to test a complete page or
-a specific section.
-
-Create a variant:
-
-
-Select the segment:
-
-
-Make the desired changes:
-
-
-## Creating Events and Collecting Data
-
-Templates start with some events, but you can create new ones.
-
-See how to create them through code or through the panel:
-
-Example in code:
-
-```javascript
-import { sendEvent } from "./sdk/analytics.tsx";
-
- sendEvent({ name: "add_to_cart" }, params)}
->
- Add to Cart
- ;
-```
-
-## Funnel and Results
-
-Additionally, it is possible to check the results of the A/B Test
-
-On the screen that lists the Experiments, select the desired Test.
-
-Check out the features:
-
-### Sample Size
-
-Indication of the minimum sample size for the test to be considered
-statistically significant.
-
-### Probability
-
-See the probability of your variation being the winner relative to the other.
-
-### Goal Setting
-
-Select the goals you want to compare, there is no limit.
-
-### Filter by Period
-
-Filter by period to understand if there were any outliers during the test.
-
-### Funnel
-
-See the conversion rate of each of your metrics to understand where you are
-losing your user.
-
-### Real-Time
-
-Data is transferred in real-time, no more waiting a day or two to analyze them.
-
-
-
-
-
-## GA4 Setup for A/B Testing
-
-To ensure data consistency while navigating an A/B test on deco.cx, we use a
-cookie called deco_segment.
-
-This cookie lasts for 30 days by default and can be used to determine which
-version the user is in.
-
-All data sent to the deco.cx Analytics is already segmented by version.
-
-However, for this to also occur in GA4, it is necessary to check this cookie and
-segment the events based on that information.
-
-- Example of cookie:
-
-```
-deco_segment=TdCJTIyYWN0aXZlJTIyJTNBJTVCJTVEJTJDJTIyaW5hY3RpdmVEcmF3biUyMiUzQSU1QiUyMlRlc3RlJTIwVGF2YW5vJTIyJTVEJTdE
-```
-
-- To extract readable data from this hash, use the following function:
-
-```javascript
-getData(myCookie) {
- return JSON.parse(decodeURIComponent(atob(myCookie)))
-}
-```
-
-- This will return an object like:
-
-```json
-{
- "active": [],
- "inactiveDrawn": ["Teste Tavano"]
-}
-```
-
-This way, in GTM, you can identify whether the user is participating in Test X,
-allowing for the segmented and accurate dispatch of events.
diff --git a/docs/developing-capabilities/apps/ab-test/pt.md b/docs/developing-capabilities/apps/ab-test/pt.md
deleted file mode 100644
index 2b30dccb..00000000
--- a/docs/developing-capabilities/apps/ab-test/pt.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-description: Como criar um Teste A/B e acompanhar os resultados?
----
-
-
-VIDEO
-
-
-# Como criar um Teste A/B e acompanhar os resultados?
-
-Os testes A/B para websites consistem em dividir e direcionar o publico para
-duas versões diferentes do site e ver em qual delas o engajamento é maior.
-
-Vamos conhecer cada uma das etapas:
-
-- Criando um experimento
-- Segmentação do tráfego
-- Editando sua variante
-- Criação de eventos e coleta de dados
-- Funil e resultado
-
-## Criando um experimento
-
-No menu lateral, clique em Experiments
-
-
-
-Essa tela lista os seus experimentos, clique em "Create new Experiment"
-
-Alguns dados serão necessários:
-
-- Name
-- Description
-- Traffic (porcentagem que irá para versão nova)
-
-## Segmentação do tráfego
-
-Você acabou escolher a porcentagem do tráfego para o seu teste, mas pode
-personalizar isso ainda mais.
-
-A criação do Experimento, gerou um novo Segmento, que pode ser conferido na aba
-lateral, em Segments:
-
-
-
-Assim, você também pode combinar segmentos para fazer Testes para públicos
-específicos:
-
-Selecione o Teste criado e faça as alterações que deseja.
-
-Exemplos de segmentação:
-
-- **50%** do tráfego **Mobile**
-- **30%** do tráfego da **Campanha do Facebook**
-- **10%** do tráfego do **Rio de Janeiro**
-
-## Editando sua variante
-
-Agora com o segmento criado, você pode escolher se deseja fazer o teste para uma
-página completa ou uma section específica.
-
-Crie uma variante:
-
-
-Selecione o segmento:
-
-
-Faça as alterações que deseja:
-
-
-## Criação de eventos e coleta de dados
-
-Os templates já iniciam com alguns eventos, mas você pode criar novos eventos.
-
-Veja como criar pelo código ou pelo painel:
-
-Exemplo no código:
-
-```javascript
-import { sendEvent } from "./sdk/analytics.tsx";
-
- sendEvent({ name: "add_to_cart" }, params)}
->
- Adicionar ao Carrinho
- ;
-```
-
-## Funil e resultado
-
-Além disso, é possível conferir os resultados do Teste A/B
-
-Na tela que lista os Experimentos, selecione o Teste desejado.
-
-Confira os recursos:
-
-### Tamanho da amostra
-
-Indicação de tamanho mínimo da amostra para que o teste seja considerado
-estatisticamente relevante.
-
-### Probabilidade
-
-Veja a probabilidade da sua variação ser a vencedora em relação a outra.
-
-### Configuração de metas
-
-Selecione as metas que deseja comparar, não existe nenhum limite.
-
-### Filtro por período
-
-Filtre por período para entender se houve pontos fora da curva durante o teste.
-
-### Funil
-
-Veja a taxa de conversão de cada uma das suas métricas para entender onde está
-perdendo o seu usuário.
-
-### Tempo real
-
-Os dados são transferidos em tempo real, chega de esperar um ou dois dias para
-analisá-los.
-
-
-
-
-
-## Setup do GA4 para Teste A/B
-
-Para assegurar a consistência dos dados fornecidos fornecidos ao navegar em um
-Teste A/B na deco.cx, utilizamos um cookie, chamado _deco_segment_.
-
-Esse cookie dura por padrão 30 dias e pode ser utilizado para entender em qual
-versão o usuário está.
-
-Todos os dados que vão para o Analytics da deco.cx, já são separados por
-segmento.
-
-Porém, para que isso também aconteça no GA4, é necessário verificar esse cookie
-e segmentar os eventos com base nessa informação.
-
-- Exemplo de cookie
-
-```
-deco_segment=TdCJTIyYWN0aXZlJTIyJTNBJTVCJTVEJTJDJTIyaW5hY3RpdmVEcmF3biUyMiUzQSU1QiUyMlRlc3RlJTIwVGF2YW5vJTIyJTVEJTdE
-```
-
-- Para extrair o dado legível deste hash, utilize a função:
-
-```javascript
-getData(myCookie) {
- return JSON.parse(decodeURIComponent(atob(myCookie)))
-}
-```
-
-- Isso irá devolver um objeto como:
-
-```json
-{
- "active": [],
- "inactiveDrawn": ["Teste Tavano"]
-}
-```
-
-Dessa forma, no GTM, você consegue identificar se o usuário está participando do
-Teste X, permitindo o envio de eventos de forma segmentada e precisa.
diff --git a/docs/developing-capabilities/apps/creating-an-app/en.md b/docs/developing-capabilities/apps/creating-an-app/en.md
deleted file mode 100644
index 8786bb6d..00000000
--- a/docs/developing-capabilities/apps/creating-an-app/en.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-description: Developing an App
-since: 1.24.0
----
-
-# Prerequisites
-
-Before you begin, make sure you have the following installed on your system:
-
-- [Deno](https://deno.land/)
-
-## Step 1: Initializing the deco App
-
-To kickstart your deco App development, run the following command in your
-terminal:
-
-```bash
-deno run -A -r https://deco.cx/start
-```
-
-This command will initialize a new deco App project in your current directory.
-Choose a meaningful name for your app when prompted.
-
-## Step 2: Navigate to Your deco App Directory
-
-After the initialization is complete, navigate to your deco App directory using
-the following command:
-
-```bash
-cd $YOUR_APP_NAME
-```
-
-Replace `$YOUR_APP_NAME` with the name you chose for your deco App during
-initialization.
-
-## Step 3: Understanding the `mod.ts` File
-
-Now, let's take a look at the `mod.ts` file in your deco App:
-
-```ts
-import manifest from "./manifest.gen.ts";
-import type { Manifest } from "./manifest.gen.ts";
-import type { App, AppContext as AC } from "deco/mod.ts";
-
-export interface State {
- url: string;
-}
-export type MyApp = App;
-export default function App(
- state: State,
-): MyApp {
- return {
- manifest,
- state,
- };
-}
-
-export type AppContext = AC;
-```
-
-The `mod.ts` file is the heart of your deco App and is written by the developer.
-In this file, you import the automatically generated `manifest` and define the
-`State` interface, which represents the properties of your app. This is useful,
-for instance, to get API Keys for an specific services or to allow the user to
-manage global settings for the app.
-
-The `App` function is exported and takes the `state` object as an argument,
-representing the state of your app. It then returns an object containing the
-`manifest` and the defined `state`. This function is crucial for your app to
-work correctly.
-
-Lastly, the `AppContext` type is exported, representing the context of your app
-and allowing access to the properties defined in `mod.ts`.
-
-## Step 4: Developing Your deco App
-
-Now that you understand the basic structure of your deco App, you can start
-developing it. Feel free to add more components, such as sections, actions,
-workflows, or handlers, to enhance the functionality of your app.
-
-## Step 5: Building Your deco App
-
-To see your deco App in action, run the following command:
-
-```bash
-deno task start
-```
-
-
-
-This command will start your app and automatically generate the necessary files
-to make the app usable by any deco site.
-
-## Conclusion
-
-Congratulations! You have successfully created and developed your own deco App.
-You've learned about the `mod.ts` file, the heart of your app, which allows you
-to define the `manifest` and `state` of your app. Deco Apps provide a powerful
-way to bundle and share business capabilities, making it easier to maintain and
-scale your deco projects. Enjoy coding and feel free to explore more deco
-features to further enhance your apps! 🚀
-
-## Further Reading
-
-- [Making an App Installable](/docs/en/developing-capabilities/apps/making-an-app-installable)
diff --git a/docs/developing-capabilities/apps/creating-an-app/pt.md b/docs/developing-capabilities/apps/creating-an-app/pt.md
deleted file mode 100644
index fbecbeb9..00000000
--- a/docs/developing-capabilities/apps/creating-an-app/pt.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-description: Desenvolvendo um App
-since: 1.24.0
----
-
-# Pré-requisitos
-
-Antes de começar, verifique se você possui os seguintes itens instalados no seu
-sistema:
-
-- [Deno](https://deno.land/)
-
-## Passo 1: Inicializando o App deco
-
-Para iniciar o desenvolvimento do seu App deco, execute o seguinte comando no
-seu terminal:
-
-```bash
-deno run -A -r https://deco.cx/start
-```
-
-Este comando inicializará um novo projeto de App deco no diretório atual.
-Escolha um nome significativo para o seu app quando solicitado.
-
-## Passo 2: Navegando até o Diretório do App deco
-
-Após a inicialização ser concluída, navegue até o diretório do seu App deco
-usando o seguinte comando:
-
-```bash
-cd $NOME_DO_SEU_APP
-```
-
-Substitua `$NOME_DO_SEU_APP` pelo nome que você escolheu para o seu App deco
-durante a inicialização.
-
-## Passo 3: Entendendo o Arquivo `mod.ts`
-
-Agora, vamos dar uma olhada no arquivo `mod.ts` do seu App deco:
-
-```ts
-import manifest from "./manifest.gen.ts";
-import type { Manifest } from "./manifest.gen.ts";
-import type { App, AppContext as AC } from "deco/mod.ts";
-
-export interface State {
- url: string;
-}
-export type MyApp = App;
-export default function App(
- state: State,
-): MyApp {
- return {
- manifest,
- state,
- };
-}
-
-export type AppContext = AC;
-```
-
-O arquivo `mod.ts` é o coração do seu App deco e é escrito pelo desenvolvedor.
-Neste arquivo, você importa o `manifest` gerado automaticamente e define a
-interface `State`, que representa as propriedades do seu app. Pode ser usado
-para configurar API keys para uma chamada a alguma dada API.
-
-A função `App` é exportada e recebe o objeto `state` como argumento,
-representando o estado do seu app. Em seguida, ela retorna um objeto contendo o
-`manifest` e o `state` definidos. Essa função é fundamental para que o seu app
-funcione corretamente.
-
-Por fim, é exportado o tipo `AppContext`, que representa o contexto do seu app e
-permite acessar as propriedades definidas no `mod.ts`.
-
-## Passo 4: Desenvolvendo o seu App deco
-
-Agora que você entende a estrutura básica do seu App deco, você pode começar a
-desenvolvê-lo. Sinta-se à vontade para adicionar mais componentes, como seções,
-ações, fluxos de trabalho ou manipuladores, para aprimorar a funcionalidade do
-seu app.
-
-## Passo 5: Construindo o seu App deco
-
-Para ver o seu App deco em ação, execute o seguinte comando:
-
-```bash
-deno task start
-```
-
-
-
-Este comando iniciará o seu app e automaticamente gerará os arquivos necessários
-para torná-lo utilizável em qualquer site deco.
-
-## Conclusão
-
-Parabéns! Você criou e desenvolveu com sucesso o seu próprio App deco. Você
-aprendeu sobre o arquivo `mod.ts`, o coração do seu app, que permite que você
-defina o `manifest` e o `state` do seu app. Os Apps deco oferecem uma maneira
-poderosa de agrupar e compartilhar capacidades empresariais, tornando mais fácil
-a manutenção e escalabilidade dos seus projetos deco. Divirta-se codificando e
-sinta-se à vontade para explorar mais recursos do deco para aprimorar ainda mais
-os seus apps! 🚀
-
-## Leitura Adicional
-
-- [Tornando um App Instalável](/docs/en/developing-capabilities/apps/making-an-app-installable)
diff --git a/docs/developing-capabilities/apps/en.md b/docs/developing-capabilities/apps/en.md
deleted file mode 100644
index 2d4f97bc..00000000
--- a/docs/developing-capabilities/apps/en.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-description: Apps - Business Capabilities for Your deco Sites
-since: 1.24.0
----
-
-Deco Apps are powerful bundles of business capabilities that can be imported and
-configured into deco sites. An App in deco is essentially a **collection** of
-various **components**, such as **actions**, **sections**, **loaders**,
-**workflows**, **handlers**, or any other deco elements that can be used to
-enhance the functionality of your deco projects.
-
-## Overview
-
-In deco, Apps serve as modular building blocks that encapsulate specific
-features or capabilities. They enable developers to package and share
-business-specific functionalities across different projects, making it easier to
-maintain and scale your deco sites.
-
-By running the command `deno run -Ar https://deco.cx/start` in your terminal,
-you can start developing an App from scratch and get it up and running quickly.
-
-## App Configuration
-
-Each App can be configured with specific parameters, making it versatile and
-adaptable to different use cases. Developers can import and configure Apps in
-their deco sites, allowing for seamless integration and customization of
-functionality.
-
-## Monorepo Support
-
-deco Apps can be managed in a monorepo, providing a centralized location to
-store and organize multiple Apps. This approach streamlines the development
-process and allows for efficient version control and maintenance of Apps.
-
-## Getting Started
-
-To create your own deco Apps, follow these steps:
-
-1. Run the command `deno run -Ar https://deco.cx/start` to initialize a new deco
- App.
-2. Define the functionalities or components you want to bundle into the App.
-3. Organize the functions, sections, loaders, or other deco components within
- the App directory.
-4. Configure the App to accept parameters and be customizable within the deco
- Admin.
-5. Export the App for use in other deco projects.
-
-## Importing and Uninstalling Apps
-
-To use a deco App in your deco site, you can run the following commands:
-
-1. To install the App:
-
- ```sh
- deno task install $APP_URL
- ```
-
- Replace `$APP_URL` with the path location or HTTP URL of the App.
-
-2. To uninstall the App:
-
- ```sh
- deno task uninstall $APP_URL
- ```
-
- Replace `$APP_URL` with the path location or HTTP URL of the App.
-
-## Note
-
-Deco Apps provide a powerful mechanism for creating and sharing reusable
-business capabilities across your deco projects. By organizing components into
-modular Apps, you can significantly enhance the maintainability and scalability
-of your deco sites. Feel free to explore existing deco Apps and create your own
-to streamline your development process and build robust deco projects.
-
-## Recommended Reading
-
-- [deco Concepts: Understanding Sections](/docs/en/concepts/section)
-- [Fetching Data from APIs in deco](/docs/en/developing-guide/fetching-data)
-- [Client-Side Function Invocation in deco](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/apps/making-an-app-installable/en.md b/docs/developing-capabilities/apps/making-an-app-installable/en.md
deleted file mode 100644
index 92a9052d..00000000
--- a/docs/developing-capabilities/apps/making-an-app-installable/en.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Making an App Installable
-since: 1.24.0
----
-
-# Making an App Installable
-
-To make your deco App installable on a deco site, follow these simple steps:
-
-1. Run the following command in your terminal to install your App:
-
-```bash
-deno task install $YOUR_APP_LOCATION
-```
-
-Replace `$YOUR_APP_LOCATION` with the location of your deco App, which can be a
-folder in your file system or an HTTP URL from GitHub or denopkg/denoland.
-
-2. Next, execute the following command to update the schema and manifest of your
- App:
-
-```bash
-deno task start
-```
-
-After completing these steps, your deco App will be installed and ready to be
-used on any deco site you desire. Now you can share and leverage your business
-capabilities conveniently and efficiently. Have fun building and using your deco
-Apps! 🚀
diff --git a/docs/developing-capabilities/apps/making-an-app-installable/pt.md b/docs/developing-capabilities/apps/making-an-app-installable/pt.md
deleted file mode 100644
index 9ddca052..00000000
--- a/docs/developing-capabilities/apps/making-an-app-installable/pt.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Tornando um app Instalável
-since: 1.24.0
----
-
-Para tornar o seu App deco instalável em um site deco, siga estes simples
-passos:
-
-1. Execute o seguinte comando em seu terminal para instalar o seu App:
-
-```bash
-deno task install $NOME_DO_SEU_APP
-```
-
-Substitua `$NOME_DO_SEU_APP` pela localização da sua App, que pode ser uma pasta
-no seu sistema de arquivos ou uma URL http do github ou denopkg/denoland.
-
-2. Em seguida, execute o comando a seguir para atualizar o esquema e o manifesto
- do seu App:
-
-```bash
-deno task start
-```
-
-Após concluir essas etapas, o seu App deco estará instalado e pronto para ser
-usado em qualquer site deco que você desejar. Agora você pode compartilhar e
-aproveitar suas capacidades empresariais de forma prática e eficiente.
-Divirta-se construindo e usando os seus Apps deco! 🚀
diff --git a/docs/developing-capabilities/apps/pt.md b/docs/developing-capabilities/apps/pt.md
deleted file mode 100644
index 3366df2a..00000000
--- a/docs/developing-capabilities/apps/pt.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-description: Apps - Capacidades de Negócios para os seus Sites deco
-since: 1.24.0
----
-
-As Apps são poderosos conjuntos de capacidades de negócios que podem ser
-importados e configurados em sites deco. Uma App na deco é essencialmente uma
-**coleção** de vários **componentes**, como **ações**, **seções**,
-**carregadores**, **fluxos de trabalho**, **manipuladores**, ou quaisquer outros
-elementos deco que podem ser usados para aprimorar a funcionalidade dos seus
-projetos deco.
-
-## Visão Geral
-
-Na deco, os Apps funcionam como blocos de construção modulares que encapsulam
-recursos ou capacidades específicas. Eles permitem que os desenvolvedores
-empacotem e compartilhem funcionalidades específicas do negócio em diferentes
-projetos, tornando mais fácil a manutenção e a expansão dos seus sites deco.
-
-Ao executar o comando `deno run -Ar https://deco.cx/start` no terminal, você
-pode começar a desenvolver um App do zero e colocá-lo em funcionamento
-rapidamente.
-
-## Configuração da App
-
-Cada App pode ser configurado com parâmetros específicos, tornando-o versátil e
-adaptável a diferentes casos de uso. Os desenvolvedores podem importar e
-configurar Apps em seus sites deco, permitindo uma integração perfeita e
-personalização da funcionalidade.
-
-## Suporte a Monorepo
-
-Os deco Apps podem ser gerenciados em um monorepo, proporcionando um local
-centralizado para armazenar e organizar vários Apps. Essa abordagem agiliza o
-processo de desenvolvimento e permite um controle de versão e manutenção
-eficiente dos Apps.
-
-## Primeiros Passos
-
-Para criar seus próprios deco Apps, siga estes passos:
-
-1. Execute o comando `deno run -Ar https://deco.cx/start` para inicializar um
- novo deco App.
-2. Defina as funcionalidades ou componentes que você deseja empacotar na app.
-3. Organize as funções, seções, carregadores ou outros componentes deco dentro
- do diretório do App.
-4. Configure o App para aceitar parâmetros e ser personalizável dentro do deco
- Admin.
-5. Exporte o App para ser usado em outros projetos deco.
-
-## Importando e Desinstalando Apps
-
-Para usar um deco App no seu site deco, você pode executar os seguintes
-comandos:
-
-1. Para instalar o App:
-
- ```sh
- deno task install $APP_URL
- ```
-
- Substitua `$APP_URL` pelo local do diretório ou URL HTTP do App.
-
-2. Para desinstalar o App:
-
- ```sh
- deno task uninstall $APP_URL
- ```
-
- Substitua `$APP_URL` pelo local do diretório ou URL HTTP do App.
-
-## Observação
-
-Os deco Apps fornecem um mecanismo poderoso para criar e compartilhar
-capacidades de negócios reutilizáveis em seus projetos deco. Ao organizar
-componentes em Apps modulares, você pode melhorar significativamente a
-manutenção e a escalabilidade dos seus sites deco. Sinta-se à vontade para
-explorar as Apps existentes e criar os seus próprios para agilizar o processo de
-desenvolvimento e construir projetos deco robustos.
-
-## Leitura Recomendada
-
-- [Conceitos da deco: Entendendo Seções](/docs/pt-br/concepts/section)
-- [Buscando Dados de APIs](/docs/pt-br/developing-guide/fetching-data)
-- [Invocação de Funções no Lado do Cliente](/docs/pt-br/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/blocks/en.md b/docs/developing-capabilities/blocks/en.md
deleted file mode 100644
index 407153e0..00000000
--- a/docs/developing-capabilities/blocks/en.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-description: Block empowers deco's ecosystem
-since: 1.0.0
----
-
-## Overview
-
-Imagine being able to **serialize** a function and save it in a **database**.
-What if this function could be composed together with multiple options? How
-would that change the way you develop web applications?
-
-In deco, the world revolves around **Blocks**. These Blocks are serialized
-functions that can be seamlessly composed together, allowing for limitless
-possibilities and customization.
-
-With deco, you have the flexibility to use an `Inline Block` where you can
-create and use Blocks on the fly, or you can create a Block with a specific name
-and save it for future use, known as a `Saved Block`.
-
-Using _deco_, developers have the ability to define **Blocks**. These **Blocks**
-are built on top of Deno, providing reusable and configurable _"packaged
-capabilities"_ that can be combined to create and deploy robust web applications
-within minutes. They enable developers to create modular and composable units of
-functionality. With Blocks, you can easily combine and integrate different
-capabilities to build complex and customized applications tailored to your
-specific needs.
-
-## Customizing the Admin UI
-
-The deco Admin UI itself is built using **Blocks**, making it highly
-customizable and extensible. Developers have the freedom to compose their own
-bespoke digital experience admin UIs that perfectly align with the requirements
-of their business users. With deco, you have complete control over your admin
-interface, ensuring that it precisely caters to your unique needs.
-
-## Visual Library: Explore and Customize Blocks
-
-In addition to the powerful **Blocks** framework, deco offers a _comprehensive
-visual library_ that allows you to **navigate through your blocks**. This visual
-library empowers you to explore various options and configurations for your
-site's components and features.
-
-With the Visual Library, you have the flexibility to customize and fine-tune
-Blocks according to your specific requirements. You can easily edit and preview
-Blocks with different configurations, ensuring they align perfectly with your
-desired visual and functional elements.
diff --git a/docs/developing-capabilities/blocks/exporting-default-props/en.md b/docs/developing-capabilities/blocks/exporting-default-props/en.md
deleted file mode 100644
index a0d5a31c..00000000
--- a/docs/developing-capabilities/blocks/exporting-default-props/en.md
+++ /dev/null
@@ -1,195 +0,0 @@
----
-description: Exporting Default Props in a Block
----
-
-# Summary
-
-1. Overview
-2. Current Scenario
-3. Exporting Default Props in Function Parameters
-4. Implementation
-5. Conclusion
-
-# Overview
-
-This document details the current behavior of default values in components
-within the Admin and introduces a new feature that allows developers to specify
-default props directly within function parameters. This enhancement improves
-user experience by ensuring that default values are reflected correctly in both
-the Admin interface and the rendered components.
-
-# Current Scenario
-
-In the current setup, default values for props are hardcoded within the
-component's code. This leads to a mismatch between the Admin interface and the
-rendered component:
-
-1. **Admin:** When a component has default values set in its code, the form in
- the Admin interface displays empty fields instead of these default values.
-2. **Rendered Component:** Despite the empty form fields, the component still
- renders with the hardcoded default values.
-3. **JSON:** The JSON file displayed to the developer in the Admin interface
- doesn't include these default values, leading to confusion and a poor user
- experience.
-
-## Example
-
-Consider the following scenario: A footer component has default props defined in
-its code. In the Admin interface, the form fields for these props are empty, but
-the component is rendered with the hardcoded values. This disconnect makes it
-difficult for developers and content managers to map input text to the page data
-accurately.
-
-```tsx
-import { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-interface Props {
- href?: string;
- image?: ImageWidget;
- alt?: string;
- width?: number;
- height?: number;
- text?: string;
- list?: {
- listItem: string;
- listItemArray: string[];
- };
-}
-
-export default function Footer(
- { image, href, text, alt, height, width, list }: Props,
-) {
- const defaultImage =
- "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/4959/d7aa9290-074f-417c-99c3-5b0587c8c2ee";
- const defaultHref = "https://deco.cx/";
- const defaultText = "Made with";
- const defaultAlt = "Made with deco.cx";
- const defaultHeight = 20;
- const defaultWidth = 50;
- const defaultList = {
- listItem: "1",
- listItemArray: ["1", "2"],
- };
-
- return (
-
- );
-}
-```
-
-# Exporting Default Props in Function Parameters
-
-To address this issue, the Admin now supports specifying default props directly
-within the function parameters of any block. This ensures that default values
-are consistently reflected in the interface, the rendered component, and the
-JSON file shown to developers, leading to benefits like:
-
-- **Consistency:** Default values are visible and editable in the admin
- interface, ensuring a consistent user experience.
-- **Clarity:** Developers can see the actual default values in the JSON file,
- reducing confusion.
-- **Simplicity:** Easier to manage and update default values directly within the
- function parameters.
-
-This feature supports simpler scenarios, covering basic data types and nested
-objects.
-
-# Implementation
-
-To specify default props in your component, include them directly within the
-function parameter itself. Below is an example of how to implement this:
-
-```tsx
-import { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-interface Props {
- href?: string;
- image?: ImageWidget;
- alt?: string;
- width?: number;
- height?: number;
- text?: string;
- list?: {
- listItem: string;
- listItemArray: string[];
- };
-}
-
-export default function Footer(
- { image, href, text, alt, height, width, list }: Props = {
- image:
- "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/4959/d7aa9290-074f-417c-99c3-5b0587c8c2ee",
- href: "https://deco.cx/",
- text: "Made with",
- alt: "Made with deco.cx",
- height: 20,
- width: 50,
- list: {
- listItem: "1",
- listItemArray: ["1", "2"],
- },
- },
-) {
- return (
-
- );
-}
-```
-
-## Explanation
-
-1. **Default Prop Values:** The default values for image, href, text, alt,
- height, width, and list are specified directly in the function parameter.
-2. **Props Interface:** The Props interface defines the structure and types of
- the props.
-3. **Component Logic:** The component logic uses these default values, ensuring
- they are applied consistently.
-
-So the Admin props, the preview, the code and the JSON file should look like the
-following image, instead of having empty values defined:
-
-
-
-# Conclusion
-
-By specifying default props directly in the function parameters, this new
-feature improves the integration between the admin interface and the component
-rendering. This change simplifies the workflow for developers and enhances the
-overall user experience by ensuring that default values are visible and
-manageable across all parts of the Admin.
diff --git a/docs/developing-capabilities/blocks/exporting-default-props/pt.md b/docs/developing-capabilities/blocks/exporting-default-props/pt.md
deleted file mode 100644
index f6bae852..00000000
--- a/docs/developing-capabilities/blocks/exporting-default-props/pt.md
+++ /dev/null
@@ -1,203 +0,0 @@
----
-description: Exportando Propriedades Padrão em um Bloco
----
-
-# Resumo
-
-1. Visão Geral
-2. Cenário Atual
-3. Exportando Propriedades Padrão nos Parâmetros da Função
-4. Implementação
-5. Conclusão
-
-# Visão Geral
-
-Este documento detalha o comportamento atual dos valores padrão nos componentes
-dentro do Admin e apresenta um novo recurso que permite aos desenvolvedores
-especificar propriedades padrão diretamente nos parâmetros da função. Esta
-melhoria melhora a experiência do usuário garantindo que os valores padrão sejam
-refletidos corretamente tanto na interface do Admin quanto nos componentes
-renderizados.
-
-# Cenário Atual
-
-Na configuração atual, os valores padrão para props são codificados diretamente
-no código do componente. Isso leva a uma inconsistência entre a interface do
-Admin e o componente renderizado:
-
-1. **Admin:** Quando um componente tem valores padrão definidos em seu código, o
- formulário na interface do Admin exibe campos vazios em vez desses valores
- padrão.
-2. **Componente Renderizado:** Apesar dos campos de formulário vazios, o
- componente ainda é renderizado com os valores padrão codificados.
-3. **JSON:** O arquivo JSON exibido para o desenvolvedor na interface do Admin
- não inclui esses valores padrão, o que leva a confusão e uma experiência de
- usuário ruim.
-
-## Exemplo
-
-Considere o seguinte cenário: Um componente de rodapé tem props padrão definidas
-em seu código. Na interface do Admin, os campos de formulário para essas props
-estão vazios, mas o componente é renderizado com os valores codificados. Essa
-desconexão torna difícil para os desenvolvedores e gerentes de conteúdo mapear o
-texto de entrada para os dados da página com precisão.
-
-```tsx
-import { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-interface Props {
- href?: string;
- image?: ImageWidget;
- alt?: string;
- width?: number;
- height?: number;
- text?: string;
- list?: {
- listItem: string;
- listItemArray: string[];
- };
-}
-
-export default function Footer(
- { image, href, text, alt, height, width, list }: Props,
-) {
- const defaultImage =
- "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/4959/d7aa9290-074f-417c-99c3-5b0587c8c2ee";
- const defaultHref = "https://deco.cx/";
- const defaultText = "Made with";
- const defaultAlt = "Made with deco.cx";
- const defaultHeight = 20;
- const defaultWidth = 50;
- const defaultList = {
- listItem: "1",
- listItemArray: ["1", "2"],
- };
-
- return (
-
-
- {list &&
{list || defaultList}
}
-
- );
-}
-```
-
-# Exportando Propriedades Padrão nos Parâmetros da Função
-
-Para resolver este problema, o Admin agora suporta a especificação de
-propriedades padrão diretamente nos parâmetros da função de qualquer bloco. Isso
-garante que os valores padrão sejam refletidos de forma consistente na
-interface, no componente renderizado e no arquivo JSON mostrado aos
-desenvolvedores, proporcionando benefícios como:
-
-- **Consistência:** Os valores padrão são visíveis e editáveis na interface do
- admin, garantindo uma experiência de usuário consistente.
-- **Clareza:** Os desenvolvedores podem ver os valores padrão reais no arquivo
- JSON, reduzindo a confusão.
-- **Simplicidade:** Mais fácil de gerenciar e atualizar os valores padrão
- diretamente nos parâmetros da função.
-
-Este recurso suporta cenários mais simples, cobrindo tipos de dados básicos e
-objetos aninhados.
-
-# Implementação
-
-Para especificar propriedades padrão em seu componente, inclua-os diretamente no
-parâmetro da função. Abaixo está um exemplo de como fazer isso:
-
-```tsx
-import { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-interface Props {
- href?: string;
- image?: ImageWidget;
- alt?: string;
- width?: number;
- height?: number;
- text?: string;
- list?: {
- listItem: string;
- listItemArray: string[];
- };
-}
-
-export default function Footer(
- { image, href, text, alt, height, width, list }: Props = {
- image:
- "https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/4959/d7aa9290-074f-417c-99c3-5b0587c8c2ee",
- href: "https://deco.cx/",
- text: "Made with",
- alt: "Made with deco.cx",
- height: 20,
- width: 50,
- list: {
- listItem: "1",
- listItemArray: ["1", "2"],
- },
- },
-) {
- return (
-
- );
-}
-```
-
-## Explicação
-
-1. **Valores Padrão de Props:** Os valores padrão para image, href, text, alt,
- height, width e list são especificados diretamente no parâmetro da função.
-2. **Interface de Props:** A interface Props define a estrutura e os tipos das
- props.
-3. **Lógica do Componente:** A lógica do componente usa esses valores padrão,
- garantindo que sejam aplicados de forma consistente.
-
-Então as propriedades definidas no Admin, o preview, o código e o JSON da
-section deverá parecer como a imagem a seguir, em vez de aparecer com valores
-vazios:
-
-
-
-# Conclusão
-
-Ao especificar propriedades padrão diretamente nos parâmetros da função, este
-novo recurso melhora a integração entre a interface do admin e a renderização do
-componente. Essa mudança simplifica o fluxo de trabalho para os desenvolvedores
-e aprimora a experiência do usuário, garantindo que os valores padrão sejam
-visíveis e gerenciáveis em todas as partes do Admin.
diff --git a/docs/developing-capabilities/blocks/pt.md b/docs/developing-capabilities/blocks/pt.md
deleted file mode 100644
index abdff00a..00000000
--- a/docs/developing-capabilities/blocks/pt.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-description: O Block empoderam o ecossistema da deco
-since: 1.0.0
----
-
-## Visão Geral
-
-Imagine poder **serializar** uma função e salvá-la em um **banco de dados**. E
-se essa função pudesse ser combinada com várias opções diferentes? Como isso
-mudaria a forma como você desenvolve aplicações web?
-
-No deco, tudo gira em torno dos **Blocks** (blocos). Esses Blocks são funções
-serializadas que podem ser combinadas perfeitamente, permitindo possibilidades e
-personalizações ilimitadas.
-
-Com o deco, você tem a flexibilidade de usar um `Inline Block` (bloco em linha),
-onde você pode criar e usar Blocks instantaneamente, ou criar um Block com um
-nome específico e salvá-lo para uso futuro, conhecido como `Saved Block` (bloco
-salvo).
-
-Usando o _deco_, os desenvolvedores têm a capacidade de definir **Blocks**
-(blocos). Esses **Blocks** são construídos em cima do Deno, fornecendo
-_"capacidades encapsuladas"_ reutilizáveis e configuráveis que podem ser
-combinadas para criar e implantar aplicações web robustas em questão de minutos.
-Eles permitem que os desenvolvedores criem unidades de funcionalidade modulares
-e combináveis. Com os Blocks, você pode facilmente combinar e integrar
-diferentes capacidades para construir aplicações complexas e personalizadas
-adaptadas às suas necessidades específicas.
-
-## Personalizando a Interface do Admin
-
-O próprio Admin UI do deco é construído usando **Blocks**, tornando-o altamente
-personalizável e expansível. Os desenvolvedores têm a liberdade de compor suas
-próprias interfaces personalizadas de administração de experiência digital que
-se adequam perfeitamente aos requisitos de seus usuários de negócios. Com o
-deco, você tem total controle sobre sua interface de administração, garantindo
-que ela atenda precisamente às suas necessidades exclusivas.
-
-## Biblioteca Visual: Explore e Personalize os Blocks
-
-Além do poderoso framework de **Blocks**, o deco oferece uma _abrangente
-biblioteca visual_ que permite que você **navegue por seus blocos**. Essa
-biblioteca visual capacita você a explorar várias opções e configurações para os
-componentes e recursos do seu site.
-
-Com a Biblioteca Visual, você tem a flexibilidade de personalizar e ajustar os
-Blocks de acordo com seus requisitos específicos. Você pode editar e visualizar
-facilmente os Blocks com diferentes configurações, garantindo que eles se
-alinhem perfeitamente com os elementos visuais e funcionais desejados.
diff --git a/docs/developing-capabilities/interactive-sections/partial/en.md b/docs/developing-capabilities/interactive-sections/partial/en.md
deleted file mode 100644
index d27a7a25..00000000
--- a/docs/developing-capabilities/interactive-sections/partial/en.md
+++ /dev/null
@@ -1,206 +0,0 @@
----
-description: Offload frontend computation to the server
-since: 1.0.0
----
-
-Partials empowers developers to optimize web interactions by offloading certain
-tasks from the user's device to Deco's Edge Servers. This innovative approach
-significantly reduces the amount of JavaScript required to run websites,
-resulting in faster page load times and improved conversion rates.
-
-## Introduction to Partials
-
-Partials, inspired by [htmx](https://htmx.org/docs/), operate by intercepting
-user interactions on button, anchor, and form elements. These interactions are
-automatically offloaded to our server, where they generate a new User Interface
-(UI) state. This fresh UI state is transmitted as pure HTML back to the user's
-browser. Our runtime seamlessly replaces and hydrates the new UI state, creating
-the illusion of client-side interactivity. In reality, the entire computation
-process occurs in mere milliseconds on our Edge Servers. For more detailed
-information on Partials, please consult Fresh's
-[documentation](https://github.com/denoland/fresh/issues/1609).
-
-## Simplifying Development
-
-While Fresh Partials introduce a new realm of performance optimization, they
-also bring added complexity to the development cycle. Developers now need to
-consider multiple rendering modes, their impact on bundle and HTML sizes,
-interaction latencies, and how to properly navigate partially rendered pages. To
-streamline this process, Deco has integrated Partials into a higher abstraction
-layer of our framework, eliminating the need for developers to grapple with
-these complexities.
-
-## Leveraging Partials for Sections
-
-At Deco, all [Sections](/docs/en/concepts/section) are treated as partials. This
-means you can seamlessly incorporate client-side interactivity into any Section
-without compromising bundle sizes or initial page loads. This is particularly
-beneficial for creating common UI components such as SKU selectors, infinite
-scroll features, and tabs. In the following sections, we'll delve into
-harnessing the full potential of Partials by creating a lightning-fast SKU
-selector.
-
-## Example: SKU Selector
-
-SKU selectors enable shoppers to explore different variations of a product, each
-with its unique set of prices, images, and availability. Consider the example
-below:
-
-
-As demonstrated, altering the selected SKU can result in significant changes to
-the page. A straightforward approach is to create a signal to store the
-currently selected SKU and update it on each click:
-
-```tsx
-// sections/ProductDetails.tsx
-export default function ProductDetails ({ skus }) {
- const selectedSku = useSignal(skus[0]);
-
- return (
-
-
-
-
- Color:
-
-
- { selectedSku.value = skus[0] }}>Red
-
-
- { selectedSku.value = skus[1] }}>Blue
-
-
- { selectedSku.value = skus[2] }}>Green
-
-
-
- )
-}
-```
-
-However, this implementation has a downside. To enable interactivity, the entire
-section, including all SKU data and component code, is shipped to the browser,
-resulting in decreased site performance.
-
-> Note: If you only isolate the buttons as islands, selecting an SKU will not
-> update the displayed price or image, leading to an inconsistent UI.
-
-An alternative approach is to transform the buttons into anchor tags, triggering
-a new page load upon each SKU selection:
-
-```tsx
-// sections/ProductDetails.tsx
-export default function ProductDetails ({ skus }) {
- return (
-
- )
-}
-```
-
-While this approach offers optimal performance by eliminating the need for
-islands, it comes at the cost of user experience (UX). With every SKU selection,
-the page reloads, and the user is taken back to the top of the page. To strike a
-balance between UX and performance, let's refactor this component using
-Partials.
-
-### Enhancing UX and Performance with Partials
-
-```tsx
-// sections/ProductDetails.tsx
-import { usePartialSection } from "deco/hooks/usePartialSection.ts";
-
-export default function ProductDetails ({ skus }) {
- return (
-
-
-
-
- Color:
-
-
- Red
-
-
- Blue
-
-
- Green
-
-
-
- )
-}
-```
-
-The magic here lies in the `usePartial` hook combined with the `button` tag.
-This hook accepts an `href` parameter and enhances the button tag. When the user
-clicks the button, it triggers client-side navigation and applies HTML diff
-updates. This approach eliminates the need for islands, boosting performance,
-while maintaining the scroll position for an improved user experience.
-
-## Example: Tabs
-
-While we've explored how to leverage Partials for SKU selectors, tabbed
-navigation presents a unique challenge. Tabs lack canonical URLs, making it
-challenging to manage state transitions. However, the `usePartialSection` hook
-allows us to override the props that a section uses for rendering, simplifying
-the process:
-
-```tsx
-import { usePartialSection } from "deco/hooks/usePartialSection.ts";
-
-interface Props {
- activeIndex: number;
-}
-
-const TabbedSection = ({ activeIndex }) => {
- return (
-
- ({
- props: { activeIndex: 0 },
- })}
- >
- Tab 1
-
- ({
- props: { activeIndex: 1 },
- })}
- >
- Tab 2
-
- ({
- props: { activeIndex: 2 },
- })}
- >
- Tab 3
-
-
- );
-};
-```
-
-In this example, the `activeIndex` prop is overridden with each
-`usePartialSection` call, simplifying the use of Partials and eliminating the
-need to manage URLs and search parameters within our sections.
diff --git a/docs/developing-capabilities/interactive-sections/partial/pt.md b/docs/developing-capabilities/interactive-sections/partial/pt.md
deleted file mode 100644
index 2177d510..00000000
--- a/docs/developing-capabilities/interactive-sections/partial/pt.md
+++ /dev/null
@@ -1,215 +0,0 @@
----
-description: Defira computação do navegador para o servidor
-since: 1.0.0
----
-
-# Fresh Partials: Revolucionando o Desenvolvimento Web com Deno
-
-Partials capacita os desenvolvedores a otimizar as interações na web,
-descarregando determinadas tarefas do dispositivo do usuário para os Servidores
-Edge da Deco. Essa abordagem inovadora reduz significativamente a quantidade de
-JavaScript necessária para executar websites, resultando em tempos de
-carregamento de página mais rápidos e melhores taxas de conversão.
-
-## Introdução aos Partials
-
-Partials, inspirados em [htmx](https://htmx.org/docs/), operam interceptando
-interações do usuário em elementos de botão, âncora e formulário. Essas
-interações são automaticamente transferidas para nosso servidor, onde geram um
-novo estado da Interface do Usuário (UI). Esse novo estado fresco é transmitido
-como HTML puro de volta para o navegador do usuário. Nosso tempo de execução
-substitui e hidrata o novo estado da UI, criando a ilusão de interatividade do
-lado do cliente. Na realidade, todo o processo de computação ocorre em
-milissegundos em nossos Servidores Edge. Para obter informações mais detalhadas
-sobre Partials, consulte a
-[documentação](https://github.com/denoland/fresh/issues/1609) do Fresh.
-
-## Simplificando o Desenvolvimento
-
-Embora os Fresh Partials introduzam um novo domínio de otimização de desempenho,
-também trazem complexidade adicional ao ciclo de desenvolvimento. Agora, os
-desenvolvedores precisam considerar vários modos de renderização, seu impacto
-nos tamanhos de pacote e HTML, latências de interação e como navegar
-corretamente em páginas parcialmente renderizadas. Para simplificar esse
-processo, a Deco integrou os Partials em uma camada de abstração mais alta do
-nosso framework, eliminando a necessidade de os desenvolvedores lidarem com
-essas complexidades.
-
-## Usando Partials nas Section
-
-Na Deco, todas as [Sections](/docs/en/concepts/section) são tratadas como
-parciais. Isso significa que você pode incorporar facilmente interatividade do
-lado do cliente em qualquer Section sem comprometer os tamanhos de pacote ou os
-carregamentos iniciais da página. Isso é especialmente benéfico para a criação
-de componentes de IU comuns, como seletores de SKU, recursos de rolagem infinita
-e abas. Nas Sections a seguir, vamos aprofundar como aproveitar todo o potencial
-dos Partials criando um seletor de SKU super-rápido.
-
-## Exemplo: Seletor de SKU
-
-Os seletores de SKU permitem que os compradores explorem diferentes variações de
-um produto, cada um com seu conjunto único de preços, imagens e disponibilidade.
-Considere o exemplo a seguir:
-
-
-Como demonstrado, a alteração do SKU selecionado pode resultar em alterações
-significativas na página. Uma abordagem direta é criar um sinal para armazenar o
-SKU atualmente selecionado e atualizá-lo a cada clique:
-
-```tsx
-// sections/ProductDetails.tsx
-export default function DetalhesDoProduto ({ skus }) {
- const skuSelecionado = useSignal(skus[0]);
-
- return (
-
-
-
-
- Cor:
-
-
- { skuSelecionado.value = skus[0] }}>Vermelho
-
-
- { skuSelecionado.value = skus[1] }}>Azul
-
-
- { skuSelecionado.value = skus[2] }}>Verde
-
-
-
- )
-}
-```
-
-No entanto, essa implementação tem uma desvantagem. Para habilitar a
-interatividade, toda a Section, incluindo todos os dados de SKU e o código do
-componente, é enviada para o navegador, resultando em um desempenho reduzido do
-site.
-
-> Observação: Se você isolar apenas os botões como ilhas, a seleção de um SKU
-> não atualizará seu preço ou imagem, levando a uma IU inconsistente.
-
-Uma abordagem alternativa é transformar os botões em tags de âncora, acionando
-um novo carregamento de página a cada seleção de SKU:
-
-```tsx
-// sections/ProductDetails.tsx
-export default function DetalhesDoProduto ({ skus }) {
- return (
-
- )
-}
-```
-
-Embora essa abordagem ofereça um desempenho ideal, eliminando a necessidade de
-ilhas, ela tem um custo em termos de experiência do usuário (UX). A cada seleção
-de SKU, a página é recarregada e o usuário é levado de volta ao topo da página.
-Para encontrar um equilíbrio entre UX e desempenho, vamos refatorar esse
-componente usando Partials.
-
-### Aprimorando UX e Desempenho com Partials
-
-```tsx
-// sections/ProductDetails.tsx
-import { usePartialSection } from "deco/hooks/usePartialSection.ts";
-
-export default function DetalhesDoProduto ({ skus }) {
- return (
-
-
-
-
- Cor:
-
-
- Vermelho
-
-
- Azul
-
-
- Verde
-
-
-
-ul>
-
- )
-}
-```
-
-A mágica aqui está no gancho `usePartial` combinado com a tag `button`. Este
-gancho aceita um parâmetro `href` e aprimora a tag do botão. Quando o usuário
-clica no botão, ele desencadeia a navegação do lado do cliente e aplica
-atualizações de diferenças de HTML. Essa abordagem elimina a necessidade de
-ilhas, aumentando o desempenho, ao mesmo tempo em que mantém a posição de
-rolagem para uma experiência do usuário aprimorada.
-
-## Exemplo: Abas
-
-Embora tenhamos explorado como aproveitar os Partials para seletores de SKU, a
-navegação por abas apresenta um desafio único. As abas não possuem URLs
-canônicos, tornando difícil gerenciar transições de estado. No entanto, o gancho
-`usePartial` nos permite substituir as props que uma Section usa para
-renderização, simplificando o processo:
-
-```tsx
-import { usePartialSection } from "deco/hooks/usePartialSection.ts";
-
-interface Props {
- activeIndex: number;
-}
-
-const SectionDeAbas = ({ activeIndex }) => {
- return (
-
- ({
- props: { activeIndex: 0 },
- })}
- >
- Aba 1
-
- ({
- props: { activeIndex: 1 },
- })}
- >
- Aba 2
-
- ({
- props: { activeIndex: 2 },
- })}
- >
- Aba 3
-
-
- );
-};
-```
-
-Neste exemplo, a prop `activeIndex` é substituída a cada chamada de
-`usePartialSection`, simplificando o uso de Partials e eliminando a necessidade
-de gerenciar URLs e parâmetros de pesquisa em nossas Sections.
diff --git a/docs/developing-capabilities/islands/actions/en.md b/docs/developing-capabilities/islands/actions/en.md
deleted file mode 100644
index b918a8ab..00000000
--- a/docs/developing-capabilities/islands/actions/en.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-description: An Action in deco.cx is a function that mutates data.
-since: 1.0.0
----
-
-An **Action** in deco.cx is a typescript function that mutates data within the
-application. Actions are triggered by specific user interactions or events and
-are responsible for updating the application's state accordingly. Unlike
-Loaders, which fetch data from external sources, Actions focus on modifying the
-data already present in the application. They can perform operations such as
-**updating**, **creating**, or **deleting** data based on the specified logic.
-Actions provide precise control and flexibility over data mutation and
-seamlessly integrate with other blocks like Loaders to enable a seamless flow of
-data within the application.
-
-Actions, like **Loaders**, are implemented as typescript functions and reside
-locally in the `/actions/` folder of your project. They can be invoked in
-response to user interactions, form submissions, or any other defined triggers.
-By encapsulating data mutation logic within Actions, developers can manage and
-track changes made to the application's state, providing users with dynamic and
-interactive experiences.
-
-> Note: While Loaders focus on fetching data from external sources, Actions
-> concentrate on mutating data within the application. By leveraging both
-> Loaders and Actions in deco.cx, developers can create powerful applications
-> that fetch and manipulate data seamlessly.
-
-One of the great benefits of **Actions** is their ability to work in conjunction
-with **Loaders** and other blocks. While **Loaders** focus on fetching data,
-**Actions** focus on mutating data. This means that multiple **Actions** can be
-invoked from the same interface, allowing users to modify data from different
-sources or perform a series of related operations. By leveraging both
-**Loaders** and **Actions**, developers can create flexible and powerful
-applications that seamlessly integrate data fetching and mutation.
-
-In addition to mutating data, **Actions** in _deco.cx_ **can also export a
-typescript props type,** which allows them to be configured in the
-[Admin](https://deco.cx/admin) just like [Sections](/docs/en/concepts/section).
-
-## Example Code
-
-This is the implementation of the `newsletter/subscribe.ts` Action:
-
-```tsx
-import { AppContext } from "../../mod.ts";
-
-export interface Props {
- email: string;
- name?: string;
- page?: string;
- part?: string;
- campaign?: string;
-}
-
-const action = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { vcsDeprecated } = ctx;
- const form = new FormData();
- const {
- email,
- name = "",
- part = "newsletter",
- page = "_",
- campaign = "newsletter:opt-in",
- } = props;
-
- form.append("newsletterClientName", name);
- form.append("newsletterClientEmail", email);
- form.append("newsInternalPage", page);
- form.append("newsInternalPart", part);
- form.append("newsInternalCampaign", campaign);
-
- await vcsDeprecated["POST /no-cache/Newsletter.aspx"]({}, {
- body: form,
- });
-};
-
-export default action;
-```
-
-[Source](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/actions/newsletter/subscribe.ts#L1C1-L37C23)
-
-## Recommended Reading
-
-- [Fetching data from APIs](/docs/en/developing-guide/fetching-data)
-- [Client-side function invocation](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/islands/actions/pt.md b/docs/developing-capabilities/islands/actions/pt.md
deleted file mode 100644
index 1c6f5cd6..00000000
--- a/docs/developing-capabilities/islands/actions/pt.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-description: Uma Action na deco.cx é uma função que modifica dados.
-since: 1.0.0
----
-
-Uma **Action** no deco.cx é uma função em typescript que **modifica** dados
-dentro da aplicação. As **Action** são acionadas por _interações_ específicas do
-**usuário** ou **eventos** e são responsáveis por atualizar o estado da
-aplicação de acordo. Ao contrário dos **Loaders**, que buscam dados de fontes
-externas, as **Action** concentram-se em modificar os dados já presentes na
-aplicação. Elas podem realizar operações como **atualização**, **criação** ou
-**exclusão** de dados com base na lógica especificada. As **Action**
-proporcionam _controle_ preciso e flexibilidade sobre a mutação de dados e
-integram-se perfeitamente a outros blocos, como os **Loaders**, para permitir um
-fluxo contínuo de dados na aplicação.
-
-As **Action**, assim como os **Loaders**, são implementadas como funções em
-typescript e estão localizadas na pasta `/actions/` do seu projeto. Elas podem
-ser invocadas em resposta a interações do usuário, envios de formulários ou
-qualquer outro gatilho definido. Ao encapsular a lógica de mutação de dados nas
-**Action**, os desenvolvedores podem gerenciar e rastrear as alterações feitas
-no estado da aplicação, proporcionando aos usuários experiências dinâmicas e
-interativas.
-
-## Código de exemplo
-
-Esta é a implementação da Action `newsletter/subscribe.ts`:
-
-```tsx
-import { AppContext } from "../../mod.ts";
-
-export interface Props {
- email: string;
- name?: string;
- page?: string;
- part?: string;
- campaign?: string;
-}
-
-const action = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { vcsDeprecated } = ctx;
- const form = new FormData();
- const {
- email,
- name = "",
- part = "newsletter",
- page = "_",
- campaign = "newsletter:opt-in",
- } = props;
-
- form.append("newsletterClientName", name);
- form.append("newsletterClientEmail", email);
- form.append("newsInternalPage", page);
- form.append("newsInternalPart", part);
- form.append("newsInternalCampaign", campaign);
-
- await vcsDeprecated["POST /no-cache/Newsletter.aspx"]({}, {
- body: form,
- });
-};
-
-export default action;
-```
-
-[Fonte](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/actions/newsletter/subscribe.ts#L1C1-L37C23)
-
-## Leitura recomendada
-
-- [Buscando dados de API](/docs/pt/developing-guide/fetching-data)
-- [Invocando funções através da API](/docs/pt/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/islands/en.md b/docs/developing-capabilities/islands/en.md
deleted file mode 100644
index 0d49f447..00000000
--- a/docs/developing-capabilities/islands/en.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-description: Client-side Interactivity.
-since: 1.0.0
----
-
-One of the reasons deco is fast is our edge first approach to creating websites.
-This means that all code you write runs on our servers instead of running on
-slow, inconsitent user devices (browser). However, sometimes we need to provide
-extra interactivity to our websites, like adding `onClick`, `useState` or
-`useEffect` event handlers. In this guide you will learn how to create
-components that run on the browser. Make sure to read our performance tips
-before creating any JavaScript on the browser to avoid common pitfails with
-client-side JavaScript
-
-## Summary
-
-1. Making components interactive
-2. Islands usage limitations
-3. Sharing state among islands.
-4. Considerations and tips
-
-## Making components interactive
-
-Suppose you have the following component. A counter that allows the user to
-add/subtract to the displayed value.
-
-
-
-This component can be implemented with the following code:
-
-```tsx
-import { useState } from "preact/hooks";
-
-export default function Counter() {
- const [count, setCount] = useState(0);
-
- return (
-
- setCount(count - 1)}>
- -
-
- {count}
- setCount(count + 1)}>
- +
-
-
- );
-}
-```
-
-Creating a file called `Counter.tsx` and placing it into the `islands` folder
-gives us the following result on the screen:
-
-
-
-This is called an `island`!
-
-Although adding islands to your project seems tempting, keep in mind that
-islands slow down websites and harm [TBT metric](https://web.dev/tbt/), so
-before moving any component to the `island` folder, make sure that your final
-interactivity:
-
-- Isn't achieved through page navigation with links or form submissions...
-- Isn't an interaction built purely with CSS...
-- Requires manipulation of elements or the current page's state (e.g., using
- onClick, onChange, useEffect, another hook, or an event listener)
-
-## Islands usage limitations
-
-Islands are Preact components. This means they accept `props`. However, these
-values must be one of:
-
-- Primitive types `string`, `boolean`, `bigint`, and `null`
-- Simple objects with `string` keys and serializable values
-- Arrays of serializable values
-- `Uint8Array`
-- JSX Elements (ONLY as props.children)
-- Preact Signals (if the signal value is serializable)
-- Most numbers (`Infinity`, `-Infinity`, and `NaN` are converted to `null`)
-
-Complex objects such as Date, functions, and custom classes are not accepted as
-islands props.
-
-## Using Signals Instead of State
-
-`useState` requires working with a separate function for value updates. Preact
-also uses [`Signals`](https://preactjs.com/guide/v10/signals/) for handling
-state. A `signal` has a reference that holds a value, but it also has a `.value`
-attribute that allows updating this value.
-
-Within a component, if the state is only used locally, you can use the
-`useSignal` hook to create these elements that can be used in the function body
-or in the JSX returned, as in the example below.
-
-```tsx
-import { useSignal } from "@preact/signals";
-
-export default function Counter() {
- const count = useSignal(0);
-
- return (
-
- count.value--}>
- -
-
- {count}
- count.value++}>
- +
-
-
- );
-}
-```
-
-## Sharing state among islands.
-
-In normal Preact development, sharing state between components is usually done
-via the [Context](https://preactjs.com/guide/v10/context/) API. This works fine
-for a full client-side application. However, since we are using islands
-architecture, sharing state among islands require a new approach.
-
-Signals are also a great way of sharing state between islands, since one can
-publish and subscribe for change events in a concise API.
-
-To use signals,
-
-```tsx
-import { signal } from "@preact/signals";
-```
-
-Now, use the global scope to create, mutate and subscribe to a signal:
-
-```tsx
-import { signal } from "@preact/signals";
-
-const count = signal(0);
-
-// Read a signal’s value by accessing .value:
-console.log(count.value); // 0
-
-// Update a signal’s value:
-count.value += 1;
-
-// The signal's value has changed:
-console.log(count.value); // 1
-```
-
-To define side-effects over signal changes, use the `effect`, `batch`,
-`computed`, or `useComputed` operations. Refer to the
-[signals documentation](https://preactjs.com/guide/v10/signals/) for more
-details. Also, take a look at
-[sharing state between islands](https://fresh.deno.dev/docs/examples/sharing-state-between-islands).
-
-> Note that sharing state via the `Context` API will NOT work, since the context
-> will be outside the islands, and thus, only available on the server.
-
-## Considerations and tips
-
-Making a component an island will at least double its size in bytes. The server
-renders the HTML for this element and sends it to the browser, but it also sends
-essentially the same HTML plus the JS to be injected on the client side.
-Therefore, try to create only the necessary islands, as they make the rendering
-process more resource-intensive.
-
-Futher read:
-
-- [Introduction to the Islands architecture - EN](https://deno.com/blog/intro-to-islands)
diff --git a/docs/developing-capabilities/islands/fetching-data-client/en.md b/docs/developing-capabilities/islands/fetching-data-client/en.md
deleted file mode 100644
index 063471d0..00000000
--- a/docs/developing-capabilities/islands/fetching-data-client/en.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-description: Learn how to invoke a function through API.
-since: 1.0.0
----
-
-## Suggested reading
-
-- [Core Concepts: Loaders](/docs/en/concepts/loader)
-- [Core Concepts: Actions](/docs/en/concepts/action)
-
-Client-side function invocation is a powerful feature of live.ts that allows you
-to fetch data or mutate directly from your functions without sending JavaScript
-to the browser. This feature ensures that your data fetching or mutation is
-unique across your repository and helps reduce latency on the client-side.
-
-To get started with client-side function invocation, follow these steps:
-
-1. Import `invoke` from `runtime.ts`
-
-2. Now you can issue invocations using the `invoke` function. For example, to
- fetch data from a function, you would use the following code:
-
-> Can't find this file?
-> [Try this one](https://github.com/deco-sites/storefront/blob/main/runtime.ts)
-
-```ts
-import { invoke } from "../runtime.ts";
-import { useCallback } from "preact/hooks";
-
-export default function MyIsland() {
-
- const fetchData = useCallback(() => {
- const data = await invoke["deco-sites/my-store"].loaders.myLoader({/* your function input props */});
- }, [])
-
- return
- {...}
- Load
-
-}
-```
-
-Here, the `invoke` function takes an object with a `key` property that specifies
-the path to your function and a props property that contains your function input
-props. When you call `invoke`, live.ts will invoke your function as it does for
-rendering sections and return it to you as a JavaScript object. It is also
-possible to call functions defined in an App installed in the project. For
-example,
-
-```ts
-const dataAppVtex = await invoke.vtex.loaders.vtexLoader({
- /* your function input props */
-});
-```
-
-You can also batch requests by passing an object with multiple keys, each
-representing a desired invocation. For example:
-
-```ts
-const { data1, data2 } = await invoke({
- data1: invoke.path1({/* your function input props */}),
- data2: invoke.path2({/* your function input props */}),
-});
-```
-
-With these steps, you can now start using client-side functions invocation in
-your Live.ts application, happy coding!
diff --git a/docs/developing-capabilities/islands/fetching-data-client/pt.md b/docs/developing-capabilities/islands/fetching-data-client/pt.md
deleted file mode 100644
index 90bfa947..00000000
--- a/docs/developing-capabilities/islands/fetching-data-client/pt.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-description: Aprenda a invocar funções através da API.
-since: 1.0.0
----
-
-## Leitura sugerida
-
-- [Conceitos básicos: Loader](/docs/pt/concepts/loader)
-- [Conceitos básicos: Action](/docs/pt/concepts/action)
-
-A Invocação de funções client-side é um recurso poderoso do live.ts que permite
-que você obtenha dados diretamente dos seus funções sem enviar JavaScript para o
-navegador. Esse recurso garante que sua obtenção de dados seja única em todo o
-seu repositório e ajuda a reduzir a latência do lado do cliente.
-
-Para começar a usar a Invocação de funções client-side, siga estes passos:
-
-1. Importe o objeto `invoke` do arquivo `runtime.ts`
-
-2. Agora você pode emitir invocações usando a função `invoke`. Por exemplo, para
- buscar dados de uma função, você usaria o seguinte código:
-
-> Não conseguiu achar esse arquivo?
-> [Tente este](https://github.com/deco-sites/fashion/blob/main/runtime.ts)
-
-```ts
-import { invoke } from "../runtime.ts";
-import { useCallback } from "preact/hooks";
-
-export default function MyIsland() {
-
- const fetchData = useCallback(() => {
- const data = await invoke["deco-sites/minha-loja"].loaders.myLoader({/* your function input props */});
- }, [])
-
- return
- {...}
- Load
-
-}
-```
-
-Aqui, a função `invoke` recebe um objeto com uma propriedade `key` que
-especifica o caminho para sua função e uma propriedade `props` que contém suas
-props de entrada da função. Quando você chama `invoke`, o live.ts irá invocar
-sua função como faz para renderizar seções e retorná-lo para você como um objeto
-JavaScript. É possível também chamar funções definidas em um App instalado no
-projeto. Por exemplo,
-
-```ts
-const dataAppVtex = await invoke.vtex.loaders.vtexLoader({
- /* your function input props */
-});
-```
-
-Você também pode agrupar solicitações passando um objeto com várias chaves, cada
-uma representando uma invocação desejada. Por exemplo:
-
-```ts
-const { data1, data2 } = await invoke({
- data1: invoke.path1({/* your function input props */}),
- data2: invoke.path2({/* your function input props */}),
-});
-```
-
-Com esses passos, agora você pode começar a usar a Invocação de funções
-client-side em sua aplicação Live.ts, happy coding!
diff --git a/docs/developing-capabilities/islands/pt.md b/docs/developing-capabilities/islands/pt.md
deleted file mode 100644
index f3dcf303..00000000
--- a/docs/developing-capabilities/islands/pt.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-description: Adicionando interatividade à página.
-since: 1.0.0
----
-
-Uma das razões pelas quais o Deco é rápido é a nossa abordagem centrada no
-servidor para criar sites. Isso significa que todo o código que você escreve é
-executado em nossos servidores, em vez de ser executado em dispositivos de
-usuário lentos e inconsistentes (navegador). No entanto, às vezes precisamos
-fornecer interatividade extra aos nossos sites, como adicionar manipuladores de
-eventos `onClick`, `useState` ou `useEffect`. Neste guia, você aprenderá como
-criar componentes que são executados no navegador. Certifique-se de ler nossas
-dicas de desempenho antes de criar qualquer JavaScript no navegador, para evitar
-problemas comuns com o JavaScript do lado do cliente.
-
-## Sumário
-
-1. Tornando os componentes interativos
-2. Limitações de uso das islands
-3. Compartilhando estado entre as islands
-4. Considerações e dicas
-
-## Tornando os componentes interativos
-
-Suponha que você tenha o seguinte componente. Um contador que permite ao usuário
-adicionar/subtrair o valor exibido.
-
-
-
-Este componente pode ser implementado com o seguinte código:
-
-```tsx
-import { useState } from "preact/hooks";
-
-export default function Counter() {
- const [count, setCount] = useState(0);
-
- return (
-
- setCount(count - 1)}>
- -
-
- {count}
- setCount(count + 1)}>
- +
-
-
- );
-}
-```
-
-Ao criar um arquivo chamado `Counter.tsx` e colocá-lo na pasta `islands`,
-obtemos o seguinte resultado na tela:
-
-
-
-Agora isso é chamado de `island`!
-
-Embora adicionar islands ao seu projeto pareça tentador, tenha em mente que as
-islands tornam os sites mais lentos e prejudicam a métrica TBT
-([Total Blocking Time](https://web.dev/tbt/)). Portanto, antes de mover qualquer
-componente para a pasta `island`, verifique se sua interatividade final:
-
-- Não é alcançada por meio de navegação de página com links ou envio de
- formulários...
-- Não é uma interação construída puramente com CSS...
-- Requer manipulação de elementos ou estado da página atual (por exemplo, usando
- onClick, onChange, useEffect, outro hook ou um ouvinte de eventos)
-
-## Limitações de uso das islands
-
-As islands são componentes do Preact. Isso significa que elas aceitam `props`.
-No entanto, esses valores devem ser um dos seguintes:
-
-- Tipos primitivos `string`, `boolean`, `bigint` e `null`
-- Objetos simples com chaves `string` e valores serializáveis
-- Arrays de valores serializáveis
-- `Uint8Array`
-- Elementos JSX (SOMENTE como props.children)
-- Sinais do Preact (se o valor do sinal for serializável)
-- A maioria dos números (`Infinity`, `-Infinity` e `NaN` são convertidos para
- `null`)
-
-Objetos complexos como `Date`, funções e classes personalizadas não são aceitos
-como props de islands.
-
-## Utilizando signals no lugar de state
-
-O `useState` exige que se trabalhe com uma função a parte para a atualização de
-valor. Preact, e outros sistemas, oferecem
-[`Signals`](https://preactjs.com/guide/v10/signals/) para tratamento de estado
-até do `useState`. Um `signal` tem uma referência que tem valor mas que também
-tem um atributo `.value` que permite atualizar esse valor.
-
-Dentro de um componente, caso o estado seja só usado localmente, é possível
-fazer uso do hook `useSignal` para criar esses elementos que podem ser utilizado
-no corpo da função ou no próprio JSX retornado, como no exemplo abaixo.
-
-```tsx
-import { useSignal } from "@preact/signals";
-
-export default function Counter() {
- const count = useSignal(0);
-
- return (
-
- count.value--}>
- -
-
- {count}
- count.value++}>
- +
-
-
- );
-}
-```
-
-## Compartilhando estado entre as islands
-
-No desenvolvimento normal do Preact, o compartilhamento de estado entre
-componentes geralmente é feito por meio da API
-[Context](https://preactjs.com/guide/v10/context/). Isso funciona bem para um
-aplicativo de lado do cliente completo. No entanto, como estamos usando a
-arquitetura de islands, compartilhar estado entre as islands requer uma nova
-abordagem.
-
-Os signals são uma ótima maneira de compartilhar estado entre as islands, pois é
-possível publicar e se inscrever em eventos de alteração em uma API concisa.
-
-Para usar signals, importe:
-
-```tsx
-import { signal } from "@preact/signals";
-```
-
-Agora, use o escopo global para criar, modificar e se inscrever em um signal:
-
-```tsx
-import { signal } from "@preact/signals";
-
-const count = signal(0);
-
-// Leia o valor de um signal acessando .value:
-console.log(count.value); // 0
-
-// Atualize o valor de um signal:
-count.value += 1;
-
-// O valor do signal foi alterado:
-console.log(count.value); // 1
-```
-
-Para definir efeitos colaterais em mudanças de signal, use as operações
-`effect`, `batch`, `computed` ou `useComputed`. Consulte a
-[documentação dos signals](https://preactjs.com/guide/v10/signals/) para obter
-mais detalhes. Além disso, dê uma olhada em
-[compartilhando estado entre islands](https://fresh.deno.dev/docs/examples/sharing-state-between-islands).
-
-> Observe que o compartilhamento de estado por meio da API `Context` NÃO
-> funcionará, pois o contexto estará fora das islands e, portanto, só estará
-> disponível no servidor.
-
-## Considerações e dicas
-
-Ao transformar um componente em uma island, pelo menos o tamanho dele em bytes
-será duplicado. O servidor renderiza o HTML para esse elemento e o envia para o
-navegador, mas também envia basicamente o mesmo HTML mais o JS a ser injetado no
-lado do cliente. Portanto, tente criar apenas as islands necessárias, pois elas
-tornam o processo de renderização mais intensivo em
-
-Leitura complementar:
-
-- [Introduction to the Islands architecture - EN](https://deno.com/blog/intro-to-islands)
diff --git a/docs/developing-capabilities/loaders/en.md b/docs/developing-capabilities/loaders/en.md
deleted file mode 100644
index adcbdc30..00000000
--- a/docs/developing-capabilities/loaders/en.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-description: A Loader in deco.cx is a function that returns data needed for a Site.
-since: 1.0.0
----
-
-A **Loader** in _deco.cx_ is a Typescript function that returns data typically
-needed in a [Section](/docs/en/concepts/section). These functions are executed
-before page renders, and their main purpose is to **fetch data from external
-sources**, transform it if necessary, and **provide it to the site Sections that
-need it.** Loaders can be used to fetch data from APIs, databases, or any other
-external source. They live locally on the `/loaders/` folder of your project,
-but it's also possible to
-[Installing apps](/docs/en/getting-started/installing-an-app) that contain
-loaders.
-
-
-
-In addition to fetching data, Loaders in _deco.cx_ **can also export a
-Typescript Props type,** which allows them to be configured in the
-[Admin](https://deco.cx/admin) just like [Sections](/docs/en/concepts/section).
-This means that business users can configure details about how the Loader will
-operate, such as **setting up filters or passing parameters to APIs.** By making
-Loaders configurable in this way, it becomes easier to manage the data flowing
-into Sections and ensure that the Site is displaying the right information to
-visitors.
-
-One other great benefit of Loaders in _deco.cx_ is that **multiple loaders can
-return the same data type**. This allows [Sections](/docs/en/concepts/section)
-that receive, for example, an array of canonical Product to get data from
-different Loaders, depending on the user's configuration. This means that UIs
-can be reused across [Sites](/docs/en/concepts/site) or across teams, making it
-easier to manage and scale your project.
-
-> All Sections for ecommerce stores created by _deco.cx_ in the
-> [Storefront](https://github.com/deco-sites/storefront) start use a canonical
-> Product type, and also every Loader that connects to ecommerce providers's
-> APIs. This means that you can reuse the same UI to show data from different
-> places, depending on the configuration.
-
-
-
-## Example Code
-
-This is the implementation of the `shopify/loaders/ProductList.ts` Loader:
-
-```tsx
-import type { Product } from "../../commerce/types.ts";
-import { AppContext } from "../../shopify/mod.ts";
-import { ListProducts } from "../utils/storefront/queries.ts";
-import {
- ListProductsQuery,
- ListProductsQueryVariables,
-} from "../utils/storefront/storefront.graphql.gen.ts";
-import { toProduct } from "../utils/transform.ts";
-
-export interface Props {
- /** @description search term to use on search */
- query: string;
- /** @description total number of items to display */
- count: number;
-}
-
-/**
- * @title Shopify Integration
- * @description Product List loader
- */
-const loader = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { storefront } = ctx;
-
- const count = props.count ?? 12;
- const query = props.query || "";
-
- const data = await storefront.query<
- ListProductsQuery,
- ListProductsQueryVariables
- >({
- variables: { first: count, query },
- ...ListProducts,
- });
-
- // Transform Shopify product format into schema.org's compatible format
- // If a property is missing from the final `products` array you can add
- // it in here
- const products = data?.products.nodes.map((p) =>
- toProduct(p, p.variants.nodes[0], new URL(_req.url))
- );
-
- return products ?? [];
-};
-
-export default loader;
-```
-
-[Source](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-## Recommended Reading
-
-- [Fetching data from APIs](/docs/en/developing-guide/fetching-data)
-- [Client-side function invocation](/docs/en/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/loaders/pt.md b/docs/developing-capabilities/loaders/pt.md
deleted file mode 100644
index 2a795f27..00000000
--- a/docs/developing-capabilities/loaders/pt.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-description: Um Loader na deco.cx é uma função que retorna os dados necessários para um Site.
-since: 1.0.0
----
-
-Um **Loader** em _deco.cx_ é uma função Typescript que retorna tipicamente os
-dados necessários em uma [Section](/docs/pt/concepts/section). Essas funções são
-executadas antes da renderização de cada página e seu principal objetivo é
-**buscar dados de fontes externas**, transformá-los se necessário e
-**fornecê-los às Seções do site que precisam.** Os Loaders podem ser usados para
-buscar dados de APIs, bancos de dados ou qualquer outra fonte externa. As
-implementações locais de Loaders vivem na pasta `/loaders` do seu projeto, porém
-é possível [Instalar novas apps](/docs/pt/getting-started/installing-an-app) que
-contém outros loaders.
-
-Além de buscar dados, os Loaders na _deco.cx_ **também podem exportar um tipo de
-Props Typescript**, o que permite que sejam configurados no
-[Admin](https://deco.cx/admin) assim como as
-[Sections](/docs/pt/concepts/section). Isso significa que os usuários de negócio
-podem configurar detalhes sobre como o Loader irá operar, como **configurar
-filtros** ou **passar parâmetros para APIs.** Ao tornar os Loaders configuráveis
-dessa maneira, fica mais fácil gerenciar os dados que fluem para as Sections e
-garantir que o Site esteja exibindo as informações corretas para os visitantes.
-
-Outro benefício dos Loaders na _deco.cx_ é que **vários loaders podem retornar o
-mesmo tipo de dados**. Isso permite que as [Sections](/docs/pt/concepts/section)
-que recebem, por exemplo, um _array_ de Produtos canônico obtenham dados de
-diferentes Loaders, dependendo da configuração do usuário. Isso significa que as
-UIs podem ser reutilizadas em [Sites](/docs/pt/concepts/site) ou entre times,
-facilitando o gerenciamento e a escala do seu projeto.
-
-> Todas as Sections para lojas de _ecommerce_ criadas por _deco.cx_ na
-> [Fashion](https://github.com/deco-sites/fashion) usam um tipo de Produt
-> canônico e também cada Loader que se conecta às APIs dos _ecommerce
-> providers_. Isso significa que você pode reutilizar a mesma UI para mostrar
-> dados de diferentes locais, dependendo da configuração.
-
-
-
-## Código de exemplo
-
-Esta é a implementação do Loader `shopify/loaders/ProductList.ts`:
-
-```tsx
-import type { Product } from "../../commerce/types.ts";
-import { AppContext } from "../../shopify/mod.ts";
-import { ListProducts } from "../utils/storefront/queries.ts";
-import {
- ListProductsQuery,
- ListProductsQueryVariables,
-} from "../utils/storefront/storefront.graphql.gen.ts";
-import { toProduct } from "../utils/transform.ts";
-
-export interface Props {
- /** @description search term to use on search */
- query: string;
- /** @description total number of items to display */
- count: number;
-}
-
-/**
- * @title Shopify Integration
- * @description Product List loader
- */
-const loader = async (
- props: Props,
- _req: Request,
- ctx: AppContext,
-): Promise => {
- const { storefront } = ctx;
-
- const count = props.count ?? 12;
- const query = props.query || "";
-
- const data = await storefront.query<
- ListProductsQuery,
- ListProductsQueryVariables
- >({
- variables: { first: count, query },
- ...ListProducts,
- });
-
- // Transform Shopify product format into schema.org's compatible format
- // If a property is missing from the final `products` array you can add
- // it in here
- const products = data?.products.nodes.map((p) =>
- toProduct(p, p.variants.nodes[0], new URL(_req.url))
- );
-
- return products ?? [];
-};
-
-export default loader;
-```
-
-[Fonte](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-## Leitura recomendada
-
-- [Buscando dados de API](/docs/pt/develping/fetching-data)
-- [Invocando um loader através da API](/docs/pt/developing-capabilities/islands/fetching-data-client)
diff --git a/docs/developing-capabilities/manage-block-access/en.md b/docs/developing-capabilities/manage-block-access/en.md
deleted file mode 100644
index b44b1ccc..00000000
--- a/docs/developing-capabilities/manage-block-access/en.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-since: 1.109.0
----
-
-# Managing Loader/Action Access
-
-By default, all loaders and actions in deco.cx are publicly accessible. However, you may need to restrict access to certain loaders/actions that handle sensitive operations or private APIs. This guide explains how to control loader/action visibility.
-
-## Visibility Options
-
-There are two visibility levels available:
-
-- `private`: Can only be invoked server-side through `ctx.invoke`
-- `public`: Can be called from both server and client through:
- - Runtime `invoke` calls
- - Direct path access via `/live/invoke/{path/to/block.ts}`
-
-## Setting Default Visibility
-
-To set the visibility level for a loader/action, export a `defaultVisibility` variable:
-
-```typescript
-// Make the loader publicly accessible
-export const defaultVisibility = 'public'
-
-// Make the loader private (server-side only)
-export const defaultVisibility = 'private'
-```
-
-## Overriding Visibility
-
-You can override the default visibility settings in your `fresh.config.ts` file using the `visibilityOverrides` option:
-
-```typescript
-import { defineConfig } from "$fresh/server.ts";
-import { plugins } from "deco/plugins/deco.ts";
-import manifest from "./manifest.gen.ts";
-
-export default defineConfig({
- plugins: plugins({
- manifest,
- htmx: true,
- visibilityOverrides: {
- "site/loaders/minicart.ts": "public",
- "vtex/loaders/cart.ts": "private"
- },
- }),
-});
-```
-
-## Security Best Practices
-
-When deciding visibility levels:
-
-### Use `private` for
-
-- Accessing private/internal APIs
-- Operations involving credentials or secrets
-- Processing sensitive user/business data
-- Backend integrations requiring authentication
-
-### Use `public` for
-
-- Reading public product data
-- Fetching public content
-- Client-side data loading
-- User-facing operations that don't expose sensitive data
-
-## Related Documentation
-
-- [Fetching Data](/docs/en/developing-guide/fetching-data)
-- [Client-side Data Loading](/docs/en/developing-capabilities/islands/fetching-data-client)
-- [Core Concepts: Loaders](/docs/en/concepts/loader)
diff --git a/docs/developing-capabilities/manage-block-access/pt.md b/docs/developing-capabilities/manage-block-access/pt.md
deleted file mode 100644
index 62b108ef..00000000
--- a/docs/developing-capabilities/manage-block-access/pt.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-since: 1.109.0
----
-
-# Gerenciando Acesso de Loaders/Actions
-
-Por padrão, todos os loaders e actions no deco.cx são publicamente acessíveis. No entanto, você pode precisar restringir o acesso a certos loaders/actions que lidam com operações sensíveis ou APIs privadas. Este guia explica como controlar a visibilidade de loaders/actions.
-
-## Opções de Visibilidade
-
-Existem dois níveis de visibilidade disponíveis:
-
-- `private`: Pode ser invocado apenas no lado do servidor através do `ctx.invoke`
-- `public`: Pode ser chamado tanto do servidor quanto do cliente através de:
- - Chamadas `invoke` em tempo de execução
- - Acesso direto via path `/live/invoke/{path/to/block.ts}`
-
-## Definindo Visibilidade Padrão
-
-Para definir o nível de visibilidade de um loader/action, exporte uma variável `defaultVisibility`:
-
-```typescript
-// Torna o loader publicamente acessível
-export const defaultVisibility = 'public'
-
-// Torna o loader privado (apenas lado do servidor)
-export const defaultVisibility = 'private'
-```
-
-## Sobrescrevendo Visibilidade
-
-Você pode sobrescrever as configurações de visibilidade padrão no seu arquivo `fresh.config.ts` usando a opção `visibilityOverrides`:
-
-```typescript
-import { defineConfig } from "$fresh/server.ts";
-import { plugins } from "deco/plugins/deco.ts";
-import manifest from "./manifest.gen.ts";
-
-export default defineConfig({
- plugins: plugins({
- manifest,
- htmx: true,
- visibilityOverrides: {
- "site/loaders/minicart.ts": "public",
- "vtex/loaders/cart.ts": "private"
- },
- }),
-});
-```
-
-## Boas Práticas de Segurança
-
-Ao decidir os níveis de visibilidade:
-
-### Use `private` para
-
-- Acessar APIs privadas/internas
-- Operações envolvendo credenciais ou segredos
-- Processamento de dados sensíveis de usuários/negócios
-- Integrações backend que requerem autenticação
-
-### Use `public` para
-
-- Leitura de dados públicos de produtos
-- Busca de conteúdo público
-- Carregamento de dados no lado do cliente
-- Operações voltadas ao usuário que não expõem dados sensíveis
-
-## Documentação Relacionada
-
-- [Buscando Dados](/docs/pt/developing-guide/fetching-data)
-- [Carregamento de Dados no Cliente](/docs/pt/developing-capabilities/islands/fetching-data-client)
-- [Conceitos Principais: Loaders](/docs/pt/concepts/loader)
diff --git a/docs/developing-capabilities/modifying-status/en.md b/docs/developing-capabilities/modifying-status/en.md
deleted file mode 100644
index bb9338d7..00000000
--- a/docs/developing-capabilities/modifying-status/en.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-description: Modifying the return status of a page
-since: 1.0.0
----
-
-## Overview
-
-Modifying the return status allows you to correctly inform the browser of the
-return being sent on the page based on any desired criteria. This ensures better
-indexing by search engines since, for example, a page not found with the correct
-status will not be indexed by them.
-
-## Implementation
-
-To modify the return status of a page from a section, follow these simple steps:
-
-1. Create an inline loader within your section component.
-
-```tsx
-export default function MyComponent(props: Props) {
- // Your component logic goes here
- // ...
-}
-
-export const loader = (props: Props, req: Request, ctx: AppContext) => {
- // Your condition for status modification here
- if (YOUR_CONDITION_TO_MODIFY_STATUS) {
- ctx.response.status = DESIRED_STATUS;
- }
-
- // Return the component props
- return props;
-};
-```
-
-2. Within the `loader` function, define the condition that determines whether
- the status should be modified. If the condition is met, assign the desired
- status to the response contained in the context.
-
-## Example
-
-Let’s say you want your page to return `404 (Not Found)` if your search returns
-no elements:
-
-```tsx
-export default function MyComponent(props: Props) {
- // Your component logic goes here
- // ...
-}
-
-export const loader = (props: Props, req: Request, ctx: AppContext) => {
- // Check if there are no elements
- if (!props.items || !props.items.length) {
- ctx.response.status = 404;
- }
-
- // Return the component props
- return props;
-};
-```
-
-In this example, if the `items` property does not exist or does not contain any
-elements, the section will modify the return status of the entire page to `404`.
-
-## Remember
-
-- The section will modify the status of every page it is on if its condition is
- satisfied.
-- Use correct status codes for each situation so that your SEO is not negatively
- affected.
diff --git a/docs/developing-capabilities/modifying-status/pt.md b/docs/developing-capabilities/modifying-status/pt.md
deleted file mode 100644
index 7e6daefd..00000000
--- a/docs/developing-capabilities/modifying-status/pt.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-description: Modificando o status de retorno de uma pagina
-since: 1.0.0
----
-
-## Visão Geral
-
-A modificação do status de retorno permite que você informe ao navegador de
-forma correta qual o retorno que esta sendo enviado na pagina com base em
-qualquer criterio desejado. Isso garante uma melhor indexação por mecanismos de
-pesquisa uma vez que, por exemplo, uma pagina não encontrada com status correto
-não será indexada por eles.
-
-## Implementação
-
-Para modificar o status de retorno de uma pagina a partir de uma seção, siga
-estes passos simples:
-
-1. Crie um carregador inline dentro do componente da sua seção.
-
-```tsx
-export default function MyComponent(props: Props) {
- // Sua lógica de componente vai aqui
- // ...
-}
-
-export const loader = (props: Props, req: Request, ctx: AppContext) => {
- // Sua condição para a modificação de status
- if (SUA_CONDICAO_PARA_MODIFICAR_O_STATUS) {
- ctx.response.status = STATUS_DESEJADO;
- }
-
- // Retorne as props do componente
- return props;
-};
-```
-
-2. Dentro da função `loader`, defina a condição que determina se o status deve
- ser modificado. Se a condição for atendida, atribua o status desejado a
- resposta contida no contexto.
-
-## Exemplo
-
-Digamos que você deseje que se sua busca não retornou nenhum elemento o retorno
-da pagina seja `404 (Not Found)`:
-
-```tsx
-export default function MyComponent(props: Props) {
- // Sua lógica de componente vai aqui
- // ...
-}
-
-export const loader = (props: Props, req: Request, ctx: AppContext) => {
- // Verifique se não há nenhum elemento
- if (!props.items || !props.items.length) {
- ctx.response.status = 404;
- }
-
- // Retorne as props do componente
- return props;
-};
-```
-
-Neste exemplo, se a propriedade `items` não existir ou não conter nenhum
-elemento a seção modificará o status de retorno de toda a pagina para `404`
-
-## Lembre-se
-
-- A seção modificará o status de toda pagina em que estiver sendo chamada e que
- a condição for satisfeita.
-- Use os codigos de status correto para cada situação para seu SEO não ser
- afetado negativamente.
diff --git a/docs/developing-capabilities/section-properties/annotations/en.md b/docs/developing-capabilities/section-properties/annotations/en.md
deleted file mode 100644
index 26c68a99..00000000
--- a/docs/developing-capabilities/section-properties/annotations/en.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-description: Customize the behavior of the Deco Admin form with annotations on its properties.
----
-
-Customize the behavior of the [Deco Admin](https://admin.deco.cx) form with
-annotations on its properties.
-
-When using native types (number, string, etc.), the editor will use the property
-name as the default form label. However, it's possible to customize this by
-using [JSDoc](https://jsdoc.app/) tags.
-
-- Example:
-
-```ts
-export interface Props {
- /** @title Number of products */
- /** @description Total number of products to display in the storefront */
- count: number;
-}
-```
-
-- Editor:
-
-
-
-List with all supported annotations:
-
-| Annotation | Description | Usage |
-| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
-| `@title` | Receives text that will be used as the title of the label for that input in the form. | `@title Number of products` |
-| `@description` | Receives text that will be used as the description in the label for that input in the form. | `@description Total number of products to display in the storefront` |
-| `@format` | Configures a field to be formatted differently. This can cause its [Widget](/docs/en/developing-capabilities/section-properties/widgets) to change. | `@format [Format value](#possible-values-for-format)` |
-| `@hide` | Hides this property in the Admin form. The value still remains in the JSON of the Section. | `@hide` |
-| `@ignore` | The value and the property are completely ignored. | `@ignore` |
-| `@maximum` | Configures a maximum value for that field. Works on properties of type `number`. (value <= X) | `@maximum 10` |
-| `@minimum` | Configures a minimum value for that field. Works on properties of type `number`. (value >= X) | `@minimum 15` |
-| `@exclusiveMaximum` | Configures a maximum value for that field. Works on properties of type `number`. It is the exclusive counterpart of `@maximum`. (value < X) | `@exclusiveMaximum 10` |
-| `@exclusiveMinimum` | Configures a minimum value for that field. Works on properties of type `number`. It is the exclusive counterpart of `@minimum`. (value > X) | `@exclusiveMinimum 15` |
-| `@maxLength` | Configures a maximum length for the text of a field. Works on properties of type `string`. | `@maxLength 30` |
-| `@minLength` | Configures a minimum length for the text of a field. Works on properties of type `string`. | `@minLength 8` |
-| `@readOnly` | Makes a field uneditable in the admin form but still readable. | `@readOnly` |
-| `@uniqueItems` | Ensures that fields of type `array` cannot have duplicate values. | `@uniqueItems true` |
-| `@maxItems` | Ensures that fields of type `array` cannot have more than X values. | `@maxItems 3` |
-| `@minItems` | Ensures that fields of type `array` cannot have fewer than X values. | `@minItems 2` |
-| `@default` | Configures a default value for that field. | `@default Testing` |
-| `@deprecated` | Marks a field as deprecated. | `@deprecated We will remove this field in the next update` |
-| `@options` | Required for the operation of the [dynamic options](/docs/pt/developing-capabilities/section-properties/widgets#dynamic-options), [button group](/docs/pt/developing-capabilities/section-properties/widgets#button-group) and [icon select](/docs/pt/developing-capabilities/section-properties/widgets#icon-select) widgets. | `@options deco-sites/mystore/loaders/products.ts` |
-| `@language` | Required for the Widget `@format code`, used to define the language on editor. | `@language javascript` |
-
-## Possible Values for `@format`
-
-- `@format color`: Renders a color input instead of a text input.
-
-
-
-- `@format date`: Renders a date input instead of a text input.
-
-
-
-- `@format html`: Renders an input that opens a WYSIWYG editor for advanced HTML
- text editing.
-
-
-
-- `@format dynamic-options`:
- [Read about it here](/docs/en/developing-capabilities/section-properties/widgets#dynamic-options).
-
-# Templates in Annotations with Mustache
-
-Our annotations also support templating through
-[Mustache](https://mustache.github.io/).
-
-To use them, it's quite simple:
-
-```ts
-/**
- * @title {{{name}}}
- */
-interface Person {
- name: string;
-}
-
-export interface Props {
- people: Person[];
-}
-```
-
-Deco Admin result:
-
-
diff --git a/docs/developing-capabilities/section-properties/annotations/pt.md b/docs/developing-capabilities/section-properties/annotations/pt.md
deleted file mode 100644
index a1bf22dd..00000000
--- a/docs/developing-capabilities/section-properties/annotations/pt.md
+++ /dev/null
@@ -1,98 +0,0 @@
----
-description: Customize o comportamento do formulário do Admin da Deco com annotations nas suas propriedades.
----
-
-Customize o comportamento do formulário do
-[Admin da Deco](https://admin.deco.cx) com annotations nas suas propriedades.
-
-Ao usar tipos nativos (number, string, etc.), o editor usará o nome da
-propriedade como a _label_ padrão do formulário. Mas é possível personalizar
-isso usando tags [JSDoc](https://jsdoc.app/).
-
-- Exemplo:
-
-```tsx
-export interface Props {
- /** @title Numero de produtos */
- /** @description Total de produtos para mostrar na vitrine */
- count: number;
-}
-```
-
-- Editor:
-
-
-
-Lista com todas as annotations suportadas:
-
-| Annotation | Descrição | Uso |
-| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
-| `@title` | Recebe texto que será usado como título da label daquele input no formulário. | `@title Número de produtos` |
-| `@description` | Recebe texto que será usado como descrição na label daquele input no formulário. | `@description Total de produtos para mostrar na vitrine` |
-| `@format` | Configura um campo para ser formatado de forma diferente. Isso pode fazer com que seu [Widget](/docs/pt/developing-capabilities/section-properties/widgets) mude. | `@format [Format value](#valores-possíveis-para-o-format)` |
-| `@hide` | Esconde essa propriedade no formulário do Admin. O valor continua presente no JSON da Section. | `@hide` |
-| `@ignore` | O valor e a propriedade são completamente ignorados. | `@ignore` |
-| `@maximum` | Configura um valor máximo para aquele campo. Funciona em propriedades do tipo `number`. (valor <= X) | `@maximum 10` |
-| `@minimum` | Configura um valor mínimo para aquele campo. Funciona em propriedades do tipo `number`. (valor >= X) | `@minimum 15` |
-| `@exclusiveMaximum` | Configura um valor máximo para aquele campo. Funciona em propriedades do tipo `number`. É a contraparte exclusiva do `@maximum`. (valor < X) | `@exclusiveMaximum 10` |
-| `@exclusiveMinimum` | Configura um valor mínimo para aquele campo. Funciona em propriedades do tipo `number`. É a contraparte exclusiva do `@minimum`. (valor > X) | `@exclusiveMinimum 15` |
-| `@maxLength` | Configura um tamanho máximo para o texto de um campo. Funciona em propriedades do tipo `string`. | `@maxLength 30` |
-| `@minLength` | Configura um tamanho mínimo para o texto de um campo. Funciona em propriedades do tipo `string`. | `@minLength 8` |
-| `@readOnly` | Faz com que um campo não possa ser editado no formulário de admin, mas possa ser lido. | `@readOnly` |
-| `@uniqueItems` | Faz com que campos do tipo `array` não possam ter valores duplicados. | `@uniqueItems true` |
-| `@maxItems` | Faz com que campos do tipo `array` não possam ter mais que X valores. | `@maxItems 3` |
-| `@minItems` | Faz com que campos do tipo `array` não possam ter menos que X valores. | `@minItems 2` |
-| `@default` | Configura um valor padrão para aquele campo. Funciona somente com tipos primitivos. | `@default Testando` |
-| `@deprecated` | Marca um campo como descontinuado. | `@deprecated vamos remover esse campo na próxima atualização` |
-
-| `@options` | É necessário para o funcionamento das widgets
-[dynamic options](/docs/pt/developing-capabilities/section-properties/widgets#dynamic-options),
-[button group](/docs/pt/developing-capabilities/section-properties/widgets#button-group)
-e
-[icon select](/docs/pt/developing-capabilities/section-properties/widgets#icon-select).
-| `@options deco-sites/minhaloja/loaders/produtos.ts` |
-
-| `@language` | Usado em conjunto com `@format code`, para definir a linguagem
-do editor. | `@language javascript` |
-
-## Valores possíveis para o @format
-
-- `@format color`: Renderiza um input de cor no lugar de um de texto.
-
-
-
-- `@format date`: Renderiza um input de data no lugar de um de texto.
-
-
-
-- `@format html`: Renderiza um input que abre um Editor WYSIWYG para edição
- avançada do texto por html.
-
-
-
-- `@format dynamic-options`:
- [Ler sobre aqui](/docs/pt/developing-capabilities/section-properties/widgets#dynamic-options).
-
-# Templates em annotations com Mustache
-
-Nossas annotations também suportam templating, através do
-[Mustache](https://mustache.github.io/).
-
-Para utilizá-las, é bem simples:
-
-```ts
-/**
- * @title {{{nome}}}
- */
-interface Pessoa {
- nome: string;
-}
-
-export interface Props {
- pessoas: Pessoa[];
-}
-```
-
-Resultado no Admin:
-
-
diff --git a/docs/developing-capabilities/section-properties/standard-data-types/en.md b/docs/developing-capabilities/section-properties/standard-data-types/en.md
deleted file mode 100644
index 62bfb1e7..00000000
--- a/docs/developing-capabilities/section-properties/standard-data-types/en.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-description: Learn how to build components once and reuse them everywhere
-since: 1.0.0
----
-
-Universal components are components that are not dependent on a specific data
-_source_ to determine its behavior. The only thing that they what matters is the
-`shape` of the data, this usually happens when the component is made to be used
-in several different places (there is even a possibility between using it
-between different sites) without having to read from some API specific, i.e.
-without any external dependencies (a.k.a implicit dependency).
-
-An example of a universal component is the
-[Fashion Store ProductShelf](https://github.com/deco-sites/fashion/blob/main/components/product/ProductShelf.tsx#L15),
-let's take a look at it;
-
-```tsx
-export interface props {
- title: string;
- products: Product[] | null;
- itemsPerPage?: number;
-}
-
-function ProductShelf({
- title,
- products,
-}: props) {
- // ...implementation
-}
-```
-
-Note that although the ProductShelf depends on a "Product" list to work, it does
-not depend on what is the source of the data that will provide this information.
-This is only possible because the `Product` type is a type created by a central
-entity on `schema.org`. Another possible way of thinking about our ProductShelf
-would be to write an [Inline Loader](/docs/en/developing-guide/fetching-data)
-and make this inline loader read the API data of an e-commerce in specific (e.g
-Shopify) and only then render the ProductShelf.
-
-This is totally possible and doable, however, it should be noted that when this
-is done, our business user loses the possibility of, for example, switch
-datasource from Shopify to VTEX, which is a very powerful to avoid lock-in on a
-specific platform. In that sense, one universal component causes dependencies on
-types to be inverted, while instead of the component depending on the API,
-actually the component only depends on the data `format` and allows `loaders` to
-be implemented in order to return this type in common, making it possible to
-choose the data loader when configuring component properties in the Admin
-Editor.
-
-
-
-In fact, our ProductShelf has at least four distinct implementations for read
-products from APIs and even different e-commerce platforms, they are:
-[VNDAProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vnda/loaders/productList.ts#L1),
-[VTEXProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/loaders/intelligentSearch/productList.ts#L1),
-[VTEXLegacyProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/loaders/legacy/productList.ts#L1),
-It is
-[ShopifyProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-This makes Universal Components something that has value and usability. very
-large compared to components that depend on data from APIs!
-
-## Further reading
-
-Universal components make interoperability possible! Read more information on
-how to create type loaders in our documentation
-
-- [Fetching data](/docs/en/developing-guide/fetching-data)
-- [Core Concepts: Loaders](/docs/en/concepts/loader)
diff --git a/docs/developing-capabilities/section-properties/standard-data-types/pt.md b/docs/developing-capabilities/section-properties/standard-data-types/pt.md
deleted file mode 100644
index abb3744d..00000000
--- a/docs/developing-capabilities/section-properties/standard-data-types/pt.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-description: Aprenda como criar componentes universais para que possam ser usados em qualquer lugar
-since: 1.0.0
----
-
-Componentes universais são componentes que não dependente de uma _fonte_
-específica de dado para determinar seu comportamento. A única coisa que lhes
-importa é o `formato` do dado, isso geralmente acontece quando o componente é
-feito para ser usado em vários lugares diferentes (inclusive há possibilidade
-entre usa-lo entre sites distintos) sem que seja necessário ler de alguma API
-específica, ou seja, sem nenhuma dependência externa (a.k.a implicit
-dependency).
-
-Um exemplo de um componente universal é a
-[ProductShelf da loja Fashion](https://github.com/deco-sites/fashion/blob/main/components/product/ProductShelf.tsx#L15),
-vamos dar uma olhada nele;
-
-```tsx
-export interface Props {
- title: string;
- products: Product[] | null;
- itemsPerPage?: number;
-}
-
-function ProductShelf({
- title,
- products,
-}: Props) {
- // ...implementation
-}
-```
-
-Perceba que, apesar da ProductShelf depender de uma lista de "Product" pra
-funcionar, ela não depende de qual é a fonte do dado que vai prover essa
-informação. Isso só é possível porque o tipo `Product` é um tipo criado por uma
-entidade central no `schema.org`. Uma outra forma possível de pensar nossa
-ProductShelf seria escrever um
-[Inline Loader](/docs/pt/developing-guide/fetching-data) e fazer com que esse
-inline loader leia os dados da API de um e-commerce em específico (e.g Shopify)
-e só então renderizar a ProductShelf.
-
-Isso é totalmente possível e factível, no entanto, deve-se atentar que quando
-isso é feito, o nosso usuário de negócio perde a possibilidade de, por exemplo,
-trocar a fonte de dados de Shopify para VTEX, o que é uma feature bastante
-poderosa para evitar lock-in em uma plataforma especifica. Nesse sentido, um
-component universal faz com que as dependencias nos tipo sejam invertidas, ao
-invés do componente depender da API, na verdade o componente depende apenas do
-`formato` do dado e permite com que `loaders` sejam implementados de forma a
-retornarem esse tipo em comum, fazendo com que seja possível escolher o dado
-loader ao configurar as propriedades do componente no Editor Admin.
-
-
-
-De fato, nossa ProductShelf possui ao menos quatro implementações distintas para
-ler produtos de APIs e até mesmo plataformas de e-commerce distintas, são elas:
-[VNDAProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vnda/loaders/productList.ts#L1),
-[VTEXProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/loaders/intelligentSearch/productList.ts#L1),
-[VTEXLegacyProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/vtex/loaders/legacy/productList.ts#L1),
-It is
-[ShopifyProductList](https://github.com/deco-cx/apps/blob/3e337b6b2996d7ecd72db34174896638c92f8811/shopify/loaders/ProductList.ts#L1)
-
-Isso faz com que Universal Components sejam algo que tem um valor e usabilidade
-muito grande comparado a componentes que dependem de dados de APIs!
-
-## Leitura sugerida
-
-Componentes universais faz com que a interoperabilidade entre plataformas seja
-possível e o mais fácil possível. Leia mais sobre como criar loaders abaixo nos
-nossos tutoriais;
-
-- [Carregando dados de uma API](/docs/pt/developing-guide/fetching-data)
-- [Conceitos básicos: Loaders](/docs/pt/concepts/loader)
diff --git a/docs/developing-capabilities/section-properties/using-secrets/en.md b/docs/developing-capabilities/section-properties/using-secrets/en.md
deleted file mode 100644
index 49affc04..00000000
--- a/docs/developing-capabilities/section-properties/using-secrets/en.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-description: Using Secrets in Deco Sites
-since: 1.24.4
----
-
-# Using Secrets in Deco Sites
-
-Secrets are a powerful feature in deco sites that allow you to securely store
-sensitive information, such as API keys or passwords. By utilizing secrets, you
-can easily manage and protect your site's confidential data.
-
-## Prerequisites
-
-Before you begin, ensure that you have the following:
-
-- A deco site project set up.
-- Understanding of props and loaders in deco.
-
-## Step 1: Declaring a Secret Prop
-
-To use secrets in your site, you need to declare a secret prop in your
-components. Here's an example of how to do it in a section using an inline
-loader:
-
-```tsx
-import { Secret } from "apps/website/loaders/secret.ts";
-
-export interface Props {
- secret: Secret;
-}
-
-export const loader = async (props: Props) => {
- const secretValue = props?.secret?.get();
- // Use secret here
-};
-```
-
-In this example, the `secret` prop is declared in the `Props` interface. The
-`loader` function retrieves the secret value using the `get()` method, and then
-you can use the secret in your code.
-
-## Step 2: Configuring Secrets
-
-After declaring the secret prop, users can configure secrets for your site.
-However, note that testing secrets on localhost won't work. You should point to
-your production domain, which means you need at least one deployment declaring
-the secret dependency.
-
-> Important note: Secrets cannot be revealed on the Admin UI. They will be
-> hidden by default.
-
-## Step 3: Handling Local Development
-
-When developing locally, a secret has a "name" in the admin UI. This name can be
-fulfilled as an environment variable, which will be used locally instead of the
-actual key being used in production.
-
-Note: You can set the envvar when running your site by passing before running
-your actual command, e.g
-
-```sh
-ENV_VAR=mysecretvalue deno task start
-```
-
-This will make the `ENV_VAR` available in runtime with the `mysecretvalue` value
-to be used locally.
diff --git a/docs/developing-capabilities/section-properties/using-secrets/pt.md b/docs/developing-capabilities/section-properties/using-secrets/pt.md
deleted file mode 100644
index d5372d2f..00000000
--- a/docs/developing-capabilities/section-properties/using-secrets/pt.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-description: Utilizando Secrets em Sites Deco
-since: 1.24.4
----
-
-# Utilizando Secrets em Sites Deco
-
-secrets são uma funcionalidade poderosa em sites deco que permitem armazenar
-informações sensíveis com segurança, como chaves de API ou senhas. Ao utilizar
-secrets, você pode gerenciar e proteger facilmente os dados confidenciais do seu
-site.
-
-## Pré-requisitos
-
-Antes de começar, verifique se você possui o seguinte:
-
-- Um projeto de site deco configurado.
-- Compreensão sobre props e loaders no deco.
-
-## Passo 1: Declarando um Prop de secret
-
-Para usar secrets no seu site, você precisa declarar um prop de secret nos seus
-componentes. Aqui está um exemplo de como fazer isso em uma seção usando um
-inline loader:
-
-```tsx
-import { Secret } from "apps/website/loaders/secret.ts";
-
-export interface Props {
- secret: Secret;
-}
-
-export const loader = async (props: Props) => {
- const secretValue = props?.secret?.get();
- // Use o secret aqui
-};
-```
-
-Neste exemplo, o prop `secret` é declarado na interface `Props`. A função
-`loader` recupera o valor do secret usando o método `get()` e, em seguida, você
-pode usar o secret no seu código.
-
-## Passo 2: Configurando secrets
-
-Após declarar o prop de secret, os usuários podem configurar secrets para o seu
-site. No entanto, observe que a configuração de secrets apontando para
-`localhost` não funcionará. Você deve apontar para o domínio de produção, o que
-significa que você precisa de pelo menos um deployment declarando a dependência
-do secret.
-
-> Importante: Uma vez que o Secret for configurado, o valor original dele não é
-> revelado na UI do Admin, ou seja, você precisa ter acesso ao segredo para
-> saber o valor original dele.
-
-## Passo 3: Lidando com o Desenvolvimento Local
-
-Ao desenvolver localmente, um secret tem um "nome" na interface do admin. Esse
-nome pode ser preenchido como uma variável de ambiente, que será usada
-localmente em vez da chave real usada em produção.
-
-Importante: Você pode setar uma variável de ambiente passando o valor dela antes
-de rodar o commando final, por exemplo:
-
-```sh
-ENV_VAR=mysecretvalue deno task start
-```
-
-Isto fará com que o valor de `ENV_VAR` (que deve ser o nome da sua secret) seja
-`mysecretvalue` quando usada localmente.
diff --git a/docs/developing-capabilities/section-properties/utility-types/en.md b/docs/developing-capabilities/section-properties/utility-types/en.md
deleted file mode 100644
index e7092ec5..00000000
--- a/docs/developing-capabilities/section-properties/utility-types/en.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-description: Sections can be coded by devs and configured by business users in the Admin. Learn all of its capabilities.
----
-
-## Suggested Reading
-
-- [Core Concepts: Section](/docs/en/concepts/section)
-- [Coding a new Section](/docs/en/developing-guide/hello-world)
-
-You already know that it's easy to create a configurable
-[Section](/docs/en/concepts/section) on _deco.cx_. In this post we'll outline
-all the possible ways that you can declare the `props` types and how that
-impacts the form we render on _deco.cx_'s Admin.
-
-## Customizing sections
-
-Sections, as regular [Preact](https://preactjs.org) components, accepts `props`
-as their first argument and use those values in their markup to display texts,
-images or configure some behavior.
-
-Usually, these `props` are passed in another component, but when you're using
-_deco.cx_ **these props are configured in the Admin**, which makes it easy for
-business users to change content in their Sites.
-
-To declare how these `props` will be configured you can use the **Typescript
-type**, specifying which props and their respective type like `string`,
-`number`, `Array`, etc..
-
-_Example:_
-
-- Section configuration in a _deco.cx_'s Site.
-
-```tsx
-interface Props {
- title: string;
-}
-
-export default function LatestPosts({ title }: Props) {
- return (
-
-
{title}
-
This is an example section
-
- );
-}
-```
-
-- Preview of section editing in Admin
-
-
-
-## Types accepted
-
-The deco.cx editor accepts a subset of types Typescript for section
-configuration. This is the list of supported types in time:
-
-### Native Types
-
-#### string
-
-```ts
-export interface Props {
- title: string;
-}
-```
-
-#### number
-
-```ts
-export interface Props {
- numberOfLines: number;
-}
-```
-
-#### object literal
-
-```ts
-export interface Props {
- address: {
- street: string;
- postalCode: string;
- };
-}
-```
-
-#### array
-
-```ts
-export interface Props {
- menuItems: Array<{ label: string; value: string }>;
-}
-```
-
-#### string options
-
-```ts
-export interface props {
- variant: "primary" | "secondary" | "tertiary";
-}
-```
-
-### Special Types
-
-#### Image
-
-This type renders an image upload _widget_ in the editor, making it possible for
-users to **upload images** from their own computer.
-
-The type is a _wrapper_ for `string`, so the Section will get the URL of the
-image that will be hosted on _deco.cx_ servers.
-
-**Optional:** [deco.cx](https://www.deco.cx) provides a component that optimizes
-the image loading and can be used in conjunction with this property. Example:
-
-```tsx
-import type { ImageWidget as Image } from "apps/admin/widgets.ts";
-
-export interface props {
- bannerImg: Image;
-}
-```
-
-#### Video
-
-Similar to Image, properties with this type will be edited through a video
-upload _widget_.
-
-[Example of use here](https://github.com/deco-sites/fashion/blob/e15a0320fe9e0b7503eb4723f7c230b23886c2b5/sections/VideoCarousel.tsx#L3).
-
-```ts
-import type { VideoWidget as Video } from "apps/admin/widgets.ts";
-
-export interface props {
- myVideo: Video;
-}
-```
-
-### Enriching the editor
-
-When using native types, the editor will use the prop's name as the input Label
-by default. But it's possible to customize this using
-[JSDoc](https://jsdoc.app/) tags.
-
-- Example: Section code:
-
-```tsx
-export interface props {
- /** @title Numero de produtos */
- /** @description Total de produtos para mostrar na vitrine */
- count: number;
-}
-```
-
-- Editor:
-
-
-
-The available tags are fields compatible with
-[JSON Schema](https://json-schema.org/), i.e. `@title`, `@description`,
-`@format` among others. For example, to accept emails only:
-
-```tsx
-export interface props {
- /** @format email */
- color: string;
-}
-```
-
-Other types of valid formats are: `uri`, `color`. You can read more about it in
-the
-[annotations doc](/docs/en/developing-capabilities/section-properties/annotations).
diff --git a/docs/developing-capabilities/section-properties/utility-types/pt.md b/docs/developing-capabilities/section-properties/utility-types/pt.md
deleted file mode 100644
index 85ecec06..00000000
--- a/docs/developing-capabilities/section-properties/utility-types/pt.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-description: Sections podem ser codificadas por desenvolvedores e configuradas por usuários de negócio no Admin. Aprenda todas as suas capacidades.
----
-
-## Leitura sugerida
-
-- [Conceitos: Section](/docs/pt/concepts/section)
-- [Codificando uma nova Section](/docs/pt/developing-guide/hello-world)
-
-Você já sabe que é fácil criar uma [Section](/docs/pt/concepts/section)
-configurável na _deco.cx_. Neste post vamos detalhar todas as formas possíveis
-de declarar os types das `props` e como isso afeta o formulário que renderizamos
-no Admin da _deco.cx_.
-
-## Personalizando Sections
-
-As Sections, como componentes [Preact](https://preactjs.org), aceitam `props`
-como seus primeiro argumento e usam esses valores em seus _markups_ para exibir
-textos, imagens ou configurar algum comportamento.
-
-Normalmente, essas `props` são passadas a partir de outro componente, mas quando
-você usa _deco.cx_ **essas props são configuradas no Admin**, o que facilita
-usuários de negócios alterarem o conteúdo em seus Sites.
-
-Para declarar como essas `props` serão configuradas você usa o **Typescript
-type**, especificando quais props e seus respectivos tipos como `string`,
-`number`, `Array`, etc.
-
-_Exemplo:_
-
-- Configuração de Section em um site _deco.cx_.
-
-```tsx
-interface Props {
- título: string;
-}
-
-export default function LatestPosts({ title }: Props) {
- return (
-
-
{title}
-
Esta é uma Section de exemplo
-
- );
-}
-```
-
-- Como fica o editor no Admin:
-
-
-
-## Tipos suportados
-
-O editor aceita um subconjunto de tipos Typescript para configuração da Section.
-Esta é a lista de tipos suportados atualmente:
-
-### Tipos nativos
-
-#### string
-
-```ts
-export interface Props {
- title: string;
-}
-```
-
-#### number
-
-```ts
-export interface Props {
- lineNumber: número;
-}
-```
-
-#### object
-
-```ts
-export interface Props {
- address: {
- street: string;
- postalCode: string;
- };
-}
-```
-
-#### array
-
-```ts
-export default {
- menuItems: Array<{ label: string; value: string }>;
-}
-```
-
-#### string options
-
-```ts
-export interface Props {
- variant: "primary" | "secondary" | "tertiary";
-}
-```
-
-### Tipos Especiais
-
-#### Imagem
-
-Este tipo renderiza um _widget_ de upload de imagem no editor, possibilitando os
-usuários **fazer upload de imagens**.
-
-O tipo é um _wrapper_ para `string`, então a Section receberá a URL da imagem
-hospedada nos servidores da _deco.cx_.
-
-**Opcional:** A _deco.cx_ fornece um componente que otimiza o carregamento da
-imagens e pode ser usado em conjunto com esta propriedade.
-
-Exemplo:
-
-```tsx
-import type { ImageWidget as Image } from "apps/admin/widgets.ts";
-
-export interface props {
- bannerImg: Image;
-}
-```
-
-#### Vídeo
-
-Semelhante à Imagem, as propriedades com este tipo serão editadas através de um
-_widget_ com a possibilidade de upload de vídeos.
-
-[Exemplo de uso aqui](https://github.com/deco-sites/fashion/blob/e15a0320fe9e0b7503eb4723f7c230b23886c2b5/sections/VideoCarousel.tsx#L3).
-
-```ts
-import type { VideoWidget as Video } from "apps/admin/widgets.ts";
-
-export interface props {
- myVideo: Video;
-}
-```
-
-### Enriquecendo o editor
-
-Ao usar tipos nativos, o editor usará o nome do prop como a _label_ padrão do
-formulário. Mas é possível personalizar isso usando tags
-[JSDoc](https://jsdoc.app/).
-
-- Exemplo: Código da Section:
-
-```tsx
-export interface props {
- /** @title Numero de produtos */
- /** @description Total de produtos para mostrar na vitrine */
- count: number;
-}
-```
-
-- Editor:
-
-
-
-As tags disponíveis são os campos compatíveis com
-[JSON Schema](https://json-schema.org/), ou seja, `@title`, `@description`,
-`@format` entre outros. Por exemplo, para aceitar apenas e-mails:
-
-```tsx
-export interface props {
- /** @format email */
- color: string;
-}
-```
-
-Outros tipos de formatos válidos são: `uri`, `color`. Você pode ler mais sobre
-isso
-[na documentação de Annotations](/docs/pt/developing-capabilities/section-properties/annotations).
diff --git a/docs/developing-capabilities/section-properties/widgets/en.md b/docs/developing-capabilities/section-properties/widgets/en.md
deleted file mode 100644
index c626b980..00000000
--- a/docs/developing-capabilities/section-properties/widgets/en.md
+++ /dev/null
@@ -1,392 +0,0 @@
----
-description: List of widgets available in Deco's Admin.
----
-
-Widgets are components that appear in the [Deco Admin](https://admin.deco.cx)
-form, corresponding to the properties of a [Block](/docs/en/concepts/block).
-Here is a list of the existing widgets:
-
-## TextArea
-
-
-
-This Widget renders a special text field. Just use the TextArea type. Example:
-
-```ts
-import { TextArea } from "apps/admin/widgets.ts";
-
-export interface Props {
- context: TextArea;
-}
-```
-
-## CheckBox
-
-
-
-This widget is rendered for boolean fields. Example:
-
-```ts
-export interface Props {
- showTopbar: boolean;
-}
-```
-
-## ImageUri
-
-
-
-This widget is rendered for fields of type `ImageWidget`. This type can be
-imported from `deco-cx/apps`. Example:
-
-```ts
-import { ImageWidget as Image } from "apps/admin/widgets.ts";
-
-export interface Props {
- image: Image;
-}
-```
-
-## VideoUri
-
-
-
-This widget is rendered for fields of type `VideoWidget`. This type can be
-imported from `deco-cx/apps`. Example:
-
-```ts
-import { VideoWidget as Video } from "apps/admin/widgets.ts";
-
-export interface Props {
- video: Video;
-}
-```
-
-## Section
-
-
-
-The `Section` widget is used to create Sections that can receive other Sections
-as properties. It works similarly to receiving other components via props. When
-using this field, you can select any Section from your project. The form
-rendered in this widget takes the form of the same form that would be rendered
-for the selected Section. This widget is rendered for fields of type `Section`.
-This type can be imported from `deco-cx/apps`. Example:
-
-```ts
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- innerSection: Section;
-}
-```
-
-## Select
-
-
-
-The Select widget is used to create dropdown lists or option menus, allowing
-users to choose between different alternatives. This widget is rendered for
-fields whose type is a
-[Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types)
-in Typescript. Example:
-
-```ts
-export interface Props {
- layout: "Grid" | "Table" | "List";
-}
-```
-
-## HTML
-
-
-
-The HTML widget is rendered for fields of type `HTMLWidget`. This widget allows
-editing the content of its field through a
-[WYSIWYG (What You See Is What You Get)](https://en.wikipedia.org/wiki/WYSIWYG)
-Editor. This type can be imported from `deco-cx/apps`. Example:
-
-```ts
-import { HTMLWidget as HTML } from "apps/admin/widgets.ts";
-
-export interface Props {
- content: HTML;
-}
-```
-
-## RichText
-
-
-
-The RichText widget represents formatted text with support for various style and
-formatting options. This widget allows developers to include text content that
-can have different fonts, sizes, colors, and other formatting styles applied.
-
-```ts
-import { RichText } from "apps/admin/widgets.ts";
-
-export interface Props {
- content: RichText;
-}
-```
-
-## Secret
-
-
-
-The Secret widget is intended for sensitive fields, such as passwords, and
-ensures that the content is encrypted to protect confidential information. It is
-rendered for fields of type `Secret`. This type can be imported from
-`deco-cx/apps`. Example:
-
-```ts
-import { Secret } from "apps/website/loaders/secret.ts";
-
-export interface Props {
- password: Secret;
-}
-```
-
-## Dynamic Options
-
-This widget is especially useful when the options available in a field depend on
-dynamic data. It displays the same as the [Select](#select), but its options can
-be loaded dynamically via other prop or a loader!
-
-Example 1:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- names: string[];
- /**
- * @format dynamic-options
- * @options {{{names}}}
- */
- name: string;
-}
-```
-
-Example 2:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format dynamic-options
- * @options site/loaders/products.ts
- */
- product: string;
-}
-```
-
-`mystore/loaders/produtos.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-
-interface Props {
- term?: string;
-}
-
-export default function ProductsLoader(
- props: Props,
- req: Request,
- ctx: FnContext,
-) {
- // Allow Cors
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- // fetch X api
- const products = ["Product X", "Product Y", "Product Z"];
-
- return products.filter((p) => p.includes(props.term));
-}
-```
-
-Note that your loader can receive a `term`, this will behave like a search.
-
-## Color Input
-
-The Color Input widget displays a filled circle representing the selected color
-along with its corresponding hexadecimal value. Users can interact with the
-widget by clicking on it to open a color picker. Default value: "#000".
-
-
-
-Example:
-
-`MySection.tsx`
-
-```ts
-import { Color } from "apps/admin/widgets.ts";
-
-export interface Props {
- "primary"?: Color;
-}
-```
-
-## Code
-
-The Code Widget displays a code editor.
-
-Use `CSS`, `TypeScript`, or `Json` types. Example:
-
-```ts
-import { CSS, Json, TypeScript } from "apps/admin/widgets.ts";
-
-export interface Props {
- myCSSCode?: CSS;
- myTSCode?: TypeScript;
- myJsonCode?: Json;
-}
-```
-
-
-
-## Button Group
-
-The Button Group widget allows you to render select options in an icon format,
-providing a visually appealing way to choose options. Each option is represented
-by an icon, offering flexibility and customization for your application.
-
-
-
-Example:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format button-group
- * @options deco-sites/mystore/loaders/icons.ts
- */
- textAlignment?: "Left" | "Center" | "Right";
-}
-```
-
-To ensure that icons are available for selection in the widget, it's essential
-that each icon is explicitly defined as an SVG string in `static/adminIcons.ts`
-file and exported as a constant:
-
-`mystore/static/adminIcons.ts`
-
-```ts
-// adminIcons.ts contains all available icons needed for rendering the widget, in a string format.
-export const AlignLeft =
- `
-
- `;
-```
-
-`mystore/loaders/icons.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-// Import icons in string format
-import { AlignCenter, AlignLeft, AlignRight } from "../static/adminIcons.ts";
-
-// Define icons with their labels and corresponding props as defined on your Props interface
-const icons = [
- { component: AlignLeft, label: "Left", prop: "textAlignment" },
- { component: AlignCenter, label: "Center", prop: "textAlignment" },
- { component: AlignRight, label: "Right", prop: "textAlignment" },
-];
-
-// Loader function to map icons to the format expected by the Button Group widget
-export default function IconsLoader(
- _props: unknown,
- req: Request,
- ctx: FnContext,
-) {
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- const iconsMap = icons.map((icon) => ({
- value: icon.component,
- label: icon.label,
- prop: icon.prop,
- }));
-
- return iconsMap;
-}
-```
-
-## Icon Select
-
-The Icon Select widget enables you to create a select input for icons, where
-each option consists of both an icon and its label. This allows users to preview
-and choose the right icon easily. All icons rendered in the widget must be
-defined explicitly as SVG strings.
-
-
-
-Example:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format icon-select
- * @options deco-sites/storefront/loaders/availableIcons.ts
- */
- icon: AvailableIcons;
-}
-```
-
-To ensure all icons are properly integrated and selectable within our widget,
-each icon from your `static/sprites.svg` file must be explicitly defined as an
-SVG string and exported from a separate file, `static/adminIcons.ts`. We have
-streamlined this process with the `generate-icons.ts` script on Deco's
-storefront template, which automates the conversion of icons from `sprites.svg`
-into string format and writes them on `adminIcons.ts`.
-
-To add new icons, simply insert them into your `sprites.svg`. Then, stop the
-project's execution and restart it using `deno task run`. This triggers the
-`generate-icons.ts` script, updating the `adminIcons.ts` file with the new
-icons, making them immediately available for selection in the widget. This
-approach centralizes icon updates to `sprites.svg`, ensuring a smooth update
-process.
-
-Be aware that if an icon is not exported as a string on static/adminIcons.ts, it
-will not be displayed as an option in the selector.
-
-`mystore/loaders/availableIcons.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-import { AvailableIcons } from "../static/adminIcons.ts";
-
-const icons = Object.keys(AvailableIcons).map((iconName) => ({
- component: AvailableIcons[iconName as keyof typeof AvailableIcons],
- label: iconName,
-}));
-
-// Used to load all available icons that will be used for IconSelect widgets.
-export default function IconsLoader(
- _props: unknown,
- req: Request,
- ctx: FnContext,
-) {
- // Allow Cors
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- // Mapping icons to { value, label, icon }
- const iconsMap = icons.map((icon) => ({
- icon: icon.component,
- label: icon.label,
- value: icon.label,
- }));
-
- return iconsMap;
-}
-```
diff --git a/docs/developing-capabilities/section-properties/widgets/pt.md b/docs/developing-capabilities/section-properties/widgets/pt.md
deleted file mode 100644
index 4e990396..00000000
--- a/docs/developing-capabilities/section-properties/widgets/pt.md
+++ /dev/null
@@ -1,402 +0,0 @@
----
-description: Lista de widgets disponíveis no Admin da Deco.
----
-
-Widgets são componentes que aparecem no formulário do
-[Admin da Deco](https://admin.deco.cx) de forma correspondente as propriedades
-de um [Bloco](/docs/pt/concepts/block). Aqui está uma lista dos Widgets
-existentes:
-
-## TextArea
-
-
-
-Este Widget renderiza um campo de texto especial. Basta utilizar o tipo
-TextArea. Exemplo:
-
-```ts
-import { TextArea } from "apps/admin/widgets.ts";
-
-export interface Props {
- context: TextArea;
-}
-```
-
-## CheckBox
-
-
-
-Este widget é renderizado para campos do tipo `boolean`. Exemplo:
-
-```ts
-export interface Props {
- showTopbar: boolean;
-}
-```
-
-## ImageUri
-
-
-
-Este widget é renderizado para campos do tipo `ImageWidget`. Este tipo pode ser
-importado de `deco-cx/apps`. Exemplo:
-
-```ts
-import { ImageWidget as Image } from "apps/admin/widgets.ts";
-
-export interface Props {
- imagem: Image;
-}
-```
-
-## VideoUri
-
-
-
-Este widget é renderizado para campos do tipo `VideoWidget`. Este tipo pode ser
-importado de `deco-cx/apps`. Exemplo:
-
-```ts
-import { VideoWidget as Video } from "apps/admin/widgets.ts";
-
-export interface Props {
- video: Video;
-}
-```
-
-## Section
-
-
-
-O widget `Section` é utilizado para criar Sections que podem receber outras
-Sections como propriedades. Funciona de forma bem similar a receber outros
-componentes por props.
-
-Ao utilizar este campo, você pode selecionar qualquer Section do seu projeto. O
-formulário renderizado nesta widget toma forma do mesmo formulário que seria
-renderizado para a Section que foi selecionada.
-
-Este widget é renderizado para campos do tipo `Section`. Este tipo pode ser
-importado de `deco-cx/apps`. Exemplo:
-
-```ts
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- innerSection: Section;
-}
-```
-
-## Select
-
-
-
-O widget Select é empregado para criar listas suspensas ou menus de opções,
-proporcionando aos usuários a capacidade de escolher entre diferentes
-alternativas. Esse widget é renderizado para campos cujo tipo é uma
-[Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types)
-do Typescript. Exemplo:
-
-```ts
-export interface Props {
- layout: "Grid" | "Table" | "List";
-}
-```
-
-## HTML
-
-
-
-O widget HTML é renderizado para campos do tipo `HTMLWidget`. Este widget
-permite a edição do conteúdo de seu campo através de um
-[Editor WYSIWYG (What You See Is What You Get)](https://tecnoblog.net/responde/o-que-e-um-editor-wysiwyg/).
-Este tipo pode ser importado de `deco-cx/apps`. Exemplo:
-
-```ts
-import { HTMLWidget as HTML } from "apps/admin/widgets.ts";
-
-export interface Props {
- content: HTML;
-}
-```
-
-## RichText
-
-
-
-O widget RichText representa texto formatado com suporte para várias opções de
-estilos e formatação. Este widget permite que os desenvolvedores incluam
-conteúdo de texto que pode ter diferentes fontes, tamanhos, cores e outros
-estilos de formatação aplicados.
-
-```ts
-import { RichText } from "apps/admin/widgets.ts";
-
-export interface Props {
- content: RichText;
-}
-```
-
-## Secret
-
-
-
-O widget Secret é destinado a campos sensíveis, como senhas, e garante que o
-conteúdo seja encriptado para proteger informações confidenciais. Ele é
-renderizado para campos do tipo `Secret`. Este tipo pode ser importado de
-`deco-cx/apps`. Exemplo:
-
-```ts
-import { Secret } from "apps/website/loaders/secret.ts";
-
-export interface Props {
- password: Secret;
-}
-```
-
-## Dynamic Options
-
-Este widget é especialmente útil quando as opções disponíveis em um campo
-dependem de dados dinâmicos. Ele exibe em sua interface o mesmo que o
-[Select](#select), porém suas opções podem ser carregadas dinamicamente de outra
-prop ou via loader!
-
-Exemplo 1:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- names: string[];
- /**
- * @format dynamic-options
- * @options {{{names}}}
- */
- name: string;
-}
-```
-
-Exemplo 2:
-
-`MinhaSection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format dynamic-options
- * @options deco-sites/minhaloja/loaders/produtos.ts
- */
- produto: string;
-}
-```
-
-`minhaloja/loaders/produtos.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-
-interface Props {
- term?: string;
-}
-
-export default function ProductsLoader(
- props: Props,
- req: Request,
- ctx: FnContext,
-) {
- // Allow Cors
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- // fetch X api
- const products = ["Product X", "Product Y", "Product Z"];
-
- return products.filter((p) => p.includes(props.term));
-}
-```
-
-Perceba que o seu loader pode receber um `term`, isso vai se comportar como uma
-busca.
-
-## Color Input
-
-O widget Color Input exibe um círculo preenchido representando a cor selecionada
-juntamente com seu valor hexadecimal correspondente. Os usuários podem interagir
-com o widget clicando nele para abrir um seletor de cores. Valor padrão: "#000".
-
-
-
-Exemplo:
-
-`MySection.tsx`
-
-```ts
-import { Color } from "apps/admin/widgets.ts";
-
-export interface Props {
- "primary"?: Color;
-}
-```
-
-## Code
-
-O Widget Code exibe um Editor de código.
-
-Utilize os tipos `CSS`, `TypeScript` ou `Json`. Exemplo:
-
-```ts
-import { CSS, Json, TypeScript } from "apps/admin/widgets.ts";
-
-export interface Props {
- myCSSCode?: CSS;
- myTSCode?: TypeScript;
- myJsonCode?: Json;
-}
-```
-
-
-
-## Button Group
-
-O widget Button Group permite que você renderize opções de seleção em um formato
-de ícone, fornecendo uma maneira visualmente atraente de escolher opções. Cada
-opção é representada por um ícone, oferecendo flexibilidade e personalização
-para sua aplicação.
-
-
-
-Exemplo:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format button-group
- * @options site/loaders/icons.ts
- */
- textAlignment?: "Left" | "Center" | "Right";
-}
-```
-
-Para garantir que os ícones estejam disponíveis para seleção no widget, é
-essencial que cada ícone seja definido explicitamente como uma string SVG em
-`static/adminIcons.ts` e exportado como uma constante:
-
-`mystore/static/adminIcons.ts`
-
-```ts
-// adminIcons.ts contém todos os ícones disponíveis necessários para renderizar o widget, em um formato de string.
-export const AlignLeft =
- `
-
- `;
-```
-
-`mystore/loaders/icons.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-// Importe ícones em formato de string
-import { AlignCenter, AlignLeft, AlignRight } from "../static/adminIcons.ts";
-
-// Defina ícones com seus labels e props correspondentes conforme definido na sua interface Props
-const icons = [
- { component: AlignLeft, label: "Left", prop: "textAlignment" },
- { component: AlignCenter, label: "Center", prop: "textAlignment" },
- { component: AlignRight, label: "Right", prop: "textAlignment" },
-];
-
-// Loader para mapear ícones para o formato esperado pelo widget Button Group
-export default function IconsLoader(
- _props: unknown,
- req: Request,
- ctx: FnContext,
-) {
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- const iconsMap = icons.map((icon) => ({
- value: icon.component,
- label: icon.label,
- prop: icon.prop,
- }));
-
- return iconsMap;
-}
-```
-
-## Icon Select
-
-O widget Icon Select permite criar um seletor de entrada para ícones, onde cada
-opção consiste em um ícone e sua etiqueta. Isso permite aos usuários visualizar
-e escolher facilmente o ícone certo. Todos os ícones renderizados no widget
-devem ser definidos explicitamente como strings SVG.
-
-
-
-Exemplo:
-
-`MySection.tsx`
-
-```ts
-export interface Props {
- /**
- * @format icon-select
- * @options deco-sites/storefront/loaders/availableIcons.ts
- */
- icon: AvailableIcons;
-}
-```
-
-Para garantir que todos os ícones sejam devidamente integrados e selecionáveis
-em nosso widget, cada ícone do seu arquivo `static/sprites.svg` deve ser
-explicitamente definido como uma string SVG e exportado de um arquivo separado,
-`static/adminIcons.ts`. Nós simplificamos esse processo com o script
-`generate-icons.ts` no template da loja Deco, que automatiza a conversão dos
-ícones de `sprites.svg` para o formato de string e os grava em `adminIcons.ts`.
-
-Para adicionar novos ícones, basta inseri-los no seu `sprites.svg`. Em seguida,
-interrompa a execução do projeto e reinicie-o usando `deno task run`. Isso
-aciona o script `generate-icons.ts`, atualizando o arquivo `adminIcons.ts` com
-os novos ícones, tornando-os imediatamente disponíveis para seleção no widget.
-Essa abordagem centraliza as atualizações de ícones em `sprites.svg`, garantindo
-um processo de atualização suave.
-
-Esteja ciente de que, se um ícone não foi gerado como uma string em
-static/adminIcons.ts, ele não será exibido como uma opção no seletor.
-
-`mystore/loaders/availableIcons.ts`
-
-```ts
-import { allowCorsFor, FnContext } from "deco/mod.ts";
-import { AvailableIcons } from "../static/adminIcons.ts";
-
-const icons = Object.keys(AvailableIcons).map((iconName) => ({
- component: AvailableIcons[iconName as keyof typeof AvailableIcons],
- label: iconName,
-}));
-
-// Loader para mapear todos os ícones disponíveis que serão usados nos widgets IconSelect.
-export default function IconsLoader(
- _props: unknown,
- req: Request,
- ctx: FnContext,
-) {
- // Permitir Cors
- Object.entries(allowCorsFor(req)).map(([name, value]) => {
- ctx.response.headers.set(name, value);
- });
-
- // Mapeamento de ícones para { value, label, icon }
- const iconsMap = icons.map((icon) => ({
- icon: icon.component,
- label: icon.label,
- value: icon.label,
- }));
-
- return iconsMap;
-}
-```
diff --git a/docs/developing-capabilities/sections/accept-a-section/en.md b/docs/developing-capabilities/sections/accept-a-section/en.md
deleted file mode 100644
index 53fdac49..00000000
--- a/docs/developing-capabilities/sections/accept-a-section/en.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-description: Accepting Other Sections as Parameters in Your Section
-since: 1.0.0
----
-
-# Accepting Other Sections as Parameters in Your Section
-
-In deco, you can create powerful and flexible
-[Sections](/docs/en/concepts/section) by accepting other sections as parameters.
-This allows you to build modular and composable components that can be easily
-customized and reused in different contexts.
-
-## Overview
-
-When creating a Section that accepts other sections as parameters, you define an
-interface for the props of your Section component. This interface includes a
-property which is of type `Section`. The `Section` type is a generic type that
-represents any other section in deco.
-
-## Implementation
-
-To create a Section that accepts other Sections as parameters, follow these
-steps:
-
-1. Import the `Section` type from `deco/blocks/section.ts`.
-
-2. Define an interface for the props of your section component. Include a
- property called `myProp`, which is of type `Section`.
-
-```tsx
-// MySection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- myProp: Section;
-}
-
-export default function MySection({ myProp: { Component, props } }: Props) {
- return (
-
-
-
- );
-}
-```
-
-3. Inside your section component, access the `Component` and `props` properties
- from the `myProp` prop. The `Component` property represents the component
- function of the section passed as a parameter, and the `props` property
- contains the props of that section.
-
-## Example
-
-Let's say you have a section called `ProductCardSection` that renders a product
-card based on certain props:
-
-```tsx
-// ProductCardSection.tsx
-
-export interface Props {
- title: string;
- price: number;
- imageUrl: string;
-}
-
-export default function ProductCardSection({ title, price, imageUrl }: Props) {
- return (
-
-
-
{title}
-
{price}
-
- );
-}
-```
-
-Now, you want to create a higher-order section called `ProductContainerSection`,
-which accepts a `ProductCardSection` as a parameter and wraps it in a container:
-
-```tsx
-// ProductContainerSection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- myProp: Section;
-}
-
-export default function ProductContainerSection(
- { myProp: { Component, props } }: Props,
-) {
- return (
-
-
-
- );
-}
-```
-
-With this setup, you can now use `ProductContainerSection` to wrap any other
-section, including the `ProductCardSection`, and add a container around it.
-
-Now, let's say you want restrict your section to `ProductCard` because you have
-a lot of sections in your site but only that one should fit in that place, you
-can do the following:
-
-```tsx
-// ProductCardSection.tsx
-
-import { JSX } from "preact";
-
-// Define a named type, for example, "ProductCard," pointing to `JSX.Element`
-export type ProductCard = JSX.Element;
-
-// Define the props interface
-export interface Props {
- title: string;
- price: number;
- imageUrl: string;
-}
-
-// Implement the section and specify the return type as "ProductCard"
-export default function ProductCardSection(
- { title, price, imageUrl }: Props,
-): ProductCard {
- return (
-
-
-
{title}
-
{price}
-
- );
-}
-```
-
-Now, you can depend directly on `ProductCard`:
-
-```tsx
-// ProductContainerSection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-import { ProductCard } from "./ProductCardSection.tsx";
-
-// Specify the prop interface with `Section`
-export interface Props {
- myProp: Section;
-}
-
-// Implement the section
-export default function ProductContainerSection(
- { myProp: { Component, props } }: Props,
-) {
- return (
-
-
-
- );
-}
-```
-
-This ensures consistency and reinforces the concept of a named type, making it
-easier for developers to and business users constrain their sections as they
-wish!
-
-## Note
-
-With the ability to accept other sections as parameters, you can create highly
-modular and customizable sections that adapt to different use cases and make
-your Live.ts applications even more powerful and flexible. Happy coding! 🧩🚀
diff --git a/docs/developing-capabilities/sections/accept-a-section/pt.md b/docs/developing-capabilities/sections/accept-a-section/pt.md
deleted file mode 100644
index 8b1f110d..00000000
--- a/docs/developing-capabilities/sections/accept-a-section/pt.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-description: Aceitando Outras Seções como Parâmetros em Sua Seção
-since: 1.0.0
----
-
-# Aceitando Outras Seções como Parâmetros em Sua Seção
-
-No deco, você pode criar [Seções](/docs/pt-br/concepts/section) poderosas e
-flexíveis ao aceitar outras seções como parâmetros. Isso permite que você
-construa componentes modulares e componíveis que podem ser facilmente
-personalizados e reutilizados em diferentes contextos.
-
-## Visão Geral
-
-Ao criar uma Seção que aceita outras seções como parâmetros, você define uma
-interface para as props do seu componente de Seção. Essa interface inclui uma
-propriedade com o nome da sua escolha, que é do tipo `Section`. O tipo `Section`
-é um tipo genérico que representa qualquer outra seção no deco.
-
-## Implementação
-
-Para criar uma Seção que aceita outras Seções como parâmetros, siga estas
-etapas:
-
-1. Importe o tipo `Section` de `deco/blocks/section.ts`.
-
-2. Defina uma interface para as props do seu componente de seção. Inclua uma
- propriedade com nome de sua escolha, que é do tipo `Section`.
-
-```tsx
-// MySection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- myProp: Section;
-}
-
-export default function MySection({ myProp: { Component, props } }: Props) {
- return (
-
-
-
- );
-}
-```
-
-3. Dentro do seu componente de seção, acesse as propriedades `Component` e
- `props` da prop `myProp`. A propriedade `Component` representa a função do
- componente da seção passada como parâmetro, e a propriedade `props` contém as
- props dessa seção.
-
-## Exemplo
-
-Digamos que você tenha uma seção chamada `ProductCardSection` que renderiza um
-cartão de produto com base em algumas props:
-
-```tsx
-// ProductCardSection.tsx
-
-export interface Props {
- title: string;
- price: number;
- imageUrl: string;
-}
-
-export default function ProductCardSection({ title, price, imageUrl }: Props) {
- return (
-
-
-
{title}
-
{price}
-
- );
-}
-```
-
-Agora, você deseja criar uma seção de ordem superior chamada
-`ProductContainerSection`, que aceita uma `ProductCardSection` como parâmetro e
-a envolve em um contêiner:
-
-```tsx
-// ProductContainerSection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-
-export interface Props {
- myProp: Section;
-}
-
-export default function ProductContainerSection(
- { myProp: { Component, props } }: Props,
-) {
- return (
-
-
-
- );
-}
-```
-
-Com essa configuração, agora você pode usar `ProductContainerSection` para
-envolver qualquer outra seção, incluindo `ProductCardSection`, e adicionar um
-contêiner ao redor dela.
-
-Agora, suponha que você queira restringir sua seção a `ProductCard` porque tem
-muitas seções em seu site, mas apenas essa deve se encaixar nesse local, você
-pode fazer o seguinte:
-
-```tsx
-// ProductCardSection.tsx
-
-import { JSX } from "preact";
-
-// Defina um tipo nomeado, por exemplo, "ProductCard," apontando para `JSX.Element`
-export type ProductCard = JSX.Element;
-
-// Defina a interface de props
-export interface Props {
- title: string;
- price: number;
- imageUrl: string;
-}
-
-// Implemente a seção e especifique o tipo de retorno como "ProductCard"
-export default function ProductCardSection(
- { title, price, imageUrl }: Props,
-): ProductCard {
- return (
-
-
-
{title}
-
{price}
-
- );
-}
-```
-
-Agora, você pode depender diretamente de `ProductCard`:
-
-```tsx
-// ProductContainerSection.tsx
-
-import { Section } from "deco/blocks/section.ts";
-import { ProductCard } from "./ProductCardSection.tsx";
-
-// Especifique a interface de propriedades com `Section`
-export interface Props {
- myProp: Section;
-}
-
-// Implemente a seção
-export default function ProductContainerSection(
- { myProp: { Component, props } }: Props,
-) {
- return (
-
-
-
- );
-}
-```
-
-Isso garante consistência e reforça o conceito de um tipo nomeado, tornando mais
-fácil para os desenvolvedores e usuários de negócios restringirem suas seções
-conforme desejado!
-
-## Nota
-
-Com a capacidade de aceitar outras seções como parâmetros, você pode criar
-seções altamente modulares e personalizáveis que se adaptam a diferentes casos
-de uso e tornam suas aplicações deco ainda mais poderosas e flexíveis. Boa
-codificação! 🧩🚀
diff --git a/docs/developing-capabilities/sections/en.md b/docs/developing-capabilities/sections/en.md
deleted file mode 100644
index 7e9b721b..00000000
--- a/docs/developing-capabilities/sections/en.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: |
- A Section represents a configurable UI element for a deco.cx site.
----
-
-Sections are **UI components built with [Preact](https://preactjs.com/)** that
-can receive props configured by users on _deco.cx_'s Admin. The Section local
-implementations live on the `sections/` folder in the Site's code, but it's also
-possible to [Install Apps](/docs/en/getting-started/installing-an-app).
-
-Some examples of Sections for an ecommerce store would be:
-
-- **ProductShelf.tsx:** displays a product shelf with image, title and price.
-- **Header.tsx:** displays the standard header of the store, containing logo,
- menu categories and links for cart and login.
-- **Banner.tsx:** displays image, text and some _Call to action_ for campaign or
- specific department.
-
-## Interactivity
-
-Note that Sections run on the **server-side only**, so state and lifecycle such
-as `useState`, `useEffect` and callbacks such as `onClick`, `onInput` will not
-work. In order for those to work, you'll need to use
-[interactive Islands](https://fresh.deno.dev/docs/concepts/islands)
-
-In _deco.cx_'s Admin, it's possible to interact with Sections in two places:
-
-- **Library:** Allows developers to configure the properties of Sections and
- automatically see the generated UI. (Works similar to
- [Storybook](https://storybook.js.org/))
-- **Pages:** Allows Section to be added to Page on the site, also being
- configurable.
-
-## Further reading
-
-- [Tutorial: Coding a new Section](/docs/en/developing-guide/hello-world)
-- [Developing: Editable sections](/docs/en/developing-guide/editable-sections)
diff --git a/docs/developing-capabilities/sections/error-fallback/en.md b/docs/developing-capabilities/sections/error-fallback/en.md
deleted file mode 100644
index 599f548b..00000000
--- a/docs/developing-capabilities/sections/error-fallback/en.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-description: Adding error fallback for sections
-since: 1.54.0
----
-
-# Error Fallback
-
-## Overview
-
-Error fallbacks are a powerful concept available to be used since 1.54.0
-version, to handle errors that occur during the rendering of components. They
-allow you to gracefully handle errors and prevent the entire application from
-crashing due to an unhandled error.
-
-In deco, creating an error fallback is as simple as exporting a component
-function named `ErrorFallback` that takes an object with the `error` property.
-The `error` property holds the error object that was thrown by the component.
-
-The pre-requisites to make your component work is having the following
-dependencies in versions higher or equal than below:
-
-```json
-{
- "imports": {
- "deco/": "https://denopkg.com/deco-cx/deco@1.54.0/",
- "$fresh/": "https://denopkg.com/deco-cx/fresh@1.3.2/",
- "preact": "https://esm.sh/preact@10.16.0",
- "preact/": "https://esm.sh/preact@10.16.0/",
- "preact-render-to-string": "https://esm.sh/*preact-render-to-string@6.2.0",
- "@preact/signals": "https://esm.sh/*@preact/signals@1.1.3",
- "@preact/signals-core": "https://esm.sh/@preact/signals-core@1.3.0"
- }
-}
-```
-
-## Example: Creating an Error Fallback
-
-To create an error fallback, you can follow these steps:
-
-- Pick your selected Section (e.g `ProductShelf.tsx`)
-- Export a function named `ErrorFallback`, the function should accept an object
- with the `error` property.
-
-```tsx
-// ProductShelf.tsx
-export interface Props {
- myProp: string;
-}
-
-export function ErrorFallback({ error }: { error?: Error }) {
- // Your error handling logic goes here
- // You can display an error message, log the error, or render a fallback UI
- return (
-
-
Oops! Something went wrong.
-
{error.message}
-
- );
-}
-
-export default function ProductShelf(props: Props) {
- ...
-}
-```
-
-If an error occurs during the rendering of `ProductShelf`, the `ErrorFallback`
-component will be rendered instead.
-
-Remember to always use error fallbacks judiciously and only wrap the components
-that are prone to errors. Using error boundaries effectively can greatly improve
-the stability and user experience of your applications. If no error fallback is
-set, a default fallback will be rendered instead
diff --git a/docs/developing-capabilities/sections/error-fallback/pt.md b/docs/developing-capabilities/sections/error-fallback/pt.md
deleted file mode 100644
index ed3b49c6..00000000
--- a/docs/developing-capabilities/sections/error-fallback/pt.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-description: Limitador de Erros lançados durante a renderização de uma Seção
-since: 1.54.0
----
-
-# Limitador de Erros
-
-## Visão Geral
-
-Captura e tratamento de erro é um conceito poderoso disponível desde a versão
-1.54.0, que permite lidar com erros que ocorrem durante a renderização de
-componentes. Eles permitem que você lide elegantemente com erros e evite que
-toda a aplicação seja interrompida devido a um erro não tratado.
-
-Na deco, criar um limite de erro é tão simples como exportar uma função de
-componente chamada `ErrorFallback` que recebe um objeto com uma propriedade:
-`error`. A propriedade `error` armazena o objeto de erro que foi lançado pelo
-componente.
-
-Os pré-requisitos para fazer o seu componente funcionar com tratamento de erro
-são ter as seguintes dependências nas versões iguais ou superiores às abaixo:
-
-```json
-{
- "imports": {
- "deco/": "https://denopkg.com/deco-cx/deco@1.54.0/",
- "$fresh/": "https://denopkg.com/deco-cx/fresh@1.3.2/",
- "preact": "https://esm.sh/preact@10.16.0",
- "preact/": "https://esm.sh/preact@10.16.0/",
- "preact-render-to-string": "https://esm.sh/*preact-render-to-string@6.2.0",
- "@preact/signals": "https://esm.sh/*@preact/signals@1.1.3",
- "@preact/signals-core": "https://esm.sh/@preact/signals-core@1.3.0"
- }
-}
-```
-
-## Exemplo: Criando um Limitador de Exceção
-
-Para criar um limite de erro, você pode seguir estes passos:
-
-- Escolha a Seção selecionada (por exemplo, `ProductShelf.tsx`)
-- Exporte uma função chamada `ErrorFallback`, a função deve receber um objeto
- com uma propriedade: `error`.
-
-```tsx
-// ProductShelf.tsx
-export interface Props {
- myProp: string;
-}
-
-export function ErrorFallback({ error }: { error?: Error }) {
- // Sua lógica de tratamento de erro vai aqui
- // Você pode exibir uma mensagem de erro, registrar o erro ou renderizar uma interface de substituição
- return (
-
-
Oops! Algo deu errado.
-
{error.message}
-
- );
-}
-
-export default function ProductShelf(props: Props) {
- ...
-}
-```
-
-Se ocorrer um erro durante a renderização de `ProductShelf`, o componente
-`ErrorFallback` sera renderizado no lugar de `ProductShelf`
-
-Lembre-se de usar os limites de erro com cuidado e envolver apenas os
-componentes propensos a erros. Usar os limites de erro de forma eficaz pode
-melhorar muito a estabilidade e a experiência do usuário em suas aplicações.
-Caso nao haja nenhum `ErrorFallback` definido, um fallback padrao será utilizado
diff --git a/docs/developing-capabilities/sections/loading-fallback/en.md b/docs/developing-capabilities/sections/loading-fallback/en.md
deleted file mode 100644
index f0d62de2..00000000
--- a/docs/developing-capabilities/sections/loading-fallback/en.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-description: Adding loading fallback for sections
-since: 1.54.0
----
-
-# Loading Fallback
-
-## Overview
-
-Loading fallbacks are a powerful concept available to be used since 1.54.0
-version, to handle loading state of sections using data from third party APIs.
-They allow you to gracefully handle loading states and prevent the entire
-application from hanging due to some third party API
-
-In deco, creating a loading fallback is as simple as exporting a component
-function named `LoadingFallback`.
-
-The pre-requisites to make your component work is having the following
-dependencies in versions higher or equal than below:
-
-```json
-{
- "imports": {
- "deco/": "https://denopkg.com/deco-cx/deco@1.54.0/",
- "$fresh/": "https://denopkg.com/deco-cx/fresh@1.3.2/",
- "preact": "https://esm.sh/preact@10.16.0",
- "preact/": "https://esm.sh/preact@10.16.0/",
- "preact-render-to-string": "https://esm.sh/*preact-render-to-string@6.2.0",
- "@preact/signals": "https://esm.sh/*@preact/signals@1.1.3",
- "@preact/signals-core": "https://esm.sh/@preact/signals-core@1.3.0"
- }
-}
-```
-
-## Example: Creating a Loading Fallback
-
-To create a loading fallback, you can follow these steps:
-
-- Pick your selected Section (e.g `ProductShelf.tsx`)
-- Export a function named `LoadingFallback`.
-
-```tsx
-// ProductShelf.tsx
-export interface Props {
- myProp: string;
-}
-
-export function LoadingFallback() {
- // Renderer spinners, skeletons and other placeholder
- return (
-
-
loading...
-
- );
-}
-
-export default function ProductShelf(props: Props) {
- ...
-}
-```
-
-If `ProductShelf` uses a data coming from a slow third party API, the
-`LoadingFallback` component will be rendered instead. If no loading fallback is
-set, a default fallback will be rendered instead
diff --git a/docs/developing-capabilities/sections/loading-fallback/pt.md b/docs/developing-capabilities/sections/loading-fallback/pt.md
deleted file mode 100644
index 20455025..00000000
--- a/docs/developing-capabilities/sections/loading-fallback/pt.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-description: Adição de fallback de carregamento para seções
-since: 1.54.0
----
-
-# Fallback de Carregamento
-
-## Visão Geral
-
-Os fallbacks de carregamento são um conceito poderoso disponível para uso desde
-a versão 1.54.0, para lidar com o estado de carregamento de seções usando dados
-de APIs de terceiros. Eles permitem que você lide graciosamente com estados de
-carregamento e evite que toda a aplicação pare devido a alguma API de terceiros.
-
-No deco, criar um fallback de carregamento é tão simples quanto exportar uma
-função de componente chamada `LoadingFallback`.
-
-Os pré-requisitos para fazer com que seu componente funcione são ter as
-seguintes dependências em versões iguais ou superiores às listadas abaixo:
-
-```json
-{
- "imports": {
- "deco/": "https://denopkg.com/deco-cx/deco@1.54.0/",
- "$fresh/": "https://denopkg.com/deco-cx/fresh@1.3.2/",
- "preact": "https://esm.sh/preact@10.16.0",
- "preact/": "https://esm.sh/preact@10.16.0/",
- "preact-render-to-string": "https://esm.sh/*preact-render-to-string@6.2.0",
- "@preact/signals": "https://esm.sh/*@preact/signals@1.1.3",
- "@preact/signals-core": "https://esm.sh/@preact/signals-core@1.3.0"
- }
-}
-```
-
-## Exemplo: Criando um Fallback de Carregamento
-
-Para criar um fallback de carregamento, você pode seguir estes passos:
-
-- Escolha sua Seção selecionada (por exemplo, `ProductShelf.tsx`)
-- Exporte uma função chamada `LoadingFallback`.
-
-```tsx
-// ProductShelf.tsx
-export interface Props {
- myProp: string;
-}
-
-export function LoadingFallback() {
- // Renderize spinners, esqueletos e outros espaços reservados
- return (
-
-
carregando...
-
- );
-}
-
-export default function ProductShelf(props: Props) {
- ...
-}
-```
-
-Se `ProductShelf` usar dados provenientes de uma API de terceiros lenta, o
-componente `LoadingFallback` será renderizado em seu lugar. Se nenhum fallback
-de carregamento for definido, um fallback padrão será renderizado em seu lugar.
diff --git a/docs/developing-capabilities/sections/pt.md b/docs/developing-capabilities/sections/pt.md
deleted file mode 100644
index c3b349e5..00000000
--- a/docs/developing-capabilities/sections/pt.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: Uma Section representa um elemento de UI configurável para um Site deco.cx.
----
-
-As Sections são **componentes de UI criados com
-[Preact](https://preactjs.com/)** que pode receber `props` configuradas por
-usuários no Admin da _deco.cx_. As implementações locais de Section vivem na
-pasta `sections/` no código do Site, porém é possível
-[Instalar novas apps](/docs/pt/getting-started/installing-an-app).
-
-Alguns exemplos de Section para uma loja de ecomemerce seriam:
-
-- **ProductShelf.tsx:** exibe uma prateleira com imagem, título e preço.
-- **Header.tsx:** exibe o cabeçalho padrão da loja, contendo logotipo,
- categorias de menu e links para carrinho e login.
-- **Banner.tsx:** exibe imagem, texto e alguns _Call to action_ para campanha ou
- departamento específico.
-
-## Interatividade
-
-Observe que as seções são executadas **somente no lado do servidor**, portanto,
-gerenciamento de estado e ciclo de vida como `useState`, `useEffect` e callbacks
-como `onClick`, `onInput` não irão funcionar. Para que funcionem, você precisará
-usar [Islands](https://fresh.deno.dev/docs/concepts/islands).
-
-No Admin da _deco.cx_ é possível interagir com as Sections em dois locais:
-
-- **Library:** permite que desenvolvedores configurem as propriedades das
- Section e visualizaem automaticamente a UI renderizada. (Funciona semelhante
- ao [Storybook](https://storybook.js.org/))
-- **Pages:** Permite que a Section seja adicionada à Pages no Site, sendo também
- configuráveis por lá.
-
-## Leitura adicional
-
-- [Tutorial: Codificando uma nova seção](/docs/en/developing-guide/hello-world)
-- [Desenvolvendo: Seções personalizáveis](/docs/en/developing-guide/editable-sections)
diff --git a/docs/developing-capabilities/sections/redirecting-users/en.md b/docs/developing-capabilities/sections/redirecting-users/en.md
deleted file mode 100644
index d662eb5f..00000000
--- a/docs/developing-capabilities/sections/redirecting-users/en.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-description: Accepting Other Sections as Parameters in Your Section
-since: 1.0.0
----
-
-# Making Redirects in Sections
-
-Redirects in sections allow you to efficiently direct users to different pages
-based on certain conditions, providing a smooth and seamless navigation
-experience. With Live.ts, you can easily implement redirects using inline
-loaders and the `redirect` function from the `deco/mod.ts` module.
-
-## Overview
-
-Redirects enable you to short-circuit the entire rendering phase, bypassing the
-need for unnecessary content generation when a redirection is necessary. They
-are especially useful when you want to guide users to specific pages based on
-certain criteria, such as user authentication, geolocation, or any other custom
-condition.
-
-## Implementation
-
-To create a redirect in a section, follow these simple steps:
-
-1. Create an inline loader within your section component, and import the
- `redirect` function from the `deco/mod.ts` module.
-
-```tsx
-import { redirect } from "deco/mod.ts";
-
-export default function MyComponent(props: Props) {
- // Your component logic goes here
- // ...
-}
-
-export const loader = (props: Props, req: Request) => {
- // Your redirect condition here
- if (YOUR_CONDITION_TO_REDIRECT_USER) {
- const url = new URL(req.url);
- url.pathname = "/your_path_to_redirect"; // Update this with your desired redirect path
- redirect(url.toString()); // You can also use the full URL from anywhere
- }
-
- // Return the component props
- return props;
-};
-```
-
-2. Inside the `loader` function, define the condition that determines whether
- the redirect should be triggered. If the condition is met, construct the new
- URL using the `URL` class, and specify the path you want to redirect to.
-
-3. Finally, call the `redirect` function with the newly constructed URL. This
- will instantly direct the user to the specified page without further
- rendering.
-
-Please note that you need to return something (in this case, the `props`) in the
-`loader` function, even if you are using a redirect. This is to ensure that the
-function behaves as expected and satisfies the TypeScript compiler requirements.
-
-## Example
-
-Let's say you want to redirect users to a login page if they are not
-authenticated:
-
-```tsx
-import { redirect } from "deco/mod.ts";
-
-export default function MyComponent(props: Props) {
- // Your component logic goes here
- // ...
-}
-
-export const loader = (props: Props, req: Request) => {
- // Check if the user is not authenticated
- if (!props.isAuthenticated) {
- const url = new URL(req.url);
- url.pathname = "/login"; // Redirect to the login page
- redirect(url.toString());
- }
-
- // Return the component props
- return props;
-};
-```
-
-In this example, if the user is not authenticated, they will be redirected to
-the login page. Otherwise, the component will proceed to render as usual.
-
-## Remember
-
-- Use redirects judiciously and only when necessary to ensure a smooth user
- experience.
-- Always test your redirects thoroughly to ensure they behave as expected.
-- Keep your redirects organized and maintainable to avoid any unintended
- behaviors.
-
-With redirects in sections, you have the power to guide users seamlessly through
-your applications based on specific conditions. Happy redirecting! 🚀🔀
diff --git a/docs/developing-capabilities/sections/redirecting-users/pt.md b/docs/developing-capabilities/sections/redirecting-users/pt.md
deleted file mode 100644
index b5731640..00000000
--- a/docs/developing-capabilities/sections/redirecting-users/pt.md
+++ /dev/null
@@ -1,106 +0,0 @@
----
-description: Redirecionando usuários a partir de uma Seção
-since: 1.0.0
----
-
-# Realizando Redirecionamentos em Seções
-
-Os redirecionamentos em seções permitem que você direcione eficientemente os
-usuários para diferentes páginas com base em determinadas condições,
-proporcionando uma experiência de navegação suave e contínua. Com o Live.ts,
-você pode implementar facilmente redirecionamentos usando carregadores inline e
-a função `redirect` do módulo `deco/mod.ts`.
-
-## Visão Geral
-
-Os redirecionamentos permitem que você evite a fase inteira de renderização,
-contornando a necessidade de geração desnecessária de conteúdo quando um
-redirecionamento é necessário. Eles são especialmente úteis quando você deseja
-guiar os usuários para páginas específicas com base em determinados critérios,
-como autenticação do usuário, geolocalização ou qualquer outra condição
-personalizada.
-
-## Implementação
-
-Para criar um redirecionamento em uma seção, siga estes passos simples:
-
-1. Crie um carregador inline dentro do componente da sua seção e importe a
- função `redirect` do módulo `deco/mod.ts`.
-
-```tsx
-import { redirect } from "deco/mod.ts";
-
-export default function MyComponent(props: Props) {
- // Sua lógica de componente vai aqui
- // ...
-}
-
-export const loader = (props: Props, req: Request) => {
- // Sua condição de redirecionamento aqui
- if (SUA_CONDICAO_PARA_REDIRECIONAR_USUARIO) {
- const url = new URL(req.url);
- url.pathname = "/seu_caminho_de_redirecionamento"; // Atualize isso com o caminho de redirecionamento desejado
- redirect(url.toString()); // Você também pode usar a URL completa de qualquer lugar
- }
-
- // Retorne as props do componente
- return props;
-};
-```
-
-2. Dentro da função `loader`, defina a condição que determina se o
- redirecionamento deve ser acionado. Se a condição for atendida, construa a
- nova URL usando a classe `URL` e especifique o caminho para o qual você
- deseja redirecionar.
-
-3. Por fim, chame a função `redirect` com a URL recém-criada. Isso direcionará
- instantaneamente o usuário para a página especificada sem a necessidade de
- renderização adicional.
-
-Observe que você precisa retornar algo (neste caso, as `props`) na função
-`loader`, mesmo se estiver usando um redirecionamento. Isso é para garantir que
-a função se comporte conforme o esperado e atenda aos requisitos do compilador
-TypeScript.
-
-## Exemplo
-
-Digamos que você deseje redirecionar os usuários para uma página de login caso
-eles não estejam autenticados:
-
-```tsx
-import { redirect } from "deco/mod.ts";
-
-export default function MyComponent(props: Props) {
- // Sua lógica de componente vai aqui
- // ...
-}
-
-export const loader = (props: Props, req: Request) => {
- // Verifique se o usuário não está autenticado
- if (!props.isAuthenticated) {
- const url = new URL(req.url);
- url.pathname = "/login"; // Redirecionar para a página de login
- redirect(url.toString());
- }
-
- // Retorne as props do componente
- return props;
-};
-```
-
-Neste exemplo, se o usuário não estiver autenticado, ele será redirecionado para
-a página de login. Caso contrário, o componente continuará sendo renderizado
-normalmente.
-
-## Lembre-se
-
-- Use redirecionamentos com cuidado e apenas quando necessário para garantir uma
- experiência de usuário suave.
-- Sempre teste seus redirecionamentos cuidadosamente para garantir que eles se
- comportem conforme o esperado.
-- Mantenha seus redirecionamentos organizados e fáceis de manter para evitar
- comportamentos indesejados.
-
-Com redirecionamentos em seções, você tem o poder de guiar os usuários de forma
-perfeita em suas aplicações Live.ts com base em condições específicas. Boa
-navegação! 🚀🔀
diff --git a/docs/developing-guide/creating-loaders/en.md b/docs/developing-guide/creating-loaders/en.md
deleted file mode 100644
index d3e00e06..00000000
--- a/docs/developing-guide/creating-loaders/en.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-description: Creating loaders
----
-
-Now that you have learned more about loaders and how they can be used along with
-a section, let's create a loader that can be used from different sections.
-
-## 1. Creating a Loader
-
-To do this, we will create a loader separate from the section, in the `loaders/`
-folder of your project.
-
-Create the file `DogFactsLoader.ts` in the `loaders/` folder of your project. It
-will have the same logic as the loader we have created in the previous tutorial,
-but we have to remember to define the Props interface and export the loader as
-default.
-
-```tsx
-export type DogFacts = string[];
-
-export interface Props {
- numberOfFacts?: number;
-}
-
-async function loader(
- { numberOfFacts = 1 }: Props,
- _req: Request,
-): Promise {
- const { facts } = await fetch(
- `https://dogapi.dog/api/facts?number=${numberOfFacts ?? 1}`,
- ).then((r) => r.json());
-
- return facts;
-}
-
-export default loader;
-```
-
-## 2. Using the Loader in a Section
-
-Now that we have created the loader, we can use it in a section. The important
-thing to note here is that one of the props of the section should match the
-return type of the loader.
-
-Modify the `DogFacts.tsx` file in the `sections/` folder of your project.
-
-```tsx
-import type { DogFacts } from "../loaders/dogFacts.ts";
-
-// Props type that will be configured in deco.cx's Admin
-export interface Props {
- title: string;
- dogFacts?: DogFacts;
-}
-
-export default function DogFactsSection(
- { title, dogFacts }: Props,
-) {
- return (
-
-
{title}
-
- {dogFacts?.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-Now, instead of having an inline loader, the section receives the data itself as
-a prop, and because of the fact that the loader returns the same type as the
-prop dogFacts of the section, the Admin recognizes the dogFacts loader as the
-loader for the DogFacts section.
-
-
-
-## That's it!
-
-You have successfully created a loader that can be used in different sections.
-Continue reading to see what else you can develop with deco.
diff --git a/docs/developing-guide/creating-loaders/pt.md b/docs/developing-guide/creating-loaders/pt.md
deleted file mode 100644
index f446464f..00000000
--- a/docs/developing-guide/creating-loaders/pt.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-description: Criando loaders
----
-
-Agora que você aprendeu mais sobre loaders e como eles podem ser usados junto
-com uma seção, vamos criar um loader que pode ser usado em diferentes seções.
-
-## 1. Criando um Loader
-
-Para fazer isso, vamos criar um loader separado da seção, na pasta `loaders/` do
-seu projeto.
-
-Crie o arquivo `DogFactsLoader.ts` na pasta `loaders/` do seu projeto. Ele terá
-a mesma lógica do loader que criamos no tutorial anterior, mas temos que lembrar
-de definir a interface Props e exportar o loader como padrão.
-
-```tsx
-export type DogFacts = string[];
-
-export interface Props {
- numberOfFacts?: number;
-}
-
-async function loader(
- { numberOfFacts = 1 }: Props,
- _req: Request,
-): Promise {
- const { facts } = await fetch(
- `https://dogapi.dog/api/facts?number=${numberOfFacts ?? 1}`,
- ).then((r) => r.json());
-
- return facts;
-}
-
-export default loader;
-```
-
-## 2. Usando o Loader em uma Seção
-
-Agora que criamos o loader, podemos usá-lo em uma seção. O importante aqui é que
-uma das props da seção deve corresponder ao tipo de retorno do loader.
-
-Modifique o arquivo `DogFacts.tsx` na pasta `sections/` do seu projeto.
-
-```tsx
-import type { DogFacts } from "../loaders/DogFactsLoader.ts";
-
-// Tipo de Props que será configurado no Admin do deco.cx
-export interface Props {
- title: string;
- dogFacts?: DogFacts;
-}
-
-export default function DogFactsSection(
- { title, dogFacts }: Props,
-) {
- return (
-
-
{title}
-
- {dogFacts?.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-Agora, em vez de ter um loader embutido, a seção recebe os dados como uma prop,
-e como o loader retorna o mesmo tipo que a prop dogFacts da seção, o Admin
-reconhece o loader dogFacts como o loader para a seção DogFacts.
-
-
-
-## É isso!
-
-Você criou com sucesso um loader que pode ser usado em diferentes seções.
-Continue lendo para ver o que mais você pode desenvolver com deco.
diff --git a/docs/developing-guide/editable-sections/en.md b/docs/developing-guide/editable-sections/en.md
deleted file mode 100644
index 6909a0cf..00000000
--- a/docs/developing-guide/editable-sections/en.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-
-description: Editing sections\
-since: 1.0.0
-
----
-
-## Introduction to Sections (dev)
-
-A Section represents a configurable UI element for a Deco site. It is essential
-to understand what this entails for a developer.
-
-A Section is a `tsx` file inside the `sections` folder. Additionally, a Section:
-
-- is a [Preact](https://preactjs.com/) component
-- has serializable properties
-- exports its properties type
-
-A Preact component is a function exported by default (`export default`). It
-receives properties, returns JSX, and is invoked during each rendering of the
-defined element.
-
-Let's explore how we can manipulate these sections and see the changes reflected
-in the Admin interface.
-
-## 1. Open the Hero section
-
-As an example, open the `Hero.tsx` section in the Admin interface of the site
-you created in a [previous tutorial](/docs/en/getting-started/creating-a-site).
-Click on the `>` icon on the right bar to view the section's code.
-
-The code for this element is written in HTML with JavaScript, as shown in the
-example below.
-
-
-
-Observe the exported types in this file. These same types are accessible in the
-section properties form when you click on the list icon on the right bar.
-
-
-
-**Section and its properties types**
-
-## 2. Run your site locally
-
-Follow the [environment configuration](/docs/en/developing-guide/setup) steps
-and run your project locally to see the changes you make in the code reflected
-in the Admin interface.
-
-## 3. Add a new property to the Hero section
-
-Modify the code of `sections/Hero.tsx` to receive a new optional property, the
-`size` of a CTA button. Add to the `CTA` type a new property, `size`, which must
-be one of these strings: "xs", "sm", "md", and "lg".
-
-```tsx
-export interface CTA {
- id?: string;
- href: string;
- text: string;
- outline?: boolean;
- size?: "xs" | "sm" | "md" | "lg";
-}
-```
-
-This type of field indicates to the Admin that this property can only assume
-these values, prompting the platform to show a select component to edit this
-field.
-
-You can read more about these field formats and types in the
-[Widget documentation](/docs/en/developing-capabilities/section-properties/widgets).
-
-Let's add a CTA button in our Hero section to see the modification:
-
-
-
-Now the CTA has the size field:
-
-
-
-We will also modify the JSX content to make the CTA button size change according
-to the option selected in the Admin form:
-
-```tsx
-...
-
-
-
-...
-```
-
-With this change, you can adjust the button size through the Admin form:
-
-
-
-## 4. Ready to go!
-
-Now you can configure `props` for the Sections in your site and see how they are
-rendered. The preview will automatically update if you modify the Section's code
-locally.
-
-To deploy the changes, push your updates to the main branch or publish your
-environment in the Admin interface.
diff --git a/docs/developing-guide/editable-sections/pt.md b/docs/developing-guide/editable-sections/pt.md
deleted file mode 100644
index 354cc5c5..00000000
--- a/docs/developing-guide/editable-sections/pt.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-
-description: Editando seções\
-since: 1.0.0
-
----
-
-## Introdução às Seções (dev)
-
-Uma Seção representa um elemento de UI configurável para um site deco. É
-essencial entender o que isso significa para um desenvolvedor.
-
-Uma Section é um código `tsx` dentro da pasta `sections` e que:
-
-- é um componente [Preact](https://preactjs.com/)
-- tem propriedades serializáveis
-- exporta o tipo de suas propriedades
-
-Um componente Preact é uma função exportada por padrão (`export default`). Ele
-recebe propriedades, retorna JSX e é invocado durante cada renderização do
-elemento definido.
-
-Vamos explorar como podemos manipular essas seções e ver as mudanças refletidas
-na interface do Admin.
-
-## 1. Abra a seção Hero
-
-Como exemplo, abra a seção `Hero.tsx` na interface do Admin do site que você
-criou em um [tutorial anterior](/docs/pt/getting-started/creating-a-site).
-Clique no ícone `>` na barra direita para ver o código da seção.
-
-O código deste elemento é escrito em HTML com JavaScript, como mostrado no
-exemplo abaixo.
-
-
-
-Observe os tipos exportados neste arquivo. Esses mesmos tipos são acessíveis no
-formulário de propriedades da seção quando você clica no ícone de lista na barra
-direita.
-
-
-
-**Seção e seus tipos de propriedades**
-
-## 2. Execute seu site localmente
-
-Siga os passos de [configuração do ambiente](/docs/pt/developing-guide/setup) e
-execute seu projeto localmente para ver as mudanças que você fizer no código
-refletidas na interface do Admin.
-
-## 3. Adicione uma nova propriedade à seção Hero
-
-Modifique o código de `sections/Hero.tsx` para receber uma nova propriedade
-opcional, o `size` (tamanho) de um botão CTA. Adicione ao tipo `CTA` uma nova
-propriedade, `size`, que deve ser uma dessas strings: "xs", "sm", "md" e "lg".
-
-```tsx
-export interface CTA {
- id?: string;
- href: string;
- text: string;
- outline?: boolean;
- size?: "xs" | "sm" | "md" | "lg";
-}
-```
-
-Esse tipo de campo indica ao Admin que essa propriedade só pode assumir esses
-valores, fazendo a plataforma mostrar um componente de seleção para editar esse
-campo.
-
-Você pode ler mais sobre esses formatos e tipos de campo na
-[documentação de Widgets](/docs/pt/developing-capabilities/section-properties/widgets).
-
-Vamos adicionar um botão CTA na nossa seção Hero para ver a modificação:
-
-
-
-Agora o CTA tem o campo de tamanho:
-
-
-
-Também vamos modificar o conteúdo JSX para fazer o tamanho do botão CTA mudar de
-acordo com a opção selecionada no formulário do Admin:
-
-```tsx
-...
-
-
-
-...
-```
-
-Com essa mudança, você pode ajustar o tamanho do botão através do formulário do
-Admin:
-
-
-
-## 4. Pronto para começar!
-
-Agora você pode configurar `props` para as Seções do seu site e ver como elas
-são renderizadas. A pré-visualização será automaticamente atualizada se você
-modificar o código da Seção localmente.
-
-Para publicar as mudanças, faça um _git push_ para a branch principal ou
-publique seu ambiente diretamente na interface do Admin.
diff --git a/docs/developing-guide/examples/en.md b/docs/developing-guide/examples/en.md
deleted file mode 100644
index 02223665..00000000
--- a/docs/developing-guide/examples/en.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-
-description: Newsletter com HTMX e Deco Records\
-since: 1.0.0
-
----
-
-## Main tools
-
-- Deco.cx for hosting and CMS.
-- Deco Records as an SQLite database, using
- [Drizzle ORM](https://orm.drizzle.team/)
-- Resend app for sending confirmation emails. Email sending API that offers a
- free plan of 3,000 emails per month.
-
-## Necessary configurations
-
-1. Create a site on [deco.cx](https://deco.cx/new)
-2. Configure [Deco Records](https://deco.cx/docs/en/reference/deco-records)
-
-> For this tutorial, we created a "newsletter" table with columns `id`, `email`,
-> `confirmed_at`, `confirmation_key`.
-
-3. Install the Resend app in the "Apps" menu, configuring the API Key. When
- installing the Resend app on deco, you will find instructions on how to do
- this.
-
-## Creating the sections used
-
-Two sections were used in this tutorial:
-
-1. `newsletterSubscribe.tsx`: Newsletter subscription form (email field) +
- inline [action](https://deco.cx/docs/pt/concepts/action) that performs the
- process of including the email in the database and sending the email using
- the Resend app. Main components of the section:
-
- ```tsx
- export async function action(
- props: Props,
- req: Request,
- ctx: AppContext & RecordsApp & ResendApp,
- ): Promise {
-
- const form = await req.formData(); // Gets the data from the database
- const email = `${form.get("email") ?? ""}`;
-
- if (!email) {
- console.log("Email is empty");
- return { ...props, submissionResponse: { email: "" } };
- }
-
- const drizzle = await ctx.invoke("records/loaders/drizzle.ts"); // Loads drizzle to interact with the database
-
- try {
- const recs = await drizzle // Checks if the email is already registered in the database
- .select({ email: newsletter.email })
- .from(newsletter)
- .where(eq(newsletter.email, email));
-
- if (recs.length) {
- return {
- ...props,
- submissionResponse: { error: "Email already exists.", email },
- };
- }
-
- const confirmationKey = crypto.randomUUID(); // Generates a unique confirmation key for verification
-
- await drizzle.insert(newsletter).values({ // Inserts the new newsletter record into the database
- email,
- confirmed_at: null,
- confirmation_Key: confirmationKey,
- });
-
-
- await ctx.invoke("resend/actions/emails/send.ts", {
- subject: `Personal Blog - Confirm your subscription`,
- from: no-reply@blog.owner
- html: `Thanks for subscribing! Click here to confirm your subscription.`,
- to: email,
- });
-
- return { ...props, submissionResponse: { email: "" } };
- } catch (e) {
- console.log(e);
- ctx.monitoring?.logger?.error(e);
- return {
- ...props, submissionResponse: { error: "System error", email },
- };
- }
- }
-
- export function loader(props: Props) {
- return props;
- }
- ```
-
- And in the form, it contains the use of HTMX to make the request
- asynchronously and update only the necessary section.
-
- ```tsx
- ;
- ```
-
-2. `newsletterConfirmation.tsx`: Section to be included on the `/confirm` page
- of the site so that users can confirm the subscription and receive positive
- feedback. The main use of this section was the use of the loader to process
- the data:
-
- ```tsx
- export const loader = async (
- props: Props,
- req: Request,
- ctx: AppContext & RecordsApp,
- ) => {
- const url = new URL(req.url);
-
- const reallyQs = url.searchParams.get("really");
-
- if (!reallyQs) {
- return props;
- }
-
- const confirmationKey = url.searchParams.get("key");
-
- if (!confirmationKey) {
- return { ...props, error: "No confirmation key." };
- }
-
- const drizzle = await ctx.invoke("records/loaders/drizzle.ts");
-
- await drizzle
- .update(newsletter)
- .set({
- confirmed_at: new Date().toISOString(),
- confirmation_key: null,
- })
- .where(eq(newsletter.confirmation_key, confirmationKey ?? ""));
-
- return { ...props, really: true };
- };
- ```
-
-## Conclusion
-
-This tutorial demonstrates how to implement a newsletter subscription system
-using deco.cx tools, Deco Records, and Resend. The presented solution offers a
-complete flow, from capturing the user's email to confirming the subscription,
-ensuring data integrity and user experience. The use of modern technologies such
-as HTMX and Drizzle ORM provides an efficient and easy-to-maintain
-implementation. This system can be easily adapted and expanded to meet the
-specific needs of different web projects.
diff --git a/docs/developing-guide/examples/pt.md b/docs/developing-guide/examples/pt.md
deleted file mode 100644
index 48ec6d01..00000000
--- a/docs/developing-guide/examples/pt.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-
-description: Newsletter com HTMX e Deco Records\
-since: 1.0.0
-
----
-
-## Principais ferramentas
-
-- Deco.cx como hospedagem e CMS.
-- Deco Records como banco de dados SQLite, utilizando o
- [Drizzle ORM](https://orm.drizzle.team/)
-- App da Resend para envio de e-mails de confirmação. API de envio de e-mails
- que oferece um plano gratuito de 3.000 e-mails por mês.
-
-## Configurações necessárias
-
-1. Criar um site na [deco.cx](https://deco.cx/new)
-2. Configurar o [Deco Records](https://deco.cx/docs/en/reference/deco-records)
-
-> Para esse tutorial, criamos uma tabela "newsletter" com as colunas `id`,
-> `email`, `confirmed_at`, `confirmation_key`.
-
-3. Instalar a app da Resend no menu "Apps", configurando a API Key. Ao instalar
- a app Resend na deco, você encontrará instruções de como fazer isso.
-
-## Criando as sections utilizadas
-
-Duas sections foram utilizadas nesse tutorial:
-
-1. `newsletterSubsbribe.tsx`: Formulário de inscrição na Newsletter (campo de
- e-mail) + [action](https://deco.cx/docs/pt/concepts/action) inline que
- realiza o processo de inclusão do e-mail no banco de dados e envio do e-mail
- usando a app da Resend. Principais componentes da section:
-
- ```tsx
- export async function action(
- props: Props,
- req: Request,
- ctx: AppContext & RecordsApp & ResendApp,
- ): Promise {
-
- const form = await req.formData(); // Obtém os dados do banco de dados
- const email = `${form.get("email") ?? ""}`;
-
- if (!email) {
- console.log("Email is empty");
- return { ...props, submissionResponse: { email: "" } };
- }
-
- const drizzle = await ctx.invoke("records/loaders/drizzle.ts"); // Carrega o drizzle para interagir com o banco de dados
-
- try {
- const recs = await drizzle // Verifica se o email já está registrado no banco de dados
- .select({ email: newsletter.email })
- .from(newsletter)
- .where(eq(newsletter.email, email));
-
- if (recs.length) {
- return {
- ...props,
- submissionResponse: { error: "Email already exists.", email },
- };
- }
-
- const confirmationKey = crypto.randomUUID(); // Gera uma chave de confirmação única para a verificação
-
- await drizzle.insert(newsletter).values({ // Insere o novo registro de newsletter no banco de dados
- email,
- confirmed_at: null,
- confirmation_Key: confirmationKey,
- });
-
-
- await ctx.invoke("resend/actions/emails/send.ts", {
- subject: `Personal Blog - Confirm your subscription`,
- from: no-reply@blog.owner
- html: `Thanks for subscribing! Click here to confirm your subscription.`,
- to: email,
- });
-
- return { ...props, submissionResponse: { email: "" } };
-
- } catch (e) {
- console.log(e);
- ctx.monitoring?.logger?.error(e);
- return {
- ...props, submissionResponse: { error: "System error", email },
- };
- }
- }
-
- export function loader(props: Props) {
- return props;
- }
- ```
-
- E no formulário contém a utilização do HTMX para realizar a requisição de
- forma assíncrona e atualizar apenas a seção necessária.
-
- ```tsx
- ;
- ```
-
-2. `newsletterConfirmation.tsx`: Section a ser incluída na página `/confirm` do
- site para que os usuários possam confirmar a inscrição e receber um feedback
- positivo. O principal uso dessa section foi a utilização do loader para
- processar os dados:
-
- ```tsx
- export const loader = async (
- props: Props,
- req: Request,
- ctx: AppContext & RecordsApp,
- ) => {
- const url = new URL(req.url);
-
- const reallyQs = url.searchParams.get("really");
-
- if (!reallyQs) {
- return props;
- }
-
- const confirmationKey = url.searchParams.get("key");
-
- if (!confirmationKey) {
- return { ...props, error: "No confirmation key." };
- }
-
- const drizzle = await ctx.invoke("records/loaders/drizzle.ts");
-
- await drizzle
- .update(newsletter)
- .set({
- confirmed_at: new Date().toISOString(),
- confirmation_key: null,
- })
- .where(eq(newsletter.confirmation_key, confirmationKey ?? ""));
-
- return { ...props, really: true };
- };
- ```
-
-## Conclusão
-
-Este tutorial demonstra como implementar um sistema de inscrição em newsletter
-utilizando as ferramentas deco.cx, Deco Records e Resend. A solução apresentada
-oferece um fluxo completo, desde a captura do e-mail do usuário até a
-confirmação da inscrição, garantindo a integridade dos dados e a experiência do
-usuário. A utilização de tecnologias modernas como HTMX e Drizzle ORM
-proporciona uma implementação eficiente e de fácil manutenção. Este sistema pode
-ser facilmente adaptado e expandido para atender às necessidades específicas de
-diferentes projetos web.
diff --git a/docs/developing-guide/fetching-data/en.md b/docs/developing-guide/fetching-data/en.md
deleted file mode 100644
index 021b7cf5..00000000
--- a/docs/developing-guide/fetching-data/en.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-description: Learn how to load data with deco.cx using Loaders and Sections, allowing business users to customize data fetching.
-since: 1.0.0
----
-
-Fetching data is a common requirement when building websites or applications.
-_deco.cx_ provides a data-fetching solution that loads data **on the
-server-side** and is flexible enough to allow business users to customize how
-data is fetched, just how they can configure Section's `props`.
-
-In this tutorial you'll learn how to fetch data from an external API and feed
-that into a Section using [Loaders](/docs/en/concepts/loader).
-
-## What we'll build
-
-The example use-case we'll follow is simple, but it has a lot of complexities we
-have on data fetching:
-
-- Fetch dog facts data from the [Dog API](https://dogapi.dog/) **allowing the
- user to configure how many facts are being fetched** on _deco.cx_'s Admin.
-- Render those facts in a Section.
-
-
-
-_Preview of DogFacts Section showing data returned from API_
-
-
-
-_Data returned from the Dog Facts API being called elsewhere_
-
-## 1. Creating the Section
-
-First, let's create a Section that will render the data fetched from the API.
-Create the DogFacts.tsx section in the sections/ folder of your project.
-
-If we make an HTTP request to the Dog Fact API, we will see that it returns a
-JSON in the following format:
-
-> Open in your browser
-> [this URL with params for the Dog Fact API](https://dogapi.dog/api/facts?number=1)
-
-```json
-{
- "facts": [
- "The Labrador is so popular, in 2006 there were approximately
- 3-5 times more Labs as there were German Shepherds or Golden Retrievers."
- ],
- "success": true
-}
-```
-
-Note that the only thing we care about is the "facts" property. Therefore, we
-will create a section that is prepared to receive these facts and render them in
-any way we want.
-
-To do this, we will create a type called DogFact that contains only one property
-called fact, which is the string represented by the message.
-
-Let's see this in action by creating a new section:
-
-Paste the following code:
-
-```tsx
-export interface DogFact {
- fact: string;
-}
-
-export interface Props {
- title: string;
- dogFacts: string[];
-}
-
-export default function DogFacts({ title, dogFacts }: Props) {
- return (
-
-
{title}
-
- {dogFacts.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-> At this point, you can check in the admin (in your local environment) that
-> this component can already be used with static data, which doesn't make much
-> sense for our use case.
-
-## 2. Creating the Loader and testing the Section
-
-Now let's create a Loader that will fetch the data from the Dog Fact API and
-pass it to the Section.
-
-Loaders allow you to define how data is fetched and transformed before it is
-passed on to a Section. They are **regular Typescript functions** that can use
-_async_ functions like `fetch`. Loaders can be "plugged" into a Section via one
-of the Section's `props`, and that happens based on the **return type of the
-Loader** (the return type of the Loader is the input type of the Section).
-
-1. Define what will be the input `Props` of your loader.
-2. Export a function called `loader` in the same file as your Section.
-
-```tsx
-import type { SectionProps } from "deco/mod.ts";
-
-// Props type that will be configured in deco.cx's Admin
-export interface Props {
- title: string;
- numberOfFacts?: number;
-}
-
-export async function loader(
- { numberOfFacts, title }: Props,
- _req: Request,
-) {
- const { facts: dogFacts } = (await fetch(
- `https://dogapi.dog/api/facts?number=${numberOfFacts ?? 1}`,
- ).then((r) => r.json())) as { facts: string[] };
- return { dogFacts, title };
-}
-
-export default function DogFacts(
- { title, dogFacts }: SectionProps,
-) {
- return (
-
-
{title}
-
- {dogFacts.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-> Note: The `SectionProps` type is a helper type that is used to infer the
-> return type of the loader.
-
-## 3. Testing the Section
-
-1. Run the server locally with
- `DECO_ENV_NAME={environment_name} deno task start`.
-2. Go to `https://deco.cx/admin` in your site and make sure that your
- environment is selected in the Environment Selector in the upper right corner
- of the Admin.
-3. Go to `Sections` and search for DogFacts in the left sidebar.
-4. Configure the props of the selected Loader (numberOfFacts) with a desired
- number (e.g., 4).
-
-Now, let's see it working hooking it up with a Section.
-
-
-
-**That's it!** Now you've built a Section that displays data fetched from an
-external API using a Loader, making it all configurable by business users as
-desired. We recommend exporting filters and sort options in Loader's `props` to
-make it more reusable in _deco.cx_'s Admin.
-
-## Further reading
-
-Loaders are powerful components for handling dynamic data and solve most of the
-requirements when dealing with data coming from APIs. The deco.cx platform
-solves a myriad of other use cases related to dynamic data that we can use,
-check the following links to understand how to use them.
-
-- [Standard data types](/docs/en/developing-capabilities/section-properties/standard-data-types)
-- [Core Concepts: Loaders](/docs/en/concepts/loader)
diff --git a/docs/developing-guide/fetching-data/pt.md b/docs/developing-guide/fetching-data/pt.md
deleted file mode 100644
index 28c31d16..00000000
--- a/docs/developing-guide/fetching-data/pt.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-description: Aprenda como carregar dados usando Loaders e Sections, permitindo que usuários de negócios personalizem a busca.
-since: 1.0.0
----
-
-Buscar dados de APIs é um requisito comum ao criar sites ou aplicações. A
-_deco.cx_ oferece uma solução de _data-fetching_ que ocorre **no server-side** e
-é flexível para permitir que os usuários de negócios configurem como os dados
-são buscados, da mesma forma que configuram `props` das Sections.
-
-Neste tutorial, você aprenderá como buscar dados de uma API externa e injetá-los
-em uma Section usando [Loaders](/docs/pt/concepts/loader).
-
-## O que vamos construir
-
-O exemplo que usaremos é simples, mas tem complexidades comuns à outros casos:
-
-- Fazer _fetch_ de fatos sobre cachorros usando a [Dog API](https://dogapi.dog/)
- **permitindo ao usuário configurar quantos fatos serão retornados** no Admin
- da _deco.cx_.
-- Apresentar esses fatos em uma Section.
-
-
-
-_Visualização da Section DogFacts mostrando os dados retornados da API_
-
-
-
-_Dados retornados da API Dog Facts sendo chamada no browser_
-
-## 1. Criando a Section
-
-Primeiro, vamos criar uma Section que renderizará os dados buscados da API. Crie
-a seção `DogFacts.tsx` na pasta sections/ do seu projeto.
-
-Se executarmos um http request para a API da Dog Fact veremos que ele retorna um
-JSON no seguinte formato,
-
-> Abra no seu browser:
-> [esta URL com parâmetros para a API](https://dogapi.dog/api/facts?number=1)
-
-```json
-{
- "facts": [
- "The Labrador is so popular, in 2006 there were approximately
- 3-5 times more Labs as there were German Shepherds or Golden Retrievers."
- ],
- "success": true
-}
-```
-
-Perceba que a única coisa que nos importa são os facts, logo vamos criar nossa
-section preparada para receber esses facts re renderiza-los da maneira que
-desejarmos.
-
-Para isso, vamos criar um tipo `DoctFact` que contém apenas uma propriedade
-chamada `fact` que é a `string` representada pela mensagem.
-
-Vamos ver isso em ação criando uma nova Section:
-
-Cole o seguinte código:
-
-```tsx
-export interface DogFact {
- fact: string;
-}
-
-export interface Props {
- title: string;
- dogFacts: string[];
-}
-
-export default function DogFacts({ title, dogFacts }: Props) {
- return (
-
-
{title}
-
- {dogFacts.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-> Nesse momento podemos rodar o `deno task start` e verificar no nosso admin que
-> esse componente já consegue ser utilizado com dados estáticos, oque não faz
-> muito sentido para nosso caso de uso.
-
-## 2. Criando o Loader e testando a Section
-
-Agora vamos criar um Loader que buscará os dados da Dog Fact API e os passará
-para a Section.
-
-Os Loaders permitem que você defina como os dados são buscados e transformados
-antes de serem passados para uma Section. Eles são **funções regulares de
-Typescript** que podem usar funções _async_ como `fetch`. Os Loaders podem ser
-"plugados" em uma Section via uma das `props` da Section, e isso acontece com
-base no **tipo de retorno do Loader** (o tipo de retorno do Loader é o tipo de
-entrada da Section).
-
-1. Defina qual será as `Props` de input do seu loader.
-2. Exporte uma função chamada `loader` dentro do mesmo arquivo da sua section.
-
-No nosso caso, vamos deixar configurável qual número de facts que vamos mostrar
-no nosso componente. Perceba que agora, o que aparecerá parece ser configurado
-não será mais as props da section mas sim as props do seu loader.
-
-```tsx
-import type { SectionProps } from "deco/mod.ts";
-
-// Props type that will be configured in deco.cx's Admin
-export interface Props {
- title: string;
- numberOfFacts?: number;
-}
-
-export async function loader(
- { numberOfFacts, title }: Props,
- _req: Request,
-) {
- const { facts: dogFacts } = (await fetch(
- `https://dogapi.dog/api/facts?number=${numberOfFacts ?? 1}`,
- ).then((r) => r.json())) as { facts: string[] };
- return { dogFacts, title };
-}
-
-export default function DogFacts(
- { title, dogFacts }: SectionProps,
-) {
- return (
-
-
{title}
-
- {dogFacts.map((fact) => {fact} )}
-
-
- );
-}
-```
-
-> Observação: O tipo `SectionProps` é um tipo auxiliar usado para inferir o tipo
-> de retorno do loader.
-
-## 3. Testando a Section
-
-1. Execute o servidor localmente com
- `DECO_ENV_NAME={environment_name} deno task start`.
-2. Acesse `https://deco.cx/admin` no seu site e certifique-se de que seu
- ambiente está selecionado no Seletor de Ambiente no canto superior direito do
- Admin.
-3. Vá para `Sections` e procure por DogFacts na barra lateral esquerda.
-4. Configure as props do Loader selecionado (`numberOfFacts`) com um número
- desejado (por exemplo, 4).
-
-Agora, vamos ver isso funcionando conectando-o a uma Section.
-
-
-
-**É isso!** Agora você criou uma Section que exibe os dados obtidos de um API
-externa usando um Loader, tornando tudo configurável por usuários de negócios
-como desejado. Recomendamos exportar filtros e _sort_ nos `props` do Loader para
-torná-lo mais reutilizável no Admin da _deco.cx_.
-
-## Leitura adicional
-
-Os loaders são componentes poderosos para lidar com dados dinâmicos e resolvem a
-maior parte dos requisitos quando lidamos com dados vindos de API. A plataforma
-da `deco.cx` possui uma outra infinidade de casos de usos relacionados com dados
-dinâmicos que podemos utilizar.
-
-- [Componentes Universais](/docs/pt/developing-capabilities/section-properties/standard-data-types)
-- [Conceitos básicos: Loaders](/docs/pt/concepts/loader)
diff --git a/docs/developing-guide/go-live-ab-testing/en.md b/docs/developing-guide/go-live-ab-testing/en.md
deleted file mode 100644
index cc13e224..00000000
--- a/docs/developing-guide/go-live-ab-testing/en.md
+++ /dev/null
@@ -1,140 +0,0 @@
----
-description: Go-Live with A/B Testing
-since: 1.0.0
----
-
-Working with two environments simultaneously is sensitive in terms of data
-consistency. We recommend following a detailed and careful process, paying
-attention to some points such as:
-
-- Replicate the GTM identically in both environments
-- Update both environments throughout the test
-- Ensure feature parity
-
-On deco.cx, there are several testing methods before fully migrating a site.
-
-## Subdomain Method
-
-The subdomain method involves associating the site built on deco.cx with a new
-subdomain.
-
-Example: For the current site www.deco.cx, we will associate the new site with
-the subdomain store.deco.cx.
-
-### How to Do It:
-
-1 - Register a subdomain on [deco.cx](https://deco.cx)
-
-- [Doc](https://deco.cx/docs/en/getting-started/custom-domains/)
-
-2 - Create a traffic splitting script:
-
-- Create a loader on deco.cx, like
- [this example](https://gist.github.com/guitavano/aca72370b74081289d5d2b86143828e6)
-- Fill in the details of this loader in your `site` app.
-- Insert this loader into the `` of your current site within a `
-```
-
-This script will randomly assign users to stay on the current site or redirect
-them to the subdomain.
-
-### How to Measure Results?
-
-- Set up G.A. and GTM on both sites.
-
-#### Advantages
-
-- The client only pays for infrastructure proportional to usage.
-- Simple setup.
-
-#### Disadvantages
-
-- The end user sees a different URL
-- Traffic splitting is done with JavaScript on the front end.
-
-## deco.cx Proxy Method
-
-The proxy method involves keeping all traffic on the same domain but
-transparently proxying part of the users.
-
-
-
-Notice that in this way, you need to place your old site on another domain so
-that deco.cx can use it for the proxy.
-
-### How to Do It:
-
-We have simplified the activation of this proxy with the following flow:
-
-1 - In the deco.cx panel, go to `Apps`
-
-2 - Open the `site` app
-
-3 - You should see this configuration:
-
-
-
-The segment shown in the image is `Random`, with a 50% split, but you can use
-other segments.
-
-### How to Measure Results?
-
-- Set up G.A. and GTM on both sites.
-
-- Track results on deco.cx.
-
-To track results on deco.cx, the Matcher to be used must be created through the
-Experiments tab. Check how in
-[A/B Testing](https://deco.cx/docs/en/developing-capabilities/apps/ab-test).
-
-Additionally, in the settings, there is an option `Scripts to include`; select
-and include the `DecoAnalytics` script.
-
-#### Advantages
-
-- Keeps the entire experience on the same domain.
-- Ready-to-use traffic splitting setup.
-- Ready-to-use analytics setup.
-
-#### Disadvantages
-
-- The client pays the cost of all traffic, regardless of scaling
-
-## External Proxy Method
-
-This method is the inverse of the proxy on deco.cx: the responsibility for
-splitting the traffic and managing the proxy lies with the old website.
-
-> For VTEX stores, deco.cx is building an APP on VTEX IO to perform this proxy.
-
-If you have any doubts about how to develop this proxy on your technology, we
-are on Discord to help.
-
-#### Advantages
-
-- The client only pays for infrastructure proportional to usage.
-
-#### Disadvantages
-
-- Setup does not come ready, depending on the technology.
-
-## Extra Information
-
-### GTM Configuration
-
-To assist in configuring events in GTM, we recommend checking the
-`deco_matcher...` cookie, which indicates which version the user is on.
-
-### VTEX Orderform
-
-As an additional data source, we recommend adding a marker in the marketingData
-within the OrderForm, indicating which version the user is on, as this
-information goes to the VTEX order panel.
-
-- [Example Script](https://gist.github.com/guitavano/6de5f1068c85800b0702937b97c51ef2)
diff --git a/docs/developing-guide/go-live-ab-testing/pt.md b/docs/developing-guide/go-live-ab-testing/pt.md
deleted file mode 100644
index 7d91fd76..00000000
--- a/docs/developing-guide/go-live-ab-testing/pt.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-description: Go-Live com Teste A/B
-since: 1.0.0
----
-
-Trabalhar com dois ambientes ao mesmo tempo é algo sensível em termos de
-consistência de dados. Recomendamos que seja seguido um processo detalhado e
-cuidadoso, prestando atenção a alguns pontos, como:
-
-- Replicar o GTM de forma idêntica em ambos os ambientes
-- Atualizar ambos os ambientes ao longo do teste
-- Garantir a igualdade de features
-
-Na deco.cx, existem alguns métodos de teste antes de realizar a migração
-completa de um site.
-
-## Método de subdomínio
-
-O método de subdomínio, consiste em associar o site construído na deco.cx a um
-novo subdomínio.
-
-Exemplo: Meu site atual `www.deco.cx`, vamos associar o novo site ao domínio
-`store.deco.cx`.
-
-### Como fazer:
-
-1 - Registrar um sub-domínio na [deco.cx](https://deco.cx)
-
-- [Doc](https://deco.cx/docs/en/getting-started/custom-domains/)
-
-2 - Criar um script para divisão de tráfego
-
-- Crie um loader na deco.cx, como
- [esse](https://gist.github.com/guitavano/aca72370b74081289d5d2b86143828e6)
-- Preencha as informações desse loader na sua app `site`
-- Insira na tag `` do seu site atual, esse loader em uma tag `
-```
-
-Esse script, irá sortear os usuáriso para mantê-los no site ou redirecioná-los
-para o subdomínio.
-
-### Como medir o resultado?
-
-- Configurar o G.A e o GTM em ambos os sites
-
-#### Vantagens
-
-- O cliente só paga a infraestrutura proporcional ao uso
-- Setup simples
-
-#### Desvantagens
-
-- O cliente final vê uma URL diferente
-- A divisão de tráfego é feita com Javascript no Front
-
-## Método de Proxy da deco.cx
-
-O método de proxy consiste em manter todo o tráfego no mesmo domínio, mas
-realizar um proxy transparente para parte dos usuários.
-
-
-
-Repare que dessa forma, você precisa colocar o seu antigo site em outro domínio,
-para que a deco.cx utilize-o para o Proxy.
-
-### Como fazer:
-
-Facilitamos a ativação desse proxy com esse fluxo:
-
-1 - No painel deco.cx, acesse `Apps`
-
-2 - Abra o app `site`
-
-3 - Você deve ver essa configuração:
-
-
-
-O segmento da imagem, é o `Random`, com split de 50%, mas você pode utilizar
-outros segmentos.
-
-### Como medir o resultado?
-
-- Configurar o G.A e o GTM em ambos os sites
-
-- Acompanhar os resultados na deco.cx
-
-Para acompanhar os resultados na deco.cx, o Matcher a ser utilizado precisa ser
-criado através da aba de Experiments, confira como em
-[Teste A/B](https://deco.cx/docs/pt/developing-capabilities/apps/ab-test).
-
-Além disso, repare que nas configurações, existe a opção `Scripts to include`;
-selecione e inclua o script `DecoAnalytics`.
-
-#### Vantagens
-
-- Mantem a experiência toda no mesmo domínio
-- Setup de divisão de tráfego pronto
-- Setup de Analytics pront
-
-#### Desvantagens
-
-- Paga o custo de todo tráfego, independente do escalonamento
-
-## Método de Proxy externo
-
-Este método, é o inverso do proxy na deco.cx: a responsabilidade de dividir o
-tráfego e fazer o proxy é do antigo website.
-
-> Nota: Para lojas VTEX, deco.cx está construindo um APP no Vtex IO para
-> realizar esse proxy
-
-Caso esteja em dúvida sobre como desenvolver esse proxy na sua tecnologia,
-estamos no [Discord](https://deco.cx/discord) para ajudar.
-
-#### Vantagens
-
-- O cliente só paga a infraestrutura proporcional ao uso
-
-#### Desvantagens
-
-- Setup não vem pronto, a depender da tecnologia
-
-## Informações extras
-
-### Configuração GTM
-
-Para auxiliar a configuração dos eventos no GTM, recomendamos a consulta do
-cookie `deco_matcher...`, que indica em qual versão o usuário está.
-
-### Orderform VTEX
-
-Como fonte extra de dados, recomendamos a inserção no OrderForm de uma marcação
-no marketingData, indicando em qual versão o usuário está, pois essa informação
-vai para o painel de pedidos da VTEX.
-
-- [Script exemplo](https://gist.github.com/guitavano/6de5f1068c85800b0702937b97c51ef2)
diff --git a/docs/developing-guide/hello-world/en.md b/docs/developing-guide/hello-world/en.md
deleted file mode 100644
index a66c6336..00000000
--- a/docs/developing-guide/hello-world/en.md
+++ /dev/null
@@ -1,244 +0,0 @@
----
-description: Creating a Section
-since: 1.0.0
----
-
-Now that you are more familiar with Sections and how they are used in the admin,
-let's create a Section from scratch. In this guide, you will learn how to create
-a Section, add properties to it, and style it with your themes.
-
-Open your site's folder in an IDE and perform the following actions:
-
-## 1. Create a `.tsx` file in the `sections/` folder
-
-Create a `.tsx` file in the `sections/` folder of your site with the desired
-name for the Section (e.g., `Post.tsx`).
-
-The Section is a [Preact](https://preactjs.com/) component that is configurable
-in the Admin. For the Section to be visible in the Admin, you need to create
-this component in the `sections/` folder or one of its subdirectories.
-
-## 2. Export the component
-
-Export a [Preact](https://preactjs.com/) component **using `export default`** as
-shown in the example below:
-
-`sections/Post.tsx`
-
-```tsx
-export interface Props {
- title: string;
-}
-
-export default function Post({ title }: Props) {
- return (
-
-
{title}
-
This is an example section
-
- );
-}
-```
-
-**Done!** The Section has been created locally in your project.
-
-## 3. View the Section in the Admin
-
-Run the project locally as you did before in the
-[setup](/docs/en/developing-guide/setup). By selecting your local environment in
-the Admin, you can view the new Section in the Sections library (**Sections**)
-and add it to a page.
-
-
-
-## 4. Adding properties to the Section
-
-Let's add three new properties to our `Post` component: one for an image
-(`photo`), another for the post body (`post`), and one for the post time
-(`datetime`).
-
-```tsx
-import type { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-export interface Props {
- /**
- * @title Post image.
- */
- photo?: ImageWidget;
- /**
- * @title Post body.
- * @format textarea
- */
- post: string;
- /**
- * @title Publish date.
- * @format datetime
- */
- datetime: string;
- /**
- * @title Post title.
- */
- title: string;
-}
-
-export default function Post({ title, photo, datetime, post }: Props) {
- return (
-
- {photo && (
-
- )}
-
{title}
-
Published at: {datetime}
-
This is an example section
-
{post}
-
- );
-}
-```
-
-A Section can have any property that is serializable and interpretable in the
-properties form in the deco admin. This includes:
-
-- `strings` and `numbers`
-- Simple types of serializable objects
-- Types generated from union, extends, `Pick`, or `Omit`
-- `Sections` ( `import { Section } from "deco/blocks/section.ts"` )
-- `ImageWidget` (`import type { ImageWidget } from "apps/admin/widgets.ts";`)
- and other components from the admin
-- Arrays of the types listed above
-
-In addition to the types above, it is possible to annotate some properties so
-that the admin form changes the input mechanism or determines certain aspects of
-the property's behavior (through the `@format` annotation, for example). Read
-more about
-[these annotations here](/docs/en/developing-capabilities/section-properties/widgets).
-
-## 5. Viewing the new properties in the Admin
-
-With the project running locally, open the Section again in the Admin. You will
-see the new properties added to the `Post` component. The admin prepares its own
-form components for inserting images, dates, and indicates what each field is
-based on the `title` provided in the code.
-
-
-
-## 6. Theming the Section
-
-### 6.1 Site Theme
-
-In the deco base project, you can access a special Section called `Theme.tsx`.
-This section defines tokens and special class names that can be used by other
-Sections following the DaisyUI tool structure. Inside `Theme.tsx`, you can see
-some tokens like the main color tokens:
-
-```tsx
-export interface MainColors {
- /**
- * @format color
- * @title Base
- * @default #FFFFFF
- */
- "base-100": string;
- /**
- * @format color
- * @title Primary
- * @default #003232
- */
- "primary": string;
- /**
- * @format color
- * @title Secondary
- * @default #8C3D3D
- */
- "secondary": string;
- /**
- * @format color
- * @title Tertiary
- * @default #00FF7F
- */
- "tertiary": string;
-}
-```
-
-The colors of each token can be changed in the Admin, under the Themes tab.
-There, you can change the colors of your current theme or create a new theme.
-
-
-
-### 6.2 Page Theme
-
-Besides the site theme, it is possible to change the theme of a specific page.
-To do this, just access a specific page in the Admin and add the desired theme
-section.
-
-
-
-
-
-In this case, we added the Groovy Vibes theme section to the My New Page. This
-specific page now has a different theme from the rest of the site.
-
-
-
-### 6.3 Styling the Section
-
-Adapt the post class to make use of some tokens. For example, the main title of
-the post now follows the primary color of the theme.
-
-```tsx
-import type { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-export interface Props {
- /**
- * @title Post image.
- */
- photo?: ImageWidget;
- /**
- * @title Post body.
- * @format textarea
- */
- post: string;
- /**
- * @title Publish date.
- * @format datetime
- */
- datetime: string;
- /**
- * @title Post title.
- */
- title: string;
-}
-
-export default function Post({ title, photo, datetime, post }: Props) {
- return (
-
- {photo && (
-
- )}
-
{title}
-
Published at: {datetime}
-
This is an example section
-
{post}
-
- );
-}
-```
-
-Now, the `Post` Section follows the site (or page) theme and uses the colors
-defined in the theme.
-
-
diff --git a/docs/developing-guide/hello-world/pt.md b/docs/developing-guide/hello-world/pt.md
deleted file mode 100644
index 87a42703..00000000
--- a/docs/developing-guide/hello-world/pt.md
+++ /dev/null
@@ -1,245 +0,0 @@
----
-description: Criando uma Section
-since: 1.0.0
----
-
-Agora que você está mais familiarizado com Sections e como elas são usadas no
-admin, vamos criar uma Section do zero. Neste guia, você aprenderá a criar uma
-Section, a adicionar propriedades a ela e a estilizá-la com seus temas.
-
-Abra a pasta do seu site em uma IDE e execute as seguintes ações:
-
-## 1. Crie um arquivo `.tsx` na pasta `sections/`
-
-Crie um arquivo `.tsx` na pasta `sections/` em seu Site com o nome desejado para
-Section (_e.g_: `Post.tsx`).
-
-A Section é um componente [Preact](https://preactjs.com/) que é configurável no
-Admin. Para que a Section seja visível no Admin, é preciso criar esse componente
-na pasta `sections/` ou em algum de seus sub-diretórios.
-
-## 2. Exporte o componente
-
-Exporte um componente [Preact](https://preactjs.com/) **usando
-`export default`** como o exemplo abaixo:
-
-`sections/Post.tsx`
-
-```tsx
-export interface Props {
- title: string;
-}
-
-export default function Post({ title }: Props) {
- return (
-
-
{title}
-
This is an example section
-
- );
-}
-```
-
-**Pronto!** A Section foi criada localmente no seu projeto.
-
-## 3. Visualize a Section no Admin
-
-Execute o projeto localmente como foi feito anteriormente no
-[setup](/docs/pt/developing-guide/setup). Ao selecionar seu ambiente local no
-Admin, você poderá visualizar a nova Section na biblioteca de Sections
-(**Sections**) e adicioná-la a uma página.
-
-
-
-## 4. Adicionando propriedades à Section
-
-Vamos adicionar três novas propriedades ao nosso componente `Post`, uma para
-imagem (`photo`), outro para o corpo da postagem (`post`) e um para a hora da
-postagem.
-
-```tsx
-import type { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-export interface Props {
- /**
- * @title Post image.
- */
- photo?: ImageWidget;
- /**
- * @title Post body.
- * @format textarea
- */
- post: string;
- /**
- * @title Publish date.
- * @format datetime
- */
- datetime: string;
- /**
- * @title Post title.
- */
- title: string;
-}
-
-export default function Post({ title, photo, datetime, post }: Props) {
- return (
-
- {photo && (
-
- )}
-
{title}
-
Published at: {datetime}
-
This is an example section
-
{post}
-
- );
-}
-```
-
-Uma Section pode ter como propriedade qualquer elemento que seja serializável, e
-interpretável no formulário de propriedades no admin da deco. Isto inclue:
-
-- `strings` e `numbers`
-- Tipos simples de objetos serializáveis
-- Tipos gerados de união, extensão, `Pick` ou `Omit`
-- `Sections` ( `import { Section } from "deco/blocks/section.ts"` )
-- `ImageWidget` (`import type { ImageWidget } from "apps/admin/widgets.ts";`) e
- outros components do admin
-- Arrays dos tipos indicados acima
-
-Além dos tipos acima, é possível anotar algumas propriedades para que o
-formulário do admin altere o mecanismo de inserção ou para determinar alguns
-aspectos do comportamento da propriedade (através da anotação `@format`, por
-exemplo). Leia mais sobre
-[essas anotações aqui](/docs/pt/developing-capabilities/section-properties/widgets)
-
-## 5. Visualizando as novas propriedades no Admin
-
-Com o projeto executando localmente, abra novamente a Section no Admin. Você
-verá as novas propriedades adicionadas ao componente `Post`. É possível ver que
-o admin prepara componentes próprios de formulário para a inserção de imagens,
-data, bem como sinaliza o que é cada campo a partir do `title` indicado em
-código.
-
-
-
-## 6. Tematizando a Section
-
-### 6.1 Tema do Site
-
-No projeto base deco, é possível acessar uma Section especial, a `Theme.tsx`.
-Esta section define tokens e nomes especiais de classes que podem ser utilizadas
-por outras Sections seguindo a estrutura da ferramenta DaisyUI. Dentro do
-`Theme.tsx` é possível observar alguns tokens como o de cores principais:
-
-```tsx
-export interface MainColors {
- /**
- * @format color
- * @title Base
- * @default #FFFFFF
- */
- "base-100": string;
- /**
- * @format color
- * @title Primary
- * @default #003232
- */
- "primary": string;
- /**
- * @format color
- * @title Scondary
- * @default #8C3D3D
- */
- "secondary": string;
- /**
- * @format color
- * @title Tertiary
- * @default #00FF7F
- */
- "tertiary": string;
-}
-```
-
-As cores de cada token podem ser alteradas no Admin, na aba de Themes. Nela,
-você pode alterar as cores do seu tema atual ou criar um novo tema.
-
-
-
-### 6.2 Tema de uma página
-
-Além do tema do site, é possível alterar o tema de uma página específica. Para
-isso, basta acessar uma página específica no Admin adicionar a section do tema
-desejado.
-
-
-
-
-
-Neste caso, adicionamos na página My New Page a Section do tema Groovy Vibes.
-Esta página em específico agora tem um tema diferente do restante do site.
-
-
-
-### 6.3 Estilizando a Section
-
-Adapte a classe de postagens para fazer uso de alguns tokens. Por exemplo, o
-título principal da postagem agora segue a cor primária do tema.
-
-```tsx
-import type { ImageWidget } from "apps/admin/widgets.ts";
-import Image from "apps/website/components/Image.tsx";
-
-export interface Props {
- /**
- * @title Post image.
- */
- photo?: ImageWidget;
- /**
- * @title Post body.
- * @format textarea
- */
- post: string;
- /**
- * @title Publish date.
- * @format datetime
- */
- datetime: string;
- /**
- * @title Post title.
- */
- title: string;
-}
-
-export default function Post({ title, photo, datetime, post }: Props) {
- return (
-
- {photo && (
-
- )}
-
{title}
-
Published at: {datetime}
-
This is an example section
-
{post}
-
- );
-}
-```
-
-Agora, a Section `Post` segue o tema do site (ou da página) e utiliza as cores
-definidas no tema.
-
-
diff --git a/docs/developing-guide/htmx/en.md b/docs/developing-guide/htmx/en.md
deleted file mode 100644
index d94908fc..00000000
--- a/docs/developing-guide/htmx/en.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-description: Interactivity with HTMX
-since: 1.0.0
----
-
-This tutorial will guide you through integrating HTMX into your deco project,
-enabling enhanced interactivity with minimal JavaScript. We will build a counter
-as an example to see how deco.cx integrates with HTMX.
-
-## What is HTMX?
-
-HTMX allows you to access modern browser features directly from HTML, making it
-easier to build interactive web applications with less JavaScript.
-
-## Step 1: Adding HTMX to Your Project
-
-First, you need to include the HTMX library in your project. You can do this by
-installing the app HTMX to your site in the deco Admin.
-
-
-
-## Step 2: Making the Preact version of the Counter
-
-Let's create a Preact component for the counter to see the difference compared
-to a HTMX version:
-
-```tsx
-import { useState } from "preact/hooks";
-
-export default function Section() {
- const [count, setCount] = useState(0);
-
- return (
-
- setCount(count - 1)}
- >
- -
-
- {count}
- setCount(count + 1)}
- >
- +
-
-
- );
-}
-```
-
-Here, we are using Preact's `useState` hook to manage the counter state and the
-`onClick` event to update the counter when the buttons are clicked.
-
-## Step 3: Making the HTMX version of the Counter
-
-In the HTMX version, we will no longer use the `useState` hook or the `onClick`
-event. When using HTMX, we need to have one route for each UI state of the site,
-so we will make a request to the server to update the counter state.
-
-That's when the [`useSection` hook](/docs/en/api-reference/use-section) comes in
-handy. This hook automatically creates routes for rendering your UI states
-without requiring developers to handle routing manually.
-
-Let's see what changes in the HTMX version:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-
-export default function Section({ count = 0 }: { count: number }) {
- return (
-
-
- -
-
- {count}
-
- +
-
-
- );
-}
-```
-
-To update the state as mentioned before, we are using the hx-get attribute with
-the useSection hook. The hx-get attribute makes a GET request to the URL
-returned by the useSection hook. The response is new HTML with the updated UI
-state of the counter. The hx-target attribute defines the target element where
-the response will be inserted, in this case, the closest section element to the
-button. The hx-swap attribute defines how the response will be inserted, in this
-case, replacing the entire section element with the response.
-
-To illustrate the difference between the Preact and HTMX versions, let's use
-them both and see how they behave in the network tab of the browser's developer
-tools.
-
-While the Preact version updates the counter state locally, the HTMX version
-makes a request to the server to update the counter state.
-
-
-
-
-
-## Conclusion
-
-HTMX is a powerful tool that can simplify the process of adding interactivity to
-your web applications. By using HTMX, you can reduce the amount of JavaScript
-you need to write and maintain, making your codebase cleaner and more
-manageable.
-
-For more information, check out the [HTMX documentation](https://htmx.org/docs/)
-and [deco.cx documentation](https://deco.cx/docs/).
diff --git a/docs/developing-guide/htmx/pt.md b/docs/developing-guide/htmx/pt.md
deleted file mode 100644
index 45bb1805..00000000
--- a/docs/developing-guide/htmx/pt.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-description: Interatividade com HTMX
-since: 1.0.0
----
-
-Este tutorial vai te guiar na integração do HTMX ao seu projeto deco, permitindo
-maior interatividade com o mínimo de JavaScript. Vamos criar um contador como
-exemplo para ver como deco.cx integra com HTMX.
-
-## O que é o HTMX?
-
-HTMX permite acessar recursos modernos do navegador diretamente do HTML,
-facilitando a construção de aplicações web interativas com menos JavaScript.
-
-## Passo 1: Adicionando HTMX ao Seu Projeto
-
-Primeiro, você precisa incluir a biblioteca HTMX no seu projeto. Você pode fazer
-isso adicionando a seguinte tag de script ao seu HTML:
-
-```html
-
-```
-
-## Passo 2: Criando a Versão Preact do Contador
-
-Vamos criar um componente Preact para o contador e ver a diferença para a versão
-com HTMX:
-
-```tsx
-import { useState } from "preact/hooks";
-
-export default function Section() {
- const [count, setCount] = useState(0);
-
- return (
-
- setCount(count - 1)}
- >
- -
-
- {count}
- setCount(count + 1)}
- >
- +
-
-
- );
-}
-```
-
-Aqui, estamos usando o hook `useState` do Preact para gerenciar o estado do
-contador e o evento `onClick` para atualizar o contador quando os botões são
-clicados.
-
-## Passo 3: Criando a Versão HTMX do Contador
-
-Na versão HTMX, não usaremos mais o hook `useState` nem o evento `onClick`. Ao
-usar HTMX, precisamos de uma rota para cada estado da UI, então faremos uma
-solicitação ao servidor para atualizar o estado do contador.
-
-É aí que o [hook `useSection`](/docs/pt/api-reference/use-section) é útil. Este
-hook cria automaticamente rotas para renderizar seus estados de UI sem exigir
-que os desenvolvedores lidem manualmente com o roteamento.
-
-Vamos ver o que muda na versão HTMX:
-
-```tsx
-import { useSection } from "deco/hooks/useSection.ts";
-
-export default function Section({ count = 0 }: { count: number }) {
- return (
-
-
- -
-
- {count}
-
- +
-
-
- );
-}
-```
-
-Para atualizar o estado, como mencionado antes, estamos usando `hx-get` com o
-hook `useSection`. O atributo `hx-get` faz uma solicitação GET para a URL
-retornada pelo hook `useSection`. A resposta é um novo HTML com o novo estado da
-UI do contador. O atributo `hx-target` define o elemento alvo onde a resposta
-será inserida, neste caso, a seção mais próxima do botão. O atributo `hx-swap`
-define como a resposta será inserida, neste caso, substituindo todo o elemento
-da seção pela resposta.
-
-Para ilustrar a diferença entre as versões Preact e HTMX, vamos usá-las e ver
-como se comportam na aba de Network das ferramentas de desenvolvedor do
-navegador.
-
-Enquanto a versão Preact atualiza o estado do contador localmente, a versão HTMX
-faz uma requisição ao servidor para atualizar o estado do contador.
-
-
-
-
-
-## Conclusão
-
-HTMX é uma ferramenta poderosa que pode simplificar o processo de adicionar
-interatividade às suas aplicações web. Usando HTMX, você pode reduzir a
-quantidade de JavaScript que precisa escrever e manter, tornando seu código mais
-limpo e gerenciável.
-
-Para mais informações, confira a [documentação do HTMX](https://htmx.org/docs/)
-e a [documentação do deco.cx](https://deco.cx/docs/).
diff --git a/docs/developing-guide/setup/en.md b/docs/developing-guide/setup/en.md
deleted file mode 100644
index 7d212efb..00000000
--- a/docs/developing-guide/setup/en.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-description: Environment setup.
-since: 1.0.0
----
-
-- Read the guide in **Getting Started** to understand the basic concepts and the
- deco admin tool.
-
-- **Important**, you can access [our Discord](https://deco.cx/discord) to ask
- questions or report issues with _deco.cx_. Join our community too!
-
-## Summary
-
-1. Technology stack
-2. Start developing
-3. Developing with deco
-
-## Technology stack
-
-When creating a website or online store with _deco.cx_, users have the
-flexibility to create [Sections](/docs/en/concepts/section) and
-[Loaders](/docs/en/concepts/loader) that meet their unique needs. To help you
-easily and quickly create these components, we rely on a set of powerful and
-efficient technologies.
-
-Our technology stack is focused on **simplicity and performance**, making it
-accessible to developers with previous experience in HTML, CSS, JavaScript, and
-React. These are the main tools we use to power deco.cx sites:
-
-### [Preact](https://preactjs.com/)
-
-**Preact** is a fast and lightweight alternative to
-[React.js](https://reactjs.org/), used for rendering UI components on the server
-and client. It uses _JSX_ to create web components and is generally
-straightforward to learn.
-
-### [Tailwind](https://tailwindcss.com)
-
-**Tailwind** is a CSS styling solution based on utility classes, making it ideal
-for beginners. Tailwind is also optimized for performance.
-
-### [Deno](https://deno.com/deploy)
-
-**Deno** is a JavaScript and TypeScript runtime environment. It is used to build
-deco sites written in TypeScript and executed by a server. Deno is similar to
-Node.js (_fun fact_: they were
-[created by the same person](https://www.youtube.com/watch?v=M3BM9TB-8yA)).
-
-### [Fresh](https://fresh.deno.dev)
-
-**Fresh** is a full-stack web framework for JavaScript and TypeScript
-developers. It is designed to make it easy to create high-quality,
-high-performance, and highly customizable web applications.
-
-## Start developing
-
-### Required Tools
-
-The only setup required to code _deco.cx_ sites is to **install Deno** on your
-machine. To install Deno, follow the
-[instructions on the deno.land page](https://deno.land/manual/getting_started/installation).
-
-> Make sure to keep Deno up-to-date! If you already have Deno installed, run
-> `deno upgrade` to update it.
-
-We highly recommend using
-[Visual Studio Code](https://code.visualstudio.com/download) as the IDE and
-[Git](https://github.com/git-guides/install-git) as the version control tool.
-
-### 1. Create a Deco Site
-
-Follow the steps in the
-[Creating a Site tutorial](/docs/en/getting-started/creating-a-site).
-
-### 2. Clone Your Site Repository
-
-Accept the invitation to join the repository created for your site. This
-invitation is sent to the email address associated with your GitHub profile.
-
-If you haven't used a GitHub account to log into the admin panel or haven't
-received an invitation, you can add a GitHub account as a collaborator to the
-site in the Settings tab.
-
-
-
-Use the `git clone` command to download the site code to your machine. We
-recommend using SSH. Open the terminal and execute the following command:
-
-```bash
-git clone git@github.com:deco-sites/{site-name}.git
-```
-
-**Remember to replace `site-name` with the name of your site.**
-
-Alternatively, you can clone the repository using other methods, such as _git
-https_, the _GitHub_ tool, or an IDE. The repository page on _GitHub_ provides
-details about different ways to clone.
-
-### 3. Run Local Server
-
-To run your site locally, edit, and see the changes in the Admin, you need to
-have a local environment (an environment with `localhost` as the host). To do
-this, you can use the default `localhost` environment or create a new one.
-
-#### 3.1 Create new environment
-
-Open the Releases tab in the Admin and click on the New environment button.
-
-
-
-#### 3.2 Set a name and a host to your environment
-
-Choose a name for your environment and set your host as localhost.
-
-
-
-#### 3.3 Run your site locally
-
-Copy the command shown after you create your environment and paste it into your
-terminal in the site folder.
-
-
-
-
-
-Wait for the project to initialize. On the first run, Deno will download and
-cache the project dependencies, and Deco will prepare the site details.
-
-The site will be accessible at
-`https://{environment-name}--{site-name}.deco.site`.
-
-
-
-If the code of any section used on the site's homepage is modified, it will be
-reflected at the above address.
-
-#### 3.4 Publishing Changes
-
-Considering that you chose the Deco Hosting to deploy your site, the development
-deployment process is very simple: do a git push of the changes to the main
-branch.
-
-Alternativaly, publish your local environment in the Admin by clicking on the
-Publish now button in your environment page.
-
-
-
-## Start Creating Sites Your Way! :)
-
-Keep exploring Deco to understand its potential and learn how to create or
-modify sections, loaders, and other elements to build increasingly personalized
-sites and experiences.
-
-Be sure to join our [Discord community](https://deco.cx/discord). Stay updated
-with the latest news and keep evolving with us!
diff --git a/docs/developing-guide/setup/pt.md b/docs/developing-guide/setup/pt.md
deleted file mode 100644
index 6d2fce33..00000000
--- a/docs/developing-guide/setup/pt.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-description: Configuração do ambiente.
-since: 1.0.0
----
-
-- Leia o guia em **Comece agora** para entender os conceitos base e a ferramenta
- de admin da deco
-
-- **Importante**, é possível acessar [nosso Discord](https://deco.cx/discord)
- para reportar dúvidas ou problemas com a _deco.cx_. Participe também da nossa
- comunidade!
-
-## Tópicos
-
-1. Tecnologias utilizadas na deco
-2. Comece a desenvolver com a deco
-3. Desenvolvendo com a deco
-
-## Tecnologias utilizadas na deco
-
-Ao criar um site ou loja online com a _deco.cx_, o usuário tem a flexibilidade
-de criar [Sections](/docs/pt/concepts/section) e
-[Loaders](/docs/pt/concepts/loader) que atendem às suas necessidades exclusivas.
-Para ajudá-la a criar esses componentes com facilidade e rapidez, contamos com
-um conjunto de tecnologias poderosas e eficientes.
-
-Nossa pilha de tecnologia é focada em **simplicidade e desempenho**, tornando-a
-acessível a desenvolvedores com experiência anterior em HTML, CSS, JavaScript e
-React. Estas são as principais ferramentas que usamos para alimentar os sites
-deco.cx:
-
-### [Preact](https://preactjs.com/)
-
-**Preact** é uma alternativa rápida e leve ao [React.js](https://reactjs.org/),
-usado para renderizar componentes de UI no servidor e no cliente. Ele usa _JSX_
-para criar componentes da web e geralmente é bem simples de aprender.
-
-### [Tailwind](https://tailwindcss.com)
-
-**Tailwind** é uma solução de estilos CSS baseada em classes utilitárias, o que
-o torna ideal para iniciantes. O Tailwind também é otimizado para performance.
-
-### [Deno](https://deno.com/deploy)
-
-O **Deno** é um ambiente de execução JavaScript e TypeScript. É usado para fazer
-Sites na deco, escritos em Typescript, executados por um servidor. Deno é
-semelhante a Node.js (_curiosidade_: eles foram
-[criados pela mesma pessoa](https://www.youtube.com/watch?v=M3BM9TB-8yA)).
-
-### [Fresh](https://fresh.deno.dev)
-
-O **Fresh** é um framework web fullstack (backend e frontend) para
-desenvolvedores JavaScript e TypeScript. Foi projetado para tornar fácil a
-criação de aplicações web de alta qualidade, alta performance e altamente
-personalizáveis.
-
-## Comece a desenvolver com a deco
-
-### Ferramentas necessárias
-
-A única configuração necessária para codificar sites _deco.cx_ é **instalar o
-Deno** em sua máquina. Para instalar o Deno, siga as
-[instruções na página deno.land](https://deno.land/manual/getting_started/installation).
-
-> Certifique-se de manter o deno atualizado! Caso já tenha o deno instalado,
-> rode o `deno upgrade` para atualizá-lo.
-
-Recomendamos fortemente o uso do
-[Visual Studio Code](https://code.visualstudio.com/download) como IDE e do
-[Git](https://github.com/git-guides/install-git) para controle de versão.
-
-
-
-### 1. Crie um site deco.cx
-
-Siga o tutorial de
-[Criar um Site Deco](/docs/pt/getting-started/creating-a-site).
-
-### 2. Clone o repositório do seu site
-
-Aceite o convite para se juntar ao repositório criado para o seu Site. Esse
-convite é enviado para o endereço de e-mail do seu perfil do Github.
-
-Caso não tenha utilizado uma conta do github para entrar no admin ou caso não
-tenha recebido um convite, é possível adicionar uma conta do github como
-colaborador do Site na aba Configurações do site no Admin.
-
-
-
-
-
-Use o comando `git clone` para baixar o código do site para o seu máquina.
-Recomendamos o uso de SSH. Abra o terminal e execute o comando:
-
-```bash
-git clone git@github.com:deco-sites/site-name.git
-```
-
-**Lembre-se de alterar `site-name` para o nome do seu site.**
-
-Se preferir, é possível clonar o repositório usando outros métodos, como _git
-https_, por meio da ferramenta _Github_ ou através de uma IDE. Na página do
-repositório no _Github_ há detalhes sobre algumas diferentes maneiras para fazer
-o clone.
-
-### 3. Executar servidor local
-
-Para rodar seu site localmente, editar e ver as mudanças no Admin, você precisa
-ter um ambiente local (um ambiente com `localhost` como host). Para isso, você
-pode usar o ambiente `localhost` criado por padrão ou criar um novo.
-
-#### 3.1 Crie um novo ambiente
-
-Abra a aba de Releases e clique no botão Novo ambiente no Admin.
-
-
-
-#### 3.2 Defina o nome e o host do seu ambiente
-
-Escolha um nome para o seu ambiente e defina seu host como localhost.
-
-
-
-#### 3.3 Execute seu site localmente
-
-Copie o comando mostrado depois da criação do ambiente e cole-o no seu terminal
-na pasta do site.
-
-
-
-
-
-Aguarde a inicialização do projeto. Na primeira execução, o deno irá baixar e
-realizar um cache das dependências do projeto, e a deco irá preparar detalhes do
-site.
-
-O site estará acessível em https://{nome-do-ambiente}--{nome-do-site}.deco.site.
-
-
-
-Caso o código de alguma seção em uso na página inicial do site seja alterado,
-isto será refletido no endereço acima.
-
-#### 3.4 Publicando alterações
-
-Considerando que você escolheu o Deco Hosting para o deploy de seu site, o
-processo de _deploy_ em development é muito simples: apenas fazer um _git push_
-das alterações na _branch_ _**main**_.
-
-Você também pode publicar seu ambiente no próprio Admin clicando no botão de
-Publicar agora, na página do seu ambiente.
-
-
-
-## Agora você pode começar a criar sites cada vez mais do seu jeito! :)
-
-Continue estando a deco para entender o potencial e como criar ou alterar
-sections, loaders e outros elementos da deco para criar sites e experiências
-cada vez ,mais personalizadas.
-
-Certifique-se de se juntar ao nosso
-[comunidade no Discord](https://deco.cx/discord). Acompanhe as novidades e
-continue evoluindo junto com a gente!
diff --git a/docs/getting-started/adding-an-app/en.md b/docs/getting-started/adding-an-app/en.md
deleted file mode 100644
index 3884833b..00000000
--- a/docs/getting-started/adding-an-app/en.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-description: Adding an App
-since: 1.33.2
----
-
-In this documentation, we will guide you through adding an `App` to your site.
-An `App` allows you to easily integrate new functionalities, sections, and
-features into your site.
-
-## 1. Access the Apps Page
-
-To add an app to your site, click on the Apps tab. You will see a list of all
-available apps. In this case, we will add the Weather App.
-
-## 2. Install the App
-
-Click on the switch button to install the app on your site.
-
-
-
-The Weather App provides a section that displays a message with the current
-temperature. Besides the section, this app also includes a loader, a TypeScript
-function that returns data typically needed in a Section. This specific loader
-retrieves the temperature of a given location (or the current location if no
-location is specified). Let's use both and see how they can be integrated.
-
-## 3. Use the App's Functionalities
-
-### 3.1 Go to the WhatsTheTemperature Section
-
-Navigate to the Sections Page and click on the WhatsTheTemperature Section. You
-can filter the list by the app.
-
-
-
-Open the section properties. The only property this section has is a
-temperature, which is a number representing the temperature in Celsius.
-
-### 3.2 Configure the Section to Use the App's Loader
-
-Click on the Temperature field to choose how you will provide the temperature
-information.
-
-
-
-You have three options:
-
-1. **Manual Entry**: Provide an arbitrary number for the temperature.
-
- 
-
-2. **Default Value**: Leave the temperature field blank. The section accepts a
- null value, and a default fixed temperature will be displayed.
-
- 
-
-3. **Use the Loader**: Utilize the loader made available by the Weather App.
-
- 
-
- If you do not provide latitude and longitude, the loader will fetch the
- temperature of your current location. Alternatively, providing the latitude
- and longitude of a specific place will return the current temperature for
- that location:
-
- 
-
- > Looks like it’s a bit cold in Greenland.
-
-## 4. Use the Section in Your Pages
-
-Now you can use the configured section in your site pages just like you did in
-[a previous tutorial](/docs/en/getting-started/creating-a-new-page). That's it!
-Enjoy exploring this and other apps on deco.cx!
diff --git a/docs/getting-started/adding-an-app/pt.md b/docs/getting-started/adding-an-app/pt.md
deleted file mode 100644
index 3c4a0698..00000000
--- a/docs/getting-started/adding-an-app/pt.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-description: Adicionando um App
----
-
-Nesta documentação, vamos te guiar na adição de um `App` ao seu site. Um `App`
-permite que você integre facilmente novas funcionalidades, seções e recursos ao
-seu site.
-
-## 1. Acessar a Página de Apps
-
-Para adicionar um app ao seu site, clique na aba Apps. Você verá uma lista de
-todos os apps disponíveis. Neste caso, vamos adicionar o Weather App.
-
-## 2. Instalar o App
-
-Clique no botão de switch para instalar o app no seu site.
-
-
-
-O Weather App fornece uma seção que exibe uma mensagem com a temperatura atual.
-Além da seção, este app também inclui um loader, uma função TypeScript que
-retorna dados tipicamente utilizados em Sections. Este loader específico obtém a
-temperatura de um local determinado (ou da localização atual se nenhum local for
-especificado). Vamos usar ambos e ver como podem ser integrados.
-
-## 3. Usar as Funcionalidades do App
-
-### 3.1 Vá para a Seção WhatsTheTemperature
-
-Navegue até a Página de Seções e clique na Seção WhatsTheTemperature. Você pode
-filtrar a lista pelo app.
-
-
-
-Abra as propriedades da seção. A única propriedade que esta seção possui é a
-temperatura, que é um número representando a temperatura em Celsius.
-
-### 3.2 Configure a Seção para Usar o Loader do App
-
-Clique no campo Temperatura para escolher como você vai fornecer a informação de
-temperatura.
-
-
-
-Você tem três opções:
-
-1. **Entrada Manual**: Forneça um número arbitrário para a temperatura.
-
- 
-
-2. **Valor Padrão**: Deixe o campo de temperatura em branco. A seção aceita um
- valor nulo, e uma temperatura fixa padrão será exibida.
-
- 
-
-3. **Usar o Loader**: Utilize o loader disponibilizado pelo Weather App.
-
- 
-
- Se você não fornecer latitude e longitude, o loader buscará a temperatura da
- sua localização atual. Alternativamente, fornecendo a latitude e a longitude
- de um local específico, será retornada a temperatura atual desse local:
-
- 
-
- > Parece que está um pouco frio na Groenlândia.
-
-## 4. Usar a Seção em Suas Páginas
-
-Agora você pode usar a seção configurada nas páginas do seu site, assim como fez
-em [um tutorial anterior](/docs/pt/getting-started/creating-a-new-page). É isso!
-Aproveite para explorar este e outros apps no deco.cx!
diff --git a/docs/getting-started/changes-and-publishing/en.md b/docs/getting-started/changes-and-publishing/en.md
deleted file mode 100644
index 91fe5b03..00000000
--- a/docs/getting-started/changes-and-publishing/en.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: Learn how to restore previous versions of your website
-since: 1.0.0
----
-
-It's very important to have control and autonomy to manage your pages and blocks
-and to have the ability to make and undo changes easily if needed. With that in
-mind, _deco.cx_ allows you to create and manage **environments**.
-
-## See Changes and Publish
-
-Let's take a look at the changes we made in this environment. Click the dropdown
-menu and then select the staging option. You will see this page, showing what
-was changed compared to the site in production. In our case, we added a new page
-with a few sections on it. This difference is displayed via JSON, which
-represents the site's state in a structured way.
-
-
-
-From here, you can publish our changes to production by clicking the "Publish
-now" button or the "Publish" button next to the environment dropdown.
-
-### Rebasing Your Changes
-
-When publishing with multiple environments, you may need to merge your changes
-with those made in other environments. For example, if you are editing your site
-in your new environment, `maria`, while a teammate is editing in the `staging`
-environment, and your teammate publishes their changes, you will need to rebase
-your environment to incorporate the new changes now in production.
-
-In this scenario, instead of seeing the "Publish now" button on the Releases
-page, you will see a "Rebase" button, as shown below.
-
-
-
-Click this button to incorporate the production changes into your environment.
-After rebasing, you can publish your changes by clicking the "Publish now"
-button.
diff --git a/docs/getting-started/changes-and-publishing/pt.md b/docs/getting-started/changes-and-publishing/pt.md
deleted file mode 100644
index c43c0b4f..00000000
--- a/docs/getting-started/changes-and-publishing/pt.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: Aprenda como restaurar versões anteriores do seu site
-since: 1.0.0
----
-
-É muito importante ter controle e autonomia para gerenciar suas páginas e blocos
-e ter a capacidade de fazer e desfazer alterações facilmente, se necessário. Com
-isso em mente, o _deco.cx_ permite que você crie e gerencie **ambientes**.
-
-## Ver Alterações e Publicar
-
-Vamos dar uma olhada nas mudanças que fizemos neste ambiente. Clique no dropdown
-e selecione a opção staging. Você verá esta página, mostrando o que foi alterado
-em comparação com o site em produção. No nosso caso, adicionamos uma nova página
-com algumas seções. Essa diferença é exibida via JSON, que representa o estado
-do site de forma estruturada.
-
-
-
-A partir daqui, você pode publicar nossas mudanças para a produção clicando no
-botão "Publicar agora" ou no botão "Publicar" ao lado do dropdown do ambiente.
-
-### Rebaseando suas Alterações
-
-Ao publicar com múltiplos ambientes, pode ser necessário mesclar suas alterações
-com as feitas em outros ambientes. Por exemplo, se você estiver editando seu
-site no seu novo ambiente, `maria`, enquanto um colega estiver editando no
-ambiente `staging`, e seu colega publicar suas mudanças, você precisará rebasear
-seu ambiente para incorporar as novas mudanças que agora estão em produção.
-
-Nesse cenário, em vez de ver o botão "Publicar agora" na página de Lançamentos,
-você verá um botão "Rebase", como mostrado abaixo.
-
-
-
-Clique neste botão para incorporar as mudanças de produção no seu ambiente.
-Depois de rebasear, você pode publicar suas alterações clicando no botão
-"Publicar agora".
diff --git a/docs/getting-started/creating-a-new-page/en.md b/docs/getting-started/creating-a-new-page/en.md
deleted file mode 100644
index c40624d5..00000000
--- a/docs/getting-started/creating-a-new-page/en.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-description: Create pages on deco.cx with no need to code
----
-
-Now we will create a new page to your site. The process is very simple:
-
-## 1. Access the Pages tab
-
-**Pages** have a dedicated space in deco.cx's Admin and you can access it via
-the side bar.
-
-
-
-On this page, you can see all the pages published on the site, along with the
-paths through which they are accessible to your users.
-
-Here you can click on the "Create new page" button to create a page.
-
-> Alternatively, you can click on the "Create page" button at the Site Home or
-> type `/new page` on the command bar located on the top center of the Admin
-> page.
-
-## 2. Give the page a name and a path
-
-Fill out the form with the following information:
-
-- **Name:** meaningful name to understand what that page represents. Doesn't
- impact page's UI or metadata.
-- **Path:** represents the URL which that page will be accesible to your users.
- It can be static (e.g: `/posts`) or dynamic (e.g: `/posts/:slug`,
- `/search/*`), following [URLPattern](http://mdn.io/urlpattern) schema.
-- **Template** (optional): copy a structure from a page that already exists.
-
-Here we will create a blank page.
-
-
-
-## 3. Edit the page content
-
-Now you can edit and add new components available on your site and set up the
-page just as you want it.
-
-To add a new component to the page, click on the Add Sections button in the
-editor and explore all the available options. Sections are UI components (small
-parts of the site) that can receive props and can be edited through a form in
-the Admin.
-
-
-
-> If you want to develop/code a new Section, check our
-> [Developing Guide](/docs/en/developing-guide/setup).
-
-Here, we will select the Hero section.
-
-
-
-After the selection, we can see the form where we can edit its properties. These
-properties are obtained from the TypeScript props of that section.
-
-
-
-> Note: The example you see above is of a reusable block, which is a global
-> resource that can be used by other pages. This is why you cannot edit this
-> section unless you detach it to change only on that page or edit it in a new
-> space (which will affect all pages that use it).
-
-Let's detach the section to edit its properties for that page. We will change
-the Title in the Title property. As you make changes, the preview will update in
-real-time to show you how the section will look with the new property values.
-
-
-
-Each component may have different properties that can be customized. These
-properties are defined in the code of the section and can be accessed through
-the props object.
diff --git a/docs/getting-started/creating-a-new-page/pt.md b/docs/getting-started/creating-a-new-page/pt.md
deleted file mode 100644
index 32798e24..00000000
--- a/docs/getting-started/creating-a-new-page/pt.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-description: Aprenda como criar páginas na deco.cx sem precisar de código
----
-
-Agora vamos criar uma nova página para o seu site. O processo é muito simples:
-
-## 1. Acesse a aba de Páginas
-
-Páginas têm um space dedicado no Admin do Deco.cx, acessível pela barra lateral.
-
-
-
-Nesta página, você pode ver todas as páginas publicadas no site, junto com os
-caminhos pelos quais elas são acessíveis aos seus usuários.
-
-Aqui você pode clicar no botão "Criar nova página" para criar uma página.
-
-> Alternativamente, você pode clicar no botão "Criar página" na Página Inicial
-> do Site ou digitar `/new page` na barra de comando localizada no topo central
-> da página do Admin.
-
-## 2. Dê um nome e um caminho à página
-
-Preencha o formulário de criação de página com as seguintes informações:
-
-- **Nome:** nome significativo para entender o que essa página representa. Não
- afeta a interface do usuário ou os metadados da página.
-- **Path:** representa a URL que aquela página estará acessível para seus
- usuários. Pode ser estático (por exemplo: `/posts`) ou dinâmico (por exemplo:
- `/posts/:slug`, `/search/*`), seguindo o esquema
- [URLPattern](http://mdn.io/urlpattern).
-- **Template** (opcional): selecione uma página já existente e comece a partir
- dela.
-
-Aqui, vamos criar uma página em branco.
-
-
-
-## 3. Edite o conteúdo da página
-
-Agora é possível editar e adicionar novas Sections disponíveis em seu site e
-configurar a página do jeito que você quiser.
-
-Para adicionar um novo componente à página, clique no botão "Adicionar Seções"
-no editor e explore todas as opções disponíveis. Seções são componentes de UI
-(pequenas partes do site) que podem receber propriedades e serem editadas
-através de um formulário no Admin.
-
-
-
-> Se você deseja desenvolver/codar uma nova seção, consulte nosso
-> [Guia de desenvolvimento](/docs/pt/developing-guide/setup).
-
-Vamos selecionar a seção Hero.
-
-
-
-Após a seleção, podemos ver o formulário onde podemos editar suas propriedades.
-Essas propriedades são obtidas a partir das props do TypeScript dessa seção.
-
-
-
-> Nota: O exemplo que você vê acima é de um bloco reutilizável, que é um recurso
-> global que pode ser usado por outras páginas. Por isso, você não pode editar
-> essa seção a menos que a desanexe para alterar apenas nessa página ou a edite
-> em um novo espaço (o que afetará todas as páginas que a utilizam).
-
-Vamos desanexar a seção para editar suas propriedades para essa página. Vamos
-mudar o Título na propriedade Title. À medida que você faz alterações, a
-pré-visualização será atualizada em tempo real para mostrar como a seção ficará
-com os novos valores de propriedade.
-
-
-
-Cada componente pode ter diferentes propriedades que podem ser personalizadas.
-Essas propriedades são definidas no código da seção e podem ser acessadas
-através do objeto props.
diff --git a/docs/getting-started/creating-a-site/en.md b/docs/getting-started/creating-a-site/en.md
deleted file mode 100644
index 072d6bc0..00000000
--- a/docs/getting-started/creating-a-site/en.md
+++ /dev/null
@@ -1,114 +0,0 @@
----
-description: |
- Step-by-step guide on how to create a site on Deco.cx.
----
-
-This documentation will guide you through the process of creating and setting up
-your first site using Deco.cx. A Deco site is the primary asset for Deco users,
-serving as the hub for creating, editing, and managing their own space on the
-web.
-
-## 1. Select a Template
-
-Go to the [Deco Admin](https://admin.deco.cx/spaces/new) and select a template
-to start. In this example, we will choose the landing template, which has the
-structure and components common to landing pages.
-
-
-
-## 2. Explore the Template
-
-After selecting a template, you can explore its components in a shared view-only
-mode. This allows you to explore the admin settings and features of the template
-without making any changes.
-
-
-
-## 3. Save Your Site
-
-To officially create your site from the template, click on the "Use this
-template" button in the top right corner of the admin page to claim ownership of
-the site.
-
-
-
-### 3.1. Log into the Platform
-
-### 3.2. Name Your Site and Choose a Team
-
-You will be prompted to choose a name for your site and a team to save it to:
-
-
-
-If you do not have a team yet, one will be created with a name of your choice:
-
-
-
-Deco will configure your site according to the template you chose.
-
-## 4. Finish Site Setup
-
-You will be redirected to the site home page:
-
-
-
-From here, you have two options:
-
-1. Run your site locally using your local development environment.
- - This gives you the power to modify your site by changing its code as well
- as using the Deco Admin.
-2. Create a new environment to edit your site through only the Deco Admin.
- - Here you can make changes to your site without needing access to the site
- code.
-
-### Option 1: Run Your Site Locally
-
-To run your site locally, you need to:
-
-1. Install Deno on your machine. You can follow the instructions on the
- [Deno website](https://deno.land/).
-2. Clone the site repository:
- ```bash
- git clone git@github.com:deco-sites/maria-landing.git
- ```
-3. Enter the repository folder and start the server:
- ```bash
- cd maria-landing
- DECO_ENV_NAME=localhost deno task start
- ```
-
-Now, you can modify the code and see the changes in the Admin and vice-versa.
-
-### Option 2: Create a New Environment
-
-Environments are isolated workspaces where you can make changes to your site
-without affecting the live site. To create a new environment:
-
-1. Click on the "New" button in the environment dropdown in the Admin.
- 
-2. Choose a name and a host for your environment. Since we are not going to run
- the site locally, select the Web option for the host.
- 
-
-You now have your own environment and isolated workspace to make changes to your
-site without needing to run its code.
-
-## (Optional) 5. Deploy Your Site
-
-If you want to deploy your site to a live environment using the Deco Hosting,
-you can do so by clicking the "Add Deco Hosting" button on the site home page or
-the "Go live" button in the environment dropdown.
-
-
-
-Your site will be accessible through a public URL like
-`https://deco-sites-maria-landing.deno.dev/`.
-
-This deployment will include 5,000 page views (shared across all team sites). If
-you need more page views, you can
-[upgrade your plan](https://deco.cx/en/pricing) in the Deco Admin.
-
-## 6. Congratulations! You've Created Your First Deco Site
-
-That's it! Now you can edit your site as you wish. Don't forget to follow the
-next tutorials to discover more features and capabilities of Deco.cx.
diff --git a/docs/getting-started/creating-a-site/pt.md b/docs/getting-started/creating-a-site/pt.md
deleted file mode 100644
index b7547f6f..00000000
--- a/docs/getting-started/creating-a-site/pt.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-description: |
- Passo a passo de como criar um site na Deco.cx.
----
-
-Esta documentação vai te guiar pelo processo de criação e configuração do seu
-primeiro site usando o Deco.cx. Um site Deco é o principal ativo para os
-usuários do Deco, servindo como o centro para criar, editar e gerenciar seu
-próprio espaço na web.
-
-## 1. Selecionar um Template
-
-Vá para o [Deco Admin](https://admin.deco.cx/spaces/new) e selecione um template
-para começar. Neste exemplo, vamos escolher o template de landing page, que tem
-a estrutura e componentes comuns a páginas de aterrissagem.
-
-
-
-## 2. Explorar o Template
-
-Depois de selecionar um template, você pode explorar seus componentes em modo
-compartilhado de visualização apenas. Isso permite que você explore as
-configurações e recursos do template sem fazer nenhuma alteração.
-
-
-
-## 3. Salvar Seu Site
-
-Para criar oficialmente seu site a partir do template, clique no botão "Use this
-template" no canto superior direito da página de administração para reivindicar
-a propriedade do site.
-
-
-
-### 3.1. Faça login na Plataforma
-
-### 3.2. Dê um Nome ao Seu Site e Escolha uma Equipe
-
-Você será solicitado a escolher um nome para o seu site e uma equipe para
-salvá-lo:
-
-
-
-Se você ainda não tiver uma equipe, uma será criada com um nome à sua escolha:
-
-
-
-A Deco vai configurar seu site de acordo com o template que você escolheu.
-
-## 4. Finalizar Configuração do Site
-
-Você será redirecionado para a página inicial do site:
-
-
-
-A partir daqui, você tem duas opções:
-
-1. Rodar seu site localmente usando seu ambiente de desenvolvimento local.
- - Isso te dá o poder de modificar seu site alterando seu código, bem como
- usando o Deco Admin.
-2. Criar um novo ambiente para editar seu site apenas através do Deco Admin.
- - Aqui você pode fazer alterações no seu site sem precisar ter acesso ao
- código do site.
-
-### Opção 1: Rodar Seu Site Localmente
-
-Para rodar seu site localmente, você precisa:
-
-1. Instalar o Deno na sua máquina. Você pode seguir as instruções no
- [site do Deno](https://deno.land/).
-2. Clonar o repositório do site:
- ```bash
- git clone git@github.com:deco-sites/maria-landing.git
- ```
-3. Entrar na pasta do repositório e iniciar o servidor:
- ```bash
- cd maria-landing
- DECO_ENV_NAME=localhost deno task start
- ```
-
-Agora, você pode modificar o código e ver as mudanças no Admin e vice-versa.
-
-### Opção 2: Criar um Novo Ambiente
-
-Ambientes são espaços de trabalho isolados onde você pode fazer alterações no
-seu site sem afetar o site ao vivo. Para criar um novo ambiente:
-
-1. Clique no botão "New" no dropdown de ambientes no Admin.
- 
-2. Escolha um nome e um host para o seu ambiente. Como não vamos rodar o site
- localmente, selecione a opção Web para o host.
- 
-
-Agora você tem seu próprio ambiente e espaço de trabalho isolado para fazer
-alterações no seu site sem precisar rodar seu código.
-
-## (Opcional) 5. Deploy do Seu Site
-
-Se você quiser fazer o deploy do seu site usando o Hosting da Deco, você pode
-fazer isso clicando no botão "Add Deco Hosting" na página inicial do site ou no
-botão "Go live" no dropdown de ambientes.
-
-
-
-Seu site se tornará acessível através de uma URL pública como
-`https://deco-sites-maria-landing.deno.dev/`.
-
-Esse deploy incluirá 5.000 visualizações de página (compartilhadas entre todos
-os sites da equipe). Se você precisar de mais visualizações de página, você pode
-[atualizar seu plano](https://deco.cx/en/pricing) no Deco Admin.
-
-## 6. Parabéns! Você Criou Seu Primeiro Site Deco
-
-É isso aí! Agora você pode editar seu site como quiser. Não se esqueça de seguir
-os próximos tutoriais para descobrir mais recursos e capacidades do Deco.cx.
diff --git a/docs/getting-started/custom-domains/apex-domains/en.md b/docs/getting-started/custom-domains/apex-domains/en.md
deleted file mode 100644
index 95841905..00000000
--- a/docs/getting-started/custom-domains/apex-domains/en.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: How to Redirect a Non-www Domain
-since: 1.1.0
----
-
-## What is an Apex Domain?
-
-An apex domain is the term used for a root domain, without a subdomain.
-
-Example:
-
-- `www.example.com.br` -> Subdomain
-- `loja.example.com.br` -> Subdomain
-- `example.com.br` - Apex Domain
-
-## Can I point a deco.cx site to the apex domain?
-
-No, it is not yet possible to point a deco.cx site to your apex domain.
-
-Therefore, we have created an easy redirection solution so that access to the
-Apex domain is not lost.
-
-## How to Redirect an Apex Domain in deco.cx?
-
-1 - In the control panel of your site on deco.cx, go to the Settings page.
-
-2 - Click on "Add existing domain"
-
-3 - Enter your apex domain (without subdomain):
-
-
-
-4 - Define which subdomain to redirect to:
-
-
-
-5 - Now, you will see the settings that must be made in your domain hosting
-platform:
-
-
-
-6 - After making the configurations, click on Validate Domain.
-
-The validation step is essential for functionality and depends on the DNS
-propagation set up in the hosting service.
-
-Generally, propagation occurs within a few hours, but it can take up to 48 hours
-in some cases.
diff --git a/docs/getting-started/custom-domains/apex-domains/pt.md b/docs/getting-started/custom-domains/apex-domains/pt.md
deleted file mode 100644
index f403d0ca..00000000
--- a/docs/getting-started/custom-domains/apex-domains/pt.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Como redirecionar domínio sem www
-since: 1.1.0
----
-
-## O que é domínio apex?
-
-Domínio apex é o termo utilizado para domínio raiz, sem subdomínio.
-
-Exemplo:
-
-- `www.example.com.br` -> Subdomínio
-- `loja.example.com.br` -> Subdomínio
-- `example.com.br` - Domínio Apex
-
-## Posso apontar um site deco.cx para o domínio apex?
-
-Não, ainda não é possível apontar um site deco.cx para o seu domínio apex.
-
-Por isso, criamos uma solução fácil de redirecionamento, para que os acessos ao
-domínio Apex não sejam perdidos.
-
-## Como redirecionar um domínio apex na deco.cx?
-
-1 - No painel do seu site na deco.cx, acesse a página de Configurações.
-
-2 - Clique em "Adicionar domínio existente"
-
-3 - Insira o seu domínio apex (sem subdomínio):
-
-
-
-4 - Defina para qual subdomínio redirecionar:
-
-
-
-5 - Agora, você verá os apontamentos que devem ser feitos na sua plataforma de
-hospedagem de domínio:
-
-
-
-6 - Após realizar as configurações, clique em Validar Domínio.
-
-A etapa de validação é essencial para o funcionamento e ela depende da
-propagação do DNS configurado no serviço de hospedagem.
-
-No geral, a propagação ocorre dentro algumas horas, mas pode levar até 48 horas
-em alguns casos.
diff --git a/docs/getting-started/custom-domains/en.md b/docs/getting-started/custom-domains/en.md
deleted file mode 100644
index ed654576..00000000
--- a/docs/getting-started/custom-domains/en.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-description: Adding custom domains.
-since: 1.1.0
----
-
-## Summary
-
-1. What is a custom domain?
-2. Adding a custom domain
- - Requirements
- - Adding a domain in the admin panel
-3. Validating the added domain
- - Step-by-step
- - Testing your configuration
-4. Troubleshooting
-
-## What is a custom domain?
-
-Each deco site is assigned a public domain through which it can be accessed,
-such as the domain `your.deco.site` used in the address
-`https://your.deco.site`. However, it is common to acquire a custom domain to
-strengthen the brand or simplify access to a site.
-
-Deco does not currently provide a domain name server, but it is possible to hire
-this service from other companies such as GoDaddy, Google, and Cloudflare. From
-a technical standpoint, this server must allow the creation of `CNAME` records.
-It's necessary to be cautious as some hosting services may offer name server
-services but not allow this type of configuration!
-
-## Adding a custom domain
-
-### Requirements
-
-To add a domain:
-
-- The site needs to have a `deco.site` domain provided by Deco.
-- The user needs to be an administrator of the site.
-- The user needs to acquire a custom domain from a name server provider that
- allows `CNAME` configuration.
-- The user or administrator of the custom domain needs to create a `CNAME`
- record as indicated in the validation step.
-- ONLY if the domain already has any "CAA" records, it is necessary to add new
- records.
-
-### Before adding a domain
-
-Additional configuration may be required on your website depending on the
-integration used.
-
-If the domain has a `CAA` record, you need to add new domains so that we can
-generate the certificate for your new domain. Important:
-`If your domain doesn't have CAA records, this step is not necessary (and not recommended)`.
-
-You can check if the domain has these records using the
-[Google Admin Toolbox Dig](https://toolbox.googleapps.com/apps/dig/#CAA/) or the
-command `dig yourdomain.com.br caa +short`. If the query doesn't return data
-(`Record not found!`), skip this step.
-
-If your site has certificates, you need to add the following records, especially
-the last two (`pki.goog`). Add them to your site's domain (or use `@` as the
-field name).
-
-```
-0 issue "digicert.com; cansignhttpexchanges=yes"
-0 issuewild "digicert.com; cansignhttpexchanges=yes"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog; cansignhttpexchanges=yes"
-0 issuewild "pki.goog; cansignhttpexchanges=yes"
-```
-
-Some domain providers do not accept CAA with `cansignhttpexchanges`. In that
-case, configure it without this property:
-
-```
-0 issue "digicert.com"
-0 issuewild "digicert.com"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog"
-0 issuewild "pki.goog"
-```
-
-Check with your domain provider for further instructions on how to add these
-records.
-
-### Adding a domain in the admin panel
-
-1. Go to the home page of the site and navigate to the Settings tab.
-
- 
-
-2. In Settings, under the Domains listing, check that there is a `deco.site`
- domain and add an existing domain. **Contact us if you don't have a
- `deco.site` domain**.
-
-3. Add your domain for the site in the opened modal. The domain should only be
- the name, without any protocol (http/https) or slashes. Wait for the initial
- configuration process.
-
- 
-
-4. After adding, the domain is registered with Deco but is not yet operational.
- You now need to set up the domain according to the configuration instructions
- in the _Domain setup_ box under the domain name.
-
-5. Add the domain configuration to your domain server. This represents a `CNAME`
- record from the custom domain to the deco domain. In the example, this would
- be a record from the domain `www.example.com` to `landing-docs1.deco.site`.
-
- 
-
-6. Once configured, click on validate configuration for Deco to verify if the
- record was set up correctly. Important: The domain will remain in an
- "Waiting" state until we complete the configuration on our infrastructure.
-
-7. Wait a few minutes and test accessing your domain in the browser.
-
-## Troubleshooting
-
-### Domain is not validated
-
-Verify that it was correctly registered in the name server. Use a tool like
-[Google's DNS](https://dns.google/) to check if there is a `CNAME` record
-correctly pointing to the `deco.site` domain.
-
-### After validation, the settings still show my domain as "Awaiting"
-
-Sometimes, the domain can generate certificates even after leaving the
-validation screen. However, even in this case, the custom domain may already be
-operational.
-
-### I want to transfer the apex (root) to Deco.
-
-Currently, it is not possible to make this setup in Deco.
-
-### Other situations
-
-If you need further assistance, please reach out to Deco's Discord server.
diff --git a/docs/getting-started/custom-domains/pt.md b/docs/getting-started/custom-domains/pt.md
deleted file mode 100644
index 148cd14a..00000000
--- a/docs/getting-started/custom-domains/pt.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-description: Adicionando domínios próprios
-since: 1.1.0
----
-
-## Tópicos
-
-1. O que é um domínio próprio?
-2. Adicionando um domínio
- - Requisitos
- - Adicionando um domínio no admin
-3. Validando o domínio adicionado
- - Passo-a-passo
- - Testando sua configuração
-4. Erros comuns
-
-## O que é um domínio próprio?
-
-Cada site deco recebe um domínio público na qual ela é acessível, como o domínio
-`your.deco.site` que é usado no endereço `https://your.deco.site`. No entanto, é
-comum contratar um domínio próprio para fortalecer a marca ou facilitar o acesso
-a um site.
-
-A deco não oferece (ainda) um servidor próprio de nomes de domínios, mas é
-possível contratar esse serviço por outras empresas como godaddy, google e
-cloudflare. Do ponto de vista técnico, é importante que esse servidor permita a
-criação de apontamentos do tipo `CNAME`. É preciso ter cuidado pois alguns
-serviços de hospedagem podem oferecer o serviço de nomes, mas não permitir este
-tipo de configuração!
-
-## Adicionando um domínio próprio
-
-### Requisitos
-
-Para adicionar um domínio:
-
-- o site precisa ter um domínio `deco.site` oferecido pela deco
-- o usuário precisa ser administrador do site
-- o usuário precisa contratar um domínio próprio em um servidor de nomes que
- permita configuração de `CNAME`
-- o usuário ou administrador do domínio próprio precisa criar um apontamento
- `CNAME` indicado na etapa de validação
-- APENAS caso o domínio já tenha algum apontamento `CAA`, é preciso adicionar
- novos apontamentos
-
-### Antes de adicionar um domínio
-
-Pode ser necessária alguma configuração adicional em seu site dependendo da
-integração utilizada.
-
-Caso o domínio tenha algum apontamento `CAA`, é preciso adicionar novos domínios
-para que possamos gerar o certificado do seu novo domínio. Importante:
-`caso seu domínio não tenha apontamentos CAA, esta etapa não é necessária (e não é recomendada)`.
-
-É possível verificar se o domínio tem esses apontamentos através da ferramenta
-[Google Admin Toolbox Dig](https://toolbox.googleapps.com/apps/dig/#CAA/) ou o
-comando `dig seudominio.com.br caa +short`. Caso a consulta não retorne dados
-(`Record not found!`), ignore esta etapa.
-
-Caso seu site tenha certificados, é preciso adicionar os registros abaixo,
-especialmente os dois últimos (`pki.goog`). Adicione no domínio do seu site (ou
-`@` como nome do campo).
-
-```
-0 issue "digicert.com; cansignhttpexchanges=yes"
-0 issuewild "digicert.com; cansignhttpexchanges=yes"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog; cansignhttpexchanges=yes"
-0 issuewild "pki.goog; cansignhttpexchanges=yes"
-```
-
-Alguns provedores de domínios não aceitam o CAA com `cansignhttpexchanges`,
-neste caso, configure sem essa propriedade:
-
-```
-0 issue "digicert.com"
-0 issuewild "digicert.com"
-0 issue "sectigo.com"
-0 issuewild "sectigo.com"
-0 issue "letsencrypt.org"
-0 issuewild "letsencrypt.org"
-0 issue "pki.goog"
-0 issuewild "pki.goog"
-```
-
-Veja mais instruções no seu provedor de domínios em como adicionar esses campos.
-
-### Adicionando um domínio no admin
-
-1. Entre na página inicial do site, e navegue para a aba de Configurações.
-
- 
-
-2. Em Configurações, na listagem de Domínios, verifique que há um domínio
- `deco.site` e adicione um domínio existente. **Caso não tenha um domínio
- `deco.site`, entre em contato conosco**.
-
-3. Adicione o domínio próprio do site no modal aberto. O domínio deve ser apenas
- o nome, sem protocolo (http/https) ou barras. Aguarde o processo de
- configuração inicial.
-
- 
-
-4. Depois da adição, o domínio está registrado na deco, mas ainda não é
- operante. É preciso agora fazer o setup do domínio de acordo com as
- instruções de configuração descritas em _Configuração de Domínio_, logo em
- baixo do domínio adicionado.
-
-5. Adicione a configuração de domínio no seu servidor de domínios. Isto
- representa um apontamento `CNAME` do domínio própio, para o domínio da deco.
- No exemplo, isto representa um apontamento do domínio `www.example.com` para
- `landing-docs1.deco.site`.
-
- 
-
-6. Uma vez configurado, clique em validar configuração para que a deco valide se
- o apontamento foi corretamente realizado. **Importante: O domínio continuará
- no estado de em espera por validação até que o apontamento seja realizado na
- nossa infraestrutura**.
-
-7. Aguarde alguns minutos e teste acessar seu domínio no browser.
-
-## Erros Comuns
-
-### O domínio não é validado
-
-Verifique se o mesmo foi cadastrado corretamente no servidor de nomes. Use uma
-ferramenta como o [DNS da google](https://dns.google/) para verificar se há um
-registro de `CNAME` apontando o domínio corretamente para um domínio
-`deco.site`. Alguns provedores de domínios podem levar até 12 horas para
-efetivar o novo apontamento.
-
-### Após a validação, as configurações ainda exibem meu domínio como "Awaiting"
-
-Por vezes, o domínio pode fazer a geração de certificados mesmo depois de sair
-da tela de validação. No entanto, mesmo nesse caso, o domínio próprio pode já
-estar operante.
-
-### Quero transferir o apex (nome raíz) para a deco.
-
-Atualmente, não é possível fazer esse apontamento na deco.
-
-### Outras situações
-
-Procure o discord da deco caso precise de ajuda!
diff --git a/docs/gtm/en.md b/docs/gtm/en.md
deleted file mode 100644
index 50352367..00000000
--- a/docs/gtm/en.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-description: Learn how to set up GTM in Deco
----
-
-Adding Google Tag Manager (GTM) is a common practice for many websites. The
-deco.cx platform offers a section that facilitates automatic integration of GTM
-into your site. However, it is important to note that using a GTM with many
-scripts can negatively affect the browsing experience and site performance.
-
-## Adding a Global Section for Site Loading
-
-A recommended approach is to add the section that loads the GTM script across
-all pages of your site. This can be achieved using global sections, which are
-automatically loaded on all admin-generated pages. For proxied pages, it is
-still necessary to insert the script directly at its source.
-
-Start by selecting the site app:
-
-
-
-Next, locate the global sections properties:
-
-
-
-Finally, add the Analytics section:
-
-
-
-## Configuring Your Section
-
-The default Analytics section supports various configuration options. If you
-have your GTM container ID, simply add it to the "Tracking ID" field to enable
-its use on the site. If you're using a Measurement ID, this can also be
-configured.
-
-Additionally, it is possible to set up custom sources for the site.
-
-
-
-## Configuring GTM per Page
-
-You can also add the Analytics section to individual pages. With this setup,
-each page can have its own GTM, allowing the use of different GTMs for different
-pages of your site.
diff --git a/docs/gtm/pt.md b/docs/gtm/pt.md
deleted file mode 100644
index 5832ad45..00000000
--- a/docs/gtm/pt.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-description: Aprenda como configurar o GTM na Deco
----
-
-Adicionar o Google Tag Manager (GTM) é uma prática comum em muitos sites. A
-plataforma deco.cx oferece uma section que facilita a integração automática do
-GTM ao seu site. No entanto, é importante notar que o uso de um GTM com muitos
-scripts pode impactar negativamente a experiência de navegação e desempenho do
-site.
-
-## Adicionando uma Section Global para Carregamento no Site
-
-Uma boa prática é adicionar a section que carrega o script GTM em todas as
-páginas do site. Isso pode ser feito utilizando sections globais, que são
-carregadas automaticamente em todas as páginas geradas no admin. No caso de
-páginas proxied, é necessário inserir o script diretamente na origem.
-
-Comece selecionando o app do site:
-
-
-
-Em seguida, localize as propriedades das sections globais:
-
-
-
-Por fim, adicione a section de Analytics:
-
-
-
-## Configurando sua Section
-
-A section padrão de Analytics oferece várias opções de configuração. Se você já
-tem o ID do container GTM, basta inseri-lo no campo "Tracking ID" para ativar o
-uso no site. Se estiver utilizando um Measurement ID, também pode configurar
-essa propriedade.
-
-Além disso, é possível configurar fontes (sources) personalizadas para o site.
-
-
-
-## Configurando um GTM por Página
-
-Também existe a opção de adicionar a section de Analytics em páginas
-específicas. Dessa forma, cada página pode ter seu próprio GTM, permitindo o uso
-de diferentes configurações para diferentes seções do site.
diff --git a/docs/headless-cms/en.md b/docs/headless-cms/en.md
deleted file mode 100644
index ab42efad..00000000
--- a/docs/headless-cms/en.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-description: Learn how to manage an external website or application with Deco
----
-
-At deco.cx, we offer the functionality to create and manage websites intuitively
-through the Deco admin. Each page of your site is represented by a set of
-structured data in JSON format, capturing all the content present on that page.
-All changes made in the content management system (CMS) for a specific page are
-immediately reflected in the corresponding JSON of that page. This real-time
-update process allows external applications or websites to access and
-incorporate these changes, enabling seamless integration between different
-systems and environments, including staging and production environments.
-
-The update flow is illustrated in the diagram below:
-
-
-
-## Fetching Deco Site Content in External Sites or Applications
-
-To access the content of your Deco site in JSON format from an external site or
-application, you can use a simple GET request to the site URL, including an
-`asJson` query string.
-
-For example, when accessing the homepage of your storefront site, you will see
-the fully rendered page, ready for use, with all visual and interactive
-elements:
-
-
-
-However, if you want to access only the structured data of the page to use it in
-a different context, such as a mobile application or integration with another
-system, simply add the query string `?asJson` to the URL. This will result in a
-JSON response containing the structured data corresponding to the page's
-content, allowing easy integration and manipulation of this data in your
-external application:
-
-
-
-This "headless" approach to the Deco CMS offers flexibility and power, allowing
-you to reuse your site's content in a variety of contexts and platforms.
diff --git a/docs/headless-cms/pt.md b/docs/headless-cms/pt.md
deleted file mode 100644
index db12cb99..00000000
--- a/docs/headless-cms/pt.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-description: Aprenda como gerenciar um site ou aplicativo externo com a Deco
----
-
-Na deco.cx, oferecemos a funcionalidade de criar e gerenciar sites de forma
-intuitiva por meio do admin Deco. Cada página do seu site é representada por um
-conjunto de dados estruturados no formato JSON, que captura todo o conteúdo
-presente nessa página. Todas as alterações feitas no sistema de gerenciamento de
-conteúdo (CMS) para uma página específica são imediatamente refletidas no JSON
-correspondente a essa página. Esse processo de atualização em tempo real permite
-que aplicativos ou sites externos à plataforma Deco acessem e incorporem essas
-mudanças, possibilitando uma integração fluida entre diferentes sistemas e
-ambientes, incluindo ambientes de teste (staging) e produção.
-
-O fluxo de atualização é ilustrado no diagrama abaixo:
-
-
-
-## Obtendo conteúdo do site Deco em site ou aplicativo externo
-
-Para acessar o conteúdo do seu site Deco em formato JSON a partir de um site ou
-aplicativo externo, você pode utilizar uma requisição GET simples à URL do site,
-incluindo uma queryString `asJson`.
-
-Por exemplo, ao acessar a página inicial do seu storefront, você verá a página
-totalmente renderizada e pronta para uso, com todos os elementos visuais e
-interativos:
-
-
-
-No entanto, se você deseja acessar apenas os dados estruturados da página para
-utilizá-los em um contexto diferente, como um aplicativo móvel ou uma integração
-com outro sistema, basta adicionar a query string `?asJson` à URL. Isso
-resultará em uma resposta JSON contendo os dados estruturados correspondentes ao
-conteúdo da página, permitindo uma fácil integração e manipulação desses dados
-em seu aplicativo externo:
-
-
-
-Essa abordagem de "cabeça sem corpo" (headless) do CMS Deco oferece
-flexibilidade e poder, permitindo que você reutilize o conteúdo do seu site em
-uma variedade de contextos e plataformas.
diff --git a/docs/overview/en.md b/docs/overview/en.md
deleted file mode 100644
index 4745d5a7..00000000
--- a/docs/overview/en.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-description: |
- deco.cx is a website builder that allows you to create, personalize and deploy websites with ease. With a focus on personalization, you can create experiments, segment content by audience and more.
----
-
-## The Old Web is broken, complicated and fragmented.
-
-For the last 10 years, our team built high-volume, mission-critical websites and
-applications. We tested out most new frameworks and frontend architectures from
-KnockoutJS to React to GraphQL. Reflecting on our challenges and results, we
-believe the current state of web development is broken :
-
-
-
-🧩 The complexity to build and deploy a web application has grown
-steadily, discouraging junior developers from building the web.
-
-😓 Developers and content creators often struggle to collaborate because
-the Headless CMS becomes a silo, requiring a lot of time to integrate and
-evolve;
-
-🐢 Client-side-first apps have terrible performance for high-volume ,
-content-driven websites like ecommerce storefronts, shipping ever-growing
-amounts of JavaScript code.
-
-
-
-We wanted a simpler way for web developers to build and collaborate with their
-marketing peers, using modern web technologies, and without having to configure
-so much stuff. "No-code" is not enough, and often removes power from developers.
-We wanted to have one environment from code to content to data. We wanted to
-build the other side of code, a collaborative experience builder for developers
-and content creators to work together in.
-
-VIDEO
-
-## Making webdev straightforward for teams of all sizes
-
-That's why we created deco.cx: a complete webdev platform for developers and
-content teams to build collaborative experiences together. Developers write
-components and functions using Deno, JSX, HTMX, TypeScript, and Tailwind . We
-automatically generate a beautiful, visual admin UI from the TypeScript code!
-
-Forget the costly and complex setup of a Headless CMS, or the inflexible
-structure of a no-code prison. deco.cx offers a seamless solution, making webdev
-straightforward for teams of all sizes:
-
-
-
-🔧 Localhost or web-based code editor with real-time visual content previews
-
-📝 Automatic conversion from TypeScript code to Content Schemas
-
-👥 Realtime collaboration and Git-based release history with easy rollback
-
-🤖 Decopilot, our AI assistant for code and content creation
-
-🌍 Global and page-specific SEO editor
-
-🎨 Customizable Theme editor using Tailwind and DaisyUI (import with AI!)
-
-🏢 Enterprise-grade features, including full control over release cycles,
-role-based permissions, real-time web analytics with Plausible, and error
-monitoring with HyperDX.
-
-
-
-## Why choose deco.cx
-
-### From code to collaborative content — build your own bespoke no-code solution
-
-Dealing with ”content type” editors is a PITA. With deco.cx, you just write
-React (JSX) components with TypeScript and we automatically generate a
-no-code editor that matches your Props.
-
-
-
-### Powerful bundle: realtime analytics and observability out of the box
-
-Setting up your observability and analytics stack can be devastating. Deco comes
-with comprehensive tools that enables anyone to check error logs, tracing and
-metrics for total control .
-
-
-
-### Ultra lightweight SSR JSX + HTMX tailwind based component library
-
-We carefully chosen a stack that prioritizes performance without sacrificing
-simplicity. Our stack includes technologies like htmx, which allows for
-seamless and efficient communication between the client and server .
-
-
-
-## Community, learning and Get Site Done
-
-- [Join our Discord Community!](https://deco.cx/discord)
-- [Enlist in our deco.camp courses](https://deco.camp)
-- [Get Site Done!](https://www.getsitedone.com/)
-
-## Next steps!
-
-- [Getting started](/docs/en/getting-started/creating-a-site): Take your first
- steps with deco! Learn about our CMS and the basic concepts.
-- [Developing Guide](/docs/en/developing-guide/setup): Learn how to program your
- site using our framework.
-- [CMS Capabilities](/docs/en/cms-capabilities/home): Explore what our CMS can
- do beyond the basics.
-- [Dev Capabilities](/docs/en/developing-capabilities/blocks): Find references
- to implement advanced functionality in our framework.
diff --git a/docs/overview/pt.md b/docs/overview/pt.md
deleted file mode 100644
index d17a9c79..00000000
--- a/docs/overview/pt.md
+++ /dev/null
@@ -1,116 +0,0 @@
----
-description: |
- deco.cx é um construtor de sites que permite criar, personalizar e implantar sites com facilidade. Com foco na personalização, você pode criar experimentos, segmentar conteúdo por público-alvo e muito mais.
----
-
-## A Web está quebrada, complicada e fragmentada.
-
-Nos últimos 10 anos, nossa equipe construiu sites e aplicativos de alto volume e
-missão crítica. Testamos a maioria dos novos frameworks e arquiteturas frontend,
-desde KnockoutJS até React e GraphQL. Refletindo sobre nossos desafios e
-resultados, acreditamos que o estado atual do desenvolvimento web está
-quebrado :
-
-
-
-🧩 A complexidade para construir e implantar um aplicativo web tem
-aumentado constantemente, desencorajando desenvolvedores juniores a
-construir para a web.
-
-😓 Desenvolvedores e criadores de conteúdo frequentemente têm dificuldade em
-colaborar porque o CMS Headless se torna um silo, exigindo muito tempo para
-integrar e evoluir;
-
-🐢 Aplicativos orientados para o cliente têm um desempenho terrível para
-sites de alto volume , impulsionados por conteúdo, como lojas de comércio
-eletrônico, que enviam quantidades cada vez maiores de código JavaScript.
-
-
-
-Queríamos uma maneira mais simples para os desenvolvedores web construírem e
-colaborarem com seus colegas de marketing, usando tecnologias web modernas e sem
-precisar configurar tantas coisas. "No-code" não é suficiente e muitas vezes
-retira poder dos desenvolvedores. Queríamos ter um ambiente único, desde o
-código até o conteúdo e os dados. Queríamos construir o outro lado do código, um
-construtor de experiências colaborativo para desenvolvedores e criadores de
-conteúdo trabalharem juntos.
-
-VIDEO
-
-## Tornando o desenvolvimento web simples para equipes de todos os tamanhos
-
-É por isso que criamos deco.cx: uma plataforma completa de desenvolvimento web
-para desenvolvedores e equipes de conteúdo construírem experiências
-colaborativas juntos. Os desenvolvedores escrevem componentes e funções
-usando Deno, JSX, HTMX, TypeScript e Tailwind . Nós geramos automaticamente
-uma bela interface de administração visual a partir do código TypeScript!
-
-Esqueça a configuração cara e complexa de um CMS Headless, ou a estrutura
-inflexível de uma prisão no-code. deco.cx oferece uma solução perfeita, tornando
-o desenvolvimento web simples para equipes de todos os tamanhos:
-
-
-
-🔧 Editor de código local ou baseado na web com visualização de conteúdo em
-tempo real
-
-📝 Conversão automática de código TypeScript para Esquemas de Conteúdo
-
-👥 Colaboração em tempo real e histórico de lançamento baseado em Git com
-rollback fácil
-
-🤖 Decopilot, nosso assistente de IA para criação de código e conteúdo
-
-🌍 Editor de SEO global e específico da página
-
-🎨 Editor de Temas personalizável usando Tailwind e DaisyUI (importação com IA!)
-
-🏢 Recursos de nível empresarial, incluindo controle total sobre ciclos de
-lançamento, permissões baseadas em funções, análise web em tempo real com
-Plausible e monitoramento de erros com HyperDX.
-
-
-
-## Por que escolher deco.cx
-
-### Do código ao conteúdo colaborativo - crie sua própria solução no-code personalizada
-
-Lidar com editores de "tipo de conteúdo" é uma dor de cabeça. Com deco.cx, você
-apenas escreve componentes React (JSX) com TypeScript e nós geramos
-automaticamente um editor no-code que corresponde às suas Props.
-
-
-
-### Pacote poderoso: análise em tempo real e observabilidade prontas para uso
-
-Configurar sua pilha de observabilidade e análise pode ser devastador. Deco vem
-com ferramentas abrangentes que permitem a qualquer pessoa verificar logs de
-erros, rastreamento e métricas para ter controle total .
-
-
-
-### Biblioteca de componentes baseada em SSR JSX + HTMX tailwind ultra leve
-
-Escolhemos cuidadosamente uma pilha que prioriza o desempenho sem sacrificar a
-simplicidade. Nossa pilha inclui tecnologias como htmx, que permite uma
-comunicação perfeita e eficiente entre o cliente e o servidor .
-
-
-
-## Comunidade, aprendizado e Get Site Done
-
-- [Junte-se à nossa comunidade no Discord!](https://deco.cx/discord)
-- [Matricule-se em nossos cursos deco.camp](https://deco.camp)
-- [Get Site Done!](https://www.getsitedone.com/)
-
-## Próximos passos!
-
-- [Primeiros passos](/docs/pt/getting-started/creating-a-site): Dê seus
- primeiros passos com deco! Saiba mais sobre nosso CMS e os conceitos básicos.
-- [Guia de Desenvolvimento](/docs/pt/developing-guide/setup): Aprenda a
- programar seu site usando nosso framework.
-- [Recursos do CMS](/docs/pt/cms-capabilities/home): Explore o que nosso CMS
- pode fazer além do básico.
-- [Recursos de Desenvolvimento](/docs/pt/developing-capabilities/blocks):
- Encontre referências para implementar funcionalidades avançadas em nosso
- framework.
diff --git a/docs/performance/edge-async-render/en.md b/docs/performance/edge-async-render/en.md
deleted file mode 100644
index 323c9baa..00000000
--- a/docs/performance/edge-async-render/en.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-
-description: Documentation on async rendering in Deco.cx.
-
----
-
-## Introduction
-
-Async rendering is an essential technique for improving performance and user
-experience in modern web applications. In deco.cx, this feature utilizes
-progressive loading to load page sections asynchronously, rendering quickly
-loaded content and displaying skeletons and loading states for slower requests,
-providing users with an immediate visual experience.
-
-## How It Works
-
-Async rendering in deco.cx is based on loaders, which are components responsible
-for loading necessary data for a section. Loaders are bound to a time budget.
-Once this limit is reached, loaders that have finished their tasks will render
-their content in the final HTML as usual. Loaders relying on slow APIs will
-throw an exception, and a loading state will be rendered for those sections.
-This loading state will use our
-[Partials](/docs/en/developing-capabilities/interactive-sections/partial)
-feature to hydrate and lazily replace the missing section.
-
-### Stale Edge Cache
-
-Async render in deco.cx also features "Stale Edge Cache," which allows caching
-of lazy-loaded sections, significantly reducing response times and improving
-loading speeds. The initial server response of the section is cached in the CDN.
-Subsequent requests are answered with this cached response, drastically reducing
-the total response time to just the latency between the browser and the CDN,
-plus the download time.
-
-
-
-This functionality is enabled by default for all sections but can be disabled if
-necessary.
-
-### Enabling Async Rendering
-
-This feature is enabled by default in the sections of sites on deco.cx. To
-disable it, simply turn off the `Optimization` option in the section properties
-in the Admin.
-
-
-
-### Benefits
-
-- **Improved Performance**: Loads only the necessary components at the moment,
- reducing initial page load time.
-- **Reduced Latency**: Cached responses significantly reduce response times.
-- **Better UX**: Avoids interface blocking and minimizes layout shifts during
- loading.
-
-### Minimizing Content Layout Shifts (CLS)
-
-To ensure a smooth user experience, it is recommended to implement the
-`LoadingFallback` component in all site sections. This component provides a
-custom loading state during async rendering, minimizing potential layout shifts.
-
-You can find more information about the
-[`LoadingFallback` component in our documentation](/docs/en/developing-capabilities/sections/loading-fallback).
-
-## Conclusion
-
-Async rendering is a powerful technique for improving performance and user
-experience in web applications. With the implementation and evolution of async
-rendering in the deco.cx platform, it has become even easier and more efficient
-to adopt this technique in your projects.
-
-For more information, refer to the blog posts
-[Async Rendering](https://deco.cx/en/blog/async-rendering) and
-[More on Async Rendering](https://deco.cx/en/blog/async-render-default).
diff --git a/docs/performance/edge-async-render/pt.md b/docs/performance/edge-async-render/pt.md
deleted file mode 100644
index 31cb7fdd..00000000
--- a/docs/performance/edge-async-render/pt.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-
-description: Documentation on async rendering in Deco.cx.
-
----
-
-## Introdução
-
-A renderização assíncrona é uma técnica essencial para melhorar a performance e
-a experiência do usuário em aplicações web modernas. Este recurso na deco.cx
-utiliza o paradigma de carregamento progressivo para carregar seções de uma
-página de forma assíncrona: renderizando o conteúdo das requisições rápidas e
-recorrendo a esqueletos e estados de carregamento para o conteúdo de requisições
-lentas, oferecendo aos usuários uma experiência visual imediata.
-
-## Como funciona
-
-A renderização assíncrona na deco.cx é baseada em loaders, que são componentes
-responsáveis por carregar os dados necessários para alguma seção. Os loaders
-estão vinculados a um orçamento de tempo. Uma vez atingido esse limite, os
-loaders que concluíram seu trabalho terão seu conteúdo renderizado no HTML final
-como de costume. Os loaders que consomem APIs lentas levantarão uma exceção e um
-estado de carregamento será renderizado nas seções que consomem este carregador.
-Este estado de carregamento usará nosso recurso
-[Partials](/docs/en/developing-capabilities/interactive-sections/partial) para
-hidratar e substituir a seção ausente preguiçosamente.
-
-### Stale Edge Cache
-
-O async render na deco.cx também conta com o recurso de "Stale Edge Cache", uma
-abordagem que permite caching de seções lazy-loaded, reduzindo
-significativamente os tempos de resposta e melhorando o tempo de carregamento.
-Com o Stale Edge Cache, a primeira resposta do servidor da seção é armazenada em
-cache no CDN. As requisições subsequentes são respondidas com essa resposta em
-cache, reduzindo drasticamente o tempo total de resposta para apenas a latência
-entre o navegador e o CDN, mais o tempo de download do conteúdo.
-
-
-
-Essa funcionalidade está ativada por padrão para todas as seções, mas pode ser
-desativada se necessário.
-
-### Como ativar a renderização assíncrona
-
-Esse recurso é ativado por padrão nas sections dos sites na deco. Para
-desativar, basta desabilitar a opção `Otimization` nas propriedades da section
-no Admin.
-
-
-
-### Benefícios
-
-- **Melhoria de Performance**: Carrega apenas os componentes necessários no
- momento, reduzindo o tempo de carregamento inicial da página.
-- **Redução de Latência**: Com o cache das respostas, os tempos de resposta são
- significativamente reduzidos.
-- **Melhor UX**: Evita o bloqueio da interface e minimiza mudanças de layout
- durante o carregamento.
-
-### Minimização de Content Layout Shifts (CLS)
-
-Para garantir uma experiência de usuário suave, recomenda-se a implementação do
-componente `LoadingFallback` em todas as seções do site. Esse componente fornece
-um estado de carregamento personalizado durante o processo de renderização
-assíncrona, minimizando possíveis mudanças de layout.
-
-Você pode encontrar mais informações sobre o componente
-[`LoadingFallback` em nossa documentação](/docs/en/developing-capabilities/sections/loading-fallback).
-
-## Conclusão
-
-A renderização assíncrona é uma técnica poderosa para melhorar a performance e a
-experiência do usuário em aplicações web. Com a implementação e evolução da
-renderização assíncrona na plataforma deco.cx, ficou ainda mais fácil e
-eficiente adotar essa técnica em seus projetos.
-
-Para mais informações, consulte os blogposts
-[Renderização Assíncrona](https://deco.cx/en/blog/async-rendering) e
-[Mais sobre Renderização Assíncrona](https://deco.cx/en/blog/async-render-default).
diff --git a/docs/performance/guide/en.md b/docs/performance/guide/en.md
deleted file mode 100644
index b6f9f7bc..00000000
--- a/docs/performance/guide/en.md
+++ /dev/null
@@ -1,245 +0,0 @@
----
-description: The deco guide to performance
-since: 1.0.0
----
-
-## Three rules for high performance
-
-### Understand the framework and system architecture
-
-Using a tool efficiently implies understanding its components and capabilities.
-This allows for a healthy codebase from the start.
-
-> **Example**: deco offers components like `Image` that help accelerate the
-> efficient delivery of images, but users can still use the `img` element if
-> they prefer.
-
-### Learn to analyze performance
-
-Learn to analyze the performance of your pages. Navigating a page should not be
-slow, not even for you. **If it's slow for the developer, it will be slow for
-the user**. Understand the available tools and how they work.
-
-### Monitoring performance is an ongoing task
-
-Once the system stops performing, it is common to stop caring about performance
-until it becomes much more difficult to make corrections. Detecting performance
-issues is an ongoing task, but it should not be an end in itself.
-
-> **Important**: the most important thing (the golden rule) is the user
-> experience. Sometimes the system may not deliver the best performance, as long
-> as it is a conscious decision to deliver the best experience to the user.
-
-## Analyzing page performance
-
-Testing performance involves understanding a series of tools and possible
-metrics that seek to understand what needs to be improved (and how). There are
-tools that help in this process. Understand how and when to use them.
-
-### Local testing
-
-
-
-**Always test your page, section, loader, or action locally. It doesn't always
-need to be a structured test**. If it's already slow for you, it will be slow
-for the user.
-
-Run the deployed test versions. Then use the tools available in the browser
-itself to debug performance issues. With them, you can monitor the performance
-of the page in detail and simulate adverse conditions (such as a lower quality
-network or CPU). More information in the guide below:
-
-### Pagespeed test
-
-
-
-[Pagespeed](https://pagespeed.web.dev/) is a testing tool developed by Google to
-evaluate the main performance aspects of a page. It explores metrics such as how
-long it takes for some content to be displayed, how long it takes for the system
-to become interactive, etc.
-
-The main metrics are described below:
-
-| Metric | Meaning | example of good value |
-| ----------- | ---------------------------------------------------- | --------------------- |
-| FCP | First Contentful Paint | up to 1.8s |
-| LCP | Largest Contentful Paint | up to 2.5s |
-| TBT | Total Blocking Time | 200ms |
-| Speed Index | Performance index of the page's most popular content | up to 3.4 |
-| CLS | Cumulative Layout Shift | up to 0.1 |
-
-> [source (adapted)](https://web.dev/articles/fcp)
-
-Google aggregates these metrics into an index between 0 and 100, generating the
-pagespeed score.
-
-Since it is a test executed in a production environment, it is subject to
-variations. However, a sudden drop in the pagespeed score implies looking at the
-page's performance as soon as possible.
-
-### Deco metrics test
-
-
-
-By default, deco offers a set of metrics that are evaluated on a page. These
-metrics are specialized especially for systems like deco (SSR with hydration and
-with a lot of external data loading).
-
-| Metric | Meaning |
-| ----------------- | -------------------------------------------------------- |
-| Config LCP | Loading configuration of the largest content of the page |
-| Page HTML | Page size in bytes |
-| Page Islands | Number of islands on the page |
-| Islands Props | Size in bytes of the island's properties |
-| Loaders latencies | Response time of the page's loaders |
-
-Each metric is decomposed into its components, allowing for better
-identification of a possible source of performance loss. There is no ideal value
-for each metric, but it is important to understand that a large HTML impacts
-response time for the user and metrics like pagespeed.
-
-A user who downloads at `100 kb/s` will take `5s` to download a `500 kb` page.
-This is especially impactful for mobile users operating on low-bandwidth
-networks or situations.
-
-### Core Web Vitals test
-
-
-
-So far, we have only explored synthetic tests, that is, tests that are performed
-artificially and are only an approximation of the real world. These tests are
-relevant because a performance drop in a synthetic test usually reflects a
-performance drop in the real world.
-
-Core Web Vitals represents a collection of metrics extracted from real user
-experience. It includes pagespeed metrics as well as other metrics specific to
-real user interaction.
-
-> Access through the
-> [Google CrUX website](https://developer.chrome.com/docs/crux/dashboard) or
-> directly from the CrUX App on your deco site.
-
-Since it is a collected metric, it only has aggregated meaning. Google
-categorizes the values typically on a month-to-month basis, so it is more of a
-monitoring metric to diagnose any behavior issues that have gone unnoticed over
-time or that reflect a change in the page's audience.
-
-### Debugging performance issues
-
-If, however, none of the tools help in the process of identifying a performance
-issue, perform some manual tests that can identify the cause of the problem:
-
-- If you don't know which change caused a performance loss:
- - Test older versions of the system to see which version impacted performance.
-
-- If it is not clear, within a version, what makes it slow, eliminate parts of
- the system until you identify the cause.
- - For a slow page, eliminate some `sections` until the page returns to good
- performance. The most recently deleted `section` (or its `loaders` or
- `islands`) may be the cause of the problem.
- - Eliminate added dependencies. Check if the system improves with this.
-
-- Update your dependencies.
- - Performance improvements are constantly added to the system and can fix
- issues that lead to slowness.
-
-## Performance improvements
-
-After identifying a problem, whether through a negative experience or some tests
-indicating an inadequate metric value, action must be taken.
-
-Each test above indicates, for each metric, possible culprits and where to look.
-If you have identified the culprit, follow one of the guides below to implement
-related improvements.
-
-Note that the situations in which you should take action are just examples of
-some cases.
-
-### 🖼️ Images (jpg, png, gifs, ...)
-
-**When to act**...
-
-- High LCP value (largest image takes a long time to download / view)
-- Pages "jumping" on the screen
-- Large size of downloaded images
-
-**Guide**: [Optimizing images](/docs/performance/medias/images)
-
-> **Tip**: Use deco image components, such as `` and ``, and
-> configure them correctly, including width and height.
-
-### 📈 Images (SVG)
-
-**When to act**...
-
-- Page size is large and the pages contain embedded and repeated SVGs
-- Issues with Speed Index
-
-**Guide**: [Optimizing SVGs](/docs/performance/medias/svg-sprites)
-
-### 🖹 Fonts
-
-**When to act**...
-
-- Text appears to "change size" suddenly
-- Font file takes a long time to load
-- High FCP value (indicating the font as the problem)
-
-**Guide**: [Optimizing fonts](/docs/performance/medias/fonts)
-
-> **Tip**: Use standard fonts offered by Google. If necessary, use smaller fonts
-> (preferably woff/woff2).
-
-### 📜 Third-party scripts
-
-**When to act**...
-
-- The system takes a long time to load (high TBT)
-- The screen "jumps" due to a component inserted by a third-party script (high
- CLS)
-- A third-party script has a large size
-
-**Guide**: [Optimizing scripts](/docs/performance/lazy-3rd-party-scripts)
-
-> **Tip**: Try to only use what is strictly necessary or replace third-party
-> scripts with lighter versions. If not possible, postpone the execution of the
-> script until after the page has already loaded and the user is interacting
-> with it.
-
-### 🔄 Data loading efficiency (loaders)
-
-**When to act**...
-
-- The system indicates high latency for a loader
-- The page takes a long time to load initially
-- The size of props in islands is large
-
-**Guide**: [Optimizing loaders](/docs/performance/loaders)
-
-> **Tips**:
->
-> - Use `inline loaders` to transform data to be sent to a section and/or island
-> - Consider deferring the display (`Deferred`) of sections with expensive
-> loaders
-> - Change the loader's props to reduce the amount of data loaded in the loaders
-> - Save loaders that are reused on different pages/sections
-
-### 🏝️ Islands
-
-**When to act**...
-
-- The system indicates a large number of islands
-- The page takes a long time to load initially
-- The size of props in islands is large
-
-**Guide**: [Optimizing islands](/docs/performance/islands)
-
-> **Tips**: Prefer pure CSS to avoid islands. Use `children` to pass JSX into an
-> island. Reduce the scope of the island as much as possible (e.g., prefer a
-> button as an island rather than an entire `form`).
-
-## Relevant sources
-
-- [web.dev - Core Web Vitals](https://web.dev/explore/learn-core-web-vitals)
-
-- [MDN - Web Performance](https://developer.mozilla.org/en-US/docs/Learn/Performance)
diff --git a/docs/performance/guide/pt.md b/docs/performance/guide/pt.md
deleted file mode 100644
index 5364917e..00000000
--- a/docs/performance/guide/pt.md
+++ /dev/null
@@ -1,253 +0,0 @@
----
-description: O guia deco para performance
-since: 1.0.0
----
-
-## Três regras para o alto desempenho
-
-### Entenda o framework e arquitetura do sistema
-
-Usar uma ferramenta de forma eficiente implica em entender seus componentes e
-capacidades. Isso permite ter uma base de código saudável desde o começo.
-
-> **Exemplo**: a deco oferece componentes como `Image` que ajudam a acelerar a
-> entrega de imagens de forma eficiente, mas nada impede que o usuário continue
-> usando o elemento `img`.
-
-### Aprenda a analisar o desempenho
-
-Aprenda a analisar o desempenho das suas páginas. Navegar em uma página não deve
-ser algo lento, nem mesmo para você. **Se está lento para o desenvolvedor,
-estará para o usuário**. Entenda as ferramentas disponíveis e como elas
-funcionam.
-
-### Acompanhar o desempenho é uma tarefa contínua
-
-Uma vez que o sistema para de performar, é comum deixar de se importar com este
-aspecto até que se torne bem mais difícil fazer correções. A detecção de
-problemas de desempenho é uma tarefa contínua, mas não deve ser um fim por si
-só.
-
-> **Importante**: o mais importante (a regra de ouro) é a experiência do
-> usuário. Por vezes, o sistema pode não entregar o melhor desempenho, desde que
-> isso seja uma decisão consciente para entregar a melhor experiência ao
-> usuário.
-
-## Analisando o desempenho de uma página
-
-Testar o desempenho passa por entender uma série de ferramentas e possíveis
-métricas que buscadm entender o que deve ser melhorado (e como). Existem
-ferramentas que ajudam neste processo. Entenda como e quando utilizá-las.
-
-### Testando localmente
-
-
-
-**Sempre teste localmente a sua página, section, loader ou action. Por vezes,
-não precisa ser um teste estruturado**. Se já estiver lento para você, já estará
-para o usuário.
-
-Execute as versões de teste deployadas. Em seguida, use as ferramentas
-disponíveis no próprio browser para depurar problemas de desmpenho. Com elas é
-possível acompanhar o desempenho da página em detalhes, e simular condições
-adversas (como uma rede ou cpu de menor qualidade). Mais informações no guia
-abaixo:
-
-### Teste de pagespeed
-
-
-
-O [pagespeed](https://pagespeed.web.dev/) é uma ferramenta de teste desenvolvida
-pela google para avaliar principais aspectos de desempenho de uma página.
-Explora métricas como quanto tempo até que seja exibido algum conteúdo, quanto
-tempo o sistema passa a ser interagível, etc.
-
-As principais métricas são descritas abaixo:
-
-| Métrica | Significado | exemplo de bom valor |
-| ----------- | ---------------------------------------------------------- | -------------------- |
-| FCP | Tempo até a primeira exibição de conteúdo | até 1,8s |
-| LCP | Tempo até a maior exibição de conteúdo | até 2,5s |
-| TBT | Tempo crítico bloqueante até que o usuário possa interagir | 200ms |
-| Speed Index | Índice do desempenho da página em popular conteúdo | até 3,4 |
-| CLS | Índice da quantidade de mudanças de layout cumulativa | até 0,1 |
-
-> [fonte (adaptado)](https://web.dev/articles/fcp?hl=pt-br)
-
-A google agrega essas métricas em um índice entre 0 e 100, gerando a nota do
-pagespeed.
-
-Como é um teste executável em um ambiente em produção, ele é sujeito a
-variações, no entanto, uma queda abrupta no valor do pagespeed implica em olhar
-para o desempenho da página o quanto antes.
-
-### Teste de métricas deco
-
-
-
-Por padrão a deco oferece um conjunto de métricas que são avaliadas em uma
-página. Estas métricas são especializadas especialmente para sistemas como a
-deco (SSR com hidratação e com muito carregamento de dados externos).
-
-| Métrica | Significado |
-| ----------------- | --------------------------------------------------------- |
-| Config LCP | Configurações de carregamento do maior conteúdo da página |
-| Page HTML | Tamanho da página em bytes |
-| Page Islands | Número de ilhas na páginas |
-| Islands Props | Tamanho em bytes das propriedades das ilhas |
-| Loaders latencies | Tempo de resposta dos loaders da página |
-
-Cada métrica é decomposta nas partes que a compõe, permitindo identificar melhor
-uma possível fonte de perda de performance. Não existe um valor ideal para cada
-métrica, mas é importante entender que uma HTML grande impacta no tempo de
-resposta para o usuário e em métricas como pagespeed.
-
-Um usuário que baixa a `100 kb/s` levará `5s` para baixar uma página de
-`500 kb`. Isto é especialmente impactante para usuários de dispositivos móveis
-operando em redes ou situações de baixa capacidade de banda.
-
-### Teste do Core Web Vitals
-
-
-
-Até agora, exploramos apenas testes sintéticos, ou seja, testes que são
-realizados de maneira artificial e que são apenas uma aproximação do mundo real.
-São testes relevantes pois uma queda de desempenho em um teste sintético,
-costuma ser refletido como uam queda de desempenho no mundo real.
-
-O Core Web Vitals representa uma coleção de métricas extraídas a partir da
-experiência real de usuários. Ela inclui métricas do pagespeed bem como outras
-métricas específicas da interação real de usuários.
-
-> Acesse através do site
-> [CrUX da google](https://developer.chrome.com/docs/crux/dashboard) ou
-> diretamente da App CrUX no seu site deco.
-
-Por ser uma métrica coletada, ela só tem significado agregado. A google
-categoriza os valores tipicamente mês-a-mês, por isso é mais uma métrica de
-acompanhamento para diagnosticar eventuais problemas de comportamento que
-passaram desapercebidos ao longo do tempo, ou que refletem a mudança de público
-da página.
-
-### Depurando problemas de performance
-
-Se, no entanto, nenhuma das ferramentas auxiliar no processo de identificação de
-um problema de desempenho, execute alguns testes manuais que podem identificar a
-causa do problema:
-
-- Se você não souber que mudança causou uma perda de performance:
- - Teste versões antigas do sistema para verificar qual versão impactou no
- desempenho
-
-- Caso não esteja claro, dentro de uma versão, o que a torna lenta, elimine
- parte do sistema até identificar a causa.
- - Para uma página lenta, elimine algumas `sections`, até que a página volte a
- ter um bom desempenho. A `section` mais recentemente apagada (ou seus
- `loaders` ou `ilhas`) pode ser a causa do problema.
- - Elimine dependências que tenha adicionado. Verifique se o sistema melhora
- com isso.
-
-- Atualize as suas dependências.
- - Melhorias de desempenho são constantemente adicionadas ao sistema e podem
- corrigir problemas que levam a lentidão.
-
-## Melhorias de desempenhos
-
-Após identificar um problema, seja por uma experiência negativa ou por alguns
-dos testes indicarem alguma métrica com valor inadequado, é preciso atuar.
-
-Cada teste acima indica, para cada métrica, possíveis culpados e aonde olhar.
-Caso tenha identificado o culpado, siga um dos guias abaixo para implementar
-melhorias relacionadas.
-
-Observe que as situações em que você deve atuar são só exemplos de alguns casos.
-
-### 🖼️ Imagens (jpg, png, gifs, ...)
-
-**Quando atuar**...
-
-- Valor alto de LCP (maior imagem demora a ser baixada / vista)
-- Páginas "sambando" na tela
-- Grande tamanho das imagens baixadas
-
-**Guia**: [Otimizando imagens](/docs/performance/medias/images)
-
-> **Dica**: use os componentes deco de imagens, como `` e ``, e
-> os configure corretamente, incluindo largura e altura.
-
-### 📈 Imagens (SVG)
-
-**Quando atuar**...
-
-- Tamanho das páginas é grande e as páginas contem SVGs embutidos e repetidos
-- Problemas no Speedindex
-
-**Guia**: [Otimizando SVGs](/docs/performance/medias/svg-sprites)
-
-### 🖹 Fontes
-
-**Quando atuar**...
-
-- O texto parece "mudar de tamanho" repentinamente
-- O arquivo de fonte demora a ser carregado
-- Valor alto de FCP (apontando a fonte como problema)
-
-**Guia**: [Otimizando fontes](/docs/performance/medias/fonts)
-
-> **Dica**: Use fontes padrão oferecidas pela google. Se preciso use fontes de
-> pouco tamanho (dando preferência a woff/woff2).
-
-### 📜 Scripts de terceiros
-
-**Quando atuar**...
-
-- O sistema demora a carregar (TBT alto)
-- A tela "samba" por causa de um componente inserido por um script terceiro (CLS
- alto)
-- Um script de terceiro é tem um tamanho grande
-
-**Guia**: [Otimizando scripts](/docs/performance/lazy-3rd-party-scripts)
-
-> **Dica**: Tente só usar o que for extritamente necessário ou substituir
-> scripts de terceiros por versões mais leves. Se não for possível, postergue a
-> execução do script para depois que a página já estiver carregado e o usuário
-> estiver interagindo com ela.
-
-### 🔄 Eficiência no carregamento de dados (loaders)
-
-**Quando atuar**...
-
-- O sistema indica alta latência de um loader
-- A página demora a carregar inicialmente
-- O tamanho das props em ilhas é grande
-
-**Guia**: [Otimizando loaders](/docs/performance/loaders)
-
-> **Dicas**:
->
-> - Use `inline loaders` para transformar dados a serem enviados a uma section
-> e/ou ilha
-> - Considere postergar a exibição (`Deferred`) de sections com loaders custosos
-> - Altere as props do loader para diminuir a quantidade de dados carregados nos
-> loaders
-> - Salve os loaders que são reutilizados em diferentes páginas/sections
-
-### 🏝️ Ilhas
-
-**Quando atuar**...
-
-- O sistema indica um grande número de ilhas
-- A página demora a carregar inicialmente
-- O tamanho das props em ilhas é grande
-
-**Guia**: [Otimizando ilhas](/docs/performance/islands)
-
-> **Dicas**: Prefira CSS puro para evitar ilhas. Utilize `children` para passar
-> um JSX para dentro de uma ilha. Reduza o máximo possível o escopo da ilha
-> (ex.: prefira um botão como ilha, do que todo um `form`).
-
-## Fontes relevantes
-
-- [web.dev - Core Web Vitals](https://web.dev/explore/learn-core-web-vitals?hl=pt-br)
-
-- [MDN - Web Performance](https://developer.mozilla.org/en-US/docs/Learn/Performance)
diff --git a/docs/performance/islands/en.md b/docs/performance/islands/en.md
deleted file mode 100644
index 6bb02920..00000000
--- a/docs/performance/islands/en.md
+++ /dev/null
@@ -1,192 +0,0 @@
----
-description: Optimizing the use of islands
-since: 1.0.0
----
-
-## Summary
-
-> An island is a component that is interactive and will be hydrated on the
-> client side. The server sends all the data from the island's `props` for
-> hydration, and the browser needs time to process and render these islands.
->
-> Therefore, it is important to take some precautions when using islands:
->
-> 1. Minimize the amount of props to be sent/used for an island
-> 2. Make an island only what is necessary, remembering to use `children` for
-> internal elements that do not need hydration.
-
-## Reducing the size of the props JSON sent to islands
-
-When loading data from external APIs using [Loaders](/docs/en/concepts/loader)
-and sending them to the [Section](/docs/en/concepts/section), it is possible
-that the size of the payload negatively impacts the performance of the site. The
-impact occurs both in the initial loading time and in the
-[hydration](https://blog.saeloun.com/2021/12/16/hydration/), where the page is
-"initialized" in the browser to make it interactive (using `useEffect`,
-`useSignal`, etc...). You can view the size of the final JSON through the
-**Performance** tab of one of your site pages in the Deco CMS.
-
-
-
-When the JSON size exceeds ~500kb, it is likely that the UI does not need the
-complete data, but rather some part of it (or a computation based on other
-values). To reduce this size and improve page performance, it is possible to
-**filter the data** in the Loader so that only the necessary data is passed to
-the UI.
-
-### Reducing data sent to islands
-
-In this first example, we will show how to avoid sending too much data to an
-island. Let's say there is a component called ProductCard that receives the
-entire JSON of a product.
-
-```tsx
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
- );
-}
-```
-
-In it, you want to include an
-[Island](https://fresh.deno.dev/docs/concepts/islands) to create the buy button.
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-It is possible that this BuyButton needs some product information in order to
-add it to the cart.
-
-This is where we need to be careful about the amount of data sent to the Island.
-For example, it is very likely that the buy button does not need to receive
-image data.
-
-The ideal approach is to send only the necessary data.
-
-> ❌ Inappropriate approach
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-> ✅ Correct approach
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-The correct approach sends only the ID and Seller data, which in the example are
-the only ones needed in the Island.
-
-Thus, during hydration, the JSON that the Island will load will not be as large.
-
-### Reducing the scope of an island
-
-An island and its components will all be hydrated on the client side in order to
-operate. This means that for all defined elements of the island, they will be
-recursively hydrated.
-
-It is possible to reduce the scope of the island by passing any internal
-elements as `children` of the island.
-
-> ❌ Inappropriate approach
-
-In the example below, we create an island that interacts with `localStorage` to
-set a title for a gallery of items. In the example below, both the gallery props
-will be passed to hydrate the `TitleContainer` and will also be passed to
-hydrate the `Gallery`.
-
-```tsx
-import { computed } from "@preact/signals";
-import { IS_BROWSER } from "$fresh/runtime.ts";
-import type { GalleryProps } from "../components/Gallery.tsx";
-import { Gallery } from "../components/Gallery.tsx";
-
-export default function TitleContainer(
- { galleryProps }: { galleryProps: GalleryProps },
-) {
- const title = computed(() => {
- IS_BROWSER ? localStorage.getItem("title") : "Loading...";
- });
-
- return (
-
-
{title}
-
-
- );
-}
-```
-
-> ✅ Correct approach
-
-However, if the `Gallery` is passed as children to the island, it will be
-rendered, serialized, and not hydrated! For the `TitleContainer`, the `children`
-is pre-rendered HTML ready to be displayed, and therefore it is not an island
-itself.
-
-```tsx
-import { computed } from "@preact/signals";
-import type { ComponentChildren } from "preact";
-import { IS_BROWSER } from "$fresh/runtime.ts";
-
-export default function TitleContainer(
- { children }: { children: ComponentChildren },
-) {
- const title = computed(() => {
- IS_BROWSER ? localStorage.getItem("title") : "Loading...";
- });
-
- return (
-
-
{title}
- {children}
-
- );
-}
-```
-
-Uso do title container (em uma section, por exemplo):
-
-```tsx
-//...
-
-
-
-//...
-```
diff --git a/docs/performance/islands/pt.md b/docs/performance/islands/pt.md
deleted file mode 100644
index 441906ba..00000000
--- a/docs/performance/islands/pt.md
+++ /dev/null
@@ -1,195 +0,0 @@
----
-description: Enviando apenas dados necessários ao cliente
-since: 1.0.0
----
-
-## Resumo
-
-> Uma ilha determina um componente interativo e que será hidratado no lado do
-> cliente. O servidor manda todos os dados das `props` de ilhas para fazer a
-> hidratação, bem como o browser precisa de tempo para processar e renderizar
-> essas ilhas.
->
-> Por isso, é importante tomar alguns cuidados no uso de ilhas:
->
-> 1. Reduza ao máximo a quantidade de props a ser enviada / utilizada para uma
-> ilha
-> 2. Torne uma ilha apenas o que for necessário, lembrando de usar o `children`
-> para elementos internos que não precisam de hidratação.
-
-## Reduzindo o tamanho do JSON de props enviado para as ilhas
-
-Ao carregar dados de APIs externas usando [Loaders](/docs/pt/concepts/loader) e
-enviá-los para a [Section](/docs/pt/concepts/section), é possível que o tamanho
-do _payload_ impacte negativamente a performance do site. O impacto ocorre tanto
-no tempo inicial de carregamento como também na
-[hidratação](https://blog.saeloun.com/2021/12/16/hydration/), onde a página é
-"inicializada" no browser para que possa ser interativa (usar `useEffect`,
-`useSignal`, etc...). É possível visualizar no tamanho do JSON final através da
-aba **Performance** de uma das páginas do seu site no CMS deco.
-
-
-
-Quando o tamanho do JSON passa de ~500kb, é provável que a UI não precise do
-dado completo, mas sim alguma parte dele (ou então uma computação sobre outros
-valores). Para diminuir esse tamanho e melhorar a performance da página, é
-possível **filtrar os dados** ainda no Loader para que apenas o necessário seja
-passado para a UI.
-
-### Reduzindo dados enviados às ilhas
-
-Nesse primeiro exemplo, mostraremos como evitar enviar muitos dados para uma
-ilha. Digamos que existe um componente chamado ProductCard, que recebe todo o
-JSON de um produto.
-
-```tsx
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
- );
-}
-```
-
-Nele, você deseja incluir uma
-[Island](https://fresh.deno.dev/docs/concepts/islands) para criar o botão de
-comprar.
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-É possível que esse BuyButton, precise de algumas informações do produto para
-poder adicionar ao carrinho.
-
-Aqui que devemos tomar cuidado a quantidade de dados enviados para a Island. Por
-exemplo, é bem possível que o botão de comprar não precise receber dados de
-imagem.
-
-O ideal é enviar apenas os dados necessários
-
-> ❌ Abordagem inadequada
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-> ✅ Abordagem correta
-
-```tsx
-import BuyButton from "$store/components/ui";
-import Image from "apps/website/components/Image.tsx";
-
-export default function ProductCard({ product }: Props) {
- return (
-
-
-
-
- );
-}
-```
-
-A abordagem correta envia apenas os dados de ID e Seller, que no exemplo, são os
-únicos necessários na Island.
-
-Assim, no momento de hidratação, o JSON que a Island irá carregar não será tão
-grande.
-
-### Reduzindo o escopo de uma ilha
-
-Uma ilha e seus componentes serão todos hidratados do lado do cliente para
-poderem operar. Isto significa que, para todos os elementos definidos da ilha,
-eles serão recursivamente hidratados.
-
-É possível reduzir o escopo da ilha, fazendo com que, qualquer elemento interno,
-seja passado como `children` da ilha.
-
-> ❌ Abordagem inadequada
-
-No exemplo abaixo, criamos uma ilha que interage com o `localStorage` para
-definir um título para uma galeria de itens. No exemplo abaixo, tanto os props
-de gallery serão inseridos para hidratar o `TitleContainer`, como serão também
-inseridos para poder hidratar o `Gallery`.
-
-```tsx
-import { computed } from "@preact/signals";
-import { IS_BROWSER } from "$fresh/runtime.ts";
-import type { GalleryProps } from "../components/Gallery.tsx";
-import { Gallery } from "../components/Gallery.tsx";
-
-export default function TitleContainer(
- { galleryProps }: { galleryProps: GalleryProps },
-) {
- const title = computed(() => {
- IS_BROWSER ? localStorage.getItem("title") : "Loading...";
- });
-
- return (
-
-
{title}
-
-
- );
-}
-```
-
-> ✅ Abordagem correta
-
-Se, no entanto, o `Gallery` for repassado como children para a ilha, ele será
-renderizado, serializado e não será hidratado! Para o `TitleContainer`, o
-`children` é um html pronto para ser exibido, e, portanto, não é uma ilha em si.
-
-```tsx
-import { computed } from "@preact/signals";
-import type { ComponentChildren } from "preact";
-import { IS_BROWSER } from "$fresh/runtime.ts";
-
-export default function TitleContainer(
- { children }: { children: ComponentChildren },
-) {
- const title = computed(() => {
- IS_BROWSER ? localStorage.getItem("title") : "Loading...";
- });
-
- return (
-
-
{title}
- {children}
-
- );
-}
-```
-
-Uso do title container (em uma section, por exemplo):
-
-```tsx
-//...
-
-
-
-//...
-```
diff --git a/docs/performance/lazy-3rd-party-scripts/en.md b/docs/performance/lazy-3rd-party-scripts/en.md
deleted file mode 100644
index d270a1f3..00000000
--- a/docs/performance/lazy-3rd-party-scripts/en.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-description: Learn how to use third-party scripts on your website without sacrificing performance.
----
-
-## Summary
-
-> The use of third-party scripts can have a significant impact on website
-> performance. These scripts often operate in a blocking manner and can hinder
-> page loading times.
->
-> To reduce the time spent on these scripts, it is recommended to:
->
-> 1. Avoid using third-party scripts whenever possible
-> 2. Delay the loading of scripts until after user interaction
-> 3. Use async or defer attributes for scripts
-> 4. Preload connection to the script's origin
-
-## Delaying the loading of scripts.
-
-If the script in question is not a priority, meaning it can wait for user
-interaction or does not represent a vital functionality for the website, a
-recommendation is to delay its loading until the user interacts with the site.
-
-Each script may require a different strategy to delay its execution. Below is an
-example of a common strategy
-([source](https://metabox.io/delay-javascript-execution-boost-page-speed/)) to
-delay the script so that it is only executed after user interaction followed by
-a delay:
-
-```tsx
-
-```
-
-Another alternative is to use the Intersection API, so that the code is executed
-only when a certain element is in view (useful for things that should only be
-executed after the user scrolls on a page).
-
-```jsx
-const elem = document.getElementById(id);
-const observer = new IntersectionObserver((items) => {
- // YOUR SCRIPT CONTENT
- observer.unobserve(elem);
-});
-
-observer.observe(elem);
-```
-
-## Async and Defer in Scripts
-
-The presence of a `
-```
-
-Outra alternativa é fazer uso da intersection API, de forma que o código seja
-executado apenas quando um determinado elemento esteja em tela (útil para aquilo
-que deve ser executado só após o usuário der scroll em uma tela).
-
-```jsx
-const elem = document.getElementById(id);
-const observer = new IntersectionObserver((items) => {
- // YOUR SCRIPT CONTENT
- observer.unobserve(elem);
-});
-
-observer.observe(elem);
-```
-
-## Async e Defer nos script
-
-A presença de uma tag `
-```
-
-## Next Steps
-
-Features that are not yet available, but we are already working to release:
-
-- Traffic Configuration
-
-In A/B testing for deco.cx sites, it is already possible to define the amount of
-traffic; we are working to implement this in the SDK as well.
-
-- Parallel Tests
-
-In A/B testing for deco.cx sites, it is already possible to run more than one
-test at the same time; we are working to implement this in the SDK as well.
-
-- A/B/C/... Tests
-
-We are working to implement the possibility of tests with more than two
-versions.
diff --git a/docs/sdk/ab-test/pt.md b/docs/sdk/ab-test/pt.md
deleted file mode 100644
index 30935782..00000000
--- a/docs/sdk/ab-test/pt.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-description: Criando Teste A/B Headless
----
-
-## Para quem é esse conteúdo?
-
-Esse conteúdo é para quem ainda não tem o site na deco.cx e deseja utilizar a
-Feature de Teste A/B de forma headless, sem migrar de tecnologia.
-
-Se você já tem o site na deco.cx, a criação de Teste A/B está explicada nessa
-outra [documentação](/docs/pt/developing-capabilities/apps/ab-test).
-
-## Como começar?
-
-1 - Criando um projeto deco.cx
-
-2 - Entendendo o Teste A/B
-
-3 - Configuração de eventos
-
-4 - Acompanhando resultados
-
-5 - Go Live
-
-## Criando um projeto deco.cx
-
-Acesse o link de [criação de sites](https://admin.deco.cx/spaces/new).
-
-Escolha o template **SDK**.
-
-
-
-Após a criação, o projeto ainda não está em nenhum time, você pode associar a
-algum time no botão `Save site to your team`.
-
-## Entendendo o Teste A/B
-
-Com o site criado e associado a um time, procure na barra de busca por `abTest`.
-
-Selecione a opção mostrada na imagem:
-
-
-
-Você deve ver um bloco como esse:
-
-
-
-Defina então um nome para o seu teste e depois configure as variantes.
-
-### Variantes
-
-As variantes são versões de código que vão executar aleatoriamente para uma
-parcela do seu público.
-
-Aqui você tem a possibilidade de adicionar `Javascript` e/ou `CSS` para
-customizar a experiência do seu usuário.
-
-Exemplos:
-
-JavaScript to run
-
-```js
-document.querySelector("#my-button").textContent = "Buy!";
-```
-
-CSS to run
-
-```css
-#my-button {
- color: red !important;
-}
-```
-
-## Configuração de Eventos
-
-A configuração de eventos é essencial para Testes A/B, agora você vai ver como
-criar um evento específico para o seu teste.
-
-Na mesma tela de configuração das Variantes, encontre o campo `Tracked Elements`
-e clique para adicionar um.
-
-Você deve ver algo como:
-
-
-
-Agora, basta encontrar o `seletor CSS` do elemento que deseja criar um evento e
-escolher o nome do evento.
-
-## Acompanhando resultados
-
-Você pode acompanhar o resultado do seu teste, com as métricas que criou
-diretamente pelo painel da deco.cx.
-
-> Importante: Para acompanhar os resultados do Teste pode ser necessário um
-> upgrade no plano do seu time, confira em
-> [Pricing](https://deco.cx/en/pricing).
-
-1 - Clique na aba `Experiments`.
-
-2 - Clique em `Create New Experiment`
-
-3 - Crie um experimento com o mesmo nome que colocou no seu Teste.
-
-4 - Acompanhe os resultados.
-
-Para entender mais sobre a tela de resultados, olhe essa
-[documentação](/docs/pt/developing-capabilities/apps/ab-test#funil-e-resultado).
-
-## Go-Live
-
-Antes de colocar o código em produção, preenche um campo chamado
-`plausibleDomain` com o mesmo domínio registrado na aba `Analytics` do seu
-painel deco.cx
-
-Agora, para que tudo isso seja aplicado no seu site:
-
-- Clique em Publish
-- Insira esse script no `` do seu site:
-
-```html
-
-```
-
-## Próximos passos
-
-Features que ainda não estão disponíveis, mas já estamos trabalhando para
-lançar:
-
-- Configuração de tráfego
-
-No Teste a/b para sites deco.cx já é possível definir a quantidade de tráfego,
-estamos trabalhando para implementar na SDK também.
-
-- Testes em paralelo
-
-No Teste a/b para sites deco.cx já é possível rodar mais de um teste ao mesmo
-tempo, estamos trabalhando para implementar na SDK também.
-
-- Testes A/B/C/...
-
-Estamos trabalhando para implementar a possibilidade de testes com mais de duas
-versões.
diff --git a/docs/sdk/feature-flags/en.md b/docs/sdk/feature-flags/en.md
deleted file mode 100644
index ae8ee0ea..00000000
--- a/docs/sdk/feature-flags/en.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Feature Flags
----
-
-## What are Feature Flags?
-
-It is a software development technique that allows enabling or disabling
-specific features of an application without changing the code or performing a
-new deploy.
-
-Check out the technologies already supported and their respective documentation:
-
-## React
-
-[deco-sdk npm](https://www.npmjs.com/package/deco-sdk)
diff --git a/docs/sdk/feature-flags/pt.md b/docs/sdk/feature-flags/pt.md
deleted file mode 100644
index c3ff7f4e..00000000
--- a/docs/sdk/feature-flags/pt.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Feature Flags
----
-
-## O que são Feature Flags?
-
-É uma técnica de desenvolvimento de software que permite ativar ou desativar
-funcionalidades específicas de um aplicativo sem alterar o código ou fazer um
-novo deploy.
-
-Confira as tecnologias já suportadas e suas respectivas documentações:
-
-## React
-
-[deco-sdk npm](https://www.npmjs.com/package/deco-sdk)
diff --git a/docs/self-host/architecture/en.md b/docs/self-host/architecture/en.md
deleted file mode 100644
index 253a948e..00000000
--- a/docs/self-host/architecture/en.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-description: Self-host Architecture
-since: 2.0
----
-
-## Site Architecture on deco.cx
-
-
-
-The high-level architecture of deco integrates different roles (User, Business
-User, Developer), a website web server, a content delivery network (CDN),
-administrative functionalities, and external systems (databases, e-commerce,
-SaaS). The focus is on content management and development/configuration
-environments, with interaction between various stakeholders and components.
-
-### Architecture Overview
-
-1. **Users:**
- - **End User:** Accesses the site via the deco CDN.
- - **Business User:** Interacts with the system via the web environment to
- view and edit content in the "Admin."
- - **Developer (Dev):** Works locally, sends changes via Git, and deploys
- through CI/CD pipelines.
-
-2. **System Components:**
- - **CDN:** Delivers the site to end users.
- - **Site:** The web server accessed by users via the CDN.
- - **Web Environment (Web Env):** Where developers and business users view
- changes that are saved in the environment.
- - **Admin Panel (Admin):** Centralizes control of changes, saving them to Git
- and reflecting updates in web and local environments.
- - **Git:** Version control system integrating changes from Admin and
- developers, with deployment via CI/CD.
- - **External Systems (Database, E-commerce, SaaS):** Provide data and
- services consumed by the site.
-
-### Components and Process Flows
-
-1. **Content Delivery:**
- - **Users:** Interact with the live site via the CDN, with content optimized
- for fast delivery.
-
-2. **Business User Workflow:**
- - **View/Edit:** Business users edit content in Admin and preview changes in
- the web environment.
- - **Publish:** Changes are saved to Git and propagated to the site via the
- CI/CD pipeline.
-
-3. **Developer Workflow:**
- - **Local Environment:** Developers make local changes, sync with Admin, and
- send to Git.
- - **CI/CD:** After changes are pushed to Git, they are automatically deployed
- via CI/CD.
-
-## deco.cx Architecture with Self-hosted Site
-
-
-
-### Changes in Architecture with Self-hosted Site
-
-With self-hosting, the site is hosted on the organization's own infrastructure.
-Here are the main changes and impacts:
-
-### Main Changes
-
-1. **Self-hosted Site and Internal Systems:**
- - The **Site** is hosted locally or on the organization's infrastructure,
- outside deco.cx's direct control.
- - **Internal Systems** (databases and custom software) integrate directly
- with the self-hosted site.
-
-2. **Tunnel to Access the Site:**
- - deco.cx users and systems access the self-hosted site via a tunnel or
- public access, under the organization’s control.
-
-3. **CI/CD and Git Manage the Site:**
- - Even with self-hosting, **CI/CD** is still required to publish code and
- content changes to the site, now under the organization's responsibility.
-
-4. **Continuity of deco.cx Infrastructure:**
- - The **Web Env** and **Admin** remain within deco.cx infrastructure. If
- necessary, the organization must configure access from the web environment
- to internal systems via a tunnel (or public access).
-
-### Impact of the Change
-
-- **Greater Control:** The organization gains more control over the site and
- internal systems.
-- **Additional Complexity:** Managing the tunnel and CI/CD adds maintenance
- responsibilities.
-- **No deco.cx Resources:** The site loses access to deco.cx's CDN and other
- services responsible for security and performance optimization.
-- **Local Customization:** Greater flexibility in integrating with internal
- systems.
-
-### Relevant Aspects of the Self-host Solution
-
-- **Cache Async Render:** By default, the CDN caches the sections rendered on
- the /deco/render route (HTMX and partials). Without this cache, the system may
- be overloaded with unnecessary requests. It might be beneficial for the
- solution to cache these elements.
-
-- **Loader Cache:** Calls to loaders receive local cache on the web server. This
- cache typically occupies 1GB and can fill the disk of the image if it has not
- been mounted with a sufficiently large ephemeral storage. This and other
- options can be configured via environment variables and are defined in the
- deco runtime code.
-
-## deco.cx Architecture with Self-hosted Site and Environments
-
-
-
-### Changes in Architecture with Self-hosted Site and Environments (Envs)
-
-With this change, both the **Site** and **Web Environments** are self-hosted.
-This gives the organization full control over development, production, and
-integration with internal systems.
-
-### Main Changes
-
-1. **Self-hosted Site and Environments (Envs):**
- - Both the **Site** and **Web Env** are hosted on the organization’s own
- infrastructure.
-
-2. **Tunnel to Access the Web Environment:**
- - Interaction with the self-hosted web environment occurs via a tunnel,
- maintaining connectivity with deco.cx. deco.cx intervention is needed if
- the tunnel is not publicly accessible.
-
-3. **CI/CD and Git:**
- - **CI/CD** manages changes locally, with automatic deployment to the
- self-hosted site, but under the organization’s responsibility.
-
-4. **Continuity of deco.cx Infrastructure:**
- - The **Admin** remains connected to deco.cx, but relies on the tunnel to
- interact with the self-hosted environment.
-
-### Impact of the Change
-
-- **Complete Control:** Full control over the site and environments, offering
- greater flexibility.
-- **Independence from deco.cx:** Reduced dependency on external services for
- development.
-- **Maintenance Complexity:** Greater responsibility for security and
- performance.
-- **Local CI/CD Pipelines:** Custom CI/CD pipelines are required for local
- deployments.
-
-### Conclusion
-
-With self-hosted site and environments, the organization gains more control and
-flexibility but takes on greater responsibility for security, maintenance, and
-system connectivity.
diff --git a/docs/self-host/architecture/pt.md b/docs/self-host/architecture/pt.md
deleted file mode 100644
index 574f5d42..00000000
--- a/docs/self-host/architecture/pt.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-description: Arquitetura Self-host
-since: 2.0
----
-
-## Arquitetura de sites na deco.cx
-
-
-
-A arquitetura de alto nível da deco integra diferentes papéis (Usuário, Usuário
-de Negócios, Desenvolvedor), um servidor web do site, uma rede de entrega de
-conteúdo (CDN), funcionalidades administrativas e sistemas externos (bancos de
-dados, e-commerce, SaaS). O foco está no gerenciamento de conteúdo e ambientes
-de desenvolvimento/configuração, com interação entre diversos stakeholders e
-componentes.
-
-### Visão Geral da Arquitetura
-
-1. **Usuários:**
- - **Usuário Final:** Acessa o site por meio da CDN da deco.
- - **Usuário de Negócios:** Interage com o sistema pelo ambiente web para
- visualizar e editar conteúdo no "Admin".
- - **Desenvolvedor (Dev):** Trabalha localmente, envia alterações pelo Git e
- realiza deploy via pipelines de CI/CD.
-
-2. **Componentes do Sistema:**
- - **CDN:** Entrega o site aos usuários finais.
- - **Site:** O servidor web acessado pelos usuários através da CDN.
- - **Ambiente Web (Web Env):** Onde desenvolvedores e usuários de negócios
- visualizam alterações que estão salvas no ambiente.
- - **Painel Administrativo (Admin):** Centraliza o controle das alterações,
- salvando-as no Git e refletindo as alterações nos ambientes web e local.
- - **Git:** Sistema de controle de versão, integrando mudanças do Admin e
- desenvolvedores, com deploy via CI/CD.
- - **Sistemas Externos (Banco de Dados, E-commerce, SaaS):** Integram dados e
- serviços consumidos pelo site.
-
-### Componentes e Fluxos de Processo
-
-1. **Entrega de Conteúdo:**
- - **Usuários:** Interagem com o site ao vivo pela CDN, com conteúdo otimizado
- para rápida entrega.
-
-2. **Fluxo de Trabalho do Usuário de Negócios:**
- - **Visualizar/Editar:** Usuários de negócios editam conteúdo no Admin e
- visualizam as mudanças no ambiente web.
- - **Publicar:** As alterações são salvas no Git e propagadas ao site via
- pipeline CI/CD.
-
-3. **Fluxo de Trabalho do Desenvolvedor:**
- - **Ambiente Local:** Desenvolvedores fazem mudanças locais, sincronizam com
- o Admin, e enviam ao Git.
- - **CI/CD:** Após o envio ao Git, as mudanças são automaticamente deployadas
- via CI/CD.
-
-## Arquitetura deco.cx com Self-host do Site
-
-
-
-### Mudança na Arquitetura com Self-Host do Site
-
-Com o self-host, o site passa a ser hospedado na infraestrutura da própria
-organização. Veja as principais mudanças e impactos:
-
-### Mudanças Principais
-
-1. **Self-host do Site e Sistemas Internos:**
- - O **Site** é hospedado localmente ou em infraestrutura própria, fora do
- controle direto da deco.cx.
- - **Sistemas Internos** (banco de dados e softwares) se integram diretamente
- com o site self-hosted.
-
-2. **Túnel para Acessar o Site:**
- - Usuários e sistemas da deco.cx acessam o site self-hosted via um túnel ou
- acesso público, a escolha e controle da organização.
-
-3. **CI/CD e Git Gerenciam o Site:**
- - Mesmo com o self-host, o **CI/CD** ainda é necessário para publicar as
- alterações de código e conteúdo no Site, sob responsabilidade da
- organização.
-
-4. **Continuidade da Infraestrutura deco.cx:**
- - O **Web Env** e o **Admin** permanecem na infraestrutura da deco.cx. Caso
- seja necessário, a organização deve prover e configurar o acesso do
- ambiente web aos sistemas internos via túnel (ou acesso público).
-
-### Impacto da Mudança
-
-- **Maior Controle:** A organização tem mais controle sobre o site e sistemas
- internos.
-- **Complexidade Adicional:** O túnel e CI/CD próprios aumentam a
- responsabilidade de manutenção.
-- **Sem Recursos deco.cx:** Não há acesso à CDN e outros serviços da deco.cx
- responsáveis pela segurança e otimização do acesso ao site.
-- **Customização Local:** Maior flexibilidade para acesso aos sistemas internos.
-
-### Aspectos Relevantes da Solução Self-Host
-
-- **Cache de Renderização Assíncrona:** Por padrão, a CDN realiza cache das
- seções renderizadas na rota `/deco/render` (HTMX e partials). Sem esse cache,
- o sistema pode ser sobrecarregado com requisições desnecessárias. Portanto, é
- recomendável implementar o cache desses elementos na solução self-host.
-
-- **Cache do Loader:** As chamadas aos loaders recebem cache local no servidor
- web. Esse cache, por padrão, ocupa 1GB e pode consumir o espaço em disco da
- imagem se não for montado com um tamanho adequado. Esta e outras opções podem
- ser configuradas via variáveis de ambiente e são definidas no código do deco
- runtime.
-
-## Arquitetura deco.cx com Self-host do Site e Ambientes
-
-
-
-### Mudança na Arquitetura com Self-Host do Site e dos Ambientes (Envs)
-
-Com essa mudança, tanto o **Site** quanto os **Ambientes Web** são
-auto-hospedados. Isso dá à organização controle total sobre desenvolvimento,
-produção e integração com sistemas internos.
-
-### Mudanças Principais
-
-1. **Self-Host do Site e Ambientes (Envs):**
- - Tanto o **Site** quanto o **Web Env** são hospedados em infraestrutura
- própria.
-
-2. **Túnel para Acessar o Ambiente Web:**
- - Interação com o ambiente web auto-hospedado ocorre via túnel, mantendo
- conectividade com a deco.cx. É necessária intervenção da deco.cx caso o
- túnel não seja acessível publicamente.
-
-3. **CI/CD e Git:**
- - **CI/CD** gerencia as mudanças localmente, com deploy automático para o
- site self-hosted, mas sob responsabilidade da organização.
-
-4. **Continuidade da Infraestrutura deco.cx:**
- - O **Admin** continua conectado à deco.cx, mas depende do túnel para
- interagir com o ambiente self-hosted.
-
-### Impacto da Mudança
-
-- **Controle Completo:** Total controle sobre site e ambientes, oferecendo
- flexibilidade.
-- **Independência da deco.cx:** Menor dependência de serviços terceirizados para
- desenvolvimento.
-- **Complexidade de Manutenção:** Maior responsabilidade sobre segurança e
- desempenho.
-- **CI/CD Local:** Pipelines de CI/CD personalizados são necessários para o
- deploy local.
-
-### Conclusão
-
-Com self-host do site e dos ambientes, a organização tem maior controle e
-flexibilidade, mas assume mais responsabilidade por segurança e manutenção, além
-da conectividade dos sistemas.
diff --git a/docs/self-host/envs/en.md b/docs/self-host/envs/en.md
deleted file mode 100644
index 2520259b..00000000
--- a/docs/self-host/envs/en.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-description: Self-host your envs
-since: 2.0
----
-
-## Deploying Environments (Docker)
-
-An environment represents a space for modifying code or content. It stores files
-and their changes, and communicates with Git to download files and publish
-changes.
-
-To simplify the deployment process, we offer a Docker strategy for publishing
-images.
-
-In the admin, create a **local** environment before deploying and capture the
-environment name (`DECO_ENV_NAME`).
-
-## Dockerfile
-
-To deploy in Docker, create and publish the Dockerfile below. No additional
-files are needed, except for the Git keys to be used in the project.
-
-The Git key is necessary for the image to publish changes. In the example below,
-we will use two files:
-
-- `ssh/id_ed25519`: generated private key
-- `ssh/id_ed25519.pub`: public key associated with the private key above and the
- Git repository
-
-Additionally, we have variables that can be changed according to your needs:
-
-- `DECO_ENV_NAME`: Name of the environment added in the admin
-- `DECO_SITE_NAME`: Project name
-- `DECO_REPO_URL`: SSH access URL to your Git repository
-
-```dockerfile
-# Use the specified Docker image
-FROM ghcr.io/deco-cx/deco:latest
-
-# Set environment variables
-ENV DECO_ENV_NAME=test-env \
- DECO_SITE_NAME=selfhostmgr \
- DECO_TRACKING_BRANCH=main \
- DECO_APP_NAME=site \
- DECO_REPO_URL=git@github.com:deco-sites/selfhostmgr.git
-
-# Create .ssh directory and add GitHub known hosts
-RUN mkdir -p /home/deno/.ssh && \
- ssh-keyscan github.com >> /home/deno/.ssh/known_hosts
-
-# Copy the SSH key into the container (assuming you have it locally)
-# Replace "id_rsa" with the actual filename of your private key
-COPY ssh/id_ed25519 /home/deno/.ssh/
-
-COPY ssh/id_ed25519.pub /home/deno/.ssh/
-USER root
-RUN chmod -R 700 /home/deno/.ssh
-RUN chown -R deno /home/deno/.ssh
-USER deno
-
-# Additional commands for your application (if needed)
-# e.g., cloning the repository, setting up dependencies, etc.
-# RUN git clone $DECO_REPO_URL /app
-
-CMD DENO_DIR_RUN=/app/deno DENO_DIR=/daemon-deno-dir deno run -A --unstable-http jsr:@deco/deco/scripts/run --build-cmd "deno task build" -- deno run --lock=deno.lock --unstable-http --lock-write --inspect --node-modules-dir=false --allow-ffi=$DENO_DIR"npm/registry.npmjs.org/@libsql" --allow-env --allow-net --allow-sys --allow-hrtime --allow-read --allow-run --allow-write=$HOME/.cache,/tmp,/deno-dir/npm,/deno-dir/deno_esbuild,/deno-dir/deno_esbuild_tmp, --unstable --unstable-hmr --unstable-kv --unstable-cron main.ts
-```
-
-### Deploy Docker
-
-To create the Docker image based on your project, run the following command in
-the root directory:
-
-- `docker build -t env_image .`
-
-Finally, create and run the Docker container:
-
-- `docker run -p 8000:8000 --name env_container env_image`
-
-With this, your environment will be running in a Docker container, ready for
-use.
-
-### Important Considerations
-
-By default, the environment will be publicly accessible at the address provided
-in the admin. If you have privacy considerations, you will need to create a
-tunnel between the environment and the repository.
diff --git a/docs/self-host/envs/pt.md b/docs/self-host/envs/pt.md
deleted file mode 100644
index 33f6b1c8..00000000
--- a/docs/self-host/envs/pt.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-description: Self-host seus envs
-since: 2.0
----
-
-## Deploy de Envs (Docker)
-
-Uma env representa um ambiente de modificação de código ou conteúdo. Ela
-armazena os arquivos e suas alterações, além de se comunicar com o Git para
-baixar arquivos e publicar alterações.
-
-Para facilitar o processo de deploy, oferecemos uma estratégia Docker para
-publicação de imagens.
-
-No admin, crie uma env **local** antes de fazer o deploy e capture o nome do
-ambiente (`DECO_ENV_NAME`).
-
-## Dockerfile
-
-Para realizar o deploy em Docker, crie e publique o Dockerfile abaixo. Não é
-necessário nenhum arquivo adicional, exceto as chaves Git a serem utilizadas no
-projeto.
-
-A chave Git é necessária para que a imagem possa publicar alterações. No exemplo
-abaixo, utilizaremos dois arquivos:
-
-- `ssh/id_ed25519`: chave privada gerada
-- `ssh/id_ed25519.pub`: chave pública associada à chave privada acima e ao
- repositório Git
-
-Além disso, temos variáveis que podem ser alteradas conforme sua necessidade:
-
-- `DECO_ENV_NAME`: Nome do ambiente adicionado no admin
-- `DECO_SITE_NAME`: Nome do projeto
-- `DECO_REPO_URL`: Endereço de acesso via SSH ao seu repositório Git
-
-```dockerfile
-# Use the specified Docker image
-FROM ghcr.io/deco-cx/deco:latest
-
-# Set environment variables
-ENV DECO_ENV_NAME=test-env \
- DECO_SITE_NAME=selfhostmgr \
- DECO_TRACKING_BRANCH=main \
- DECO_APP_NAME=site \
- DECO_REPO_URL=git@github.com:deco-sites/selfhostmgr.git
-
-# Create .ssh directory and add GitHub known hosts
-RUN mkdir -p /home/deno/.ssh && \
- ssh-keyscan github.com >> /home/deno/.ssh/known_hosts
-
-# Copy the SSH key into the container (assuming you have it locally)
-# Replace "id_rsa" with the actual filename of your private key
-COPY ssh/id_ed25519 /home/deno/.ssh/
-
-COPY ssh/id_ed25519.pub /home/deno/.ssh/
-USER root
-RUN chmod -R 700 /home/deno/.ssh
-RUN chown -R deno /home/deno/.ssh
-USER deno
-
-# Additional commands for your application (if needed)
-# e.g., cloning the repository, setting up dependencies, etc.
-# RUN git clone $DECO_REPO_URL /app
-
-CMD DENO_DIR_RUN=/app/deno DENO_DIR=/daemon-deno-dir deno run -A --unstable-http jsr:@deco/deco/scripts/run --build-cmd "deno task build" -- deno run --lock=deno.lock --unstable-http --lock-write --inspect --node-modules-dir=false --allow-ffi=$DENO_DIR"npm/registry.npmjs.org/@libsql" --allow-env --allow-net --allow-sys --allow-hrtime --allow-read --allow-run --allow-write=$HOME/.cache,/tmp,/deno-dir/npm,/deno-dir/deno_esbuild,/deno-dir/deno_esbuild_tmp, --unstable --unstable-hmr --unstable-kv --unstable-cron main.ts
-```
-
-### Deploy docker
-
-Para criar a imagem Docker com base no seu projeto, execute o seguinte comando
-no diretório raiz:
-
-- `docker build -t env_image .`
-
-Por fim, crie e execute o container Docker:
-
-- `docker run -p 8000:8000 --name env_container env_image`
-
-Com isso, sua env estará rodando em um container Docker, pronto para uso.
-
-### Considerações importante
-
-Por padrão, o env será acessíevel publicamente no endereço oferecido no admin.
-Caso tenha considerações de privacidade, será preciso criar um túnel entre a env
-e o repositório.
diff --git a/docs/self-host/site/en.md b/docs/self-host/site/en.md
deleted file mode 100644
index 29daa6b8..00000000
--- a/docs/self-host/site/en.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-description: Self-host your site deco
-since: 2.0
----
-
-## Site Deployment (Docker)
-
-The state and configuration of the system are entirely defined in the file
-system. Thus, the site's state is self-contained within the file system itself,
-without the need for communication with external systems by default. However,
-the site can access databases, SaaS services, or other web services, as
-implemented by the developer, but this is not a mandatory requirement of the
-Deco runtime.
-
-To facilitate the deployment process, we offer a simple strategy using a
-Dockerfile.
-
-## Dockerfile
-
-To deploy in Docker, copy the code below to a Dockerfile in the root of your
-project. It is necessary to configure at least the environment variable
-`ENV DECO_SITE_NAME` to reflect the name of your site or project.
-
-```dockerfile
-FROM denoland/deno:alpine
-
-# The port that your application listens to.
-EXPOSE 8000
-
-WORKDIR /app
-
-RUN mkdir -p /home/deno && chown -R deno:deno /home/deno && mkdir /app/deno && chown -R deno:deno /app && mkdir -p /deno-dir && chown -R deno:deno /deno-dir
-
-# Prefer not to run as root.
-USER deno
-
-# These steps will be re-run upon each file change in your working directory:
-COPY --chown=deno:deno . deco
-
-WORKDIR /app/deco
-
-RUN echo -e 'import "$fresh/src/build/deps.ts";\nimport "$fresh/src/runtime/entrypoints/main.ts";\nimport "$fresh/src/runtime/entrypoints/deserializer.ts";\nimport "$fresh/src/runtime/entrypoints/signals.ts";' >> _docker_deps.ts
-
-RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts
-
-ARG GIT_REVISION=1
-
-ENV DECO_SITE_NAME=yoursitename
-
-ENV DENO_DEPLOYMENT_ID=$GIT_REVISION
-
-CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]
-```
-
-### Dockerfile Explanation
-
-Here are some important details about the `Dockerfile` above, which may need
-customization according to your use case:
-
-- `FROM denoland/deno:alpine`
- - Defines the base Docker image. You can specify an exact version, such as
- `FROM denoland/deno:2.0.1.`
-
-- `EXPOSE 8000`
- - Exposes the port where the application will be available.
-
-- `RUN echo -e ... >> _docker_deps.ts`
- - Defines the dependencies that will be cached to avoid fetching external
- packages during execution.
-
-- `RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts`
- - Caches the project's dependencies.
-
-- `ARG GIT_REVISION=1`
- - Allows defining a build argument to identify project revisions.
-
-- `ENV DECO_SITE_NAME=yoursitename`
- - Sets an environment variable used to identify the site in the Deco runtime.
-
-- `ENV DENO_DEPLOYMENT_ID=$GIT_REVISION`
- - Variable used to manage the site's asset cache, which should be changed with
- each new build.
-
-- `CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]`
- - Command that runs the server with the necessary permissions.
-
-### Docker Deployment
-
-To create the Docker image based on your project, run the following command in
-the root directory:
-
-- `docker build -t site_image .`
-
-If necessary, you can pass the `GIT_REVISION` argument to identify a specific
-build revision:
-
-- `docker build --build-arg GIT_REVISION=2 -t site_image .`
-
-Finally, create and run the Docker container:
-
-- `docker run -p 8000:8000 --name site_container site_image`
-
-With this, your site will be running in a Docker container, ready for use.
diff --git a/docs/self-host/site/pt.md b/docs/self-host/site/pt.md
deleted file mode 100644
index 85aab6cf..00000000
--- a/docs/self-host/site/pt.md
+++ /dev/null
@@ -1,105 +0,0 @@
----
-description: Self-host seu site deco
-since: 2.0
----
-
-## Deploy do site (Docker)
-
-O estado e a configuração do sistema são totalmente definidos no sistema de
-arquivos. Assim, o estado do site é auto-contido no próprio sistema de arquivos,
-sem a necessidade de comunicação com sistemas externos por padrão. No entanto, o
-site pode acessar bancos de dados, serviços SaaS ou outros serviços web,
-conforme o código implementado pelo desenvolvedor, mas isso não é um requisito
-obrigatório do runtime da Deco.
-
-Para facilitar o processo de deploy, oferecemos uma estratégia simples
-utilizando um Dockerfile.
-
-## Dockerfile
-
-Para realizar o deploy em Docker, copie o código abaixo para um arquivo
-Dockerfile na raiz do seu projeto. É necessário configurar, no mínimo, a
-variável de ambiente `ENV DECO_SITE_NAME` para refletir o nome do seu site ou
-projeto.
-
-```dockerfile
-FROM denoland/deno:alpine
-
-# The port that your application listens to.
-EXPOSE 8000
-
-WORKDIR /app
-
-RUN mkdir -p /home/deno && chown -R deno:deno /home/deno && mkdir /app/deno && chown -R deno:deno /app && mkdir -p /deno-dir && chown -R deno:deno /deno-dir
-
-# Prefer not to run as root.
-USER deno
-
-# These steps will be re-run upon each file change in your working directory:
-COPY --chown=deno:deno . deco
-
-WORKDIR /app/deco
-
-RUN echo -e 'import "$fresh/src/build/deps.ts";\nimport "$fresh/src/runtime/entrypoints/main.ts";\nimport "$fresh/src/runtime/entrypoints/deserializer.ts";\nimport "$fresh/src/runtime/entrypoints/signals.ts";' >> _docker_deps.ts
-
-RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts
-
-ARG GIT_REVISION=1
-
-ENV DECO_SITE_NAME=yoursitename
-
-ENV DENO_DEPLOYMENT_ID=$GIT_REVISION
-
-CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]
-```
-
-### Explicação do Dockerfile
-
-Aqui estão alguns detalhes importantes sobre o `Dockerfile` acima, que podem
-precisar de personalização conforme o seu caso de uso:
-
-- `FROM denoland/deno:alpine`
- - Define a imagem base do Docker. Você pode especificar uma versão exata, como
- `FROM denoland/deno:2.0.1.`
-
-- `EXPOSE 8000`
- - Expõe a porta onde a aplicação estará disponível.
-
-- `RUN echo -e ... >> _docker_deps.ts`
- - Define as dependências que serão cacheadas para evitar a busca por pacotes
- externos durante a execução.
-
-- `RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts`
- - Realiza o cache das dependências do projeto.
-
-- `ARG GIT_REVISION=1`
- - Permite definir um argumento de build para identificar revisões do projeto.
-
-- `ENV DECO_SITE_NAME=yoursitename`
- - Define uma variável de ambiente usada para identificar o site no runtime
- Deco.
-
-- `ENV DENO_DEPLOYMENT_ID=$GIT_REVISION`
- - Variável usada para gerenciar o cache dos assets do site, devendo ser
- alterada a cada novo build.
-
-- `CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]`
- - Comando que executa o servidor com as permissões necessárias.
-
-### Deploy docker
-
-Para criar a imagem Docker com base no seu projeto, execute o seguinte comando
-no diretório raiz:
-
-- `docker build -t site_image .`
-
-Se necessário, você pode passar o argumento `GIT_REVISION` para identificar uma
-revisão específica do build:
-
-- `docker build --build-arg GIT_REVISION=2 -t site_image .`
-
-Finalmente, crie e execute o container Docker:
-
-- `docker run -p 8000:8000 --name site_container site_image`
-
-Com isso, seu site estará rodando em um container Docker, pronto para uso.
diff --git a/docs/toc-cli.ts b/docs/toc-cli.ts
deleted file mode 100644
index c157e374..00000000
--- a/docs/toc-cli.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import tableOfContents from "./toc.ts";
-import { join } from "https://deno.land/std@0.190.0/path/mod.ts";
-import type { TopLevelEntry } from "site/docs/toc.ts";
-
-const mainCreateFilesFromToc = async () => {
- for (const content of tableOfContents) {
- if (content.slug) {
- const path = `./${content.slug}`;
- const stat: { isDirectory: boolean } = await Deno.stat(path).catch(
- (_) => ({ isDirectory: false }),
- );
- let isCreated = false;
- if (!stat.isDirectory) {
- isCreated = await Deno.mkdir(path)
- .then(() => true)
- .catch(() => false);
- }
- if (!content.children && !isCreated) {
- await Promise.all([
- Deno.create(`${join(path, "en.md")}`),
- Deno.create(`${join(path, "pt.md")}`),
- ]);
- await Deno.writeTextFile(
- join(path, "en.md"),
- `---
- description: TODO
- since: 1.0.0
- ---`,
- );
- await Deno.writeTextFile(
- join(path, "pt.md"),
- `---
- description: TODO
- since: 1.0.0
- ---`,
- );
- continue;
- }
- } else if (content.children) {
- for (const children of content.children) {
- const path = `./${children.slug}`;
- const stat: { isDirectory: boolean } = await Deno.stat(path)
- .catch(
- (_) => ({ isDirectory: false }),
- );
- if (!stat.isDirectory) {
- if (
- await Deno.mkdir(path, { recursive: true })
- .then(() => true)
- .catch(() => false)
- ) {
- await Promise.all([
- Deno.create(`${join(path, "en.md")}`),
- Deno.create(`${join(path, "pt.md")}`),
- ]);
-
- await Deno.writeTextFile(
- join(path, "en.md"),
- `---
- description: TODO
- since: 1.0.0
- ---`,
- );
- await Deno.writeTextFile(
- join(path, "pt.md"),
- `---
- description: TODO
- since: 1.0.0
- ---`,
- );
- }
- }
- }
- }
- }
-};
-
-const checkUnsuedDocFile = async () => {
- const processChildren = (entry: TopLevelEntry): string[] =>
- [
- entry.slug ?? "",
- ...(entry.children && entry.children.map(processChildren) ||
- ([] as string[])).flat(),
- ].filter(Boolean);
-
- const slugs = tableOfContents.map(processChildren).flat();
-
- const processDir = async (dir: string, prefix: string): Promise => {
- const docFiles = await Deno.readDir(dir);
- const notUsedDirs = [] as string[];
- for await (const file of docFiles) {
- if (file.isFile) {
- const slug = dir.slice(prefix.length);
- if (!slugs.includes(slug) && !notUsedDirs.includes(dir)) {
- notUsedDirs.push(dir);
- }
- } else {
- notUsedDirs.push(...await processDir(dir + "/" + file.name, prefix));
- }
- }
- return notUsedDirs;
- };
- const processAllFiles = (dir: string) => processDir(dir, dir + "/");
- console.log(await processAllFiles("./docs"));
-};
-
-const generateCSVFromTOC = () => {
- const process = (entity: TopLevelEntry[]) => {
- const data = [] as string[];
- for (let i = 0; i < entity.length; i++) {
- const children = entity[i].children;
- if (children) {
- data.push(...process(children));
- }
- if (entity[i].slug) {
- data.push(
- [
- "https://www.deco.cx/docs/pt/" + entity[i].slug,
- entity[i].title["pt"],
- "https://www.deco.cx/docs/en/" + entity[i].slug,
- entity[i].title["en"],
- ].join(";"),
- );
- }
- }
- return data;
- };
-
- // generate a CSV with url;title;url_en;title_en
- console.log("url;title;url_en;title_en");
- process(tableOfContents).toSorted().map((item) => console.log(item));
-
- // check if there is any file not used
-};
-
-if (import.meta.main) {
- const arg = Deno.args[0];
-
- if (arg === "generateCSV") {
- generateCSVFromTOC();
- } else if (arg === "createFiles") {
- mainCreateFilesFromToc();
- } else if (arg === "checkFiles") {
- checkUnsuedDocFile();
- } else {
- console.log(
- "Invalid argument. Please specify 'generateCSV' or 'createFiles'.",
- );
- }
-}
diff --git a/docs/toc.ts b/docs/toc.ts
deleted file mode 100644
index f79938e2..00000000
--- a/docs/toc.ts
+++ /dev/null
@@ -1,745 +0,0 @@
-type LocalizedTitle = { pt?: string; en?: string };
-type Entry = { title: LocalizedTitle; slug?: string };
-export type TopLevelEntry = Entry & { children?: Array };
-
-type TableOfContents = Array;
-
-const tableOfContents: TableOfContents = [
- {
- title: { pt: "O que é deco.cx", en: "What is deco.cx" },
- slug: "overview",
- },
- {
- title: { pt: "Comece agora", en: "Getting Started" },
- children: [
- {
- title: { pt: "Criando um Site", en: "Creating a Site" },
- slug: "getting-started/creating-a-site",
- },
- {
- title: { pt: "Criando uma nova Página", en: "Creating a new Page" },
- slug: "getting-started/creating-a-new-page",
- },
- {
- title: {
- pt: "Gerenciando mudanças e publicando",
- en: "Managing changes and publishing",
- },
- slug: "getting-started/changes-and-publishing",
- },
- {
- title: {
- pt: "Adicionando um app ao seu site",
- en: "Adding an app to your site",
- },
- slug: "getting-started/adding-an-app",
- },
- {
- title: {
- pt: "Adicionando domínios próprios",
- en: "Adding custom domains",
- },
- slug: "getting-started/custom-domains",
- children: [
- {
- title: {
- pt: "Como redirecionar domínio sem wwww",
- en: "How to redirect domain without www",
- },
- slug: "getting-started/custom-domains/apex-domains",
- },
- ],
- },
- ],
- },
- {
- title: { pt: "Funcionalidades do CMS", en: "CMS capabilities" },
- children: [
- { title: { pt: "Home", en: "Home" }, slug: "cms-capabilities/home" },
- {
- title: { pt: "Content", en: "Content" },
- slug: "cms-capabilities/content",
- children: [
- {
- title: { pt: "Pages", en: "Pages" },
- slug: "cms-capabilities/content/pages",
- },
- {
- title: { pt: "Sections", en: "Sections" },
- slug: "cms-capabilities/content/sections",
- },
- {
- title: { pt: "Blog", en: "Blog" },
- slug: "cms-capabilities/content/blog",
- },
- {
- title: { pt: "Releases", en: "Releases" },
- slug: "cms-capabilities/content/releases",
- },
- {
- title: { pt: "Assets", en: "Assets" },
- slug: "cms-capabilities/content/assets",
- },
- {
- title: { pt: "Records", en: "Records" },
- slug: "cms-capabilities/content/records",
- },
- ],
- },
- {
- title: { pt: "Advanced", en: "Advanced" },
- slug: "cms-capabilities/advanced",
- children: [
- {
- title: { pt: "SEO (e robots)", en: "SEO (and robots)" },
- slug: "cms-capabilities/advanced/seo",
- },
- {
- title: {
- pt: "Redirects (e Proxies)",
- en: "Redirects (and Proxies)",
- },
- slug: "cms-capabilities/advanced/redirects",
- },
- {
- title: {
- pt: "Loaders",
- en: "Loaders",
- },
- slug: "cms-capabilities/advanced/loaders",
- },
- {
- title: {
- pt: "Actions",
- en: "Actions",
- },
- slug: "cms-capabilities/advanced/actions",
- },
- {
- title: {
- pt: "Segments",
- en: "Segments",
- },
- slug: "cms-capabilities/advanced/segments",
- },
- {
- title: {
- pt: "Apps",
- en: "Apps",
- },
- slug: "cms-capabilities/advanced/apps",
- },
- {
- title: {
- pt: "Experiments",
- en: "Experiments",
- },
- slug: "cms-capabilities/advanced/experiments",
- },
- {
- title: {
- pt: "Teste A/B",
- en: "Creating an A/B Test",
- },
- slug: "developing-capabilities/apps/ab-test",
- },
- ],
- },
- {
- title: { pt: "Management", en: "Management" },
- slug: "cms-capabilities/management",
- children: [
- {
- title: { pt: "Settings (domínios)", en: "Settings (domains)" },
- slug: "cms-capabilities/management/custom-domains",
- },
- {
- title: {
- pt: "Settings (domínios APEX)",
- en: "Settings (APEX domains)",
- },
- slug: "cms-capabilities/management/apex-domains",
- },
- ],
- },
- ],
- },
- {
- title: {
- pt: "Guia de Desenvolvimento",
- en: "Developing guide",
- },
- children: [
- {
- title: { pt: "Configuração do ambiente", en: "Environment setup" },
- slug: "developing-guide/setup",
- },
- {
- title: {
- pt: "Editando uma section",
- en: "Editing a Section",
- },
- slug: "developing-guide/editable-sections",
- },
- {
- title: { pt: "Criando uma Section", en: "Creating a Section" },
- slug: "developing-guide/hello-world",
- },
- {
- title: {
- pt: "Interatividade com HTMX",
- en: "Interactivity with HTMX",
- },
- slug: "developing-guide/htmx",
- },
- {
- title: {
- pt: "Carregando dados de uma API",
- en: "Fetching data from APIs",
- },
- slug: "developing-guide/fetching-data",
- },
- {
- title: {
- pt: "Criando um loader",
- en: "Creating a loader",
- },
- slug: "developing-guide/creating-loaders",
- },
- {
- title: {
- pt: "Newsletter com HTMX e Deco Records",
- en: "Newsletter with HTMX and Deco Records",
- },
- slug: "developing-guide/examples",
- },
- {
- title: {
- pt: "Go Live com Teste A/B",
- en: "Go Live with A/B Testing",
- },
- slug: "developing-guide/go-live-ab-testing",
- },
- ],
- },
- {
- title: {
- pt: "Conceitos",
- en: "Concepts",
- },
- children: [
- {
- title: {
- pt: "Block",
- en: "Block",
- },
- slug: "concepts/block",
- },
- {
- title: {
- pt: "Section",
- en: "Section",
- },
- slug: "concepts/section",
- },
- {
- title: {
- pt: "Loader",
- en: "Loader",
- },
- slug: "concepts/loader",
- },
- {
- title: {
- pt: "Action",
- en: "Action",
- },
- slug: "concepts/action",
- },
- {
- title: {
- pt: "Matcher",
- en: "Matcher",
- },
- slug: "concepts/matcher",
- },
- {
- title: {
- pt: "Segment",
- en: "Segment",
- },
- slug: "concepts/segment",
- },
- {
- title: {
- pt: "App",
- en: "App",
- },
- slug: "concepts/app",
- },
- ],
- },
- {
- title: {
- pt: "Funcionalidades de Desenvolvimento",
- en: "Development capabilities",
- },
- children: [
- {
- title: { pt: "Blocos", en: "Blocks" },
- slug: "developing-capabilities/blocks",
- children: [
- {
- title: {
- pt: "Exportando Propriedades Padrões em um Bloco",
- en: "Exporting Default Props in a Block",
- },
- slug: "developing-capabilities/blocks/exporting-default-props",
- },
- ],
- },
- {
- title: { pt: "Seções", en: "Sections" },
- slug: "developing-capabilities/sections",
- children: [
- {
- title: {
- pt: "Capturando exceções nas Seções",
- en: "Section error fallback",
- },
- slug: "developing-capabilities/sections/error-fallback",
- },
- {
- title: {
- pt: "Estados de carregamento nas Seções",
- en: "Section loading fallback",
- },
- slug: "developing-capabilities/sections/loading-fallback",
- },
- {
- title: {
- pt: "Redirecionando usuários a partir de Seções",
- en: "Redirecting users from Sections",
- },
- slug: "developing-capabilities/sections/redirecting-users",
- },
- {
- title: {
- pt: "Aceitando uma Seção como parâmetro da minha Seção",
- en: "Accepting Other Sections as Parameters in Your Section",
- },
- slug: "developing-capabilities/sections/accept-a-section",
- },
- ],
- },
- {
- title: { pt: "Propriedades de Sections", en: "Section Properties" },
- slug: "developing-capabilities/section-properties/utility-types",
- children: [
- {
- title: { pt: "Tipos utilitários", en: "Utility types" },
- slug: "developing-capabilities/section-properties/utility-types",
- },
- {
- title: {
- pt: "Dados padronizados",
- en: "Standard data types",
- },
- slug: "developing-capabilities/section-properties/standard-data-types",
- },
- {
- title: {
- pt: "Utilização de Segredos e Senhas",
- en: "Using Secrets",
- },
- slug: "developing-capabilities/section-properties/using-secrets",
- },
- {
- title: {
- pt: "Annotations",
- en: "Annotations",
- },
- slug: "developing-capabilities/section-properties/annotations",
- },
- {
- title: {
- pt: "Widgets",
- en: "Widgets",
- },
- slug: "developing-capabilities/section-properties/widgets",
- },
- ],
- },
- {
- title: { pt: "Sections Interativas", en: "Interactive Sections" },
- slug: "developing-capabilities/interactive-sections/partial",
- children: [
- {
- title: {
- pt: "Partial",
- en: "Partial",
- },
- slug: "developing-capabilities/interactive-sections/partial",
- },
- ],
- },
- {
- title: { pt: "Loaders", en: "Loaders" },
- slug: "developing-capabilities/loaders",
-
- },
- {
- title: { pt: "Islands", en: "Islands" },
- slug: "developing-capabilities/islands",
- children: [
- {
- title: {
- pt: "Actions",
- en: "Actions",
- },
- slug: "developing-capabilities/islands/actions",
- },
- {
- title: {
- pt: "Carregando dados de uma API a partir do browser",
- en: "Client-side Invocation",
- },
- slug: "developing-capabilities/islands/fetching-data-client",
- },
- ],
- },
- {
- title: { pt: "Apps", en: "Apps" },
- slug: "developing-capabilities/apps",
- children: [
- {
- title: {
- pt: "Desenvolvendo Apps",
- en: "Developing Apps",
- },
- slug: "developing-capabilities/apps/creating-an-app",
- },
- {
- title: {
- pt: "Instalando Apps",
- en: "Installing Apps",
- },
- slug: "developing-capabilities/apps/making-an-app-installable",
- },
- ],
- },
- {
- title: {
- pt: "Deco Records",
- en: "Deco Records",
- },
- slug: "reference/deco-records",
- },
- {
- title: {
- pt: "Modificando o status de retorno de uma pagina",
- en: "Modifying the return status of a page",
- },
- slug: "developing-capabilities/modifying-status",
- },
- {
- title: {
- pt: "Gerenciando o Acesso de um Bloco",
- en: "Managing Block Access",
- },
- slug: "developing-capabilities/manage-block-access",
- },
- {
- title: {
- pt: "E-commerce Analytics",
- en: "E-commerce Analytics",
- },
- slug: "reference/analytics",
- },
- {
- title: { pt: "Problemas comuns", en: "Troubleshooting" },
- slug: "reference/troubleshooting",
- },
- ],
- },
- {
- title: {
- pt: "Decopilot",
- en: "Decopilot",
- },
- children: [
- {
- title: {
- pt: "Como acessar",
- en: "How to access",
- },
- slug: "decopilot/how-to-access",
- },
- {
- title: {
- pt: "Assistente",
- en: "Assistant",
- },
- slug: "decopilot/assistant",
- },
- ],
- },
- {
- title: {
- pt: "Performance",
- en: "Performance",
- },
- children: [
- {
- title: {
- pt: "Porque performance importa",
- en: "Why web performance matters",
- },
- slug: "performance/why",
- },
- {
- title: {
- pt: "O guia deco para performance",
- en: "Deco performance guide",
- },
- slug: "performance/guide",
- },
- {
- title: {
- pt: "Otimizando CSS",
- en: "Optimizing CSS",
- },
- slug: "performance/medias/css",
- },
- {
- title: {
- pt: "Otimizando imagens",
- en: "Optimizing images",
- },
- slug: "performance/medias/images",
- },
- {
- title: {
- pt: "Otimizando SVG através de sprites",
- en: "Optimizing SVG via sprites",
- },
- slug: "performance/medias/svg-sprites",
- },
- {
- title: {
- pt: "Otimizando fontes",
- en: "Optimizing fonts",
- },
- slug: "performance/medias/fonts",
- },
- {
- title: {
- pt: "Otimizando loaders",
- en: "Optimizing loaders",
- },
- slug: "performance/loaders",
- },
- {
- title: {
- pt: "Otimizando scripts de terceiros",
- en: "Optimizing 3rd party scripts",
- },
- slug: "performance/lazy-3rd-party-scripts",
- },
- {
- title: {
- pt: "Otimizando Ilhas",
- en: "Optimizing Islands",
- },
- slug: "performance/islands",
- },
- {
- title: {
- pt: "Renderização assíncrona",
- en: "Async rendering",
- },
- slug: "performance/edge-async-render",
- },
- ],
- },
- {
- title: {
- pt: "Funcionalidades da Plataforma",
- en: "Platform capabilities",
- },
- children: [
- {
- title: {
- pt: "Teste A/B headless",
- en: "Headless A/B Test",
- },
- slug: "sdk/ab-test",
- },
- {
- title: {
- pt: "Feature Flags",
- en: "Feature Flags",
- },
- slug: "sdk/feature-flags",
- },
- {
- title: {
- pt: "CMS Headless",
- en: "Headless CMS",
- },
- slug: "headless-cms",
- },
- {
- title: {
- pt: "Integração GTM",
- en: "GTM Integration",
- },
- slug: "gtm",
- },
- ],
- },
- {
- title: {
- pt: "Referência da API",
- en: "API Reference",
- },
- children: [
- {
- title: {
- pt: "Invoke",
- en: "Invoke",
- },
- slug: "api-reference/invoke",
- },
- {
- title: {
- pt: "useSection",
- en: "useSection",
- },
- slug: "api-reference/use-section",
- },
- {
- title: {
- pt: "useScript",
- en: "useScript",
- },
- slug: "api-reference/use-script",
- },
- ],
- },
- {
- title: {
- pt: "Self-host your site",
- en: "Self-host your site",
- },
- children: [
- {
- title: {
- pt: "Arquitetura Self-host",
- en: "Self-host architecture",
- },
- slug: "self-host/architecture",
- },
- {
- title: {
- pt: "Self-host seu site deco",
- en: "Self-host your site deco",
- },
- slug: "self-host/site",
- },
- {
- title: {
- pt: "Self-host seus envs",
- en: "Self-host your envs",
- },
- slug: "self-host/envs",
- },
- ],
- },
-];
-
-const tableOfContentsBySlug = tableOfContents.reduce((acc, cur) => {
- return addEntriesToAccumulator(acc, cur);
-}, {} as Record);
-
-function addEntriesToAccumulator(
- acc: Record,
- entry: TopLevelEntry
-) {
- if (entry.slug) {
- acc[entry.slug] = entry;
- }
- if (entry.children) {
- entry.children.forEach((child: TopLevelEntry) =>
- addEntriesToAccumulator(acc, child)
- );
- }
- return acc;
-}
-
-export const getMenuDataForLanguage = (language: "en" | "pt") =>
- tableOfContents.map(({ title, slug, children }) => ({
- title: title[language],
- href: children
- ? `/docs/${language}/${children[0].slug}`
- : `/docs/${language}/${slug}`,
- children: children?.map(({ title, slug }) => ({
- title: title[language],
- href: `/docs/${language}/${slug}`,
- })),
- }));
-
-export type SupportedLanguages = "en" | "pt";
-
-export const getTitleForPost = (language: SupportedLanguages, slug: string) => {
- return tableOfContentsBySlug[slug]?.title[language];
-};
-
-type NextOrPrevious = { title?: string; category?: string; href?: string };
-
-const getNextPreviousForEntry = (
- language: SupportedLanguages,
- entry: TopLevelEntry
-): NextOrPrevious => ({
- href: `/docs/${language}/${entry.slug}`,
- title: entry.title?.[language],
-});
-
-export const getNextAndPreviousPost = (
- language: SupportedLanguages,
- slug: string
-) => {
- const tableOfContentsEntries = tableOfContents.reduce((entries, cur) => {
- return entries.concat(
- [cur, ...(cur.children || [])].filter(({ slug }) => slug)
- );
- }, [] as TopLevelEntry[]);
-
- const currentIndex = tableOfContentsEntries.findLastIndex(
- ({ slug: currentSlug }) => currentSlug && slug.includes(currentSlug)
- );
-
- const previous =
- currentIndex === 0
- ? undefined
- : getNextPreviousForEntry(
- language,
- tableOfContentsEntries[currentIndex - 1]
- );
-
- const next =
- currentIndex === tableOfContentsEntries.length - 1
- ? undefined
- : getNextPreviousForEntry(
- language,
- tableOfContentsEntries[currentIndex + 1]
- );
-
- return {
- previous,
- next,
- };
-};
-export type MenuData = ReturnType;
-
-export default tableOfContents;
diff --git a/docs/treinamento-comercial/agencias-parceiras/pt.md b/docs/treinamento-comercial/agencias-parceiras/pt.md
deleted file mode 100644
index ce07e88f..00000000
--- a/docs/treinamento-comercial/agencias-parceiras/pt.md
+++ /dev/null
@@ -1,330 +0,0 @@
----
-description: Treinamento Comercial - Agências Parceiras
-since: 1.0.0
----
-
-VIDEO
-
-Fala pessoal, tudo bem?
-
-A gente chegou finalmente na última parte desse nosso treinamento. E aqui a
-gente vai explorar juntos como que vocês vão crescer junto com a deco.cx.cx, né?
-Como que vocês vão ganhar dinheiro com a gente. A gente vai falar de como vocês
-vão prospectar os seus primeiros clientes, construir os seus primeiros cases e,
-além disso, abrir a sua carteira de clientes vendendo performance e vendendo
-capacidade de personalização.
-
-Então vamos começar.
-
-O primeiro passo para você se beneficiar da deco.cx é você se tornar uma agência
-parceira. Se vocês estão aqui, vocês provavelmente já são. Se não são, peça o
-contrato de parceria e eu vou explicar aqui um pouquinho dos benefícios que a
-gente oferece, quando você se torna de fato um parceiro oficial da deco.cx.
-
-Vale dizer que o nosso contrato de parceria é super flexível e a gente está
-aprendendo com isso. Lembrem, a gente tem só menos de um ano de vida. Então a
-gente tá aprendendo junto com vocês. Todos os termos do contrato, os benefícios,
-se vocês tiverem alguma outra ideia de como vocês querem construir essa
-parceria, a gente está super aberto a desenhar, termos a quatro mãos. Enfim, são
-só sugestões iniciais para a gente começar com uma proposta na mesa.Mas estamos
-loucos pra ouvir o que vocês têm a dizer sobre essas nossas vantagens.
-
-## Então, por que vender deco.cx? Por que você deveria se juntar a gente?
-
-Antes de falar dos benefícios exclusivos de você ser um parceiro oficial da
-deco.cx, eu quero articular com vocês aqui o que vocês ganham em surfar essa
-onda junto com a gente. Que tipo de benefícios vocês têm em vender deco.cx e
-incluir a deco.cx no portfólio de soluções da agência de vocês.
-
-> **Como vocês sabem, a deco.cx é uma solução Headless, e pra gente não faz a
-> menor diferença em qual plataforma que o seu cliente tá.**
-
-Hoje em dia, a maior parte das agências está casada com uma plataforma de
-comércio específica. Então, se você é uma agência da VNDA ou se você é uma
-agência da deco.cx, ou se você é uma agência da Shopify, você só trabalha com
-essa agência, no máximo com uma ou duas agências. Seu time comercial está
-treinado em vender essa plataforma, seu time técnico só sabe implementar essa
-plataforma. E aí você tem um mercado muito restrito.
-
-O que a gente está possibilitando pra sua agência agora com a deco.cx, é que
-você possa vender projetos independente da plataforma de comércio que a gente se
-encontra. E com isso você ganha uma expansão de mercado muito grande.
-
-Pensa, por exemplo, fora do Brasil, se você for uma agência, digamos, Nuvemshop,
-Loja Integrada, ou que tem clientes fora do Brasil, ainda é muito pequeno o
-mercado fora da América Latina dessas plataformas. Se você for uma agência
-grande, mirando no mercado internacional, você vai encontrar muita dificuldade
-de prospectar clientes em plataformas específicas que são de origem brasileira
-ou de origem latino americana.
-
-Com a deco.cx, você passa a ter muito mais facilidade de abordar e de prospectar
-clientes fora do Brasil. Porque independente da plataforma, você faz um projeto
-de migração do front na deco.cx ou migra primeiro a digital experience, e aí se
-o cliente está na plataforma X ou Y, isso pra gente não faz a menor diferença.
-Então a sua agência está ganhando mais mercado.
-
-> **Outro ponto que é muito relevante é redução do churn que a gente
-> proporciona.**
-
-Porque hoje, por que você escolheu ter uma plataforma de e-commerce específica —
-para treinar o seu time para o seu time implementar —, se o seu cliente sair
-dessa plataforma, então o cliente está na VTEX e decide ir para Magento, se você
-não opera com Magento, é bem provável que você vá perder esse cliente. Ele vai
-procurar uma agência especializada em Magento.
-
-Agora não acontece mais isso. Independente de para onde seu cliente vai, ele
-continua com a deco.cx, ele continua com você.
-
-> **Outro ponto para vocês considerarem é a redução do custo de mão de obra.**
-
-Então, hoje cada plataforma tem a sua própria solução de frontend. A VTEX tem o
-VTEX IO, tem a FastStore, o Shopify tem o Liquid, a Salesforce tem o Composable
-Storefront. O que isso significa? Que você precisa treinar, encontrar mão de
-obra especializada ou treinar o seu time naquela tecnologia proprietária.
-
-Isso é muito custoso. É difícil você encontrar gente experiente e é caro você
-treinar.
-
-O que a gente está proporcionando aqui é uma stack de tecnologia que qualquer
-desenvolvedor júnior sabe codar. É baseada em JavaScript, é baseada em React, é
-baseada em TypeScript. Qualquer desenvolvedor júnior — que acabou de sair de um
-bootcamp — ele passa a ser muito produtivo pra você e muito pouco tempo.
-
-Então acabou esse mundo de _"Ah, eu quero montar um time de Shopify, eu preciso
-encontrar especialistas em Shopify, eu preciso treinar pessoas no Shopify."_
-Agora você tem um time só de front para todas as plataformas, que trabalha em
-cima de uma mesma tecnologia. E não é uma tecnologia proprietária nossa. É uma
-tecnologia de mercado que qualquer pessoa conhece. Isso acaba se barateando seu
-custo de mão de obra e deixando o seu time muito mais produtivo. Mesmo os
-desenvolvedores mais juniores que têm menos experiência.
-
-> **Hoje em dia, muitas agências ficam enxugando gelo para o cliente.**
-
-O que significa? Elas vendem um serviço de evolução que não mexe o ponteiro, que
-não aumenta as vendas e que não geram um resultado significativo para os
-varejistas, para as lojas.
-
-O que a gente tá proporcionando com a deco.cx agora é um conjunto de ferramentas
-que vai fazer com que o seu serviço valha muito mais para o cliente, o que
-significa que você pode cobrar mais por ele.
-
-Então, ok, por um lado, o seu cliente não vai te pagar para você trocar banner
-ou para você trocar a cor de um componente, ou para você trocar a posição do
-componente, porque com a deco.cx o cliente passa a ter muito mais autonomia de
-como que ele quer evoluir e mexer na própria loja dele. A gente tá dando um
-editor visual que o próprio time de negócio do cliente consegue mexer.
-
-Por outro lado, a gente está trazendo várias ferramentas que permitem que o seu
-time seja muito mais assertivo. Então, uma delas, por exemplo, a ferramenta de
-teste AB, é uma ferramenta de personalização por audiência. Agora o seu cliente
-não tem mais um site. Ele pode ter um site de manhã, um site de tarde, um site
-de noite. O seu time pode recomendar para o seu cliente que ele recorte uma
-audiência específica para quem já gastou R$500,00 na loja no mês passado, ou
-para quem aniversariante do mês criar uma promoção exclusiva.
-
-Então, por mais que você esteja abrindo mão de um serviço que é barato e simples
-de você fazer na sua evolução, você está compondo no seu no seu portfólio
-serviços mais sofisticados que não vai te exigir uma mão de obra mais cara ou
-muito mais especializada, mas que vai agregar muito mais valor pro seu cliente e
-com isso vai valorizar sua marca.
-
-E a gente vai falar mais pra frente também dos nossos next step, do que vem por
-aí, do nosso roadmap, de como que nosso produto vai evoluir, como que você pode
-se alavancar disso. Mas antecipando, aqui nesse momento tem dois pontos que você
-pode surfar junto com a nossa onda:
-
-> **Um deles é o nosso Whitelabel**
-
-Agora você deixa de ser uma agência e você passa a ter o seu próprio produto
-digital. Você passa a se tornar uma empresa de Software as a Service (SaaS),
-você passa a ter sua própria plataforma. Isso digitaliza o seu negócio. Ao invés
-de você vender só serviços, você vende serviços, você vende o seu próprio admin,
-o seu próprio produto. Isso é uma possibilidade.
-
-> **A outra possibilidade está no nosso [deco.hub](https://www.deco.cx/pt/hub),
-> que é o nosso marketplace de blocos.**
-
-Como vocês podem ver mais pra frente. Você pode vender template, você pode
-vender componentes de interface, você pode vender novas integrações, você pode
-vender os seus próprios serviços dentro desse nosso marketplace. Com isso a
-gente tá te dando um novo canal de venda.
-
-Você cria um template, você comercializa o seu template para toda a nossa base
-de clientes, para toda a nossa comunidade. Qualquer pessoa entra lá, escolhe o
-template da sua agência, escolhe um serviço de implementação e você agora
-consegue crescer em vendas de forma escalável, sem aumentar seu custo comercial.
-
----
-
-E aí, agora sim, queria passar pelos benefícios de você se tornar um parceiro
-oficial.
-
-1. O primeiro benefício é o Revenue Share.
-
-A gente trabalha com um modelo que já é conhecido no mercado, que se a gente
-atingir com o cliente, você comissiona em cima daquele projeto que o cliente
-fecha com você. Se você nos indicar um cliente, a gente comissiona você um par
-com a receita que a gente tem desse nosso cliente.
-
-Os valores de comissionamento eles variam de cliente pra cliente.
-
-Se você trouxer uma big enterprise para deco.cx, obviamente que a gente vai
-considerar um comissionamento maior do que se você trouxer uma empresa muito
-pequenininha.
-
-E também de acordo com o nível de envolvimento nessa indicação. Se você faz uma
-indicação fria. _"Tem um amigo meu que trabalha na marca e tal, você quer falar
-com ele?"_, e você indica e não faz uma introdução, o comissionamento que a
-gente paga é menor. Porque se você fizer todo o trabalho de venda, obviamente,
-você liderar essa venda para o cliente apresentar deco.cx, fazer uma reunião
-presencial, apresentar o nosso pitch deck, apresentar os termos do contrato e o
-cliente chegar para a gente só pra assinar o contrato. É claro que a gente pesa
-isso na hora de comissionar.
-
-E tudo isso você pode ver nos termos de contrato de parceria. E de novo, tudo
-isso é negociável. A gente pode discutir caso a caso. Só estou dando uma visão
-geral para vocês de como funciona o nosso nosso modelo padrão.
-
-Vale dizer que hoje eu estou em julho de 2023. Hoje é dia 21, que a gente tá
-gravando, e a gente está mudando bastante esse contrato de parceria. Então isso
-evolui sempre. Mas um ponto importante a destacar é: nós estamos recebendo
-muitos leads das agências parceiras. Mais lead do que a gente dá conta de
-implementar. Então é bem provável que nos primeiros meses da parceria a gente
-não te leve muitos leads, porque nós não estamos batendo na porta das marcas de
-forma geral e vendendo a deco.cx diretamente. Boa parte das nossas vendas — eu
-diria que 80,90% das nossas vendas — tem vindo através de indicações de
-agências.
-
-Então não se frustre se nos primeiros meses dessa parceria a gente tiver te
-indicando pouco cliente e você estiver trazendo mais cliente pra deco.cx. A
-gente realmente não está dando conta do volume de interesse que a gente tá
-recebendo de vocês.
-
-As maiores oportunidades comerciais que a gente conversa diretamente com os
-clientes são os eventos. Então, no VTEX Day, no VTEX Connect LatAm, no Fórum do
-E-commerce Brasil, na NRF. Esses são os grandes momentos em que a gente tem um
-stand em que a gente tem uma conversa organizada com várias marcas e aí a gente
-consegue gerar um monte de lead para depois distribuir pras agências. No último
-VTEX Day foram 200 e tantos leads gerados. Esse é o momento que a gente abre o
-funil, mas via de regra, no dia a dia, mês a mês, a gente não está abordando as
-marcas diretamente, a gente tá aguardando vocês abordarem.
-
-2. Um outro benefício de você ser parceiro é o nosso suporte dedicado.
-
-Quem já é parceiro, sabe o que a gente tem um canal no Discord, uma comunidade
-no Discord, e a gente é bem próximo das nossas agências. Então a gente tem um
-canal no WhatsApp com quem gosta de ter um canal WhatsApp. A gente tem um canal
-fechado no Discord com cada agência. A gente faz um canal para cada projeto. Os
-nossos engenheiros estão 100% disponíveis para vocês, então vocês podem falar
-diretamente com o nosso time de desenvolvimento. Eles falam diretamente com os
-fundadores da empresa, comigo, com Lucis, com o Gui. Então o suporte para as
-agências parceiras é muito próximo.
-
-Se você não for uma agência parceira, você continua tendo suporte, mas nos
-canais abertos, no e-mail. Você passa a ter um suporte não priorizado, digamos
-assim. Se você for no Discord, você vai usar o canal público de parceiros. A
-gente não vai ter um grupo fechadinho com você para dar suporte para o seu time.
-
-3. Um outro ponto são os nossos treinamentos e a nossa certificação.
-
-Vocês já devem saber. A gente conduz treinamentos comerciais e técnicos de
-tempos em tempos, geralmente todo mês ou até mais de uma vez por mês, e o seu
-time vai ter acesso prioritário aos treinamentos, sincronamente.
-
-Os treinamentos vão ficar disponíveis assincronamente, como esse daqui, mas o
-treinamento síncrono é legal para o seu time poder tirar dúvida, para você
-perguntar alguma coisa diretamente pro time. Enfim, pra gente tem uma
-proximidade maior. Para você praticar alguns exercícios. Então, o treinamento
-síncrono ele fica disponível para os parceiros e o treinamento assíncrono fica
-disponível basicamente para todo mundo.
-
-Então é legal vocês valorizarem isso, porque é muito mais fácil certificar o seu
-time com um treinamento síncrono, que ele já sai certificado do que com
-treinamento assíncrono.
-
-4. Outro ponto legal de falar também é o acesso antecipado que a gente oferece
- para os parceiros nas nossas novas features.
-
-Então, toda sexta feira, a gente tem o Community Call, a gente divulga como que
-nosso produto está evoluindo e os primeiros usuários que a gente convida para
-testar essas novidades do nosso produto, são as nossas agências parceiras. O
-Whitelabel, o [deco.hub](https://www.deco.cx/pt/hub), o nosso sistema de
-workflows. Quem vai testar primeiro essas features novas vão ser as agências que
-têm contrato de parceria conosco. Depois a gente vai expandindo para as outras
-agências
-
-5. Os nossos parceiros oficiais também tem acesso ao sistema de bounties
- premium.
-
-A gente não tem um nome definitivo para isso. Talvez mude para qualquer outra
-coisa. Mas significa que, além do nosso marketplace, você poder fazer
-outsourcing para a nossa comunidade, contratar um dev freelancer e coisas do
-gênero, você agora tem acesso aos top devs da nossa comunidade. A gente dá uma
-lista de quem são os mais ativos, quem é mais experiente e agora você consegue
-selecionar quem que pode compor o seu time de desenvolvimento. Quem que você
-contrata por um projeto específico. Você tem acesso prioritário as bounties dos
-desenvolvedores líderes do nosso ranking da comunidade
-
-6. E tudo isso sem falar da exposição de marca.
-
-Sua logo vai pro nosso site, você é listado no
-[deco.hub](https://www.deco.cx/pt/hub), o seu cliente pode comprar serviços
-diretamente dentro da nossa plataforma. A gente divulga você no nosso material,
-nos nossos eventos, da nossa campanha de co-marketing, enfim, a gente consegue
-atacar o mercado juntos, o que facilita bastante as coisas.
-
----
-
-E em contrapartida, por esses benefícios, a gente pede um valor anual que varia
-de acordo com cada caso e a gente pode negociar.
-
-Eles gira em média em torno de R$5.000,00 por ano. E que de novo, podemos
-conversar. E a gente pode transformar esse valor em ações de co-marketing, a
-gente pode transformar em ações de mídia para eventos específicos, patrocínio
-para o nosso hackathon, a gente conversa.
-
-O importante é a gente formalizar essa relação para você ter acesso a esses
-benefícios, a gente começar a divulgar sua agência como agência oficial,
-homologada, certificada da deco.cx, os nossos clientes costumam perguntar. E a
-gente seguir junto.
-
-Vale dizer mais uma vez que você não precisa ser uma agência homologada,
-certificada, para você poder se beneficiar da deco.cx, você pode surfar essa
-onda revendendo, implementando os primeiros projetos, se aproximando da gente,
-mantendo relacionamento. Aí depois, quando for a hora que funcionar melhor pro
-seu negócio, você assina nosso contrato e enfim, vira um parceiro oficial. Tá
-tudo bem!
-
-— Oh, Baby! Deixa eu te falar uma coisinha?!
-
-Uma coisa que eu tenho falado para os parceiros é um pouco diferente. Eu tenho
-falado: _"Olha, você pode ser agência amiga ou agência parceira."_ Pro amigo, eu
-vou te dar tudo que você precisa pra vender deco.cx. Você vai aprender a nossa
-pitch comercial, vai saber dos nossos cases, você vai aprender nossa técnica e
-como desenvolver sites muito rápidos. E maravilha, você pode vender deco.cx. E o
-parceiro, aí o parceiro é diferente. Parceiro é um cara que anda junto com a
-gente. Ele vai estar nos eventos, a gente vai divulgar ele no site, vai passar
-lead, vai trocar comissão.
-
-Então é uma relação de futuro muito mais próxima e, obviamente, com mais
-possibilidade.
-
-— Leandro, senhoras e senhores!
-
-Independente de você ter homologado sua agência ou não, de você ter participado
-do treinamento ou não, de você ter se certificado ou assinado o contrato ou não.
-De tempos em tempos a gente vai rodar um ranking de agência, que é parecido com
-o quadrante da VTEX.
-
-A gente vai classificar as agências líderes, as agências que estão mais próximas
-e as que têm mais clientes. São uma série de critérios do tipo NPS dos seus
-clientes, número de lojas online, se você tem atendido aos prazos e às
-expectativas ou não. A gente vai compor ainda esse índice, o índice não está
-100% fechado, mas saibam que a gente vai passar uma lista de critérios e vocês
-serão avaliados de tempos em tempos.
-
-O que a gente quer garantir é que os parceiros que estão mais comprometidos com
-o futuro da marca, então com alinhamento de interesses, estão apostando, estão
-prospectando, estão fazendo contribuições para o nosso open-source, estão
-trazendo blocos, estão vendendo templates, que esses parceiros sejam
-favorecidos, que eles cresçam junto com a gente.
diff --git a/docs/treinamento-comercial/agenda/pt.md b/docs/treinamento-comercial/agenda/pt.md
deleted file mode 100644
index 91753a20..00000000
--- a/docs/treinamento-comercial/agenda/pt.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-description: Agenda - Treinamento Comercial deco.cx
-since: 1.0.0
----
-
-VIDEO
-
-Bom, vamos dar uma olhada na nossa agenda. Nossa agenda se divide em três
-partes.
-
-Na Parte 1 a gente vai dar um overview sobre a deco.cx. O que nós fazemos, no
-nosso deck de vendas, nosso produto, funcionalidades específicas que a gente não
-consegue apresentar em todas as apresentações. A gente vai passar por
-absolutamente tudo com vocês aí, no finalzinho, alguns cases de clientes e de
-agências para vocês também se apropriarem disso na hora de vocês venderem para
-os seus clientes.
-
-Na Parte 2 a gente vai te dar um pouquinho mais de contexto do mercado. Como
-funciona a arquitetura Headless, Composable, métricas de web performance. A
-ideia é que você saia com bastante contexto para levar para seus clientes
-durante seu discurso de vendas.
-
-E na Parte 3 é a parte que todo mundo tá interessado, que é como que a sua
-agência ganha dinheiro com isso? Como que você cresce junto com a gente? A gente
-vai falar de quais serviços você pode prestar junto com a deco.cx. Como que você
-prospecta seus primeiros clientes. Como que você vai alavancar suas vendas,
-aumentar a retenção dos clientes atuais.
-
-A gente vai falar também do futuro do nosso produto e quais são os nossos
-próximos passos. Como que você pode se antecipar e sair na frente. Depois dessa
-terceira parte, você vai encontrar uma pastinha de assets em que você tem tudo o
-que você precisa para você criar uma campanha. Tem boilerplate de PR, tem artes
-de social media tem banner de LinkedIn, tem cold message pra você poder fazer
-abordagem fria, template de e-mail marketing, tem artigo pra você poder ler,
-e-books. Você tem tudo o que você precisa para você se aprofundar e para você
-começar a criar uma campanha de marketing junto com a gente. Você não precisa
-assistir tudo se você não quiser. A gente gravou isso em vídeos pequenos
-justamente para você poder se apropriar, você poder assistir na hora que
-funciona melhor para você.
-
-Esse conteúdo também está transcrito, então você pode ler se você for de ler. Só
-um disclaimer importante é que ao longo do treinamento, você vai encontrar
-alguns exercícios. A gente vai fazer perguntas & respostas, vai passar alguns
-desafios. Vai ter alguns quizzes E aí, se você não participar, você não tira a
-certificação no final. Então só quem completar todas as respostas, todos
-desafios, todos os exercícios enviar pra gente.
-
-Vai ser um formulariozinho super super rápido de responder. Só essas pessoas vão
-ter acesso a certificação final. Mas fique a vontade, você não precisa dessa
-certificação para você ter acesso a todo esse conteúdo, mas eu garanto que se
-você preencher, você vai ter uma experiência muito mais rica e muito mais
-prazerosa e você vai conseguir se aprofundar muito mais no conteúdo.
diff --git a/docs/treinamento-comercial/diagnostico-inicial/pt.md b/docs/treinamento-comercial/diagnostico-inicial/pt.md
deleted file mode 100644
index 0e17503a..00000000
--- a/docs/treinamento-comercial/diagnostico-inicial/pt.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Treinamento Comercial deco.cx - Diagnóstico inicial.
-since: 1.0.0
----
-
-VIDEO
-
-Então pessoal, vamos para o primeiro exercício. Nessa tela vai aparecer um
-[link](https://forms.gle/pze9zpHrZTJEt42d9) onde você abre um formulário e você
-responde rapidinho quatro perguntas. A principal vantagem de você participar
-desse exercício é que depois que você responde, você tem acesso as respostas de
-todas as outras agências. E tudo isso é anônimo. Então você pode ficar muito
-tranquilo que não vai aparecer quem respondeu não vai aparecer agência que
-respondeu mas você vai ter uma ferramenta de benchmarking. Você vai conseguir
-analisar como os seus concorrentes estão pensando, onde eles estão posicionados,
-sem oferecer nenhuma informação sigilosa pra ninguém.
-
-A primeira pergunta é: **O que você espera desse treinamento?** O que você
-espera conquistar no final desse treinamento?
-
-A segunda pergunta é: **Quais são as queixas dos seus clientes atuais?** Do que
-os seus clientes estão reclamando? O que estão te pedindo?
-
-A terceira pergunta é: **O que você tem feito enquanto agência para resolver
-essas dores dos seus clientes?**
-
-E a última pergunta é: **Como que você espera que a deco.cx ajude a sua agência
-a resolver suas próprias dores e ajude os seus clientes a resolverem as dores
-deles?**
diff --git a/docs/treinamento-comercial/headless-composable/pt.md b/docs/treinamento-comercial/headless-composable/pt.md
deleted file mode 100644
index b42c9d60..00000000
--- a/docs/treinamento-comercial/headless-composable/pt.md
+++ /dev/null
@@ -1,241 +0,0 @@
----
-description: Treinamento Comercial - Headless e Composable Commerce
-since: 1.0.0
----
-
-VIDEO
-
-Oi pessoal, tudo bom? Aqui é o Leandro, eu estou de volta! Quem já viu a
-primeira parte aqui no curso já me conhece, mas pra quem não viu ainda, eu vou
-me apresentar. Eu estou aqui liderando a parte comercial e de vendas. E nessa
-seção eu vou mostrar pra vocês como a deco.cx se engloba, se encaixa no
-movimento muito maior do mercado.
-
-Na nossa visão, a deco.cx é mais uma expressão de uma grande mudança que está
-acontecendo na indústria de comércio, na indústria de experiências digitais. Na
-nossa visão, o que estamos fazendo na deco.cx é parte de um movimento muito
-maior. É a expressão de uma mudança na arquitetura das plataformas de comércio e
-na maneira que a gente constrói experiências digitais.
-
-As palavras-chaves aqui são: **Headless & Composable**. E que vamos falar mais a
-frente nesse curso.
-
-Pensem que existe uma grande onda vindo que vai alterar definitivamente como a
-gente cria experiências digitais. E a deco.cx é justamente a prancha que vai te
-ajudar a surfá-la. Arquitetura desenvolvimento Web vem avançando nos últimos 15
-anos com as novas possibilidades de tecnologia e os novos recursos que todo
-mundo vem criando. A gente pode resumir esse grande movimento num começo, lá
-atrás, onde as aplicações eram chamadas de monolito, que eu vou explicar; uma
-evolução para o Healdess; e ainda mais agora, uma outra evolução para o
-Composable.
-
-Dando um pouco mais de contexto. Se a gente entrar na máquina do tempo há 15
-anos atrás, para você subir uma loja, você tinha que fazer tudo do zero. Você
-tinha que achar uma maneira de fazer a gestão de pedidos. Você tinha que fazer
-uma maneira de ter um catálogo, você tinha que arrumar uma maneira de ter um
-CMS. Tudo isso dava muito trabalho. Por isso que a gente tinha muito poucas
-lojas no ar, o que era custoso e difícil de executar. Então foi nesse contexto
-que surgiram as primeiras plataformas de comércio.
-
-Elas botaram todas essas soluções que você precisava para subir uma loja numa
-mesma oferta. Isso fez com que a aceleração digital, que a transição digital do
-mundo, ganhasse muita velocidade. E essas plataformas elas tinham como uma
-ideia, uma arquitetura de desenvolvimento, que todos os recursos eram feitos no
-mesmo lugar, eram grudados.
-
-Então na mesma tecnologia, no mesmo stack, você tinha o checkout, você tinha
-OMS, você tinha o catálogo, tudo no mesmo lugar, como se fosse uma grande pedra
-única, com todos os recursos e por isso que se chamava de monolito. E como é que
-era isso no início, né? Então, quando você não tinha nada, qualquer coisa era
-muito bom.
-
-Mas você com o tempo, isso e eu digo os varejistas, começaram a ficar presos a
-essa estrutura, porque se você não gostava do checkout, não tinha jeito, você
-tinha que ficar checkout. Se você não gostava, como era a maneira da busca, você
-não tinha jeito, tinha que ficar preso naquela plataforma. E a única solução era
-fazer a replataforma, uma migração pra uma outra oferta que estava te dizendo
-que ela tinha mais recursos.
-
-No fundo, era uma grande corrida para quem tinha mais recurso, a quantidade que
-era importante. Então, se você tinha agora um sistema de afiliado, o outro não
-tinha. Eu tenho agora um esquema de B2B, outro não tem. Eu tenho o marketplace,
-o outro não tem. Mas nada era preocupado na qualidade do produto, era mais na
-quantidade: ganha quem tem mais. E isso veio mudando.
-
-Bom, os anos foram passando, as marcas foram pressionando cada vez mais as
-plataformas de comércio em busca de recursos cada vez melhores. Quanto mais
-empresas levaram suas operações pro mundo digital, mais concorrido ele ficou,
-mais competitivo ele ficou. E não adiantava mais você simplesmente estar online.
-O diferencial agora é quem consegue realmente entregar algo diferente e que seja
-agradável ao cliente, que traga para ele uma satisfação de estar vivendo aquela
-relação com a marca. Essa experiência excepcional, ela pode ser entendida como
-ter algo muito distinto, muito único e que seja personalizado para o cliente. E
-esse tipo de solução as plataformas de comércio que começaram na estrutura do
-monolito não conseguiam mais entregar em todas as frentes que elas competiam.
-
-Os monolitos, como a imagem já diz, são estruturas pesadas, lenta de mexer,
-muito devagar para a velocidade a competição crescente do mercado. E a
-manutenção dessas estruturas ao longo do tempo se mostrou muito cara e muito
-difícil de ser feita com qualidade. As pressões por novas mudanças, por
-velocidade, por integrações foi tornando essa estrutura do monolito impossível e
-inviável de ser mantida. Principalmente no front as marcas queriam liberdade e a
-solução foi o Headless.
-
-Headless infelizmente não tem uma boa tradução. Se eu fosse te falar, é “corte a
-cabeça”, mas não é exatamente isso. O que a gente tá falando aqui é da
-possibilidade de você desacoplar a tecnologia, a estrutura do seu front, da
-tecnologia, a estrutura do back. Isso dá para as marcas mais liberdade e também
-tira da plataforma de comércio o peso de ter que resolver esse ponto tão
-importante para os negócios. E o objetivo disso tudo foi dar mais autonomia para
-os times de tecnologia, para os times de negócio das marcas criarem, agora sim,
-a experiência única e customizável da sua marca, sem ter que depender da solução
-da plataforma de comércio. Agora eles podem escolher os melhores serviços que
-lhes atendem.
-
-Um elemento que permitiu você desenhar essa nova arquitetura foram surgimentos
-das APIs, que são protocolos que criam uma nova camada entre o back e o front e,
-aí sim, libertam as duas partes da sua plataforma. Na prática, isso é uma
-maneira de controlar os dados que vem do front para o back e vice versa, de uma
-maneira segura e escalável. Com isso, agora as marcas têm a liberdade de criar o
-front que elas quiserem. Elas podem criar, por exemplo, um front para um
-aplicativo de uma outra tecnologia, com uma outra linguagem, mas consumindo os
-dados da API da plataforma de comércio. Elas podem criar um outro aplicativo que
-seja para um celular, também conectando com a API da plataforma de comércio.
-
-Então ela pode ter na verdade, vários pontos de contato com o cliente em
-diferentes linguagens, em diferentes tecnologias, mas tudo consumindo numa mesma
-base de dados unificada de catálogo, de pedido e outros serviços que também os
-varejistas comumente usam. Arquitetura Headless já é uma realidade nos mercados
-internacionais. Para você ter uma ideia, 25% das marcas já utilizam arquitetura
-Headless, e daquelas que não utilizam, 80% responderam numa pesquisa que
-pretendem implementar a arquitetura Headless nos próximos dois anos. Essa
-pesquisa foi feita em 2022, ou seja, isso está acontecendo esse ano e o ano que
-vem é um movimento super forte que a gente está aproveitando aqui na deco.cx.
-
-Praticamente todas as plataformas de comércio que a gente conhece já estão
-oferecendo arquitetura Headless. Isso quer dizer, elas já se deram o trabalho de
-preparar as APIs, de preparar toda sua infraestrutura para que você monte, caso
-você queira, um frontend em cima da arquitetura de backend deles. Então, se você
-entrar agora no site da VTEX, do Shopify, do Big Commerce, da Magento, todos
-eles vão ter uma landing page específica dizendo: “Olha só, agora você pode
-montar a sua estrutura Headless comigo”. Ou seja, é uma resposta clara do
-mercado à pressão e é uma oportunidade que a gente está perseguindo aqui na
-deco.cx também.
-
-Agora você dá a mão, eles querem o braço. As marcas quando entenderam a
-possibilidade da arquitetura Headless, e viram a liberdade que isso deu para
-elas, as possibilidades de ganho, de conversão, de ganho, de autonomia começaram
-a questionar por que isso também não pode estar em outras áreas do meu negócio,
-por exemplo: "Porque eu não posso também escolher meu checkout? Ou escolher a
-minha busca? Ou um outro serviço de integração?" Isso foi a semente de criar o
-movimento do Composable.
-
-A ideia do Composable é que você, na verdade, compõe a melhor solução possível
-para sua necessidade. Você vai escolher os melhores serviços disponíveis para
-cada uma das experiências que você quer dar para seu cliente e compor assim uma
-experiência digital com o que você quiser. E é nesse momento que a gente está
-entrando agora. Contudo, com o passar dos anos, mais demandas mais sofisticadas
-foram surgindo e essa tendência do Composable já está sendo validada pelas
-maiores empresas. Existe até um relatório da
-[Gartner](https://www.gartner.com/smarterwithgartner/gartner-keynote-the-future-of-business-is-composable),
-que você vai ter o link aqui no curso, e nesse relatório vem mostrando como essa
-é uma tendência sem volta para as arquiteturas das aplicações de comércio
-digital.
-
-Outro termo associado ao que a gente está falando aqui é o MACH que é:
-Microservices; API-first; Cloud-native SaaS; Headless. Basicamente é toda essa
-arquitetura que tem a ver com Headless, e tem a ver com Composable. Como vimos,
-a modularidade advinda da estrutura do Headless, e do Composable, permitiu às
-marcas escolherem os melhores serviços para suas demandas.
-
-Mas nem tudo são flores.
-
-Sim, por um lado, como eu já falei, isso tudo trouxe uma nova liberdade, uma
-nova autonomia, várias possibilidades de crescimento que antes não eram
-possíveis, porque você estava preso à própria evolução da plataforma de comércio
-da sua escolha. Mas, por outro lado, isso traz também, para quem está
-desenvolvendo uma solução Headless própria, uma grande complexidade e um
-potencial aumento de custos de operação.
-
-1. Um primeiro ponto: agora a sua decisão é muito mais complexa. Antes você
- decidia entre a plataforma A, B ou C. Agora, para cada um dos pequenos
- processos da sua aplicação, da sua experiência de comércio, você tem várias
- opções. E aí você tem que treinar o seu time diferente ferramentas, em
- diferentes tecnologias. Tem que aprender como é que eles funcionam. Tem mais
- canais de suporte diferentes espalhados entre diferentes fornecedores. Por
- exemplo, agora você vai ter que escolher entre dez fornecedores de checkout
- diferentes, dez fornecedores de search diferentes. E por aí vai. As opções
- estão ficando cada vez maiores, melhores também, mas que dá um trabalho de
- você escolher e conhecer o que é o melhor pro seu negócio.
-
-2. Agora você tem muito mais integrações com serviços feitos em tecnologias
- diferentes e de maneira diferente. Se isso não for bem feito e a manutenção
- não estiver em dia, você está construindo um Frankstein que pode obviamente
- ter muito mais instabilidade e bugs do que seria se você mantivesse na sua
- plataforma monolítica de comércio. Por fim, quanto mais serviços integrados
- você tem, obviamente mais demorado é o tempo de implementação, mais custoso é
- isso tudo. Então o Headless, se não for bem feito, pode sim aumentar o seu
- custo operação
-
-3. Então o Headless, se não for bem feito, pode sim aumentar o seu custo
- operação. Uma outra coisa que pode acontecer é que plugando muitos pequenos
- serviços na sua aplicação, você pode ficar com os dados fragmentados e
- inconsistentes, ou seja, começa a ficar difícil saber aonde está a fonte da
- verdade. E a gente sabe que é muito complicado tomar decisões de negócio se
- você nem ao menos sabe o que está acontecendo.
-
----
-
-A deco.cx se classifica como uma Composable DXP, ou seja, a gente permite que
-você crie experiências digitais, compondo também com os melhores serviços e
-produtos que vão te ajudar a entregar essas experiências totalmente
-personalizáveis em cima de qualquer plataforma de comércio. No final do dia, o
-nosso esforço aqui é permitir que as marcas consigam aproveitar a arquitetura
-moderna do Headless e do Composable, mas sem a dor de cabeça de ter que
-construir isso tudo por conta própria.
-
-A grande mudança de paradigma que a deco.cx está propondo para o mercado é que
-você comece a compor a sua experiência digital e as suas soluções de comércio
-pela deco.cx, ou seja, pelo frontend que é onde os clientes realmente têm
-contato com a sua marca e que eles entendem a sua oferta de valor. O nosso
-entendimento é que não adianta nada você ter um backend bem resolvido se você
-não está vendendo, se você não tem uma experiência de compra, se a sua conversão
-não está nos níveis que a sua marca poderia alcançar.
-
-Então a nossa sugestão é o seguinte você começa pela deco.cx você monta o seu
-frontend, ele fica altamente performático, rápido e evoluindo sempre. Depois,
-tendo a deco.cx e a conversão como referência, você vai escolhendo os outros
-serviços que vão compor essa solução com o melhor de cada categoria que você
-está buscando. A gente consegue entregar isso porque a deco.cx empacotou várias
-soluções, vários pequenos produtos e recursos que permitem você, na verdade, ter
-a melhor solução hoje de mercado para o seu front.
-
-Ele primeiro é muito rápido. Ele está numa infra estrutura global na edge, e ele
-tem ferramentas para você fazer teste AB, para criar jornadas por audiência, e
-aí sim, evoluir sem limites e sem depender de nenhuma plataforma de comércio.
-Livre para levar o seu código para onde você quiser. Com os nossos loaders que a
-gente já apresentou na Parte 1, em breve o nosso sistema de workflow, você não
-só vai poder consumir dados da plataforma de comércio e de outros players de
-mercado que sejam do seu interesse, como também você vai poder integrar dados
-com fornecedores que você quiser, como você quiser.
-
-Além disso, a nossa estratégia de empacotar essas soluções, ou seja, criar um
-bundle onde você tem uma camada de criação de experiências digitais com uma
-infraestrutura de alto desempenho, e workflows que integram com outros serviços,
-é permitir que você aproveite a solução e você aproveite a arquitetura headless
-sem aumentar o seu custo e sem ser um risco para a sua operação que você não
-consegue gerenciar. De novo, a gente está fazendo o Headless sem a dor de
-cabeça.
-
----
-
-Então chegou a hora da revisão. Você vai ter aqui na tela um
-[link](https://forms.gle/KUspvtoXnA2ss6QQA) para responder algumas perguntas
-sobre o que a gente falou. Agora lembrando que quem participar vai conseguir o
-certificado ao final do curso. Então as perguntas são:
-
-1. **O que é Headless?**
-2. **Quais são as principais vantagens da arquitetura Headless?**
-3. **Quais são os maiores riscos de implementar o Headless?**
-4. **Quantos % da sua base de clientes estaria dentro do perfil para aproveitar
- a arquitetura Headless nos próximos dois anos?**
diff --git a/docs/treinamento-comercial/introducao/pt.md b/docs/treinamento-comercial/introducao/pt.md
deleted file mode 100644
index b71c6144..00000000
--- a/docs/treinamento-comercial/introducao/pt.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Introdução - Treinamento comercial deco.cx - Sites ecommerce de alta performance
-since: 1.0.0
----
-
-VIDEO
-
-**E aí, pessoal, tudo bem?**
-
-Sejam bem vindos ao primeiro treinamento comercial da deco.cx para as nossas
-agências parceiras. Sou Rafael! Se você não me conhece, pode me chamar de Baby.
-Todo mundo me conhece como Baby. Eu sou co-fundador da deco.cx, junto com Lucis
-e com o Gui, e vai ser um prazer participar dessa jornada aqui junto com vocês.
-A gente montou esse conteúdo para que você tenha em um só lugar tudo o que você
-precisa para você prospectar novos clientes, ou para você entender quais são
-exatamente os principais benefícios da deco.cx.
-
-A ideia é que você ganhe muito dinheiro com a gente. Que você cresça seu
-portfólio, que você deixe seus clientes mais felizes. E a gente vai mostrar tim
-tim por tim tim como que você vai fazer isso. A gente pensou tudo com muito
-carinho. Mas é claro que isso aqui é só uma primeira versão. Então, se você
-tiver qualquer tipo de feedback a contribuir, você vai vir aqui em algum lugar
-dessa tela, um QR Code, um link.
-
-Por favor, contribua, mande feedbacks. A gente vai interagir continuamente. A
-ideia é que esse conteúdo evolua e a gente lance novas versões desse material de
-tempos em tempos. Tudo pronto? Pega o caderninho, pega uma caneta, pega um copo
-d'água ou uma cerveja e vamos começar.
diff --git a/docs/treinamento-comercial/nichos-de-clientes/pt.md b/docs/treinamento-comercial/nichos-de-clientes/pt.md
deleted file mode 100644
index d1de87f3..00000000
--- a/docs/treinamento-comercial/nichos-de-clientes/pt.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-description: Treinamento Comercial - Nichos de Clientes
-since: 1.0.0
----
-
-VIDEO
-
-Legal! Agora você sabe dos benefícios da deco.cx, conhece o nosso produto,
-conhece o nosso discurso de vendas. Você já sabe tudo o que você precisa para
-começar a prospectar. Então vamos falar de como você vai conseguir seus
-primeiros clientes. Vamos lá!
-
-## O primeiro passo é você saber quais nichos de clientes tem convertido melhor aqui na deco.cx
-
-> **O cliente mais óbvio é aquele cliente que está no VTEX Legado, no CMS. Ele
-> está interessado ou cogitando migrar por IO.**
-
-Boa parte das marcas, eu diria que 50% (não é um dado oficial, mas é um faro),
-50% das marcas não migraram para o IO ainda, então tem um mercado grande ali
-dentro dos clientes da VTEX. Se você for uma agência VTEX, você vai saber do que
-a gente está falando.
-
-E esses clientes já projetaram um budget para fazer essa migração, seja em 2023,
-seja em 2024, todo mundo está esperando que a VTEX pare em algum momento de dar
-suporte para o VTEX CMS, e fique dando suporte apenas para o VTEX IO. Então os
-varejistas, as marcas, já estão considerando fazer essa migração.
-
-A grande vantagem aqui é que a deco.cx é muito superior à performance que o IO
-entrega. Você não vai encontrar uma loja no IO performando melhor do que uma
-loja na deco.cx. Isso significa que os clientes da deco.cx, eles aumentam muito
-mais a taxa de conversão do que os clientes que estão no VTEX IO. Isso sem falar
-de todos os benefícios de teste AB, de personalização por audiência, de CMS drag
-and drop, de componentes da biblioteca, de ser open source, de não precisar se
-preocupar com infraestrutura, e por aí vai. Então a deco.cx oferece uma solução
-superior ao que o cliente teria no VTEX IO.
-
-Esse é o cliente mais fácil de migrar, mais fácil de convencer. Nós substituímos
-o CMS, nós substituímos o IO. Não faz diferença pra gente se o cliente está no
-CMS, está no IO, está em qualquer outra solução de frontend. Então esse cliente,
-especificamente ele é muito fácil de trazer.
-
-Se você tiver dúvida de como conduzir essa conversa, chama pra uma reunião
-comercial. A gente conduz o pitch junto com você, você pega quais são os
-principais pontos, aí você segue.
-
-> **Outro nicho de cliente muito fácil de converter é aquele que já está
-> ativamente reclamando de performance.**
-
-Então vamos dizer que tem aqueles clientes que não sabem do impacto de
-performance, não sabem o quanto que uma loja rápida afeta ou pode afetar nas
-suas vendas, mas tem aqueles clientes que já sabem que performance é um
-requisito fundamental para aumentar a taxa de conversão. Eles estão já
-incomodados com a nota do PageSpeed Score, ou com não estar passando no Core Web
-Vitals.
-
-Aí esse cliente é moleza. Se você rodar um ranking hoje de lojas, nós temos isso
-disponível nos nossos assets. Você vai ver que a loja mais rápida do Brasil,
-para aqueles clientes que tem um pouco de tráfego, é a Lojas Torra.
-
-Então é só você dizer que a deco.cx está construindo os e-commerces mais
-rápidos, você mostrar um case real, você rodar o PageSpeed da nossa loja tema,
-você rodar o PageSpeed dos nossos clientes, comparar com o que ele já tem hoje,
-comparar com aquilo que ele já encontrou no mercado. E aí rapidamente ele vai
-entender que se ele quiser a performance, a melhor solução para isso é a
-deco.cx.
-
-> **Um outro nicho interessante, aquele cliente que está considerando no futuro
-> migrar de plataforma.**
-
-Acontece muito isso. A gente fala assim _"Ah, nós somos uma solução integrada à
-VTEX integrada à Shopify."_ Aí o cliente fala _"Mas eu estou considerando sair
-dessa plataforma, ir para uma plataforma no ano que vem ou no final desse ano,
-ou daqui a dois anos. Então eu não quero uma solução que dependa da
-plataforma."_ A gente fala _"Cara, nesse momento, a melhor decisão que você tem
-é vir para deco.cx"_.
-
-Porque já que a deco.cx é integrada a qualquer plataforma de comércio do
-mercado, no futuro, quando você for migrar de plataforma, seu site já está
-pronto. É só você trocar os conectores, é só você trocar os loaders. Seu site já
-vai estar rápido, performático, no seu design, com seus componentes de
-interface, tudo onbrand, com as suas cores, com a sua tipografia, e com todas as
-ferramentas de CRO que você precisa. Agora é só você trocar o seu catálogo,
-trocar o seu OMS, as suas integrações na camada de lógica e de negócios, que o
-seu site vai continuar funcionando facilmente.
-
-A gente demonstra isso abrindo uma prateleira de produtos numa interface, num
-cliente nosso, por exemplo, e trocando da VTEX para Shopify, trocando loader e
-mostrando como é que é fácil usar o mesmo site implementado na deco.cx e levar
-ele de uma plataforma para outra. Bem simples. Você já deve ter visto essa demo
-nossa, se você já acompanhou algum pitch comercial que a gente já fez.
-
-Legal em alguns clientes maiores, tipo enterprises ou grupos de marcas, tem
-aqueles que:
-
-> **Já tentaram ir pro Headless, seja com a VTEX FastStore, seja com uma solução
-> própria de frontend. Enfim, tem aquelas empresas que já experimentaram
-> Headless e traumatizaram.**
-
-Porque ir para o Headless nem sempre é fácil. Você precisa selecionar um monte
-de serviço, orquestrar uma infraestrutura, cuidar da consistência dos dados,
-garantir que os dados estão correspondendo a todos os data sources. Isso não é
-uma tarefa trivial. Então muita gente tenta ir pro Headless, fica um ano, um ano
-e meio, dois anos tentando implementar Headless, não consegue, o site fica
-lento, começa a aparecer um monte de bugs e aí o cliente acaba desistindo dessa
-arquitetura.
-
-O que a gente está oferecendo na deco.cx são todos os benefícios que ele teria
-no Headless, ou seja, ele vai ter performance, ele vai ter total capacidade de
-customização, ele vai ter extensibilidade para criar novas features no admin que
-ele queira, por exemplo, ele vai ter acesso total ao código. Então ele vai ser
-dono do frontend dele ou da camada de digital experience.
-
-Isso significa que a deco.cx é um jeito fácil, barato e muito mais rápido de
-você implementar uma arquitetura Headless. Então o cliente tem todos os
-benefícios sem ter os custos.
-
-Agora indo para outro espectro, falando dos clientes menores:
-
-> **As lojas de SMB que não tem tanto tráfego e aí a capacidade de aumentar
-> performance não afeta tanto nas vendas**.
-
-Porque não tem tráfego fica mais difícil de fazer teste AB, tem pouco volume pra
-poder ser conclusivo nos experimentos.
-
-Nesse caso, qual é a maior vantagem da deco.cx?
-
-A maior vantagem da deco.cx é a autonomia que a gente gera pra esse pequeno
-cliente evoluir sozinho, sem depender de horas de desenvolvedores. Ele pode
-entrar no nosso CMS, ele pode editar, montar, criar uma landing page, ele tem
-template no nosso [deco.hub](https://www.deco.cx/pt/hub), ele tem blocks na
-nossa library, então ele consegue evoluir o site muito rápido.
-
-É muito importante para um cliente pequeno a capacidade dele iterar, dele
-experimentar, dele testar algo novo. E é exatamente isso que a deco.cx
-proporciona
-
-> **Tem um caso específico de cliente que tem operações multiplataformas.**
-
-Por exemplo, a ZeeDog. A ZeeDog é cliente nosso. Nos Estados Unidos eles tem uma
-operação em Shopify. No Brasil eles tem uma operação de e-commerce em VTEX. É o
-mesmo site, só que nos Estados Unidos puxa catálogos da Shopify, e no Brasil
-puxa catálogos da VTEX. Hoje eles tem duas agências, uma agência pra cada
-operação. Eles tem um catálogo diferente. Eles tem que fazer duas manutenções de
-site.
-
-O que a gente tá proporcionando pra eles, é eles poderem unificar a experiência
-na deco.cx. Então eles constroem um site na deco.cx e fazem manutenção no mesmo
-site, evoluem uma versão do site. Só que nos Estados Unidos esse site está
-conectado à Shopify e no Brasil está conectado à VTEX. Fica muito mais barata a
-operação desse cliente. É uma vantagem maravilhosa.
-
-Isso acontece também, por exemplo, em grupos de marca. Por exemplo, o Grupo
-Dass. Eles tinham a Salesforce na New Balance, eles tinham Oracle na Osklen,
-eles tinham VTEX na Umbro e na Fila. Para esse caso, a deco.cx é maravilhosa.
-Eles jogam toda a experiência pra deco.cx, e administram em um lugar só todos os
-sites, independente de qual plataforma cada um tá.
diff --git a/docs/treinamento-comercial/objecoes/pt.md b/docs/treinamento-comercial/objecoes/pt.md
deleted file mode 100644
index b2f05175..00000000
--- a/docs/treinamento-comercial/objecoes/pt.md
+++ /dev/null
@@ -1,200 +0,0 @@
----
-description: Treinamento Comercial - Objeções
-since: 1.0.0
----
-
-VIDEO
-
-Nem tudo é maravilhoso. Às vezes a gente recebe algumas objeções dos clientes.
-Apesar da gente fazer um pitch maravilhoso, um deck lindo. Mostre o produto,
-mostre case, o cliente geralmente traz algumas objeções. Essas objeções, se eu
-for selecionar, são sempre as mesmas.
-
-Então vamos passar por elas. Eu queria que vocês soubessem também como responder
-as principais objeções que a gente recebe.
-
-1. A primeira objeção é: _"Ah, mas a deco.cx.cx é só uma startup. Vocês acabaram
- de começar. É muito arriscado eu migrar pra vocês."_*
-
-O que a gente responde para esse cliente?
-
-A gente responde que: apesar da deco.cx.cx ser uma empresa que tem menos de um
-ano de existência, o nosso time está trabalhando com esse mesmo problema de
-digital experience há quase dez anos, há mais de dez anos.
-
-O Gui, por exemplo, meu sócio, foi a pessoa que cuidou dessa frente dentro da
-VTEX, quase toda a carreira dele. O Gimenes, que o nosso Staff Engineer
-trabalhou liderando a FastStore que era um problema muito similar ao problema
-que a gente está atacando aqui.
-
-Enfim, por todo o time da deco.cx.cx você vai encontrar pessoas que estão há
-anos pensando nesse problema e são engenheiros de nível mundial. Trabalharam na
-Microsoft, como o Candeia, trabalharam na Amazon, como a Muri. Vieram de
-Stanford, estudaram na École Polytechnique. A gente tem um time que é o que tem
-de mais sofisticado em termos de engenharia, design, time de produto no mercado,
-eu diria.
-
-Isso traz muita experiência pra dentro. Então, apesar de a gente ser uma
-startup, a gente tem muita experiência nesse problema que a gente tá atacando.
-
-O segundo ponto é que em qualquer momento, se você, se o cliente quiser desistir
-da deco.cx.cx, ou se porventura a deco.cx.cx parar de existir, o código do
-cliente continua funcionando em outra infraestrutura.
-
-Significa que o cliente pode pegar o código dele, cancelar a deco.cx.cx e a
-gente não tem nada que impede ele de cancelar de um mês para o outro. Ele faz um
-cancelamento, pega o código, leva para uma infraestrutura, deploya em outro
-lugar e a loja vai continuar funcionando de forma performática. Talvez não tão
-performática quanto na deco.cx.cx, mas vai estar funcionando integrado. à
-plataforma de comércio, obviamente vai perder o teste AB, vai perder o CMS, vai
-perder todas as nossas features, mas o código da loja é do cliente, e ele leva
-para onde ele quiser. Isso reduz bastante a objeção.
-
-2. Outra objeção que aparece com bastante frequência é: _"Mas por que eu vou
- pagar deco.cx.cx se eu já tenho uma solução de frontend na plataforma que
- está inclusa no preço? Por que é que eu vou pagar um valor extra?"_
-
-A melhor resposta pra essa objeção é quando que você está deixando de ganhar não
-vindo para deco.cx.cx.
-
-O custo de oportunidade, custo capital é muito alto. Porque se a gente está
-falando de um cliente que tem performance 20, a gente tem a possibilidade de
-levar ele para a performance 90, a gente está falando de um potencial de
-aumentar 50%, 100%. Tem cliente que aumentou 175% da taxa de conversão. Isso é
-um ganho de venda muito grande para deixar na mesa.
-
-Então, o primeiro primeiro passo é fazer o cliente refletir o quanto que ele
-deixa ao ele não vir para deco.cx.cx, tá? Não é que ele não vai ter nenhum ganho
-dentro da plataforma de comércio, mas é que o teto da plataforma de comércio com
-tecnologia proprietária é muito baixo. Ele não consegue chegar no teto que a
-deco.cx.cx entrega e não consegue chegar no potencial dele.
-
-A deco.cx.cx vai colocar ele no limite do que é possível chegar em termos de
-taxa de conversão por performance. E além disso tudo, aí a gente vai entregar
-features que a plataforma de comércio não entrega, e que se ele fosse contratar
-um Optimizely da vida para fazer teste AB, ele já vai pagar um plano inicial de
-pelo menos U$3.000,00 por mês.
-
-Então a gente está gerando acessibilidade, trazendo o que tem de mais
-sofisticado em termos de web development, de operação de negócios digitais,
-operação de e-commerce. Funcionalidades que só as grandes enterprises, grandes
-grupos, conseguem trazer para os seus negócios. A gente está trazendo isso para
-qualquer tamanho de cliente poder fazer teste AB, poder recortar audiência,
-poder analisar dados, poder compor experiências com blocos reutilizáveis. Tudo
-isso é algo sofisticado que até então, fora do Brasil, grandes empresas são os
-únicos que conseguem operar do jeito que funciona melhor.
-
-3. Uma objeção clássica é: _"Eu estou sem bug para poder implementar deco.cx.cx
- esse ano. Eu estou sem dinheiro para pagar o custo de implementação. Essa
- mensalidade eu não estava considerando dentro do meu budget."_
-
-Isso parece com bastante frequência.
-
-Duas coisas para pensar sobre isso.
-
-Primeiro, o quanto que a sua empresa está deixando de vender porque você tem um
-site lento, que você não consegue evoluir na velocidade que você poderia. É o
-primeiro ponto.
-
-O segundo é _"você já pensou em implementar um template da deco.cx.cx?"_ A gente
-tem vários templates pré construídos no nosso
-[deco.cx.hub](https://www.deco.cx.cx/pt/hub), você pode simplesmente trocar
-logo, trocar as cores, trocar o espaçamento, fazer com que o seu site funcione
-muito rapidamente. Isso vai reduzir bastante o custo de implementação, o custo
-de migração. Talvez não fique pixel perfect, bespoke como você gostaria o seu
-site, mas é o suficiente para você começar a deixar a sua loja rápida, evoluir
-continuamente e deixar suas vendas com a taxa de conversão no talo.
-
-Tem uma terceira opção que é você oferecer para esse cliente uma implementação
-no risco.
-
-A objeção dele geralmente não é a mensalidade da deco.cx.cx, mas é o custo de
-implementação da agência. Se você estiver confiante — espero que você esteja até
-aqui — oferece para ele o seguinte:_"Eu vou implementar sua loja, vou demorar
-dois meses para implementar. Você vai me pagar R$X.000,00"_ — acorda um valor
-prévio — se der certo, se ele gostar, se a venda aumentar, deixa um mês a loja
-ligada pode fazer um teste AB com 50% do tráfego, dando tudo certo, ele quer
-seguir com a deco.cx.cx, ele vai ver que a taxa de conversão dele vai aumentar
-bastante. Aí ele paga retroativamente o valor da implementação, ou seja, ele só
-paga se der certo.
-
-Isso ajuda bastante a gente, que não só a mensalidade da deco.cx.cx ele vai
-pagar depois de go live, mas a própria serviço de implementação ele vai pagar e
-depois do go live. Isso reduz muito a objeção.
-
-4. Aí vem uma pergunta que é: _"Vocês colocam garantia de performance em
- contrato?"_ ou _"Eu só fecho com vocês se vocês colocarem garantias de
- performance em contrato. Estão falando de PageSpeed acima de 90. Se bater o
- 88 eu não pago. Pode ser assim?"_
-
-A gente a priori não faz isso. A gente tem que explicar pro cliente por que a
-gente não faz.
-
-A gente não faz, porque, no final das contas, a decisão de deixar o site
-performático ou não é do próprio cliente. No caso da ZeeDog, por exemplo, a
-ZeeDog priorizam muito mais a capacidade de customização do que de performance.
-
-E a nota do PageSpeed Insights nem é necessariamente o dado mais relevante para
-afetar a conversão. Por vezes, a nota mais relevante é a do Core Web Vitals, que
-são os dados reais de navegação. O PageSpeed Score — como vocês viram no módulo
-que o Leandro apresentou — ele apresenta simplesmente um teste de laboratório
-com um dispositivo simulado. Às vezes aquela nota final, ela nem é tão relevante
-para impactar a performance.
-
-Um site pode ter PageSpeed 38, 40, 45, mas tá passando no Core Web Vitals. Ou
-seja, a experiência de navegação do cliente final pode estar sendo maravilhosa,
-mesmo com uma nota baixa.
-
-Ou seja, se o cliente colocar um vídeo de 4K, um streaming da Netflix no banner,
-vai ser muito difícil a gente garantir a performance. Isso é uma decisão do
-cliente. A gente não pode garantir.
-
-O que a gente pode colocar em contrato é que a gente sempre vai oferecer
-orientação para o time implementador. Então a gente orienta as melhores práticas
-de performance, seja na nossa documentação, seja no suporte, quando o engenheiro
-que está implementando a loja pede ajuda, os nossos engenheiros ajudam a dar
-dicas de como que pode otimizar loja. E outra coisa que a gente coloca em
-contrato também é que a gente pode oferecer um benchmarking. Ou seja, a Lojas
-Torra está com performance no talo, está voando. Se a Lojas Torra conseguiu,
-você também consegue.
-
-A nossa loja template, a nossa loja tema, ela está carregando em menos de um
-segundo. Se a gente conseguir com a nossa loja tema, você também consegue com a
-sua. Isso garante tranquilidade para o cliente de que pelo menos um benchmark
-ele vai ter. É muito fácil vender performance sem demonstrar que vai conseguir
-implementar uma loja super rápida. Não é o nosso caso.
-
-5. Uma última pergunta que aparece com muita frequência é: _"Poxa, mas eu vou
- ter que treinar todo o meu time numa nova tecnlogia?"_
-
-Quando o perfil do cliente não é muito early adopter, ele não é tão aberto à
-inovação, ele geralmente fica mais resistente a ter que mudar todo o time,
-gerenciar um novo produto.
-
-Nessas horas é só tranquilizar o cliente. Como vocês sabem, nosso admin é super
-fácil de mexer, super fácil de aprender. A gente tem uma documentação
-assíncrona, tem vídeos do produto que a gente pode mandar.
-
-Mas sim, se o cliente quiser, a gente vai até ele, a gente marca uma call, a
-gente treina um time de negócio, o time de marketing, para eles saberem extrair
-o melhor do nosso produto. Podemos fazer isso com a agência de vocês também.
-
-E o time técnico, caso ele tenha um dos jogadores internos ou caso ele queira
-fazer a própria implementação, e vocês vão cuidar da evolution. Ou o contrário,
-ele faz o evolution, mas vocês vão fazer implementação. Seja qual for o caso,
-convida o cliente, convida o time técnico do cliente a participar do nosso
-hackathon ou participar do nosso deco.camp, ou participar das nossas iniciativas
-de treinamento, porque ele vai ver o quão fácil é.
-
-A gente nunca viu um desenvolvedor — mesmo de faculdade — júnior, estagiário,
-que está começando a aprender a programar, que saiu de um bootcamp, a gente
-nunca viu ninguém falar _"Nossa, como é complicado não conseguir entender
-nada."_ Muito pelo contrário, pessoas que participam de treinamento de 3 horas,
-de 6 horas, que acabaram de começar a aprender a codar na deco.cx, saem falando
-como é fácil. _"Em pouco tempo eu dominei. Estou conseguindo fazer um projeto
-completo com essa tecnologia."_ É muito simples de aprender.
-
-Então tranquiliza o cliente, fala que a gente faz treinamentos recorrentes. Todo
-mês, tem. Tem documentação assíncrona. E sim, se ele quiser a gente pode até ele
-fazer algo super personalizado pro time dele, para ele se tranquilizar, e fechar
-o contrato com vocês.
diff --git a/docs/treinamento-comercial/produto/pt.md b/docs/treinamento-comercial/produto/pt.md
deleted file mode 100644
index 0b722973..00000000
--- a/docs/treinamento-comercial/produto/pt.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-description: Treinamento Comercial - Conheça o produto da deco.cx
-since: 1.0.0
----
-
-VIDEO
-
-Transcrição em breve
-
-Tarefa: **Grave um Loom de até 5 minutos fazendo uma demo do produto do seu
-jeito.** Comece criando um site para sua demo. Mande o link nesse
-[formulário](https://forms.gle/WksPs5Lxp6tSWcRZ6). Esse exercício é privado,
-outros alunos **não** terão acesso ao seu vídeo.
diff --git a/docs/treinamento-comercial/proximos-passos/pt.md b/docs/treinamento-comercial/proximos-passos/pt.md
deleted file mode 100644
index 7a8bbcd6..00000000
--- a/docs/treinamento-comercial/proximos-passos/pt.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-description: Treinamento Comercial - Próximos Passos
-since: 1.0.0
----
-
-VIDEO
-
-Pessoal, infelizmente estamos chegando ao fim.
-
-Se você chegou até aqui, obrigado. Não foi curto, mas espero que vocês tenham
-gostado. Antes da gente finalizar, eu queria terminar falando dos nossos
-próximos passos e como que vocês podem se preparar para você alavancar o futuro
-do nosso produto.
-
----
-
-1. A primeira coisa que eu queria falar é que a gente está lançando a versão
- Whitelabel da deco.cx.
-
-O que significa isso? Significa que você vai poder pegar o nosso produto, pegar
-a nossa plataforma, trocar logo, trocar as cores, tematizar o nosso admin e
-vender como se fosse seu. Então você não precisa mais vender deco.cx, a
-plataforma.
-
-Você pode vender para os seus clientes um produto como se fosse seu, um produto
-seu que é o nome da sua agência PageBuilder ou a sua agência criador de site de
-dentista ou pedido de restaurante. Você cria o serviço que você quiser em cima
-da infraestrutura, e da plataforma CMS, de teste AB da deco.cx.
-
-Aí agora o céu é o limite, porque não só você pode tematizar a nossa interface,
-colocar a sua logo, vender com a sua identidade, mas você também pode adicionar
-novas funcionalidades. O que eu tô querendo dizer, é que com a deco.cx
-Whitelabel você vai poder ter uma plataforma Software as a Service (SaaS) que
-seja da sua agência, da sua empresa. Não necessariamente, você é uma agência
-assistindo esse conteúdo.
-
-Então, se você sempre quis ter um modelo escalável, um produto digital para você
-poder comercializar com os seus clientes, ter receita recorrente, essa é a sua
-hora montar uma landing page divulgando o seu produto. Você pode começar
-vendendo só o CMS, só o Page Builder, só um Site Builder, só um Frontend as a
-Service, uma DXP. Você escolhe como você quer vender, você empacota do seu jeito
-e agora você tem um produto da deco.cx para comercializar com o seu próprio
-ecossistema e você faz o pricing que você quiser.
-
-Muito em breve a gente vai trazer uma tabela de preços que é bem convidativa
-para você começar. Aproveita, pega o Whitelabel, tematiza, começa a oferecer
-pros seus clientes, porque você vai se surpreender, beleza?
-
-2. Segundo ponto a gente está lançando um sistema próprio de workflows.
-
-O que significa que você vai poder criar qualquer tipo de middleware. Você pode
-criar loaders. Você pode criar funções que conectam serviços diferentes e você
-pode conectar o ERP à plataforma de comércio, usando a deco.cx. Você vai poder
-conectar o CRM diretamente ao nosso frontend. Você pode conectar uma CDP a um
-CRM.
-
-Você vai poder fazer assim muito parecido com o que você tem numa Wavo, com o
-que você tem no Zapier. Você vai poder usar um nosso próprio sistema de criação
-de integrações, nosso próprio sistema de workflow e você vai voar com isso,
-porque você não depende mais agora de sistema de terceiros.
-
-Qualquer customização, qualquer integração você vai fazer dentro da deco.cx, com
-uma infraestrutura global escalável, super rápida, cacheada, com o que tem de
-mais sofisticado para você oferecer aos seus clientes estabilidade entre
-arquitetura, entre serviços que ele escolheu.
-
-Fique ligado já já a gente lança o nosso sisteminha de workflows.
-
-3. O terceiro ponto: a gente tá lançando o
- [deco.hub](https://www.deco.cx/pt/hub)
-
-O [deco.hub](https://www.deco.cx/pt/hub) vai ser um marketplace da deco.cx que
-já está quase indo pro ar, acho que na semana que vem. Se bobear, quando você
-está assistindo esse vídeo já está publicado, já tá live.
-
-Mas o [deco.hub](https://www.deco.cx/pt/hub) vai ser um marketplace de blocos,
-ou seja, você vai poder comercializar, vender subscription, assinatura de
-template de loja, templates de site, landing pages, integrações, serviço. Você
-vai poder ter a página da sua própria agência, listar todos os seus serviços no
-nosso marketplace e comercializar para toda sua rede de contatos, para todo o
-nosso ecossistema, para toda a nossa comunidade, para todos os nossos clientes.
-
-Agora a deco.cx está se tornando um novo canal de vendas para a sua agência.
-Para você não se preocupar em prospectar, a gente vai estar trazendo leads para
-você. Basta você criar o que você quiser dentro do nosso marketplace e
-next-next-finish as pessoas vão instalar, vão trazer para as próprias lojas, vão
-pagar uma assinatura ou um modelo de "pague uma vez e use para sempre". Você
-decide como você quer comercializar.
-
-Isso vai estar disponível para todos os clientes da deco.cx já já, e para todas
-as agências parceiras. [deco.hub](https://www.deco.cx/pt/hub)
-
-4. Assim como todo o mundo, nós não somos diferentes. Estamos trazendo features
- de otimização por inteligência artificial para dentro da deco.cx.
-
-Você vai começar super simples, como conecte a OpenAI, o ChatGPT, para você
-poder criar conteúdos, traduzir páginas, otimizar alguma página para alguma
-audiência específica e vai até te ajudar no serviço de implementação.
-
-Então você vai poder criar landing page do zero para recortar audiências por
-inteligência artificial, vai encontrar oportunidades de otimização para seus
-clientes usando a nossa AI.
-
-Fica ligado que já já não só você vai poder criar páginas, criar conteúdos,
-otimizar conteúdos usando a sua força de trabalho, mas você encontra os seus
-funcionários quando o seu time estiver dormindo, vai ter um robozinho de
-inteligência artificial, otimizando o site dos seus clientes, otimizando a sua
-conversão e fazendo com que os seus clientes vendam muito mais.
-
-Fique ligado!
-
-5. E por fim, quinto ponto: já já a gente vai lançar features integrados na
- nossa plataforma de multi-língua e de multi-currency, ou seja, multi-moeda.
-
-Você vai ter soluções nativas na deco.cx para você oferecer para os seus
-clientes, que são muito úteis, especialmente no mercado europeu. Se você pensa
-em prospectar marcas na Itália, em Portugal, na Espanha, no Reino Unido, na
-França, são lugares que demandam e-commerces que tem um suporte multi-língua e
-multi-currency, e agora esse suporte vai estar nativo na deco.cx.
-
-A gente está botando a nossa primeira loja no ar, que eu não posso divulgar qual
-é, infelizmente, mas já já vocês vão ver case com o suporte nativo a isso. E a
-partir de então você vai estar disponível para todos os nossos parceiros, para
-todos nossos clientes.
-
-Várias plataformas de comércio sofrem com isso. Com esse suporte. O catálogo é
-super difícil de atualizar, super difícil de traduzir, super difícil de lidar
-com localization, e você vai encontrar todas as ferramentas dentro da deco.cx.
-Vai ajudar bastante você trazer novos clientes para o seu negócio.
-
----
-
-Beleza pessoal? Por enquanto é só. Obrigado pela atenção! Obrigado por terem
-chegado até aqui.
-
-Conto com o feedback, respondam os formulários, façam exercícios, revejam esse
-conteúdo quantas vezes vocês quiserem, mande para os amigos, para o novo time,
-coloque no onboarding, faça como você achar melhor. Qualquer dúvida, estamos à
-disposição no Discord, no Whatsapp, no telefone, por cartas, por um sinal de
-fumaça, como você achar melhor.
-
-Muito obrigado na próxima. Valeu!
diff --git a/docs/treinamento-comercial/qa-comercial/pt.md b/docs/treinamento-comercial/qa-comercial/pt.md
deleted file mode 100644
index e3ee5dd8..00000000
--- a/docs/treinamento-comercial/qa-comercial/pt.md
+++ /dev/null
@@ -1,320 +0,0 @@
----
-description: Q&A comercial - deco.cx
-since: 1.0.0
----
-
-VIDEO
-
-Bom, legal A gente não é ator, mas acho que foi suficiente. Estou aqui com o
-Leandro ainda e queria discutir com vocês o tipo de conversa que aparece quando
-a gente encerra essa apresentação comercial.
-
-Tem algumas dúvidas que são muito recorrentes, que a gente sempre tem que
-responder. Eu queria passar por elas com vocês. Vocês podem checar na nossa
-documentação uma lista de um monte de perguntas com respostas que a gente tá
-sempre adicionando novas perguntas. Então, se tiver alguma coisa que você quer
-saber específica, manda pra gente que a gente vai aumentando essa base de dados.
-
-E aí, Leandro? Qual é a primeira pergunta que a gente mais responde?
-
----
-
-**Eu estou no CMS Legado. Eu estou pensando em ir para o IO, de deco.cx funciona
-no Legado tanto quanto no IO?**
-
-R: Então essa pergunta é clássica. Geralmente a pessoa demora para entender que
-nós substituímos a solução por completo do frontend da plataforma de comércio.
-Então a resposta é na linha de a gente está substituindo o VTEX IO, a gente tá
-substituindo a FastStore, está substituindo o VTEX CMS. Então pra gente não faz
-a menor diferença se o cliente está no Liquid, se o que a gente tá no frontend
-da VNDA, se ele está no frontend do IO, do Legado, que a gente vai substituir
-toda essa solução pela deco.cx.
-
----
-
-**Então estamos vendo que no dia a dia eu vou subir os banners na deco.cx e eu
-vou continuar gerenciando os produtos ainda no admin da VTEX. É isso mesmo? Eu
-entendi certo? Eu consigo fazer agendamento nesses banners?**
-
-R: É isso mesmo? Eu entendi certo? Eu consigo fazer agendamento nesses banners,
-não é isso mesmo. Na plataforma de comércio você vai criar essas novas coleções,
-você vai criar produtos, vai trocar foto de produto, descrição, preço, vai ver
-os pedidos. Mas toda a experiência de navegação vai ficar no seu site, vai ser
-feita dentro da deco.cx. Então você vai criar uma landing page, um banner, vai
-estilizar isso. E sim, você consegue agendar e trocar banner com muita
-facilidade. Eu vou mostrar isso na demo de produto já já.
-
----
-
-**Como ficaria dentro da decoc.x o checkout, o my account? Eu consigo
-personalizar de algum jeito?**
-
-R: A gente não tem hoje uma solução de chec out e de my account, então tudo o
-que vem depois do carrinho é cuidado pela própria plataforma de comércio. A
-gente usa a solução da plataforma de comércio e para isso a gente tem um proxy
-transparente, ou seja para o usuário final, ele não vê essa mudança. A URL
-continua sendo a URL do domínio da loja e toda a personalização do checkout, do
-my account, ela é feita dentro da própria plataforma. Mas como eu falei durante
-a apresentação, a gente tem parceiros de checkout que a gente pode recomendar e
-que são integrados a deco.cx e são integrados à plataforma de comércio e que
-funcionam muito bem. A gente tem recebido bons pushback nos nossos clientes.
-
----
-
-**Uma coisa que eu não entendi é por que eu não vou diretamente para a FastStore
-da VTEX,que é de graça, e eu iria para deco.cx. O que é que vocês tem de
-diferente?**
-
-R: A gente vai falar sobre isso com mais detalhes no módulo deco.cx vs.
-FastStore. De forma geral, a nossa performance é muito superior que a da
-FastStore. O nosso tempo de implementação também é muito menor, porque a gente é
-muito mais simples de implementar. A gente tá demorando menos de dois meses e
-tem projeto em FastStore que demora, às vezes, um ano e meio, dois anos. A gente
-também é agnóstico de plataforma, então quando você vem pra deco.cx você não
-entrega o seu frontend para a plataforma de comércio. Você é dono do seu
-frontend, você leva o seu frontend pra onde você quiser. Isso dá muito mais
-liberdade e te dá um leverage na hora de negociar com a sua plataforma de
-comércio.
-
-Para além de performance, ma deco.cx você tem todas as ferramentas, todas as
-funcionalidades que você precisa para você poder otimizar a sua loja. Então a
-gente não entrega só o site, a gente entrega o CMS, a gente entrega o teste AB,
-a gente entrega a personalização por audiência, a gente entrega tudo o que você
-precisa para o seu site ficar performático ao longo do tempo. Eu já fiz algumas
-tentativas de deixar meu site mais rápido e eu sei que a otimização de imagem é
-importante se você lidar com os escritos.
-
----
-
-**Eu já fiz algumas tentativas de deixar meu site mais rápido e eu sei que a
-otimização de imagem é importante se você lidar com os scripts é importante
-também, e o GTM atrapalha muito. Como é que a deco.cx resolve essas coisas que
-eu já sei que são muito difíceis?**
-
-R: Perfeito! Essa quantidade de assets que a gente chama First Party ou Third
-Party, que é tamanho de imagem, tamanho de vídeo, script de terceiro. Tudo isso
-vai influenciar performance, tá? Mas tem algumas coisas que a gente oferece que
-facilitam a sua tomada de decisão.
-
-Primeiro, que as nossas lojas em produção, elas tem suas equipes de terceiros.
-Elas tem imagem e uma quantidade grande de imagens, e isso não está prejudicando
-performance. Porque nós temos um otimizador de imagem no nosso admin, porque a
-gente proxyeia as imagens de jeito diferente. A gente usa uma CDN para fazer
-caching, então a gente usa o que tem de mais valioso para poder fazer a
-otimização desses assets.
-
-Para GTM, essas tags de terceiros que você mencionou, a gente tem algumas
-opções, você pode usar server-side tagging, a gente pode usar Partytown, um
-serviço que a gente usa para otimizar esse processamento desses, desses pixels,
-desses scripts. Mas enfim, o que você precisa saber é que temos loja em produção
-com tudo isso e elas estão funcionando e no nosso admin você consegue em todas
-as páginas, vou mostrar pra vocês, verificar em tempo real o que cada alteração
-tá afetando na sua performance, no seu tempo de carregamento. Toda mudança que
-você faz de conteúdo de imagem, de tamanho de componente, tudo isso você vê em
-tempo real, o quanto o que está afetando a performance da sua loja, o que te
-ajuda muito a tomar a decisão que você quiser.
-
----
-
-**Vocês tem alguma solução de search? A que eu estou usando agora não me
-interessa, eu acho muito ruim.**
-
-R: A gente não tem uma solução de search hoje. A gente usa API de search que
-você escolher, mas você não precisa usar a API de search da plataforma de
-comércio. Você pode usar, por exemplo, uma Algolia da vida ou um Linx Impulse.
-Você pode escolher qualquer API de pesquisa. A gente só não tem uma API própria
-por enquanto.
-
----
-
-**A minha loja está hoje no VTEX IO e eu já uso algumas customizações da App
-Store, como a Wishlist e o Cashback. Como é que fica isso quando eu vou para
-deco.cx? E as minhas outras integrações como Intellipost, Algolia, isso também
-vai funcionar?**
-
-R: É importante a gente entender exatamente quais serviços, quais customizações
-você está falando. Muitos a gente já tem pronto, outros a gente teria que criar,
-ou que integrar. Via de regra, todas as principais customizações que a gente tem
-na App Store da VTEX, no VTEX IO, como Wishlist ou Cashback, tudo isso já tem na
-deco.cx, já tem isso pronto na nossa biblioteca padrão e é super fácil de
-integrar uma solução nova. Eu nunca encontrei assim um serviço super diferente
-do que aqueles que a gente já tem. Os que a gente sabe que a gente não tem, já
-está mapeado, mas seria legal a gente mergulhar, chamar um engenheiro, chamar
-seu time técnico, entender sua arquitetura pra gente poder ser bem preciso nessa
-resposta. Isso ao longo do processo a gente vai conversar no detalhe.
-
-Tem uma outra coisa: tudo que não tem integração, a sua agência ou o seu
-provedor que você contratou, eles conseguem integrar. A gente tem uma biblioteca
-de loaders, de integradores que é aberta, open source, então você pode
-simplesmente tá faltando alguma integração. Você simplesmente pede pra agência e
-ela cria. Normalmente a gente cria, mas se for uma coisa muito específica pro
-seu caso de uso, por exemplo, você criou um sistema próprio, um backend próprio,
-dá pra integrar com a deco.cx, só precisa criar um integrador personalizado.
-
----
-
-**Eu já trabalho com uma ferramenta de personalização que é Insider. Eu também
-uso outra ferramenta para teste AB, que é o Optimizely, a deco.cx substitui
-essas ferramentas? Não ficou muito claro pra mim.**
-
-R: Pra essa resposta eu preciso entender com especificidade que funcionalidades
-você usa, tipo o Optimizely, ele é uma ferramenta grande, ele tem um monte de
-funcionalidade, a maior parte delas as marcas nem usam. Por exemplo, a Insider.
-A Insider tem uma funcionalidade que nós não temos, que é a CDP, a Customer Data
-Platform, isso a gente não substituiria, mas a Insider funcionaria muito bem
-integrada a deco.cx, porque a gente pode usar os dados do da Insider pra usar
-ferramenta de personalização da deco.cx. A Insider também tem uma ferramenta de
-personalização que seria substituída pela deco.cx, mas a deco.cx não
-substituiria a CDP da Insider. Então depende muito de quais funcionalidades você
-está usando em cada plataforma. De novo, é uma conversa que a gente tem que ter
-com o time técnico. Desenhar arquitetura para poder checar o que você precisaria
-ter na deco.cx funcionando para você conseguir migrar.
-
----
-
-**Em questão de segurança, com normas de privacidade, LGPD. Como é que a deco.cx
-lida com os dados sensíveis do cliente que passa por vocês?**
-
-R: A gente não tem checkout, os dados sensíveis de cartão de crédito, senha,
-eles não passam pela gente. Eles ficam dentro da solução que você escolheu.
-Então os nossos dados, eles vêm de APIs abertas, não tem muitos dados sensível
-que passa pela deco.cx.
-
----
-
-**Eu entendi que vocês são uma startup nova ainda no mercado. O que acontece com
-meus sites se vocês falirem?**
-
-R: Então a gente recebe essa pergunta com alguma frequência. Eu super entendo
-que tem esse risco de lidar com uma startup, mas apesar de ser startup, a gente
-tem um time super senior. O time está fazendo essa tecnologia pela terceira e
-quarta vez, honestamente. Agente já está trabalhando com isso há bastante tempo.
-É por isso que em nove meses de empresa a gente conseguiu evoluir tão rápido e
-ter um produto tão maduro. É porque o time basicamente sabe o que está fazendo.
-Nós não somos marinheiros de primeira viagem, já estávamos nisso há muito tempo.
-
-O segundo ponto é que é legal você saber que a gente está super saudável
-financeiramente. A gente tem investidor, a gente acabou de receber um aporte.
-Então, nesse sentido, o risco nenhum.
-
-E por fim, na nossa tecnologia, apesar de a gente tá rodando a nossa própria
-infra, isso é uma opção. Você pode a qualquer momento cancelar. A gente não tem
-nenhum termo no contrato que te impede de fazer o cancelamento. Você cancela a
-qualquer momento e você pode levar o seu código da loja para deployar ou seja,
-para qualquer outra infraestrutura que você queira. Então nós não estamos
-segurando na deco.cx. E independente de quebrar ou não, se você não quiser mais
-usar deco.cx, você leva o seu site para onde você quiser. E a gente não é uma
-caixa preta que te impede de mexer, ele vai continuar funcionando. Claro que
-você vai perder algumas funcionalidades, você vai perder o nosso CMS, vai perder
-teste AB, você vai perder o nosso analytics, você vai ter que compor outras
-ferramentas para fazer isso e provavelmente vai ser muito mais caro. Mas a
-decisão no final das contas, é sua.
-
----
-
-**Você já tem algum case que você possa me mostrar em produção com loja ativa
-vendendo? Além disso, vocês também conseguem trabalhar com B2B ou marketplace?
-Vocês tem alguma coisa pra me mostrar?**
-
-R: Então a gente tem sim. A gente tem a lojastorra.com.br, a gente tem a
-zeedog.com.br.
-
-Vale dizer que a Zee Dog não é um case especificamente de performance. Ele é um
-case de personalização, é uma decisão do próprio cliente. Eles estavam mais
-interessados em criar uma experiência de design incrível do que em deixar o site
-ultra rápido. A Lojas Torra provavelmente é o site mais rápido do mundo ou o
-ecommerce mais rápido do Brasil, como a gente diz. Eu tenho dito isso por aí.
-Peço pra me mandarem um link de ecommerce mais rápido. Ninguém nunca me mandou.
-Talvez exista. Agora a gente tem mais ou menos uns 30 clientes, implementação em
-três plataformas diferentes. A gente não tem um case, na verdade, B2B, não tem
-nenhum case de marketplace. A gente tá doido pra ter, então se estiver
-interessado na deco.cx, traga e a gente conversa.
-
----
-
-**Como é que funciona o suporte de vocês se precisar de alguma ajuda? Quais são
-os canais que eu posso entrar em contato e qual é tempo de resposta que vocês
-vão me dar?**
-
-R: Então, normalmente a gente tem um canal na nossa comunidade no Discord, é um
-canal pra agência, um canal pro cliente, um canal pra cada projeto em
-implementação. Então a gente cria canais dedicados para aquele projeto.
-Obviamente você tem um suporte@deco.cx. Você pode mandar qualquer solicitação
-por e-mail e nessa altura a gente está muito, muito próximo dos primeiros
-clientes. Então a gente disponibiliza WhatsApp, você pode me ligar? Enfim, a
-gente está super aberto a qualquer canal que funcione para você, basicamente.
-
----
-
-**Pelo que eu tô entendendo, vocês tem uma infraestrutura própria, não é mesmo?
-Então o que está me dizendo é que além de eu ter o risco da plataforma de
-comércio poder cair, a deco.cx também pode ter instabilidades eventualmente
-caindo. É isso?**
-
-R: Sim, a gente tem uma infraestrutura própria e isso pode apresentar alguma
-instabilidade. Isso pode cair, mas a chance de acontecer bem baixa. Nosso
-contrato garante um SLA de uptime, depende do tamanho do seu contrato, mas a
-gente pode conversar especificamente sobre essa cláusula, dado o tamanho do seu
-site, a nossa infraestrutura é a mesmo infraestrutura que é usada atualmente
-pelo Slack, pelo Supabase, pelo Netlify, que são gigantes, que tem bilhões de
-requests por mês, então assim, está servindo a empresas globais gigantescas. Não
-vão ser os nossos ecommerce aqui que vão dar problema. Os nossos clientes
-atuais. Eles já estão operando com alguns milhões de pageviews por mês, então
-não são lojas pequenas, são lojas para grandes e a nossa infraestrutura não
-apresenta nenhum problema, nenhum risco considerável para esse cliente. Eu acho
-que vocês podem puxar eles pra conversar e entender como está a experiência
-deles dentro da nossa infra.
-
-Estar na edge já traz uma redundância pra gente, porque como eu falei, a gente
-tem 35 servidores espalhados no mundo. Então você já tem uma redundância
-natural. Se o servidor de São Paulo traz alguma instabilidade, a gente consegue
-jogar o tráfego para o servidor do Chile, por exemplo. Se por acaso acontecer um
-desastre e o deno deploy, nossa infra cair, a gente é uma redundância para o
-Fly.io. Então a gente tá fazendo o que tem de mais sofisticado em termos de
-infraestrutura e pra não dar problema, inclusive, a gente cacheia por um tempo
-as APIs da plataforma de comércio. Então a gente pode até, inclusive, reduzir
-sua instabilidade da plataforma de comércio hoje em dia. Mas o risco existe. E
-sim, a infraestrutura tá com a gente.
-
----
-
-**Vocês por acaso garantem a performance que vocês estão me prometendo em
-contrato?**
-
-R: A gente não garante performance em contrato no sentido de nos
-responsabilizamos por você ter um site nota 90 no PageSpeed, simplesmente porque
-isso é uma decisão do cliente. No caso da Zee Dog, por exemplo, eles não
-implementaram o site buscando performance acima de 90 a qualquer custo. Eles
-fazem experimentos, eles testam se um vídeo vale a pena, se vale a pena uma
-imagem um pouco mais pesada, se eles criam alguma customização ou adicionam um
-serviço que pode abrir mão de performance por um tempo, mas que vai dar um pouco
-mais de conversão pelo ganho na experiência navegação, então a escolha é sempre
-do cliente. O que a gente oferece em contrato é uma cláusula que nos
-responsabiliza por orientar o implementador, por entregar um site performático.
-Então a gente dá um guia de boas práticas pras agências. Então a gente se
-responsabiliza também por uma referência. Por exemplo, a nossa loja tema, a
-Fashion, ela é uma loja com performance altíssima, funcional, Lojas Torra é uma
-loja que está em produção com performance super alta, então a gente sempre vai
-ter uma referência para você poder fazer um benchmark e você ter acesso às
-melhores práticas.
-
----
-
-Então chegamos a mais um quizz, mais um exercício, você já sabe o que fazer.
-Você vai receber [esse link](https://forms.gle/grvT3LHYPoxa5qd67) aqui na tela,
-você vai acessar e vai responder as perguntas do formulário. Eu vou ler aqui com
-vocês, só pra vocês ficarem curiosas, se estiverem com preguiça de clicar no
-link.
-
-A primeira pergunta é: **E aí, o que é a deco.cx, nas suas próprias palavras?**
-
-A segunda pergunta é: **Como que a deco.cx promove performance?**
-
-A terceira pergunta: **Como que a DECO se diferencia de um CMS Headless?** Essa
-é um pouquinho tricky.
-
-A quarta: **O que a deco.cx oferece para além de performance?** É só
-performance?
-
-E a última pergunta: **Como que é a nossa precificação? Como que a gente dá o
-preço pro cliente final?**
diff --git a/docs/treinamento-comercial/sales-deck/pt.md b/docs/treinamento-comercial/sales-deck/pt.md
deleted file mode 100644
index 07af3ccd..00000000
--- a/docs/treinamento-comercial/sales-deck/pt.md
+++ /dev/null
@@ -1,450 +0,0 @@
----
-description: Sales Deck - deco.cx
-since: 1.0.0
----
-
-VIDEO
-
-Pronto pessoal, se você não conhece a deco.cx e não sabe o que a gente faz,
-chegou a sua hora. Agora a gente vai passar pelo nosso deck comercial com vocês
-e eu vou fazer exatamente como a gente faz com o prospect nosso. Normalmente o
-nosso deck comercial, ele tem uma apresentação, ele tem uma demonstração do
-nosso produto. A gente para normalmente a apresentação no meio para mostrar o
-produto.
-
-No nosso caso aqui eu vou fazer toda a apresentação comercial e depois eu vou
-fazer a apresentação de produto, só pra ficar uns dois bloquinhos de conteúdo
-organizados. Mas você pode pular, pode ir no produto voltar pra cá, faz como
-você achar melhor. Esse deck não é uma versão física, você tem acesso a
-[versão editável](https://docs.google.com/presentation/d/1aZ9-D_Te7Zjs2wVYooYA4IBxjwwJky5I9w8kfjyC9Ak/edit#slide=id.g1e598c3317c_0_22),
-você pode trocar a ordem dos slides, trocar o texto, trocar o conteúdo.
-
-Faz como funcionar melhor pra você. Algumas das partes podem não funcionar para
-sua agência, por exemplo, tem uma parte que a gente fala sobre “nós temos um
-monte de parceiros disponíveis para você implementar a sua loja.” Talvez você
-não queira divulgar que nós temos muitos parceiros disponíveis, porque você está
-vendendo um serviço da sua agência a parte você tira.
-
-Então adapte o deck porque funciona melhor para sua agência. E um detalhe
-importante dependendo de quando você está assistindo essa apresentação, o deck
-pode estar desatualizado, então sempre cheque nesse link aqui se você está com o
-deck novo ou se você está com a versão antiga.
-
-Eu vou conduzir esse deck como se eu estivesse falando com o cliente real,
-exatamente como acontece no nosso dia a dia. E aí para representar o cliente eu
-chamei o Leandro aqui como se ele estivesse vindo da loja X, e ele tivesse
-ouvido sobre a deco.cx pela primeira vez.
-
----
-
-— E aí, Leandro, tudo bem?
-
-— Oi, Baby, tudo bem? como você está?
-
-— Tudo ótimo. Obrigado pelo seu tempo e obrigado pelo seu interesse na deco.cx.
-Será que você podia me falar um pouquinho mais sobre a sua loja? Eu vi que vocês
-são um ecommerce do interior de São Paulo, que tem algumas lojas físicas, vi que
-vocês estão com a loja um pouco lenta. Como é que você acha que a deco.cx pode
-ajudar vocês?
-
-— Isso exatamente. A gente já existe há 30 anos no mercado. A gente tem 70 lojas
-físicas pelo interior de São Paulo inteiro, mas o nosso site agora não está
-performando como a gente gostaria. Eu estou bem incomodado com a lentidão, com a
-dificuldade de mexer, de atualizar. E hoje eu estou no VTEX Legado, no portal da
-VTEX. E eu sei que eu tenho que migrar pro IO, só que eu tô inseguro com isso.
-Eu estou num grupo com outro gestor e os outros amigos meus que tem marcas
-também e operações online. E eles me sugeriram conversar com a deco.cx, e
-entender melhor a solução de vocês.
-
-— Perfeito! Vocês trabalham hoje com um time interno? Vocês tem alguma agência?
-Como é que está isso?
-
-— A gente tem uma agência sim, agência Y, mas cá entre nós, eu não estou lá
-muito satisfeito com o trabalho deles. Eu peço suporte, eles demoram a me
-responder. Às vezes uma mudança simples demora duas semanas pra acontecer e eu
-estou até avaliando a opção de talvez outras agências ou até montar uma equipe
-interna e queria também discutir isso aqui com vocês.
-
-— Maravilhoso! A gente vai falar disso também. A gente tem vários parceiros, eu
-posso recomendar um parceiro, então, só pra organizar o tempo, a gente tem hoje
-25 minutos com vocês sobrando. Eu queria passar pelo nosso deck, mostrar nosso
-produto, vai gastar mais ou menos uns 15 minutos e aí a gente fica com uns 10 a
-15 minutos finais, conversando, trocando ideia, respondendo perguntas e
-respostas. Funciona pra você?
-
-— Claro! Funciona sim. Vamos lá, me mostre o produto, por favor.
-
----
-
-Ótimo Leandro! Então, mudando um pouquinho aqui o cenário. É um prazer estar
-falando com você.
-
-Bom, o mundo mudou, né? A gente vivia um mundo aí, todo mundo tinha dinheiro,
-passou por uma pandemia, digitalizou muito rápido o planeta e o ecommerce acabou
-crescendo bastante. E a gente tinha verba para fazer um monte de coisas. E agora
-esse mundo mudou, o cenário macroeconômico mudou. A gente tá vivendo um mundo
-com juros muito alto e a gente entrou no que a gente chama da **Era da
-Lucratividade**. Ou seja, todo mundo ficou sem gasolina e a gente agora voltou a
-pedalar. Tá todo mundo agora com a sua bicicletinha. Eu tô com a minha aqui
-pedalando pra subir essa montanha que é escalar o seu negócio.
-
-Com isso, as marcas estão precisando reduzir custo. Elas estão precisando
-reduzir especificamente os custos de tecnologia, **o TCO, o Total Cost of
-Ownership**. E, junto com isso, elas precisam evoluir muito mais rápido, sem
-tanta bala na agulha. Como que você alcança resultado se todos os sites do mundo
-enfrentam o mesmo problema que é: **os sites são muito lentos.**
-
-Eu não estou falando que os sites são lentos pra navegar apenas. Os sites são
-lentos para implementar, uma implementação média demora nove meses, seis meses.
-Canso de ver projetos um pouco mais enterprise, demorando mais de um ano, às
-vezes. As lojas são muito lentas para navegar. Se você roda o PageSpeed nos 50
-maiores, 50 não, nos 500 maiores ecommerces do planeta em qualquer região, o
-PageSpeed médio é 28. Os sites demoram muito para customizar, então você quer
-criar uma landing page, você quer trocar um banner, você quer fazer uma
-alteração simples ainda hoje, 2023, com inteligência artificial, ainda é muito
-difícil para a maior parte das marcas. E os sites são muito lentos para
-segmentar. É muito raro você encontrar uma marca que está conseguindo fazer
-segmentação por audiência, que parece algo ainda de outro mundo que só as
-grandes Enterprises fora do Brasil conseguem fazer. Basicamente, todo mundo vê o
-mesmo site quando acessa a sua URL.
-
-Basicamente, todo mundo vê o mesmo site quando acessa a sua URL. O que o deco.cx
-está fazendo? A deco.cx está fazendo o que fez com as Lojas Torra. A Lojas Torra
-se tornou a loja mais rápida do Brasil em poucas semanas, menos de dois meses.
-Ela tinha uma expectativa, dado mercado, de que uma implementação demoraria
-meses. A implementação demorou algumas semanas. Ela saiu de um de um paradigma
-de mercado em que as mudanças acontecem a cada duas semanas e hoje eles mexem em
-média 15 vezes por dia no site. Eles saíram de um paradigma de mercado ou do
-próprio site deles que o PageSpeed era 27, ou seja, demorava 11 segundos para
-carregar o site no celular e agora a gente entregou para eles um PageSpeed acima
-de 94. Ou seja, eles se tornaram a loja mais rápida do Brasil, junto com a
-deco.cx, sem mexer em layout, sem mexer checkout, sem mexer em preço. E isso eu
-não posso dizer exatamente quanto que foi, mas isso gerou um aumento acima de
-100% na taxa de conversão. Foi um negócio absurdo que a gente viveu.
-
-O que a deco.cx faz? A deco.cx é essa plataforma que compõe a sua experiência
-digital e que está impulsionando os sites que mais crescem no mundo. Mesmo nesse
-mundo de escassez que a gente está vivendo. Escassez de recurso. A gente
-consegue fazer com que os sites aumentem muito a sua performance, não só na
-velocidade de carregamento da página, mas aumente muito a sua performance no
-sentido da sua capacidade de evoluir.
-
-Então a gente está dando tchau para os quatro cavaleiros do apocalipse da
-lucratividade, aqueles que estão impedindo o seu site de chegar no ápice da sua
-taxa de conversão. Um cavaleiro do Apocalipse que faz com que o seu site demore
-muito para implementar qualquer migração é um parto, um cavaleiro do Apocalipse
-que faz com que o seu site fique com Page Speed lá embaixo. O cavaleiro do
-Apocalipse, que faz com que você tenha um site para todas as audiências. Apesar
-de você poder ter um site para cada perfil. E o cavaleiro do Apocalipse que faz
-com que você demore duas, três semanas para fazer uma alteração muito simples,
-como trocar um banner.
-
-Que tal a gente resolver tudo isso?
-
-Bom, aqui na deco.cx a gente está oferecendo esse mundo que está todo mundo
-andando a cavalo, a gente tá oferecendo um carro de corrida. O que a gente está
-fazendo aqui, é que a gente está fazendo a internet crescer 10x mais rápido.
-Chegou um carro esportivo no mundo de carroça. Agora com a deco.cx, a gente
-implementa o seu site em semana e não mês, semanas, não meses. A gente faz um
-site, se possível de navegar em 2 segundos, 3 segundos, 1 segundo e não 20,
-15, 11. A gente faz com que você consiga customizar em tempo real e
-instantaneamente. Com código e sem código. Você decide se quer usar código ou
-não. E a gente está permitindo com que você consiga segmentar o seu site em
-alguns segundos, o mais rápido possível, quase instantaneamente, algo que
-demoraria dias e exigiria de você alguns serviços super complexos de serem
-implementados.
-
-O que a gente tá querendo aqui? A gente quer que você consiga construir a
-experiência digital que você sempre sonhou, que o site seja de fato seu. Que
-você seja dono, dona do seu frontend. Que você possa fazer o que você quiser, se
-quiser criar customização que você quiser, sem perder performance. Cocê possa
-alterar, fazer teste, evoluir sem dor de cabeça.
-
----
-
-— Tá fazendo sentido para você?
-
-— Faz sim! Eu achei super interessante. Se você entregar isso tudo vai ser uma
-mágica.
-
-— Legal, legal! Então vamos avançar que ainda tem muito mais coisas para te
-mostrar. Quero te mostrar como que a gente faz isso.
-
----
-
-Então vamos lá! **Como que a gente consegue fazer com que o seu site seja
-implementado em algumas semanas e não em meses?**
-
-Primeiro, nós trabalhamos com uma solução que é agnóstica de plataforma, então
-não importa aonde você esteja, qual seja sua fonte de dados, se você está na
-VTEX, se você está no Shopify, se você está na VNDA, não importa onde você
-esteja, a gente consegue implementar o seu site onde quer que você esteja agora.
-Na plataforma que você escolheu.
-
-Segundo ponto o que a gente está oferecendo aqui é algo que é bem fácil de
-codar. No seu time talvez você não tenha desenvolvedores, mas a sua agência
-provavelmente tem, o que significa que a agência consegue agora treinar um time
-muito mais fácil do que ela demorou para treinar um time de FastStore, de VTEX
-IO, de Liquid, porque a nossa stack de tecnologia é uma stack muito simples de
-se aprender. É baseada em Preact, em React, em TypeScript. É algo que qualquer
-desenvolvedor já sabe.
-
-O terceiro ponto é que a gente tem hoje dezenas de parceiros e milhares de
-desenvolvedores numa comunidade no Discord que já tem mais de 1800 membros. Ou
-seja, tem gente por trás da deco.cx que presta serviço e que faz as coisas
-acontecerem. Essa comunidade está crescendo absurdamente. Começamos a
-desenvolver ela em janeiro, agora em agosto a gente já está com mais de 1800
-membros.
-
-Quarto ponto a gente tem um assistente de inteligência artificial, que ainda não
-foi lançado, mas que está saindo do forno, em que você consegue editar e evoluir
-o seu site e implementar o seu site, toda a parte de conteúdo com assistente de
-AI muito parecido com que você teria com um chat GPT. É basicamente um chat GPT
-integrado. Com isso, você consegue criar uma landing page, por exemplo, com
-muita facilidade.
-
-E por fim, a gente tem um hub de integrações que faz com que você consiga
-conectar o seu site, parecido com o que você tem numa App Store. Você consegue
-expandir seu site, estender o seu site como você quiser, com alguns cliques.
-
-Segundo ponto **como que a gente faz com que o seu site seja navegado em
-segundos, em 2 segundos e não em 20?**
-
-A gente tem uma infraestrutura distribuída. O que significa isso? Normalmente,
-quando você tem um site, o seu site, ele está hospedado na AWS lá na Virgínia,
-tem um servidor que hospeda o seu site. O que a gente fez aqui, a gente fez com
-que no seu site ele esteja hospedado ao mesmo tempo em 30 regiões do planeta,
-mais de 30, que são 35, se eu não me engano, e sempre tem um servidor muito
-próximo do seu usuário. O que a gente faz? A gente encontra um servidor muito
-próximo. Esse servidor monta a página para você toda a nossa tecnologia é
-server-side, ela monta o seu site no servidor e a gente entrega a página
-praticamente pronta pro cliente, para o navegador e com uma latência de
-requisição muito baixa. É um papo meio técnico, o que você precisa saber que a
-nossa infraestrutura muito robusta, escalável, global, e que você consegue
-acelerar demais o tempo de requisição entre o browser e o servidor.
-
-Além disso, essas stack de tecnologia que a gente escolheu, ela joga muito
-pouco, basicamente ela joga nenhum, JavaScript quase para o navegador do cliente
-por padrão. Para quem não sabe a quantidade de CSS e JavaScript, imagem e script
-de terceiros são ativos que pesam muito o seu site. E a gente conseguiu tomar
-uma decisão de tecnologia que reduz drasticamente a quantidade de JavaScript, de
-CSS, e de imagens que você tem no seu site.
-
-O terceiro ponto é que quando você vai implementar um site na deco.cx, você não
-começa do zero. A gente já oferece para sua agência parceira uma série de blocos
-pré construídos: carrossel, footer, barra de navegação, prateleira de produto. A
-agência, o desenvolvedor consegue estilizar esse componente com muita facilidade
-e esses componentes eles foram construídos de forma muito otimizada. A gente
-tirou o máximo que a gente podia de tamanho de arquivo, eu posso dizer assim, a
-gente tirou o JavaScript, a gente tirou o CSS. Só o que sobrou foi o
-extremamente necessário para aquele componente performático. Então você já
-começa com componentes reutilizáveis numa biblioteca aberta opensource, que você
-pode estender e tematizar como você quiser, para ficar exatamente com a cara da
-sua marca.
-
-E o quarto ponto é que a gente oferece métricas em tempo real, ou seja, tudo o
-que você mexe na deco.cx você vê em tempo real se está afetando performance ou
-não. E eu vou mostrar pra vocês depois, na demonstração do nosso produto.
-
-O terceiro ponto **como que a gente habilita a customização?**
-
-Eu falei que você pode customizar com ou sem código, no code ou full code. A
-gente entende que hoje no mercado tem essa dicotomia, né? Ou você vai pegar uma
-solução no code, tipo um Wix da vida, um Squarespace, WebFlow, que são soluções
-muito boas para o usuário de negócio, pro time de marketing, para o designer,
-mas o desenvolvedor detesta. E aí porque o desenvolvedor não coda, porque ele
-não tem acesso ao código ali, você não consegue customizar como você gostaria.
-Você fica limitado ao que você consegue fazer na interface. A interface fica tão
-complexa que você não sabe fazer algumas integrações, algumas customizações que
-você deseja ou que o seu negócio depende. Então, o que a gente fez aqui?
-
-A gente te dá acesso total ao código. Então agora tudo o que dá para codar, dá
-para você botar no seu site. Oh! De novo: Own your frontend. Seja dono do seu
-frontend. O site é seu, você coloca o código que você quiser, não tem nenhuma
-limitação no que você consegue customizar. Você tem liberdade total para criar
-sua experiência ideal.
-
-Agora que você criou o código, que o desenvolvedor criou o código,
-instantaneamente, automaticamente, a gente cria uma interface para o usuário de
-negócio editar. Olha que eu estou dizendo: todo código que é criado na deco.cx,
-ele automaticamente vira uma interface 100% editável, ele vira um no code. Então
-a gente não tirou o código, a gente deixou o código. Mas quando você escreve o
-código, o código vira um monte de botãozinho de interface, de formulário, que o
-usuário de negócio pode editar sem precisar usar nenhum tipo de código. É o
-melhor dos dois mundos. Melhor para desenvolvedor, com uma stack de tecnologia
-muito fácil de aprender a codar, e o melhor para o usuário de negócio que tem
-agora uma interface para ele alterar, editar, estender como ele quiser.
-
-Por fim, **como que a gente consegue fazer com que você segmente em alguns
-segundos e não em alguns dias?**
-
-A gente tem uma solução de teste AB de fábrica. Pronto! Vou repetir temos uma
-solução de teste AB, e não é AB não, é ABCD, e quantos teste você quiser de
-fábrica. A gente te entrega um matcher, um matcher me diz qual audiência você
-deseja criar essa experiência e eu vou dar um match entre a sua página e essa
-audiência.
-
-Então, se você botou um site todo azul para um público específico, só o público
-que gosta de azul vai receber. Se você colocou um site todo vermelho para um
-outro público, aquelas pessoas que você definiu que gosta de vermelho vão
-receber. Se o seu banner, ele está desenhado para pessoas de uma cidade, só
-aquela cidade vai receber se você quiser que o seu site se comporte de um jeito
-de manhã, de outro jeito, de tarde, de outro jeito de noite, numa data
-específica, num agendamento específico. Se você quiser criar uma customização de
-audiência. Ou seja, você quer dizer que todo mundo que já gastou R$500,00 no seu
-site agora pode ver uma promoção específica, um produto específico ou quem já
-comprou uma pulseira, agora você quer exibir o vestido que você cria, a
-experiência que você quiser, com total liberdade, segmentado por audiências.
-Isso tudo é integrado com nosso analytics. Você pode ver os resultados em tempo
-real e também integrado com o seu Google Analytics. E aí você pode agora o
-dentro do seus dashboards ter acesso aos resultados
-
-Legal! É assim que a gente consegue entregar tudo isso. E agora, indo um
-pouquinho mais além, queria falar um pouquinho da nossa arquitetura. Como que a
-gente faz isso, tecnicamente? A gente basicamente desacopla toda camada de
-experiência digital, ou seja, todo o seu frontend, da sua plataforma de
-comércio. E a gente constrói tudo por fora, usando a nossa infra estrutura. Ou
-seja, a gente não usa mais a infraestrutura da plataforma de comércio que você
-está hoje. A gente usa a infraestrutura da deco.cx. Isso é o que a gente chama
-de arquitetura Headless e eu não tô inventando isso. Arquitetura Headless é uma
-arquitetura muito conhecida fora do Brasil que não chegou ainda com força no
-Brasil, mas que nos Estados Unidos, na Europa é bastante comum. Muita gente tem
-um site rodando em Headless fora do Brasil.
-
-Só que o Headless ficou muito complicado. E o que a gente está fazendo aqui é
-simplificando o Headless tornando ele acessível para o nosso público, para o
-público que está sem dinheiro, que não tem muita verba, mas que quer aumentar a
-taxa de conversão, que deixa o site mais rápido. Então está pegando os
-benefícios de uma arquitetura Headless, que é basicamente você fazer o seu site
-por fora da plataforma de comércio.
-
-Esses benefícios te dão a performance, a capacidade de editar, a capacidade de
-customizar, sem a dor de cabeça de você ter que compor uma série de
-infraestrutura complexa.
-
-Tá fazendo sentido? Na prática, isso significa que a gente substitui o VTEX IO,
-substitui o VTEX Legado, substitui o Shopify Liquify, o Composable Storefront,
-eu acho que é o da SalesForce, o que quer que você use hoje como solução de
-frontend da plataforma, você não vai mais usar. Você vai usar a solução deco.cx.
-Seja qual for a sua tecnologia de frontend, você continua usando a plataforma de
-comércio para você trocar pedido, para você ver produto, para você subir um
-produto novo, para você trocar preço, para você criar uma promoção para o seu
-checkout, para o seu carrinho. Mas toda a experiência de navegação ela fica com
-a gente. Por exemplo, troca de banner, fica com a gente, criação de uma landing
-page, criação de uma página institucional. Toda experiência que vai até o
-carrinho fica com a deco.
-
----
-
-— Calma! Então você está me dizendo que nem o checkout, nem o myaccount eu
-consigo fazer com a deco.cx?
-
-— Ainda não, mas a gente pode te recomendar alguns parceiros que fazem checkout
-Headless e assim como a gente tira o front da plataforma, eles tiram um checkout
-da plataforma e você pode fazer tudo por fora e alguns deles oferecem inclusive
-uma boa capacidade de customização. E isso inclusive pode ter um ganho bem
-expressivo na sua taxa de conversão.
-
-— Legal, legal, entendi. Mas e se eu quiser mudar de plataforma? Eu vou ter que
-refazer tudo? O que acontece com as minhas integrações?
-
-— Não, então, essa é que é a vantagem. Você tinha falado lá no início dessa
-conversa que você tava considerando mudar de plataforma, não é isso? Para gente,
-a plataforma de comércio é só uma API, ou seja, ela é só uma fonte de dados.
-Você pode construir a sua experiência digital usando os dados de qualquer API
-que você quiser, ou seja, você pode trocar de plataforma, ficar na plataforma se
-você está numa plataforma ou vai para outra, para a gente não faz a menor
-diferença. A gente é agnóstico. Você passa com a deco.cx a ter mobilidade. Uma
-vez que seu site está na deco.cx, desacoplado, você troca de plataforma agora
-com muita facilidade. E é por isso que os clientes chamam a gente de seguro de
-vida. Porque se der qualquer problema na plataforma de começo que tá embaixo
-agora, seu site está seguro. Seu site está construído na deco.cx.
-
-— Super interessante! Mas hoje, quais as plataformas que vocês já se conectam,
-eu conseguiria começar a usar?
-
-— A gente tem hoje conexão com a VTEX, a gente tem com a VNDA, com a VNDA, que é
-da Olist. A gente tem com a Shopify, com a Nuvemshop, com a Wake, e tem uma
-série de outras integrações que estão por vir. A gente está deixando bem público
-já já qual o nosso roadmap de desenvolvimento de integração, mas basicamente a
-gente conecta com qualquer solução que seja Headless, ou seja, qualquer solução
-que tem uma API para a gente puxar dados. Mmesmo que ela não tenha ainda pronta,
-fala com a gente, que a gente coloca aqui na nossa fila de demandas e desenvolve
-dura algumas semanas, é bem rapidinho.
-
-— Ah, entendi. Muito bom saber. Obrigado.
-
-— E aí, antes de falar de quanto custa isso tudo, eu queria checar com você
-quanto você acha que seria justo você pagar para você aumentar de 20 a 100% das
-suas vendas?
-
-— Levando em conta que a gente vem de mais ou menos 500.000 por mês, hoje você
-está me dizendo que a deco.cx pode aumentar em até 100.000 as minhas vendas. Eu
-acho que seria justo pagar R$ 5.000 a R$ 6.000,00 por mês para ter esse serviço.
-
----
-
-Legal! O nosso preço varia de acordo com o seu tráfego, de acordo com o seu
-número de pageviews. Ou seja, seu número de visualizações de página, você pode
-checar isso no seu Google Analytics. A gente cobra hoje muito barato R$ 40,00
-Para cada 10.000 visualizações de página, você tem 100.000 visualizações de
-página por mês você paga R$ 400,00 por mês, beleza?
-
-Só que tem um detalhe aqui, se você é uma loja um pouquinho maior e você vende
-mais de R$ 5 milhões por ano, seu GMV anual é acima de 5 milhões, quando você
-bate 5 milhões de vendas nos últimos 12 meses, a gente começa a pegar 0,5% de
-take rate das suas vendas. Isso é para a gente não onerar os pequenos. E a gente
-tem um pequeno ganho quando uma loja vende um pouquinho mais. É bem
-pequenininho, 0,5%, nada para ferir o seu TCO Mas é algo que dá um upside pra
-gente. A gente ganha com o ganho dos nossos clientes, porque isso gera,
-inclusive um incentivo correto da gente querer trabalhar para o cliente vender
-cada vez mais.
-
----
-
-— Eu vi aqui no [Similarweb](https://www.similarweb.com/), que é uma ferramenta
-que a gente usa para estimar, porque você tem hoje mais ou menos 400.000 page
-views por mês. É isso mesmo?
-
-— Eu posso te passar direitinho depois os meus page views, mas eu acho que é por
-aí mesmo. Não está muito errado não.
-
----
-
-Bom, então nesse caso você paga para deco.cx em torno deR$ 1.600,00 por mês por
-esses 400.000 pageviews. Passados R$ 5 milhões em vendas, aí você vai começar a
-pagar 0,5% do seu GMV, além dos R$ 1600,00. Ou seja, você vendeu R$ 6 milhões, a
-gente vai te cobrar 0,5% em cima do 1 milhão, ou seja, do que é excedente dos 5
-milhões. Você paga R$ 1.600,00 por mês e mais R$ 5.000,00, que é o 0,5% desse 1
-milhão excedente.
-
-Você pode fazer toda essa simulação de quanto que custa nessa nossa
-[calculadora](https://docs.google.com/spreadsheets/d/1D20B2ssnqiMQwBir2VrRR2uSoFn2bRGATDfDv6Ag8lg/edit#gid=3210609)
-aqui.
-
-O que é importante de falar do nosso preço é que a gente só cobra depois do go
-live. Então você faz uma implementação que dura às vezes dois meses, 30 dias. Eu
-não sei o tempo que vai levar, depende da complexidade do seu site. Seu site vai
-para o ar, você testa por 30 dias, e a gente só começa a cobrar você depois que
-você está feliz e satisfeito. E se você quiser cancela, não deu certo, não
-funcionou, não aumentou mais vendas você cancela e você não deve absolutamente
-nada pra gente.
-
----
-
-— E você sabe me dizer assim, só pra ter uma ideia quanto tempo demora e quanto
-custa uma implementação da deco.cx?
-
-— Bom, a implementação varia bastante, depende da maturidade do seu site, do
-tamanho do parceiro que você escolheu, da complexidade que vem envolvida, se vai
-ter mudança de layout, se não vai ter mudança. E o preço mais barato que eu já
-vi até hoje foi tipo R$ 30.000,00 para um caso muito simples de implementação de
-um template. E eu já vi até R$ 200.000,00 para um site mais complexo, mas
-enterprise para um cliente grande. Eu diria que na média de agências elas tem
-cobrado por volta de R$ 60.000,00 a R$ 70.000,00 por uma migração de um site
-para deco.cx. Considerando que você permanecer no mesmo layout que você tem hoje
-e elas pedem em torno de 60 a 90 dias.
-
-— Ótimo! Muito obrigado pelo seu tempo e parabéns pelo produto.
-
-— Show de bola! É isso, finalizamos. Muito obrigado!
diff --git a/docs/treinamento-comercial/seu-primeiro-case/pt.md b/docs/treinamento-comercial/seu-primeiro-case/pt.md
deleted file mode 100644
index 43800976..00000000
--- a/docs/treinamento-comercial/seu-primeiro-case/pt.md
+++ /dev/null
@@ -1,189 +0,0 @@
----
-description: Treinamento Comercial - Seu primeiro case
-since: 1.0.0
----
-
-VIDEO
-
-Vamos falar de como você vai conseguir seu primeiro case.
-
-A verdade é que depois que você tem uma loja no ar com performance acima de 90,
-todo mundo passa a querer fechar contigo. Fica bem mais fácil de prospectar.
-
-A gente recomenda que nesse primeiro cliente, você não se preocupe tanto em
-ganhar rios de dinheiro. Faz uma oferta pra ele entrar. Depois que ele entrar,
-você vai ver que os outros vão vir com muito mais facilidade.
-
-Olha pra sua carteira e procura aquele cliente que você já tem algum
-relacionamento próximo, que você tem alguma intimidade, que já tem um perfil
-mais de early adopter, ou seja, que está disposto a inovar, que está disposto a
-experimentar algo novo e oferece uma implementação do risco, por exemplo. Fala
-pra ele que ele só vai pagar se der certo. Reduz o valor que você cobra
-normalmente, oferece um desconto, tenta fazer um case o mais rápido possível.
-
-O ideal é você encontrar um cliente na sua carteira que você já tem um
-relacionamento, que confia em você e que tenha tráfego. Se você pegar um cliente
-muito pequenininho pra reduzir risco, que não tenha tráfego, ele vai ter
-dificuldade de fazer teste AB, não vai ter volume pra teste AB, ele vai ter
-dificuldade de ver o aumento de conversão em cima de performance.
-
-Pensa que o mais óbvio é pegar um cliente lento, que está num VTEX CMS, por
-exemplo, ou que está numa tecnologia super devagar, que está demorando muito pra
-carregar, que já está insatisfeito com a tecnologia de frontend que ele tem
-atualmente, e convencer esse cliente de fazer uma migração no risco. Ou seja, de
-ele confiar em você, que você vai levar a loja dele para um outro patamar de
-vendas.
-
----
-
-Um bom jeito de você começar a conversa é você fazer um diagnóstico inicial, ou
-seja, pega a loja atual, roda a home no PageSpeed Insights, anota como tá o Core
-Web Vitals, anota como está o PageSpeed Score, no mobile e no desktop. Faz a
-mesma coisa na página de produto, na PDP. Faz a mesma coisa no Product Listing
-Page, na PLP.
-
-E aí com essas três páginas, compara o resultado que ele tem hoje com algum
-outro resultado de um case da deco.cx, por exemplo, da Lojas Torra, o da ZeeDog,
-o da Aviator. Eu não sei em quando que você está assistindo esse vídeo, mas
-certamente a gente tem no nosso site vários cases divulgados, se não nos nosso
-assets aqui você vai encontrar cases documentados de aumento de desempenho em
-todas essas páginas.
-
-Pois bem, chega com esse diagnóstico e fala:
-
-_"Olha, eu estou vendo que o seu site está lento, está com performance 4/100. A
-gente consegue fazer ele chegar em performance 90. Isso pode representar, no seu
-caso, um aumento de 50, 60, 70, 100%. Nós já vemos aqui na deco.cx com aumento
-de 175% da conversão, só falando de performance, fora o ganho que o cliente tem
-ao longo do tempo em todas as ferramentas de otimização."_
-
-Isso geralmente já é o suficiente para o cliente abrir o olho e falar _"Nossa,
-interessante!"_, e começar a considerar começar a evoluir a conversa.
-
----
-
-Se você não tiver nenhum cliente na sua carteira para abordar nos nossos assets
-aqui, a gente tem também uma target list para você poder utilizar.
-
-Como é que a gente montou essa target list?
-
-Pegamos a lista de e-commerce do Brasil — usando o
-[Built With](https://builtwith.com) ou [Similarweb](https://www.similarweb.com/)
-—, a gente checou quanto tráfego, ou seja, quantos page views cada uma dessas
-lojas tem. O Similarweb dá esse diagnóstico para você. Em seguida, a gente rodou
-API do Google PageSpeed, que entrega tantos dados do Core Web Vitals, quanto
-dados do PageSpeed Score, e aí a gente montou um ranking. Esse ranking você
-consegue saber quais são as lojas que tem mais tráfego e as lojas que estão mais
-rápidas, lojas que estão mais lentas.
-
-Você com alguns recortes consegue fazer uma short list para sua agência para
-você começar a prospectar. Vai no LinkedIn, descobre quem é o responsável por
-aquela marca, quem que é o tomador de decisão. Agenda uma reunião, mandam um
-link de um case da deco.cx. Fala _"Olha, essa marca aqui foi para deco.cx e
-aumentou tantos porcento das vendas. Essa marca aqui foi para deco.cx e aumentos
-tantos porcento de performance."_ Vai testando um copy. De novo, na nossa
-biblioteca de assets você vai encontrar um monte de exemplo que você pode se
-alavancar para começar a essa prospecção fria. Se você não tiver uma carteira de
-clientes inicial.
-
-De novo, o ideal é você começar com aquele cliente que já te conhece, que você
-já sabe que é mais aberto, que você sabe que tem algum budget pra poder investir
-nisso. Se você não tiver, vai para uma abordagem fria. E aí você vai encontrar
-na nossa biblioteca vários exemplos de como começar.
-
----
-
-Se você quiser, você pode chamar o nosso time para te ajudar nessas primeiras
-prospecções. Então agendou, conseguiu um papo com cliente, seja um cliente seu
-antigo, seja um cliente novo, me chama, chama o Leandro, chama o Gui, o Lucis,
-chamo o nosso time para a gente entrar com você e te ajudar a fazer a
-prospecção.
-
-A gente vai fazer as primeiras, duas, três, quatro, cinco, quantas vezes você
-precisar. Até que você vai pegar o jeito. Vai entender como que a gente faz o
-pitch, como é que a gente contorna as objeções. Vai ganhar um pouco mais de
-segurança e aí você vai começar a seguir sozinho.
-
-Se você estiver inseguro sobre a implementação, que é _"Poxa, o meu time não
-sabe implementar uma loja"_, você pode usar a nossa
-[comunidade](www.deco.cx/discord). Como você já deve saber, a gente tem uma
-comunidade de bounties lá no Discord que é destinada pras agências, pros os
-parceiros, que você pode abrir lá um post falando _"Olha, alguém me ajuda fazer
-uma POC ou me ajuda a fazer uma implementação completa?"_
-
-Você pode fazer o outsourcing dessa primeira implementação usando um freelancer
-da nossa comunidade. A gente escolhe alguém que já tem alguma experiência na
-deco.cx pra reduzir o seu risco. Ele senta junto com seu time, vocês marcam uma
-weekly, ou duas, três vezes por semana, vocês fazem um acompanhamento, o seu
-time vai aprendendo a implementar deco.cx, enquanto você tem alguém um pouco
-mais experiente para fazer essa implementação junto com você. Depois que você
-termina a primeira implementação é mais fácil, o time está mais treinado, você
-está um pouco mais seguro para conduzir as próximas.
-
----
-
-E por fim, tem algumas agências que ficam inseguras de venderem deco.cx depois
-de passar um longo período convencendo os clientes da carteira de migrarem para
-uma por uma outra solução, como por exemplo, o VTEX IO.
-
-Elas falam _"Poxa, eu passei os últimos dois anos convencendo a minha carteira
-de clientes para ir pro VTEX IO, e agora eu chego e fala que o VTEX IO não é
-mais a melhor opção, e a deco.cx é?"_
-
-Justamente! O que você vai argumentar com esses clientes é:
-
-> _"O VTEX IO era de fato a melhor opção, só que apareceu a deco.cx nos últimos
-> 12 meses. É uma solução super nova que o mercado ainda está se adaptando. Só
-> que começaram sair os primeiros cases, eles estão mostrando o resultado
-> consistente. Então eu queria convidá-lo a experimentar. A gente tem ouvido
-> falar muito bem do suporte, a gente tá ouvindo falar muito bem na tecnologia.
-> Eles tem um apoio de várias lideranças do ecossistema, então eu acho que vale
-> a pena investir nesse caminho."_
-
-Aí ele deixa o cliente decidir. De novo, nesse primeiro caso, você não quer um
-cliente resistente, você não quer um cliente muito desconfiado. Você quer um
-cliente que naturalmente já tem um pouco mais de abertura a experimentar algo
-novo, que você tenha um relacionamento de confiança.
-
-Ótimo! Agora você tem um case no ar. Sua loja está funcionando. Você tem
-performance alta. O primeiro passo que você vai fazer pra expandir é divulgar o
-seu case.
-
-Então atualiza suas redes sociais, faz um post dizendo que você agora é parceiro
-deco.cx e que você tem uma loja em produção com performance acima de 90. Manda
-um mailing para sua base de clientes avisando que agora sua agência ela está
-implementando uma nova tecnologia que promete performance e capacidade de
-personalização e que está conquistando resultados incríveis de aumento de venda.
-
-Começa a divulgar no mercado tudo aquilo que você tem feito. Coleta um
-depoimento com seu cliente. Você vai encontrar ideia de campanha, ideias de
-blogpost, assets de social media, Landing Page divulgando que você agora é
-parceiro da deco.cx e convidando as pessoas a se inscreverem e solicitarem
-orçamento. Você vai encontrar todo tipo de asset que você precisa para você
-divulgar na sua presença online e divulgar nos seus canais que você agora é
-parceiro da deco.cx.
-
-Isso é um ponto. Começa a divulgar por aí que você é um parceiro implementando
-uma tecnologia nova para os seus clientes e para ecossistema.
-
-Segundo ponto é você cuidar para que esse case que você fez, essa loja que você
-acabou de subir, com performance alta, com aumento de venda, que esteja muito
-bem documentado. A primeira pergunta que os clientes nos trazem é _"Como que eu
-vou medir o impacto da performance nas vendas?"_
-
-E a gente está disponibilizando aqui nos assets um passo a passo de como montar
-o seu primeiro case. Então, que métricas que você puxa no Analytics, que dados
-que você vê na VTEX, ou na plataforma de comércio da escolha do cliente. Que
-campanha que você vai criar. Como que você vai divulgar esse case. Como que você
-faz um release da imprensa falando que o site que você implementou está rápido e
-está aumentando as vendas. Enfim, tudo o que você precisa para que o seu caso
-seja muito bem documentado.
-
-No fim de tudo, uma ideia que é muito prática e rápida, se você não quiser
-investir em gravação, se você não quiser investir em uma documentação muito
-extensa, é muito simples: marca com o seu cliente e com a deco.cx um webinar.
-Marca um webinar ou marca um evento presencial, um café, um jantar, um almoço ou
-qualquer coisa que você precise. Nos convide, convide o cliente, grave isso e
-distribui para sua base. Isso vai ajudar bastante a todo mundo saber que você
-agora é uma agência parceira e que você está implementando uma solução que
-promete aumentar a venda dos seus clientes.
diff --git a/docs/treinamento-comercial/web-performance/pt.md b/docs/treinamento-comercial/web-performance/pt.md
deleted file mode 100644
index a13a3551..00000000
--- a/docs/treinamento-comercial/web-performance/pt.md
+++ /dev/null
@@ -1,324 +0,0 @@
----
-description: Treinamento Comercial - Web Performance para Ecommerce
-since: 1.0.0
----
-
-VIDEO
-
-Parte importante do nosso produto e do nosso discurso comercial está intimamente
-relacionado à web performance. Nesse contexto que a gente está trazendo, web
-performance é a possibilidade, é a maneira que você mede, tanto qualitativamente
-quanto quantitativamente, a velocidade do seu site e o tipo de experiência que
-ele está entregando para o seu cliente
-
-Quando a gente está falando de web performance, normalmente a gente tem as
-seguintes análises:
-
-1. Temos análise sobre a **velocidade de carregamento** do seu site, ou seja,
- quanto tempo ele demora para mostrar uma página, quanto tempo demora para o
- usuário conseguir interagir com aquele site e quão consistente está sendo
- essa entrega desses conteúdos no frontend, no navegador do cliente.
-
-2. Outra análise é entender **quanto tempo tá demorando para o site ficar
- interativo**, ou seja, quão rápido o usuário consegue começar a interagir com
- aquele conteúdo. Às vezes é simplesmente fazer um scroll, é clicar num botão.
- Enfim, quanto tempo aquilo está utilizável por alguém.
-
-3. Também avaliamos a **suavidade e interatividade** do site. Isso quer dizer,
- quando você faz um scroll, o conteúdo vem de uma maneira natural, a imagem
- carrega de uma vez só, do momento que você entendeu que aquele conteúdo já
- chegou para você. Não parece que tem algum bug ali, alguma instabilidade.
- Isso também é levado em consideração em web performance.
-
-4. E por fim, a **performance** também **percebida**. Às vezes você não tem como
- fazer um conteúdo ser carregado mais rápido do que ele já está sendo feito,
- mas você pode dar algum feedback que dê conforto pro seu usuário. Ou seja,
- uma coisa muito típica é um percentual do carregamento daquele conteúdo
- daquela página, que mostra que algo está acontecendo, que aquela experiência
- não está quebrada e que é só esperar um pouquinho.
-
----
-
-Ao longo do tempo, o Google foi gerando pesquisas, métodos, tutoriais para
-ajudar os web developers, quem está desenvolvendo os sites, a criar sites cada
-vez mais rápidos, a entender performance. Por ser o Google esse material que
-eles criaram é logicamente o norte que guia toda a comunidade de desenvolvimento
-na criação de experiências rápidas. Logicamente, todo mundo entende que ao
-seguir as diretrizes dele, você vai ter mais acesso orgânico e um custo de
-aquisição, um CPC nas mídias pagas, mais baratos, porque você está de acordo com
-os incentivos que eles estão colocando para o mercado.
-
-As métricas que compõe essa guia, esse norte que todo mundo está olhando e a
-gente também se chamam **Core Web Vitals**. São métricas que te ajudam a
-entender objetivamente como seu site está performando em termos de velocidade,
-de interatividade e também de estabilidade da experiência, de consistência.
-
-
-- A primeira métrica é o **Largest Contentful Paint** (LCP), ou seja, é o tempo
- de carregamento do maior elemento que está naquela página. Muito normalmente
- isso é uma imagem. E o Google sugere, ele na verdade, cria critérios de que
- esse indicador tem que ser abaixo de 2,5 segundos.
-
-- Uma outra métrica é o **First Input Delay** (FID). Isso quer dizer quanto
- tempo demora para aparecer algum elemento que gere interatividade, e que o
- usuário possa reagir a ele e interagir com ele. O Google sugere que essa
- métrica esteja abaixo de 100 milissegundos para acontecer.
-
-- Também temos a métrica **Cumulative Layout Shift** (CLS). Ela tem como
- objetivo medir a estabilidade da sua experiência enquanto ela carrega o
- conteúdo. Segundo o Google, você tem que fazer isso em menos de 0,1 segundos.
-
-- Em seguida, temos também o **First Contentful Paint** (FCP). Ele quer medir
- quando aparece a primeira coisa que o cliente consegue olhar, que o visitante
- consegue ver na página e entender que vem alguma coisa ali. Nessa métrica, o
- Google sugere que seja feito mais rápido do que 1,8 segundos.
-
-- E por fim, temos o **Total Blocking Time** (TBT), que é um intervalo entre o
- First Contentful Paint e o Time to Interact, que é basicamente o tempo que
- demora tudo pra acontecer e você ter algo utilizável. O Google sugere que isso
- seja feito em menos de 200 milissegundos.
-
-
-Existem algumas ferramentas disponíveis até gratuitamente online para você medir a velocidade de um site. Para listar algumas, você tem um GTmetrix, Pingdom, WebPage Test. Você tem o Google Page Insights e o Google Lighthouse. Essas duas, por serem fornecidas pelo Google, são mais alinhadas com a maioria da indústria e é o que a gente mesmo usa para ver a velocidade do nosso site.
-
-A distinção é importante entre os dois serviços do Google, é que o Lighthouse,
-quando você roda ele via Web Tools, ele vai pegar as configurações da sua
-máquina e da sua conexão para testar aquele site. Ou seja, tipicamente é um
-desenvolvedor, um designer, uma máquina moderna numa conexão boa. Já o Google
-Page Insights, ele tem duas métricas diferentes uma é melhor do que a outra. O
-Web Vitals quando ele traz as informações do Web Vitals, aqueles são dados reais
-que ele guardou da navegação daquele site específico através do navegador. Já os
-dados, que são de performance, ele pega de uma média da tecnologia do
-brasileiro, ou seja, ele vai pegar um Moto G numa conexão que não está ótima, o
-que também é muito mais rigoroso que o Lighthouse. Então é por isso que a gente
-foca mais nos resultados do Google Page Insights.
-
----
-
-Um caso muito legal da gente vê na prática é o caso da ZeeDog, que foi a
-primeira loja a implementar a deco.cx. Você entrando aqui no PageSpeed Insights
-do Google, a gente tem dois relatórios diferentes e é muito importante você
-distinguir o que cada um deles fala.
-
-Esse primeiro bloco aqui de cima ele está falando do Core Web Vitals, ou seja,
-quais são as principais métricas da web que eu falei aqui no curso. Então é o
-LCP, FIP, e por aí vai. E quando você entra no site da Zee Dog, uma pessoa que
-vai analisar e falar do case da deco.cxm vai falar: "Olha só! Olhei aqui, e
-vocês estão reprovados no celular. Veja só como é que não funciona". E aí você
-vai rodar para baixo, e esse aqui, na verdade é um diagnóstico de desempenho, e
-a nota que normalmente todo mundo vê, vai bater 37. E aí quem quiser realmente
-falar mal fala: "Olha só, vocês não conseguem entregar a performance". Mas vamos
-entender cada um desses relatórios e é a parte deles.
-
-Esse relatório de desempenho ele é focado em dados de laboratório. O que quer
-dizer isso? Ele rodou agora em tempo real o carregamento dessa página que foi a
-home do site, usando um Moto G Power, e uma limitação de 4G. Ou seja, um celular
-que seria médio para baixo no Brasil. E aí, quando você vê aqui, ele está
-reprovado também. Então, na verdade, a home page da Zee Dog, ela não está dentro
-das principais métricas de Core Web Vitals do Google. Mas ao clicar em origem,
-ao invés da URL da home, ele dá aprovado. O que isso quer dizer então aqui para
-o Google? Que esse site, na média todas as páginas dele está entregando um
-desempenho de altíssimo nível, no Core Web Vitals. E portanto, esse site vai
-receber mais tráfego e mais relevância.
-
-Isso aqui é muito mais importante, porque na verdade, o que ele coleta aqui, no
-Core Web Vitals, são os últimos 28 dias de tráfego nesse site, as visitas
-inteiras, em diferentes dispositivos móveis e diferentes conexões. Então, a
-história que esse relatório está contando é a seguinte: esse site realmente tem
-uma home page que está pesada e esse site realmente dá uma experiência ruim para
-quem tem um celular Moto G Power e limitação de 4G, mas na verdade o cliente que
-entra nas Zee Dog, ele provavelmente, o cliente médio, não está usando uma
-conexão ruim e muito menos um aparelho mais antigo. Ele deve estar usando um
-iPhone e um Samsung super moderno e numa conexão 5G.
-
-Então o time da Zee Dog, ele se guiou muito mais pela experiência que ele estava
-criando de fato para os clientes dele e conseguiu aprovação no que eles
-precisavam do que meramente tirar uma nota nesse dado de laboratório. E, para
-outros negócios pode fazer sentido. Uma loja como a Lojas Torra, por exemplo,
-que é de modo acessível, é mais importante o desempenho que é feito por
-laboratório está mais alinhado com Core Web Vitals.
-
-Então é isso que é importante saber na hora de apresentar pra um cliente, não
-cair numa pegadinha ou numa dúvida que você não consegue explicar.
-
----
-
-### Porque a performance é importante?
-
-Talvez você já saiba disso e provavelmente os seus clientes também já sabem
-disso. Mas eu vou aproveitar aqui para declarar o óbvio para todos nós:
-
-> **Velocidade de carregamento afeta conversões diretamente e afetam as vendas
-> de uma plataforma de comércio.**
-
-Existem dezenas de pesquisas e evidências sustentando esse fato. Por exemplo,
-[uma dessas pesquisas](https://www2.deloitte.com/ie/en/pages/consulting/articles/milliseconds-make-millions.html)
-apontou que aumentando a velocidade do seu site em 0,1 segundos, pode aumentar
-as vendas em até 10%. Em um site que não seja um e-commerce, seja um site
-institucional ou de captura de lead, esse aumento pode gerar até 7% de aumento
-dos pageviews.
-
-[Outra pesquisa](https://www.thinkwithgoogle.com/marketing-strategies/app-and-mobile/mobile-page-speed-new-industry-benchmarks/),
-e essa é a do próprio Google Research, aponta que a chance do seu bounce
-aumentar é de 90% se o seu site ficar mais lento, partindo de 1 segundo para 5
-segundos. No caso do seu site carregar em mais de 10 segundos, a chance do seu
-bounce aumentar é de 123%. Ou seja, é uma certeza que você vai aumentar o seu
-bounce.
-
-O cruel dessa métrica, dessa pesquisa e todo o varejista vai sentir essa dor
-como a gente sente e que você, nesse caso, está perdendo o tráfego que você já
-pagou para ter. Você já fez as iniciativas de SEO. Você já lutou pelo
-posicionamento orgânico. Você já pagou pro próprio Google pra ele mostrar sua
-marca e seus produtos nas suas ferramentas de busca e mesmo assim você está
-perdendo uma parcela desse tráfego, simplesmente porque o cliente não consegue
-ao menos ver o conteúdo que você está entregando. Ele não consegue nem reagir
-àquela página e acaba dando bounce, indo para o concorrente.
-
-E falando de desempenho, ou velocidade de carregamento da sua página, ele
-provavelmente está afetando três métricas importantes do seu negócio:
-
-1. A primeira delas a gente já falou aqui, é a **conversão**. Isso quer dizer,
- em qualquer cenário que o usuário chegou à ação final que você gostaria. No
- caso de um ecommerce, logicamente, a compra.
- [Uma outra pesquisa](https://www.portent.com/blog/analytics/research-site-speed-hurting-everyones-revenue.htm#:~:text=The%20first%205%20seconds%20of,%28between%20seconds%200-5%29)
- aponta que um site que carrega em 1 segundo verso um site carrega em 5
- segundos, converte 3x mais.
- [Uma pesquisa](https://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales)
- também aponta que a Amazon perderia U$ 1,6 bilhões ao ano caso seus sites
- ficassem meros 1 segundo mais lentos. Isso é uma eternidade para as métricas
- do mundo digital.
-
-2. Uma outra métrica que eu já falei é a **visibilidade** para o Google, que
- está relacionada ao SEO. Ou seja, o Google vem desde 2020 incentivando
- experiências mobile first que sejam rápidas e gerem engajamento.
- Explicitamente ele falou que vai favorecer as marcas, os ambientes que tenham
- esses critérios. E esse é justamente o mais difícil hoje você conseguir nas
- plataformas de comércio. Se você rodar os site, vai ver que muitos tem uma
- experiência desktop média batendo uma nota 70, 80, mas o mobile tipicamente
- está abaixo de 30, ou seja, uma grande oportunidade de ser descoberto e
- ganhar mais tráfego no Google.
-
-3. Por fim, temos a **usabilidade**. Clientes voltam e tem uma relação com
- marcas que entregam experiências prazerosas, agradáveis de consumo também.
- [Uma pesquisa pela Ericsson](https://www.ericsson.com/en/press-releases/2016/2/streaming-delays-mentally-taxing-for-smartphone-users-ericsson-mobility-report)
- apontou que o nível de estresse de alguém que está esperando mais de 6
- segundos para ver o conteúdo num celular é igual a ver um filme de terror.
-
----
-
-Nos últimos 15 anos, os desenvolvedores web foram ficando cada vez mais afeitos
-ao JavaScript. O JavaScript veio para estender as possibilidades de experiência
-web. Você criar um menu com uma animação, você cria algum elemento que carrega
-na página sem você precisar recarregar a página inteira. O JavaScript é uma
-linguagem muito boa e versátil, por isso a gente vê ela em todos os lugares,
-desde mobile, aplicativos, até na televisão e tudo mais, tem algum nível de
-JavaScript.
-
-Por definição, JavaScript não tem problema nenhum. Na verdade só ajudou a gente.
-Porém, enviar altos volumes de código pesado para o navegador vem afetando sim o
-desempenho dos sites ao longo do tempo. Além disso, a proliferação da comunidade
-em torno do JavaScript criou dezenas de opções de bibliotecas e frameworks.
-Então, agora um desenvolvedor júnior precisa dominar tudo isso para subir uma
-simples página no ar. Então, o dado concreto é que as páginas vem ficando mais
-pesadas e mais lentas ao longo do tempo. Uma página normal hoje carrega mais de
-1MB de JavaScript para funcionar.
-
-Um parâmetro legal é a gente imaginar, que não muito tempo atrás, o software que
-levou o homem à Lua pesava somente 4kb. Então uma página hoje dessa que carrega
-em 1MB é 250x mais pesada do que o software que levou o homem à lua. Um software
-super poderoso com cálculos complexos. Uma outra pesquisa do Google Research
-apontou que os sites estão carregando no celular em média em 15 segundos, o que
-é uma eternidade na internet.
-
-A deco.cx fez algumas apostas de arquitetura tecnológica para conseguir entregar
-essa performance nunca antes vista:
-
-
-- A primeira aposta da arquitetura da deco.cx foi mudar a maneira que a gente dá
- deploy no código. Ou seja, entrega ele para o navegador do usuário final.
- Tipicamente, as aplicações de comércio eletrônico hoje tem um servidor
- estático num lugar só, normalmente nos Estados Unidos, o que faz o código ter
- que navegar até os Estados Unidos e voltar. Só nesse trajeto você já saiu da
- zona de carregamento instantâneo. Ou seja, da maneira que o usuário percebe
- que aquele conteúdo carregou na mesma hora. No serviço que a gente usa o dele.
- A gente, na verdade, entrega o código em 35 regiões espalhadas pelo mundo. Ou
- seja, a gente garante que o servidor que estava aquele código está sempre bem
- pertinho do usuário.
-
-- Como eu acabei de falar na sessão anterior, o JavaScript, o crescimento dele,
- a proliferação e seu uso em diferentes lugares de aplicações vem deixando
- realmente os sites mais pesados, seja com códigos First Party, usados mesmo
- para desenvolver ali, por exemplo, um menu; seja os códigos Third Party, ou
- seja de terceiros, como tipicamente a gente usa um GA ou outro serviço de
- analytics. E na estrutura da deco.cx a gente vem reduzindo o JavaScript ao
- máximo, com diferentes soluções que você pode ver depois na nossa documentação
- técnica. Então, quando você pega a loja tema, por exemplo, a gente mostrou na
- demo por padrão, ela manda zero JavaScript para o navegador, tendo um ganho
- gigantesco de performance.
-
-- Por fim, a gente também escolheu não desenvolver uma linguagem própria de
- programação, mas se alavancar das linguagens mais famosas, mais populares,
- para a pessoa poder aprender deco.cx muito rápido. Então a gente usa o Preact
- que é uma versão otimizada do React, e a gente usa um framework de CSS/HTML,
- que é o Tailwind.
-
----
-
-Nós temos estratégias para resolver especificamente alguns do Core Web Vitals
-que eu falei anteriormente:
-
-
-- O TBT, por exemplo, a gente usa uma estrutura de islands, de ilhas de
- conteúdo. Que faz a gente entregar o mínimo de JavaScript necessário pro
- navegador. Além disso, para lidar com serviços como Google Tag Manager, que é
- muito comum, a gente usa um outro serviço chamado Partytown, que carrega esse
- código numa outra thread, num outro momento do código principal, garantindo
- que seu site vai ficar iterativo muito rápido.
-
-- Outra métrica que a gente ajuda a melhorar de maneira muito intencional é o
- LCP. Nele os desenvolvedores têm total acesso ao HTML. Isso quer dizer que ele
- consegue criar tags para pre-load, para pré-carregar todo o conteúdo no
- navegador, garantindo alta performance. Além disso, cada imagem é
- redimensionada e cortada automaticamente no nosso sistema, garantindo que
- apesar do designer subir uma grande imagem pesada e detalhada, no momento de
- entregar isso pro navegador, a gente vai entregar os mínimos de bytes
- necessários para aquele conteúdo funcionar.
-
-- Por fim, também ajudamos no FCP. O processo de renderização acontece na edge,
- como a gente já falou várias vezes, perto do usuário. Isso garante que o tempo
- de latência do servidor para ele renderizar o conteúdo e entregar para o
- navegador é o mínimo possível. Além disso, a gente tem um sistema de stale
- cache nas APIs das plataformas de comérciom, que garantem que seu site esteja
- sempre online, mesmo que haja algum tipo de atraso, significando que a página
- vai estar sempre pronta, completa e rápida.
-
-Além de melhorar os Core Web Vitals diretamente, ou seja, a pontuação percebida
-pelo Google, a gente tem também algumas estratégias que melhoram a experiência
-do usuário, independente da nota:
-
-
-- A primeira estratégia é que todo o conteúdo é renderizado no servidor. Isso
- faz com que as páginas não dependam de JavaScript para carregar. Isso é
- especialmente importante quando você está acessando o conteúdo de um celular e
- talvez uma conexão um pouco pior, o que é, na verdade, a grande maioria dos
- acessos à plataforma de comércio hoje.
-
-- Nós também pré carregamos conteúdos adjacentes. Pensa comigo a última vez que
- você ouviu alguma música no Spotify e se você perdeu a conexão, mas ainda
- tinha algumas músicas na fila tocando? Ou seja, o Spotify já tinha carregado
- essas músicas enquanto você ouvia a primeira, a gente faz a mesma coisa.
- Quando um usuário pousa na sua home, ele aterrisa na sua home, o nosso sistema
- já entende todos os possíveis caminhos que ele pode ter. Ou seja, os links das
- URL que existem nessa página. Enquanto o cliente está interagindo com aquele
- conteúdo, a gente já está trazendo o conteúdo das outras páginas. Então quando
- ele resolve ir pra uma outra etapa, aquele conteúdo já está pronto pra ele.
-
-- Por fim, o nosso recurso de customização permite que você crie jornadas por
- audiências.Mas esse conteúdo, como a gente não faz cache do HTML, ele é
- carregado sempre na hora e muito rápido. Você deve lembrar de uma experiência,
- por exemplo, usando o Google Optimize, onde você criou um teste e aquele teste
- era uma troca de banner E quando você vai ver o teste no ar, muitas vezes ele
- carrega o primeiro banner e rapidamente ele tira e substitui pelo banner do
- teste, o que é uma experiência péssima e faz o cliente pensar que aquele site
- tá com algum tipo de problema. Isso nunca vai acontecer na Deco porque a gente
- sempre renderiza HTML na hora sem cache.
diff --git a/fresh.gen.ts b/fresh.gen.ts
index 8b7a023f..e1c46a9f 100644
--- a/fresh.gen.ts
+++ b/fresh.gen.ts
@@ -13,6 +13,7 @@ import * as $api_ranking from "./routes/api/ranking.ts";
import * as $api_webinar from "./routes/api/webinar.tsx";
import * as $bugbounty from "./routes/bugbounty.ts";
import * as $docs_css from "./routes/docs.css.ts";
+import * as $docs_catchall_ from "./routes/docs/[...catchall].tsx";
import * as $hackathon4 from "./routes/hackathon4.ts";
import * as $hackathon5 from "./routes/hackathon5.ts";
import * as $proxy_image_index from "./routes/proxy/image/index.tsx";
@@ -82,6 +83,7 @@ const manifest = {
"./routes/api/webinar.tsx": $api_webinar,
"./routes/bugbounty.ts": $bugbounty,
"./routes/docs.css.ts": $docs_css,
+ "./routes/docs/[...catchall].tsx": $docs_catchall_,
"./routes/hackathon4.ts": $hackathon4,
"./routes/hackathon5.ts": $hackathon5,
"./routes/proxy/image/index.tsx": $proxy_image_index,
diff --git a/handlers/sitemap.ts b/handlers/sitemap.ts
index 9533d880..afd2fbd4 100644
--- a/handlers/sitemap.ts
+++ b/handlers/sitemap.ts
@@ -1,5 +1,4 @@
import { Route } from "apps/website/flags/audience.ts";
-import tableOfContents from "site/docs/toc.ts";
import { type Handler } from "@deco/deco/blocks";
import { isResolvable, type Resolvable } from "@deco/deco";
const isPage = (handler: Resolvable) =>
diff --git a/loaders/denoLoader.ts b/loaders/denoLoader.ts
deleted file mode 100644
index e8e663ba..00000000
--- a/loaders/denoLoader.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { MDFileContent } from "site/components/ui/Types.tsx";
-import type { LoaderContext } from "deco/types.ts";
-import { getTitleForPost } from "site/docs/toc.ts";
-import type { SupportedLanguages } from "site/docs/toc.ts";
-import { badRequest, redirect } from "@deco/deco";
-/** @title {{{path}}} */
-export interface Doc {
- path: string;
- /**
- * @format textarea
- */
- content: string;
- title?: string;
-}
-const GH_USER_CONTENT_URL = "https://raw.githubusercontent.com";
-const OWNER = "deco-cx";
-const REPO = "apps";
-export const cache = "stale-while-revalidate";
-export const cacheKey = (_props: unknown, req: Request, _ctx: LoaderContext) =>
- new URL(req.url).href;
-const loader = async (
- props: {
- urlPattern: string;
- group: number;
- docs?: Doc[];
- docsPath?: string;
- },
- _req: Request,
- _ctx: LoaderContext,
-): Promise => {
- const match = (new URL(_req.url)).pathname.match(props.urlPattern);
- const slug = (match && match[props.group]) ?? "/404";
- const [languageOrig, ...rest] = slug.split("/");
- const language = languageOrig as SupportedLanguages;
- const documentSlug = rest.join("/");
- const path = props.docsPath ?? "docs";
- if (documentSlug === "") {
- const returnUrl = new URL(_req.url);
- returnUrl.pathname = `/${path}/${language}/overview`;
- return redirect(returnUrl.href, 307) as unknown as ReturnType<
- typeof loader
- >; // redirect, component won't be resolved, so don't need the data;
- }
- if (documentSlug.includes("decohub")) {
- const appName = documentSlug.split("/")[1];
- const url =
- `${GH_USER_CONTENT_URL}/${OWNER}/${REPO}/master/${appName}/README.md`;
- const response = await fetch(url);
- const content = await response.text();
- const contentWithDescription =
- `---\ndescription: This is the README of the ${appName} app\n---\n${content}`;
- return { content: contentWithDescription, title: appName };
- }
- const url = new URL(
- `../${path}/${documentSlug}/${language}.md`,
- import.meta.url,
- );
- const doc = props.docs?.find((doc) => doc.path === slug);
- if (doc) {
- return { content: doc.content, title: doc.title };
- }
- try {
- const fileContent = await Deno.readTextFile(url);
- return {
- content: fileContent,
- title: getTitleForPost(language == "en" ? "en" : "pt", documentSlug),
- };
- } catch {
- badRequest({ message: "File not found" });
- return { content: "" };
- }
-};
-export default loader;
diff --git a/loaders/denoTopicsLoader.ts b/loaders/denoTopicsLoader.ts
deleted file mode 100644
index 31062239..00000000
--- a/loaders/denoTopicsLoader.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-import type { LoaderContext } from "deco/types.ts";
-import type {
- ChildTopic,
- SubTopic,
- Topic,
-} from "site/components/decohelp/pages/ui/Sidebar/Sidebar.tsx";
-import tableOfContents from "site/docs/toc.ts";
-
-const GITHUB_API_URL = "https://api.github.com";
-const GH_USER_CONTENT_URL = "https://raw.githubusercontent.com";
-const OWNER = "deco-cx";
-const REPO = "apps";
-
-export const cache = "stale-while-revalidate";
-
-export const cacheKey = (
- _props: unknown,
- _req: Request,
- _ctx: LoaderContext,
-) => {
- return "http://localhost:3000/docs/en/overview";
-};
-
-const isValidItem = (
- item: PromiseSettledResult<
- {
- data: Response;
- path: string;
- } | undefined
- >,
-): item is PromiseFulfilledResult<{
- data: Response;
- path: string;
-}> => {
- return item.status === "fulfilled" && item.value?.data.status === 200;
-};
-
-async function fetchAppsReposWithReadme() {
- const url = `${GITHUB_API_URL}/repos/${OWNER}/${REPO}/contents`;
- const response = await fetch(url);
- const data = await response.json();
-
- const dirsWithReadme: string[] = [];
-
- if (!Array.isArray(data)) {
- return dirsWithReadme;
- }
-
- const promiseSettled = await Promise.allSettled(
- data.map(async ({ path, type }) => {
- if (type === "dir" && !!path) {
- const data = await fetch(
- `${GH_USER_CONTENT_URL}/${OWNER}/${REPO}/master/${path}/README.md`,
- );
- return { data, path };
- }
- }),
- );
-
- return promiseSettled.filter(isValidItem).map((promise) =>
- promise.value.path
- );
-}
-
-const loader = async (
- props: { urlPattern: string; group: number; basePath?: string },
- _req: Request,
- _ctx: LoaderContext,
-): Promise => {
- const match = (new URL(_req.url)).pathname.match(props.urlPattern);
- const slug = (match && match[props.group]) ?? "/404";
- const [language, ..._rest] = slug.split("/");
- const languageTyped = language as ("en" | "pt");
- const base = props.basePath ? (props.basePath + language + "/") : "";
-
- const topics = tableOfContents.map((topic) => {
- return ({
- label: topic.title[languageTyped] ?? topic.slug,
- LinkTopic: topic.slug && base + topic.slug,
- SubTopics: topic.children?.filter((subTopic) =>
- subTopic.title[languageTyped] && subTopic.slug
- ).map((subTopic) => {
- return {
- label: subTopic.title[languageTyped]!,
- SidebarLink: base + subTopic.slug!,
- NestedTopics: subTopic.children?.filter((childTopic) =>
- childTopic.title[languageTyped] && childTopic.slug
- ).map((childTopic) => {
- return {
- label: childTopic.title[languageTyped]!,
- SidebarLink: base + childTopic.slug!,
- };
- }) ?? ([] as ChildTopic[]),
- };
- }) ?? ([] as SubTopic[]),
- });
- });
-
- const appsRepos = await fetchAppsReposWithReadme();
-
- if (!appsRepos.length) {
- return topics;
- }
-
- const decoHub = {
- label: "Deco Hub",
- LinkTopic: undefined,
- SubTopics: appsRepos.map((repo) => {
- return {
- label: repo,
- SidebarLink: `/docs/${languageTyped}/decohub/${repo}`,
- NestedTopics: [],
- };
- }),
- };
-
- topics.push(decoHub);
-
- return topics;
-};
-
-export default loader;
diff --git a/manifest.gen.ts b/manifest.gen.ts
index 99e7ce47..4518379a 100644
--- a/manifest.gen.ts
+++ b/manifest.gen.ts
@@ -20,9 +20,7 @@ import * as $$$$1 from "./handlers/sitemap.ts";
import * as $$$0 from "./loaders/blogPostDetailsLoader.ts";
import * as $$$1 from "./loaders/blogPostLoader.ts";
import * as $$$2 from "./loaders/blogPostMarkdownLoader.ts";
-import * as $$$3 from "./loaders/denoLoader.ts";
-import * as $$$4 from "./loaders/denoTopicsLoader.ts";
-import * as $$$5 from "./loaders/featuredPosts.ts";
+import * as $$$3 from "./loaders/featuredPosts.ts";
import * as $$$$$$$0 from "./matchers/MatchPath.ts";
import * as $$$$$$0 from "./sections/About.tsx";
import * as $$$$$$1 from "./sections/Benefits.tsx";
@@ -211,9 +209,7 @@ const manifest = {
"site/loaders/blogPostDetailsLoader.ts": $$$0,
"site/loaders/blogPostLoader.ts": $$$1,
"site/loaders/blogPostMarkdownLoader.ts": $$$2,
- "site/loaders/denoLoader.ts": $$$3,
- "site/loaders/denoTopicsLoader.ts": $$$4,
- "site/loaders/featuredPosts.ts": $$$5,
+ "site/loaders/featuredPosts.ts": $$$3,
},
"handlers": {
"site/handlers/feed.ts": $$$$0,
diff --git a/routes/docs/[...catchall].tsx b/routes/docs/[...catchall].tsx
new file mode 100644
index 00000000..0b65cdbf
--- /dev/null
+++ b/routes/docs/[...catchall].tsx
@@ -0,0 +1,10 @@
+import type { Handlers } from "$fresh/server.ts";
+
+export const handler: Handlers = {
+ GET(req) {
+ const url = new URL(req.url);
+ const urlToRedirect = `https://docs.deco.cx/${url.pathname.replace("docs/", "")}${url.search}`;
+
+ return Response.redirect(urlToRedirect, 301);
+ },
+};