<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://produto.smartnx.io/blog</id>
    <title>Desenvolvimento SNX Blog</title>
    <updated>2026-04-08T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://produto.smartnx.io/blog"/>
    <subtitle>Desenvolvimento SNX Blog</subtitle>
    <icon>https://produto.smartnx.io/img/index-page/devdocs.svg</icon>
    <entry>
        <title type="html"><![CDATA[Migração para o Design System Próprio]]></title>
        <id>https://produto.smartnx.io/blog/migration-design-system</id>
        <link href="https://produto.smartnx.io/blog/migration-design-system"/>
        <updated>2026-04-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[O frontend da Smart NX está passando por um processo de evolução técnica e visual. Um dos marcos mais importantes é a transição oficial do uso de componentes do Ant Design (antd) para o nosso @design-system interno.]]></summary>
        <content type="html"><![CDATA[<p>O frontend da Smart NX está passando por um processo de evolução técnica e visual. Um dos marcos mais importantes é a transição oficial do uso de componentes do <strong>Ant Design (antd)</strong> para o nosso <strong>@design-system</strong> interno.</p>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="por-que-a-mudança">Por que a mudança?<a href="https://produto.smartnx.io/blog/migration-design-system#por-que-a-mudan%C3%A7a" class="hash-link" aria-label="Direct link to Por que a mudança?" title="Direct link to Por que a mudança?" translate="no">​</a></h2>
<p>Embora o Ant Design tenha sido fundamental para o crescimento inicial da nossa plataforma, decidimos internalizar nossos componentes por vários motivos estratégicos:</p>
<ol>
<li class=""><strong>Flexibilidade de Design</strong>: O Ant Design possui uma estrutura de estilização complexa que dificulta a personalização profunda para as necessidades específicas da Smart NX.</li>
<li class=""><strong>Performance</strong>: Componentes customizados e otimizados reduzem o bundle size e melhoram a velocidade de renderização.</li>
<li class=""><strong>Consistência de Marca</strong>: Com o nosso próprio Design System, garantimos 100% de alinhamento com a identidade visual da SNX em toda a plataforma.</li>
<li class=""><strong>Independência Técnica</strong>: Reduzimos a dependência de bibliotecas externas, permitindo atualizações de framework (como React ou Vite) com menos breaking changes.</li>
<li class=""><strong>Estabilidade e Performance</strong>: Identificamos vazamentos de memória (memory leaks) em alguns componentes complexos do Ant Design quando utilizados em fluxos de longa duração, o que será mitigado com nossas implementações internas mais leves.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="o-que-muda-para-o-desenvolvedor">O que muda para o desenvolvedor?<a href="https://produto.smartnx.io/blog/migration-design-system#o-que-muda-para-o-desenvolvedor" class="hash-link" aria-label="Direct link to O que muda para o desenvolvedor?" title="Direct link to O que muda para o desenvolvedor?" translate="no">​</a></h2>
<p>A partir de agora, <strong>não é permitido o uso de novos componentes do antd</strong> em novos desenvolvimentos. Sempre que precisar de um componente (botão, input, modal, etc.), ele deve ser importado do <code>@design-system</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_3l40" id="como-migrar">Como migrar?<a href="https://produto.smartnx.io/blog/migration-design-system#como-migrar" class="hash-link" aria-label="Direct link to Como migrar?" title="Direct link to Como migrar?" translate="no">​</a></h3>
<p>Para componentes existentes que ainda utilizam <code>antd</code>, a migração deve ser feita de forma gradual durante as janelas de refatoração ou manutenção de features.</p>
<p><strong>Antes (antd):</strong></p>
<div class="language-typescript codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-typescript codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> Button </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"antd"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Button type</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"primary"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Enviar</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">Button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<p><strong>Depois (@design-system):</strong></p>
<div class="language-typescript codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-typescript codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> Button </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"@design-system/Button"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Button variant</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"brand"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Enviar</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">Button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="benefícios-imediatos">Benefícios Imediatos<a href="https://produto.smartnx.io/blog/migration-design-system#benef%C3%ADcios-imediatos" class="hash-link" aria-label="Direct link to Benefícios Imediatos" title="Direct link to Benefícios Imediatos" translate="no">​</a></h2>
<ul>
<li class=""><strong>Temas</strong>: Suporte nativo a dark/light mode via <code>styled-components</code> sem a necessidade de hacks de CSS.</li>
<li class=""><strong>Tipagem</strong>: Todos os componentes do @design-system são rigorosamente tipados, seguindo a convenção de prefixo <code>I</code> para interfaces.</li>
<li class=""><strong>Acessibilidade</strong>: Foco em atributos ARIA e semântica HTML de forma nativa.</li>
</ul>
<p>Contamos com a colaboração de todos para manter nossa base de código moderna, robusta e alinhada com as melhores práticas de engenharia da Smart NX.</p>]]></content>
        <author>
            <name>Juathan Coelho Duarte</name>
        </author>
        <category label="design-system" term="design-system"/>
        <category label="antd" term="antd"/>
        <category label="migration" term="migration"/>
        <category label="frontend" term="frontend"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Integração do Storybook no Frontend]]></title>
        <id>https://produto.smartnx.io/blog/storybook-integration</id>
        <link href="https://produto.smartnx.io/blog/storybook-integration"/>
        <updated>2026-04-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Temos o prazer de anunciar que o Storybook agora está oficialmente integrado ao nosso fluxo de desenvolvimento de frontend. Esta ferramenta será fundamental para a criação, teste e documentação de componentes de interface de forma isolada.]]></summary>
        <content type="html"><![CDATA[<p>Temos o prazer de anunciar que o <strong>Storybook</strong> agora está oficialmente integrado ao nosso fluxo de desenvolvimento de frontend. Esta ferramenta será fundamental para a criação, teste e documentação de componentes de interface de forma isolada.</p>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="o-que-é-o-storybook">O que é o Storybook?<a href="https://produto.smartnx.io/blog/storybook-integration#o-que-%C3%A9-o-storybook" class="hash-link" aria-label="Direct link to O que é o Storybook?" title="Direct link to O que é o Storybook?" translate="no">​</a></h2>
<p>O Storybook é uma ferramenta de código aberto para construir componentes de UI e páginas de forma isolada. Ele simplifica o desenvolvimento de UI, testes e documentação ao permitir que os desenvolvedores visualizem estados de componentes sem a necessidade de rodar a aplicação completa.</p>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="por-que-estamos-utilizando">Por que estamos utilizando?<a href="https://produto.smartnx.io/blog/storybook-integration#por-que-estamos-utilizando" class="hash-link" aria-label="Direct link to Por que estamos utilizando?" title="Direct link to Por que estamos utilizando?" translate="no">​</a></h2>
<ol>
<li class=""><strong>Desenvolvimento Isolado</strong>: Crie componentes sem se preocupar com a lógica de negócio complexa ou dados de API pesados.</li>
<li class=""><strong>Documentação Viva</strong>: O Storybook serve como uma vitrine de todos os componentes disponíveis no @design-system, facilitando o reuso por outros desenvolvedores.</li>
<li class=""><strong>Testes de Estado</strong>: Visualize facilmente como um componente se comporta com diferentes estados (loading, error, empty, etc.).</li>
<li class=""><strong>Colaboração</strong>: Facilita a revisão de UI com designers e PMs.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_3l40" id="como-utilizar">Como utilizar?<a href="https://produto.smartnx.io/blog/storybook-integration#como-utilizar" class="hash-link" aria-label="Direct link to Como utilizar?" title="Direct link to Como utilizar?" translate="no">​</a></h2>
<p>Para rodar o Storybook localmente, utilize o comando:</p>
<div class="language-bash codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-bash codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token plain">pnpm storybook</span><br></div></code></pre></div></div>
<p>Ao criar um novo componente, lembre-se de sempre criar o arquivo <code>.stories.tsx</code> correspondente na pasta do componente.</p>
<h3 class="anchor anchorTargetStickyNavbar_3l40" id="exemplo-de-story">Exemplo de Story<a href="https://produto.smartnx.io/blog/storybook-integration#exemplo-de-story" class="hash-link" aria-label="Direct link to Exemplo de Story" title="Direct link to Exemplo de Story" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-typescript codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// src/components/Button/Button.stories.tsx</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> Meta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> StoryObj </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"@storybook/react"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> Button </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"./index"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> IButtonProps </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"./types"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> meta</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Meta</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">IButtonProps</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  title</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"Design System/Button"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  component</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Button</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">default</span><span class="token plain"> meta</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">Story</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> StoryObj</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">IButtonProps</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">export</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> Primary</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Story </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  args</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">    label</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"Clique aqui"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">    variant</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"primary"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<p>Com essa integração, damos mais um passo em direção à excelência técnica e à consistência visual da nossa plataforma.</p>]]></content>
        <author>
            <name>Juathan Coelho Duarte</name>
        </author>
        <category label="storybook" term="storybook"/>
        <category label="documentation" term="documentation"/>
        <category label="frontend" term="frontend"/>
        <category label="components" term="components"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Novas variáveis no front]]></title>
        <id>https://produto.smartnx.io/blog/2024/07/30/novas-vars-front</id>
        <link href="https://produto.smartnx.io/blog/2024/07/30/novas-vars-front"/>
        <updated>2024-07-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[🚨 foram adicionadas novas variáveis no .env do front e uma nova biblioteca, se forem rodar o front, não se esqueçam de adicionar as variáveis abaixo e atualizar a node_modules.]]></summary>
        <content type="html"><![CDATA[<p>🚨 foram adicionadas novas variáveis no .env do front e uma nova biblioteca, se forem rodar o front, não se esqueçam de adicionar as variáveis abaixo e atualizar a node_modules.</p>
<div class="language-js codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_Ct0O">/nx-suite-front-novo/.env</div><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-js codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">LOCAL</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_URL</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"http://unleash.smartnx.io:4242/api/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_CLIENT_KEY</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"default:development.unleash-insecure-frontend-api-token"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_ENVIRONMENT</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"development"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_APP_NAME</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"nxsuite-local"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">DEVELOPMENT</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_URL</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"https://api-nxsuite.smartnx.io:4242/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_CLIENT_KEY</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"*:development.b6340551919c6a4506505ceaf82460a32cc8423d70c2e360e324677d"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_ENVIRONMENT</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"development"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_APP_NAME</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"nxsuite-dev"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain">#</span><span class="token constant" style="color:rgb(100, 102, 149)">HOMOLOG</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_URL</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"https://api-nxsuite.smartnx.io:4242/"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_CLIENT_KEY</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"*:homolog.0e824db78d2f1610f662622202bf14181154e58a2b43edd1a5875e30"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_ENVIRONMENT</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"homolog"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#9CDCFE"><span class="token plain"># </span><span class="token constant" style="color:rgb(100, 102, 149)">VITE_UNLEASH_APP_NAME</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"nxsuite-homolog"</span><br></div></code></pre></div></div>]]></content>
        <author>
            <name>Matheus Telles</name>
        </author>
        <category label="frontend" term="frontend"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Alteração no script WhatsApp Business]]></title>
        <id>https://produto.smartnx.io/blog/2024/07/29/alteracao-script-wpp-business</id>
        <link href="https://produto.smartnx.io/blog/2024/07/29/alteracao-script-wpp-business"/>
        <updated>2024-07-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[🚨 Foi realizada uma alteração importante no script nx config-wpp-business, responsável por subir localmente o WhatsApp Business. Caso forem utilizá-lo, atualizem o Docker antes!]]></summary>
        <content type="html"><![CDATA[<p>🚨 Foi realizada uma alteração importante no script <code>nx config-wpp-business</code>, responsável por subir localmente o WhatsApp Business. Caso forem utilizá-lo, atualizem o Docker antes!</p>
<p>Para iniciar o Piratinha no ambiente local, basta executar esse script. Depois disso, inicie o <code>moorse-sbc</code> e, em seguida, entre no canal e salve para que ele seja vinculado ao webhook do parceiro.</p>]]></content>
        <author>
            <name>Flávio Jr</name>
        </author>
        <category label="nx-scripts" term="nx-scripts"/>
        <category label="whatsapp" term="whatsapp"/>
        <category label="backend" term="backend"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bem Vindo ao Dev Docs]]></title>
        <id>https://produto.smartnx.io/blog/2024/06/27/first-post</id>
        <link href="https://produto.smartnx.io/blog/2024/06/27/first-post"/>
        <updated>2024-06-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Esta é uma iniciativa do autor deste post, com a proposta de documentar qualquer processo que ajude o desenvolvedor da smartnx a seguir no seu dia a dia de trabalho, seja como utilizar uma ferramenta, escrever um trecho de codigo ou até mesmo recriar a roda, que seja! o intuito é ser um hub de informações do nosso time para que possamos centralizar tudo o que diz respeito ao nosso produto.]]></summary>
        <content type="html"><![CDATA[<p>Esta é uma iniciativa do autor deste post, com a proposta de documentar qualquer processo que ajude o desenvolvedor da smartnx a seguir no seu dia a dia de trabalho, seja como utilizar uma ferramenta, escrever um trecho de codigo ou até mesmo recriar a roda, que seja! o intuito é ser um hub de informações do nosso time para que possamos centralizar tudo o que diz respeito ao nosso produto.</p>
<p>"Aqui todos varrem o chão" <!-- -->🚀</p>]]></content>
        <author>
            <name>João Oliveira</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Criamos um script NX para o WhatsApp]]></title>
        <id>https://produto.smartnx.io/blog/2024/06/06/script-wpp</id>
        <link href="https://produto.smartnx.io/blog/2024/06/06/script-wpp"/>
        <updated>2024-06-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Pensando em tornar mais fácil a vida de quem lida com a Zenvia (WhatsApp) e envio de HSMs, criamos um script para simplificar a configuração do ambiente local.]]></summary>
        <content type="html"><![CDATA[<p>Pensando em tornar mais fácil a vida de quem lida com a Zenvia (WhatsApp) e envio de HSMs, criamos um script para simplificar a configuração do ambiente local.</p>
<p>Siga o passo a passo a seguir</p>
<p>Como funciona?</p>
<p><strong>1° Atualize o projeto</strong>: Dê um pull na pasta do Docker para garantir que você tenha a versão mais recente do ambiente.</p>
<p><strong>2° Execute o script <code>nx config-wpp</code></strong>: Ele vai configurar o ngrok, iniciar os serviços necessários, atualizar o banco de dados e as variáveis do arquivo .env, deixando seu ambiente pronto para rodar o WhatsApp e enviar HSMs localmente.</p>
<p><strong>3° Inicie a API e o serviço do Zenvia-SBC</strong>: Depois de rodar o script, inicie a API e o serviço do Zenvia-SBC com o comando node app.js.</p>
<p><strong>4° Registre o número desejado no canal</strong>: Com o ambiente configurado, registre o número desejado para os testes no canal de atendimento para garantir o roteamento correto das mensagens.</p>
<p><strong>5° SEJA FELIZ!</strong> <!-- -->😄</p>
<p>Em resumo, o nx config-wpp foi desenvolvido para simplificar sua vida e tornar os testes com WhatsApp mais fáceis e ágeis. Se surgir alguma dúvida ou precisar de ajuda, só me procurar!</p>
<p>TMJ <!-- -->❤️</p>]]></content>
        <author>
            <name>Daniel Cabral</name>
        </author>
        <category label="nx-scripts" term="nx-scripts"/>
        <category label="whatsapp" term="whatsapp"/>
        <category label="backend" term="backend"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Atualização Front-End]]></title>
        <id>https://produto.smartnx.io/blog/2024/05/23/atualizacao-front</id>
        <link href="https://produto.smartnx.io/blog/2024/05/23/atualizacao-front"/>
        <updated>2024-05-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Nos próximos dias irá subir uma atualização pra develop (PR já está aberta) com uma grande atualização no nosso front-end.]]></summary>
        <content type="html"><![CDATA[<p>Nos próximos dias irá subir uma atualização pra develop <em>(PR já está aberta)</em> com uma grande atualização no nosso front-end.</p>
<p>Nessa atualização, foi alterada a ferramenta que utilizamos para realizar o build e o inicio local do front-end. Nós utilizavamos o <code>create-react-app</code>, que é uma ferramente disponibilizada pelo próprio react, mas que de acordo com a própria documentação do react não é o recomendado.</p>
<p>A partir de agora, utilizamos o <strong>vite</strong>, na versão 4 (a versão LTS não funciona no node 16). Com essa alteração, teremos que ter cuidado com algumas pequenasa alterações que o vite exige para o seu funcionamento.</p>
<h3 class="anchor anchorTargetStickyNavbar_3l40" id="declaração-de-env">DECLARAÇÃO DE .ENV<a href="https://produto.smartnx.io/blog/2024/05/23/atualizacao-front#declara%C3%A7%C3%A3o-de-env" class="hash-link" aria-label="Direct link to DECLARAÇÃO DE .ENV" title="Direct link to DECLARAÇÃO DE .ENV" translate="no">​</a></h3>
<p>Antes utilizávamos o prefixo <code>REACT_APP_</code> para declarar alguma variável de ambiente no nosso .env, mas a partir de agora iremos utilziar o prefixo <strong><code>VITE_</code></strong> no lugar.</p>
<p>Para utilizar essas variáveis de ambiente como padrão do node utilizávamos o <code>process.env</code>, mas a partir de agora o vite só enxerga as variáveis de ambiente utilizando o <strong><code>import.meta.env</code></strong></p>
<h3 class="anchor anchorTargetStickyNavbar_3l40" id="importação-de-svgs-como-componentes">IMPORTAÇÃO DE SVG'S COMO COMPONENTES<a href="https://produto.smartnx.io/blog/2024/05/23/atualizacao-front#importa%C3%A7%C3%A3o-de-svgs-como-componentes" class="hash-link" aria-label="Direct link to IMPORTAÇÃO DE SVG'S COMO COMPONENTES" title="Direct link to IMPORTAÇÃO DE SVG'S COMO COMPONENTES" translate="no">​</a></h3>
<p>O vite utiliza um plugin pra conseguirmos importar os <u>.svg</u> como componente, mas pra continuaar funcional devemos mudar a forma de importar:</p>
<ul>
<li class="">Antes</li>
</ul>
<div class="language-js codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_Ct0O">/nx-suite-front-novo/.env</div><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-js codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token keyword module" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ReactComponent</span><span class="token imports"> </span><span class="token imports keyword module" style="color:rgb(86, 156, 214)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">CalendarIcon</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'../../assets/icons/calendarIcon.svg'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<ul>
<li class="">Depois</li>
</ul>
<div class="language-js codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_Ct0O">/nx-suite-front-novo/.env</div><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-js codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token plain"> </span><span class="token keyword module" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">CalendarIcon</span><span class="token plain"> </span><span class="token keyword module" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'../../assets/icons/calendarIcon.svg?react'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></div></code></pre></div></div>
<hr>
<div class="theme-admonition theme-admonition-danger admonition_Wvo_ alert alert--danger"><div class="admonitionHeading_gPdI"><span class="admonitionIcon_SLhJ"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>danger</div><div class="admonitionContent_pn4d"><h3 class="anchor anchorTargetStickyNavbar_3l40" id="importante">IMPORTANTE<a href="https://produto.smartnx.io/blog/2024/05/23/atualizacao-front#importante" class="hash-link" aria-label="Direct link to IMPORTANTE" title="Direct link to IMPORTANTE" translate="no">​</a></h3></div></div>
<p>Assim que a PR for aprovada e mergeada na develop e vocês forem iniciar a utilização do novo build, deverão seguir esses passos abaixo:</p>
<ul>
<li class="">
<p>Deletar a pasta <!-- -->📁<!-- --> <strong>node_modules</strong> presente na pasta raiz do projeto</p>
</li>
<li class="">
<p>Instalar as dependências atualizadas com o comando:</p>
</li>
</ul>
<div class="language-js codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_Ct0O">/nx-suite-front-novo</div><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-js codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token plain"> yarn install</span><br></div></code></pre></div></div>
<ul>
<li class="">Copiar as variáveis de ambiente atualizadas disponíveis no <code>.env.example</code>, selecionar o ambiente que deseja rodar o front e deixar somente descomentado as variáveis do respectivo ambiente.</li>
</ul>
<blockquote>
<p>Caso queira trocar de ambiente, agora não precisará parar a execução do front para fazer isso, basta atualizar o <code>.env</code> e salvar, automaticament o vite irá reiniciar com as novas variáveis carregadas.</p>
</blockquote>
<p>Rodar o front com o comando abaixo e ser feliz <!-- -->😃</p>
<div class="language-js codeBlockContainer_OOMM theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_Ct0O">/nx-suite-front-novo</div><div class="codeBlockContent_MpH6"><pre tabindex="0" class="prism-code language-js codeBlock_izKt thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_AbUe"><div class="token-line" style="color:#9CDCFE"><span class="token plain"> yarn start</span><br></div></code></pre></div></div>
<p>Caso queira entender melhor sobre o vite e dar uma lida na documentação, o link está abaixo, vale ressaltar que esse link é da v4, a atual do vite é a v5 que ainda não utilizamos.</p>
<p>Qualquer outra dúvida, podem me procurar <!-- -->❤️</p>
<p><a href="https://v4.vitejs.dev/guide/" target="_blank" rel="noopener noreferrer" class="">https://v4.vitejs.dev/guide/</a></p>]]></content>
        <author>
            <name>Matheus Rubio</name>
        </author>
        <category label="frontend" term="frontend"/>
    </entry>
</feed>