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 );\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 );\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![preact](https://github.com/deco-cx/community/assets/1753396/9514e3e5-2562-44f2-b69d-fa360a9f1de6)\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![htmx](https://github.com/deco-cx/community/assets/1753396/f18fadb6-028a-4ff3-a898-82dc25339988)\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![htmx+loading](https://github.com/deco-cx/community/assets/1753396/3604b06d-4c2f-413f-91ca-2e22323ff14c)\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![preact](https://github.com/deco-cx/community/assets/1753396/9514e3e5-2562-44f2-b69d-fa360a9f1de6)\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![htmx](https://github.com/deco-cx/community/assets/1753396/f18fadb6-028a-4ff3-a898-82dc25339988)\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![htmx+loading](https://github.com/deco-cx/community/assets/1753396/3604b06d-4c2f-413f-91ca-2e22323ff14c)\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\"Screenshot\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\"Screenshot\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\"Screenshot\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\"Screenshot\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\"Screenshot\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\"Screenshot\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\"Screenshot\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\"Screenshot\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
\nClick here to read more!\n
\n\n![CWV.png](https://i.ibb.co/BKTFVxg/Page-Speed-Dentral-2.png)\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![Aviator.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0e76a4b4-7e7d-4f73-9dde-8ddd0cca74b0)\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![Embelleze.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a4f84f0c-a594-41af-834c-80fc23734289)\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![Form created on deco.cx by Zee.Dog to edit SEO meta elements](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d4fc86df-6d1a-4fa5-b8ee-0d3435a40b4d)\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![SEOGraph.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fb2698f-f47c-49eb-9e15-aeed1496c36e)\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
\nClick here to read more!\n
\n\n![CWV.png](https://i.ibb.co/BKTFVxg/Page-Speed-Dentral-2.png)\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![Aviator.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0e76a4b4-7e7d-4f73-9dde-8ddd0cca74b0)\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![Embelleze.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a4f84f0c-a594-41af-834c-80fc23734289)\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![Form created on deco.cx by Zee.Dog to edit SEO meta elements](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d4fc86df-6d1a-4fa5-b8ee-0d3435a40b4d)\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![SEOGraph.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fb2698f-f47c-49eb-9e15-aeed1496c36e)\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
\nClique aqui para ler mais!\n
\n\n![CWV.png](https://ibb.co/cX2VcHN)\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![Aviator.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0e76a4b4-7e7d-4f73-9dde-8ddd0cca74b0)\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![Embelleze.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a4f84f0c-a594-41af-834c-80fc23734289)\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![Formulário criado na deco.cx pela Zee.Dog para editar elementos meta de SEO](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d4fc86df-6d1a-4fa5-b8ee-0d3435a40b4d)\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![SEOGraph.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fb2698f-f47c-49eb-9e15-aeed1496c36e)\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
\nClique aqui para ler mais!\n
\n\n![CWV.png](https://ibb.co/cX2VcHN)\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![Aviator.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/0e76a4b4-7e7d-4f73-9dde-8ddd0cca74b0)\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![Embelleze.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/a4f84f0c-a594-41af-834c-80fc23734289)\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![Formulário criado na deco.cx pela Zee.Dog para editar elementos meta de SEO](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d4fc86df-6d1a-4fa5-b8ee-0d3435a40b4d)\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![SEOGraph.png](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/8fb2698f-f47c-49eb-9e15-aeed1496c36e)\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\"image\"\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\"image\"\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\"image\"\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\"image\"\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![deco play](https://github.com/deco-sites/std/assets/18706156/ec92362b-9d18-42d8-9c60-bcb5bfef0d71)\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![Plausible](https://user-images.githubusercontent.com/882438/277673611-ea99f749-5b43-45dd-b7f6-43834c2dd638.png)\n\n### Realtime Analytics\n\n![Realtime Dashboard](https://user-images.githubusercontent.com/882438/277673679-5d85bc68-f166-4958-8d35-d3a33a77a716.png)\n\nSee your current visitors in real-time. No more waiting two days for data.\n\n### Goals and Funnels\n\n![Funnels Dashboard](https://github.com/deco-cx/apps/assets/882438/28f4312a-b259-4ae2-9b4c-2f484432fe2d)\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![Creating a new redirect](https://github.com/deco-sites/std/assets/15680320/19144393-6dc7-4e26-8243-c952c99fbca1)\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![Editing a redirect](https://github.com/deco-sites/std/assets/18706156/ab3d9567-cb1f-444d-9d77-35f810f1cacc)\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\"image\"\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\"image\"\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\"New\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\"New\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\"Visualize\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\"New\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\"Deployments\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\"Logs\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\"image\"\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![](https://images.prismic.io/tavanoblog/2aa05cf7-37c8-4f0f-a9e6-305a61148f41_Screenshot+from+2023-01-02+23-40-38.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/e0ca9a8b-39f7-494d-845f-251115fbd3cf_Screenshot+from+2023-01-02+23-46-00.png?auto=compress,format)\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![](https://prismic-io.s3.amazonaws.com/tavanoblog/4e0e9aac-b71b-4a9d-b05c-5f5866db1ff4_Screenshot+from+2023-01-02+23-47-36.png)\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![](https://images.prismic.io/tavanoblog/86021ef8-4a16-4256-be35-f4b6edb57ae5_Screenshot+from+2023-01-02+23-59-21.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/485b3680-82af-4c06-9a27-d3c1cde28404_Screenshot+from+2023-01-03+00-19-45.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/b0db1859-a120-49ba-8831-e0ef78034f4d_Screenshot+from+2023-01-03+00-07-08.png?auto=compress,format)\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![deco play](https://github.com/deco-sites/std/assets/18706156/ec92362b-9d18-42d8-9c60-bcb5bfef0d71)\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![Plausible](https://user-images.githubusercontent.com/882438/277673611-ea99f749-5b43-45dd-b7f6-43834c2dd638.png)\n\n### Realtime Analytics\n\n![Realtime Dashboard](https://user-images.githubusercontent.com/882438/277673679-5d85bc68-f166-4958-8d35-d3a33a77a716.png)\n\nSee your current visitors in real-time. No more waiting two days for data.\n\n### Goals and Funnels\n\n![Funnels Dashboard](https://github.com/deco-cx/apps/assets/882438/28f4312a-b259-4ae2-9b4c-2f484432fe2d)\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![Creating a new redirect](https://github.com/deco-sites/std/assets/15680320/19144393-6dc7-4e26-8243-c952c99fbca1)\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![Editing a redirect](https://github.com/deco-sites/std/assets/18706156/ab3d9567-cb1f-444d-9d77-35f810f1cacc)\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\"image\"\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\"image\"\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\"New\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\"New\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\"Visualize\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\"New\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\"Deployments\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\"Logs\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\"image\"\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![](https://images.prismic.io/tavanoblog/2aa05cf7-37c8-4f0f-a9e6-305a61148f41_Screenshot+from+2023-01-02+23-40-38.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/e0ca9a8b-39f7-494d-845f-251115fbd3cf_Screenshot+from+2023-01-02+23-46-00.png?auto=compress,format)\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![](https://prismic-io.s3.amazonaws.com/tavanoblog/4e0e9aac-b71b-4a9d-b05c-5f5866db1ff4_Screenshot+from+2023-01-02+23-47-36.png)\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![](https://images.prismic.io/tavanoblog/86021ef8-4a16-4256-be35-f4b6edb57ae5_Screenshot+from+2023-01-02+23-59-21.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/485b3680-82af-4c06-9a27-d3c1cde28404_Screenshot+from+2023-01-03+00-19-45.png?auto=compress,format)\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![](https://images.prismic.io/tavanoblog/b0db1859-a120-49ba-8831-e0ef78034f4d_Screenshot+from+2023-01-03+00-07-08.png?auto=compress,format)\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!

- -``` - -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. - -![New section in the section library](/docs/hello-world/new-section.png) - -## 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} - )} -

{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. - -![Section properties form in the admin](/docs/hello-world/section-properties.png) - -## 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. - -![Changing theme colors](/docs/hello-world/themes.png) - -### 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. - -![Choosing the page theme](/docs/hello-world/add-section.png) - -![Changing the page theme](/docs/hello-world/section-themes.png) - -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. - -![Adding the Groovy Vibes theme](/docs/hello-world/page-theme.png) - -### 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} - )} -

{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. - -![Section with site theme](/docs/hello-world/new-section-with-theme.png) 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. - -![Nova section na section library](/docs/hello-world/new-section.png) - -## 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} - )} -

{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. - -![Formulário da section no admin](/docs/hello-world/section-properties.png) - -## 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. - -![Alterando as cores do tema](/docs/hello-world/themes.png) - -### 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. - -![Escolhendo o tema de uma página](/docs/hello-world/add-section.png) - -![Alterando o tema de uma página](/docs/hello-world/section-themes.png) - -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. - -![Adicionando o tema Groovy Vibes](/docs/hello-world/page-theme.png) - -### 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} - )} -

{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. - -![Section com tema do site](/docs/hello-world/new-section-with-theme.png) 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. - -![HTMX installation in the deco Admin](/docs/developing-guide/htmx/htmx-installation.png) - -## 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 ( -
- - {count} - -
- ); -} -``` - -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. - -![HTMX request in the network tab](/docs/developing-guide/htmx/htmx-network.gif) - -![Preact request in the network tab](/docs/developing-guide/htmx/preact-network.gif) - -## 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 ( -
- - {count} - -
- ); -} -``` - -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. - -![Requisições da versão HTMX](/docs/developing-guide/htmx/htmx-network.gif) - -![Requisições da versão Preact](/docs/developing-guide/htmx/preact-network.gif) - -## 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. - -![Adding collaborator to the repository](/docs/setup/repository-access.png) - -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. - -![Create new environment](/docs/setup/create-environment.png) - -#### 3.2 Set a name and a host to your environment - -Choose a name for your environment and set your host as localhost. - -![Choosing environment and starting server](/docs/setup/choose-host.png) - -#### 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. - -![Start server command](/docs/setup/start-server-command.png) - -![Execute command on terminal](/docs/setup/start-server-terminal.png) - -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. - -![Publish changes](/docs/setup/publish-button.png) - -## 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. - - - -![Adicionando colaborador no repositório](/docs/setup/repository-access.png) - -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. - -![Criar novo ambiente](/docs/setup/create-environment.png) - -#### 3.2 Defina o nome e o host do seu ambiente - -Escolha um nome para o seu ambiente e defina seu host como localhost. - -![Definindo nome e host do ambiente](/docs/setup/choose-host.png) - -#### 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. - -![Comando de iniciar server](/docs/setup/start-server-command.png) - -![Iniciando server no terminal](/docs/setup/start-server-terminal.png) - -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. - -![Publicar mudanças](/docs/setup/publish-button.png) - -## 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. - -![Install app](/docs/getting-started/adding-an-app/install-app.png) - -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. - -![Sections Page](/docs/getting-started/adding-an-app/sections-page.png) - -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. - -![Select Temperature Source](/docs/getting-started/adding-an-app/select-source.png) - -You have three options: - -1. **Manual Entry**: Provide an arbitrary number for the temperature. - - ![Manual Entry](/docs/getting-started/adding-an-app/manual-entry.png) - -2. **Default Value**: Leave the temperature field blank. The section accepts a - null value, and a default fixed temperature will be displayed. - - ![Default Value](/docs/getting-started/adding-an-app/default-value.png) - -3. **Use the Loader**: Utilize the loader made available by the Weather App. - - ![Use the Loader](/docs/getting-started/adding-an-app/use-loader.png) - - 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: - - ![Loader Temperature](/docs/getting-started/adding-an-app/loader-temperature.png) - - > 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. - -![Instalar app](/docs/getting-started/adding-an-app/install-app.png) - -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. - -![Página de Seções](/docs/getting-started/adding-an-app/sections-page.png) - -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. - -![Selecionar Fonte de Temperatura](/docs/getting-started/adding-an-app/select-source.png) - -Você tem três opções: - -1. **Entrada Manual**: Forneça um número arbitrário para a temperatura. - - ![Entrada Manual](/docs/getting-started/adding-an-app/manual-entry.png) - -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. - - ![Valor Padrão](/docs/getting-started/adding-an-app/default-value.png) - -3. **Usar o Loader**: Utilize o loader disponibilizado pelo Weather App. - - ![Usar o Loader](/docs/getting-started/adding-an-app/use-loader.png) - - 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: - - ![Temperatura do Loader](/docs/getting-started/adding-an-app/loader-temperature.png) - - > 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. - -![Environment Changes](/docs/getting-started/changing-and-publishing/env-changes.png) - -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. - -![Rebase environment](/docs/getting-started/changing-and-publishing/rebase.png) - -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. - -![Mudanças no Ambiente](/docs/getting-started/changing-and-publishing/env-changes.png) - -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. - -![Rebase no ambiente](/docs/getting-started/changing-and-publishing/rebase.png) - -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. - -![Pages space](/docs/getting-started/creating-a-new-page/pages-space.png) - -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. - -![Creating a new page](/docs/getting-started/creating-a-new-page/new-page.png) - -## 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. - -![Adding a section](/docs/getting-started/creating-a-new-page/add-section.png) - -> 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. - -![Hero section](/docs/getting-started/creating-a-new-page/hero.png) - -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. - -![Section Form](/docs/getting-started/creating-a-new-page/section-form.png) - -> 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. - -![Changing Section](/docs/getting-started/creating-a-new-page/changing-section.png) - -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. - -![Space de páginas](/docs/getting-started/creating-a-new-page/pages-space.png) - -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. - -![Criando uma nova página](/docs/getting-started/creating-a-new-page/new-page.png) - -## 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. - -![Adicionando uma seção](/docs/getting-started/creating-a-new-page/add-section.png) - -> 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. - -![Seção Hero](/docs/getting-started/creating-a-new-page/hero.png) - -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. - -![Formulário da Seção](/docs/getting-started/creating-a-new-page/section-form.png) - -> 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. - -![Mudando a Seção](/docs/getting-started/creating-a-new-page/changing-section.png) - -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. - -![Choosing a template](/docs/getting-started/creating-site/choose-template.png) - -## 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. - -![Edit a site](/docs/getting-started/creating-site/site-editor.png) - -## 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. - -![Save site to your team](/docs/getting-started/creating-site/save-site-btn.png) - -### 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: - -![Choosing a name and a team to save site](/docs/getting-started/creating-site/save-site.png) - -If you do not have a team yet, one will be created with a name of your choice: - -![Choosing a name and a team that you'll create](/docs/getting-started/creating-site/save-site-and-team.png) - -Deco will configure your site according to the template you chose. - -## 4. Finish Site Setup - -You will be redirected to the site home page: - -![Site Home](/docs/getting-started/creating-site/site-home.png) - -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. - ![New Environment button](/docs/getting-started/creating-site/new-env-btn.png) -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. - ![New Environment Form](/docs/getting-started/creating-site/new-env-form.png) - -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. - -Deploy site button - -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. - -![Escolhendo um template](/docs/getting-started/creating-site/choose-template.png) - -## 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. - -![Editar um site](/docs/getting-started/creating-site/site-editor.png) - -## 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. - -![Salvar site para sua equipe](/docs/getting-started/creating-site/save-site-btn.png) - -### 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: - -![Escolhendo um nome e uma equipe para salvar o site](/docs/getting-started/creating-site/save-site.png) - -Se você ainda não tiver uma equipe, uma será criada com um nome à sua escolha: - -![Escolhendo um nome e uma equipe que você vai criar](/docs/getting-started/creating-site/save-site-and-team.png) - -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: - -![Página Inicial do Site](/docs/getting-started/creating-site/site-home.png) - -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. - ![Botão Novo Ambiente](/docs/getting-started/creating-site/new-env-btn.png) -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. - ![Formulário Novo Ambiente](/docs/getting-started/creating-site/new-env-form.png) - -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. - -Botão de Deploy do site - -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): - -![Domain step](/docs/getting-started/custom-domains/apex-domain.png) - -4 - Define which subdomain to redirect to: - -![Sudomain step](/docs/getting-started/custom-domains/subdomain.png) - -5 - Now, you will see the settings that must be made in your domain hosting -platform: - -![DNS Setup](/docs/getting-started/custom-domains/validate-apex.png) - -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): - -![Domain step](/docs/getting-started/custom-domains/apex-domain.png) - -4 - Defina para qual subdomínio redirecionar: - -![Sudomain step](/docs/getting-started/custom-domains/subdomain.png) - -5 - Agora, você verá os apontamentos que devem ser feitos na sua plataforma de -hospedagem de domínio: - -![DNS Setup](/docs/getting-started/custom-domains/validate-apex.png) - -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. - - ![Site settings](/docs/getting-started/custom-domains/settings.png) - -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. - - ![Add domain](/docs/getting-started/custom-domains/add-domain.png) - -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`. - - ![Domain setup](/docs/getting-started/custom-domains/validate-domain.png) - -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. - - ![Configuraçãos do site](/docs/getting-started/custom-domains/settings.png) - -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. - - ![Adicionar domínio](/docs/getting-started/custom-domains/add-domain.png) - -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`. - - ![Validação do domínio](/docs/getting-started/custom-domains/validate-domain.png) - -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: - -![Selecting the site app](/docs/gtm/select-app.png) - -Next, locate the global sections properties: - -![Global Sections](/docs/gtm/global-sections.png) - -Finally, add the Analytics section: - -![Adding Analytics section](/docs/gtm/add-analytics.png) - -## 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 your section](/docs/gtm/configure-your-section.png) - -## 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: - -![Selecionando o app do site](/docs/gtm/select-app.png) - -Em seguida, localize as propriedades das sections globais: - -![Sections Globais](/docs/gtm/global-sections.png) - -Por fim, adicione a section de Analytics: - -![Adicionando section de Analytics](/docs/gtm/add-analytics.png) - -## 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 sua section](/docs/gtm/configure-your-section.png) - -## 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: - -![alt text](/docs/headless-cms/change-flow.png) - -## 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: - -![Home page store front](/docs/headless-cms/site.png) - -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: - -![JSON response on request with ?asJson query](/docs/headless-cms/asjson.png) - -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: - -![alt text](/docs/headless-cms/change-flow.png) - -## 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: - -![Home page store front](/docs/headless-cms/site.png) - -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: - -![JSON response on request with ?asJson query](/docs/headless-cms/asjson.png) - -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. - - - -## 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. - -TS to 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. - -TS to props - -### 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. - -TS to props - -## 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. - - - -## 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. - -TS to 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. - -TS to props - -### 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. - -TS to props - -## 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. - -![Stale Edge Cache](/docs/performance/stale-edge-cache.png) - -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. - -![Disable Async Rendering](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/3d9ee3b7-cce2-47f3-a320-2a72b2e63e2a) - -### 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. - -![Stale Edge Cache](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/3d9ee3b7-cce2-47f3-a320-2a72b2e63e2a) - -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. - -![Desativar renderização assíncrona](/docs/performance/disable-async-render.png) - -### 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 - -![Example of using browser tools for debugging](https://github.com/deco-sites/starting/assets/882438/bf441a9a-5af7-4c83-aa4a-c409c2cfb84c) - -**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 - -![Example of pagespeed test](https://github.com/deco-sites/starting/assets/882438/35d915a9-1fa0-4c87-b5b5-74cd60bec8f0) - -[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 - -![Examples of deco metrics](https://github.com/deco-sites/starting/assets/882438/af592b39-0f4d-405f-a0c6-a212b1677058) - -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 - -![Example of Core Web Vitals test](https://github.com/deco-sites/starting/assets/882438/f911058f-34b4-4c49-a24b-9351d630a752) - -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 - -![Exemplo de uso de ferramentas do browser para depuração](https://github.com/deco-sites/starting/assets/882438/bf441a9a-5af7-4c83-aa4a-c409c2cfb84c) - -**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 - -![Exemplo de teste no pagespeed](https://github.com/deco-sites/starting/assets/882438/35d915a9-1fa0-4c87-b5b5-74cd60bec8f0) - -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 - -![Exemplos de métricas deco](https://github.com/deco-sites/starting/assets/882438/af592b39-0f4d-405f-a0c6-a212b1677058) - -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 - -![Exemplo de teste do CWV](https://github.com/deco-sites/starting/assets/882438/f911058f-34b4-4c49-a24b-9351d630a752) - -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. - -Performance information of a page - -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. - -Informações de performance de uma página - -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**. - -![deco.cx sdk Template](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/ffd8f072-daf7-48cc-ab14-ad6b9297f903) - -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: - -![AbTest Search](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/7658eb54-1f8f-49ca-8483-341e59200a9f) - -Você deve ver um bloco como esse: - -![AbTest Block](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/d0ee14cb-5ee4-4b3f-a56a-b5f6b4c84eb9) - -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: - -![Tracked Elements](https://ozksgdmyrqcxcwhnbepg.supabase.co/storage/v1/object/public/assets/530/3933da2b-e55b-4f75-892b-345fd5e1d3d1) - -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 - -Deployment Architecture - -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 - -Self-host Site Architecture - -### 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 - -Self-host Site and Envs Architecture - -### 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 - -Arquitetura Deployment - -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 - -Arquitetura Self-host 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 - -Arquitetura Self-host de Site e Envs - -### 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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -**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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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 ---- - - - -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); + }, +};