{
  "version": "1.0",
  "generated": "2026-08-07T21:04:04.148Z",
  "site": {
    "title": "Matheus Costa — UX/UI Designer e Desenvolvedor Front-end",
    "description": "UX/UI Designer e Desenvolvedor Front-end em São José do Rio Preto/SP. Sites, landing pages e e-commerces com estratégia, estética e clareza.",
    "url": "https://matheuscostadesign.github.io"
  },
  "entries": [
    {
      "id": "0382542adb603d5b",
      "url": "https://matheuscostadesign.github.io/blog/comandos-basicos-de-git",
      "title": "Comandos básicos de Git — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Git\n\n## Comandos básicos de Git\n\nMatheus Costa 03 de Maio de 2023\n\nInicializar repositório Git\n\ngit init\nCriar arquivo .gitignore\n\nnpx gitignore node\nVer os arquivos que serão adicionados\n\ngit status\nAdicionar todas mudanças (stage)\n\ngit add .\nComitar e escrever o que foi feito\n\ngit commit -m \"feat: primeiro commit\"\nGarantir que está na branch “main”\n\ngit branch -M main\nLinkar a pasta local com a pasta remota do repositório no Github\n\ngit remote add origin https://github.com/matheuscostadesign/aluratube.git\nMandar os arquivos pra pasta remota (Push to Remote)\n\ngit push -u origin main\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste post alguns dos comandos básicos de Git",
      "keywords": [
        "blog",
        "main",
        "pasta",
        "repositório",
        "gitignore",
        "arquivos",
        "commit",
        "branch",
        "remota",
        "github"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/comandos-basicos-de-git"
      }
    },
    {
      "id": "053d328d2832f3b0",
      "url": "https://matheuscostadesign.github.io/blog/como-remover-o-fundo-de-uma-imagem-com-css",
      "title": "Como remover o fundo de uma imagem com CSS — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Frontend\n\n## Como remover o fundo de uma imagem com CSS\n\n*\nMatheus Costa 15 de Setembro de 2023\n\n## Imagens com fundo transparente no CSS\n\n- Sabia que é possível remover o fundo de uma imagem via código CSS?\n\n- Basta adicionar a propriedade “mix-blend-mode” como “multiply”\n\n- Veja o exemplo abaixo:\n\n## HTML\n\n&#x3C;img src=\"/assets/logo.png\" class=\"logo\" />\n\n## CSS\n\n.logo {\nmix-blend-mode: multiply;\n}\n\n## React\n\n- Essa solução é viável para quem precisa ter um controle da imagem **tanto em temas claros, quanto em temas escuros** (dark/light mode*).\n\n- Nesse exemplo abaixo a ideia era que **a imagem permanecesse com suas cores originais no modo claro e que no modo escuro fosse aplicado a transparência nas partes brancas da imagem e que todo seu conteúdo fosse alterado para a cor branca.**\n\n- Veja abaixo o exemplo:\n\n&#x3C;Box\nsx={\nmixBlendMode: themeName === \"dark\" ? \"plus-lighter\" : \"multiply\",\n}\n>\n&#x3C;img\nsrc={img}\nwidth={props.width}\nheight={props.height}\nstyle={\nfilter:\nthemeName === \"dark\"\n? \"grayscale(1) contrast(1) invert(1) brightness(130%)\"\n: \"none\",\n}\n/>\n&#x3C;/Box>\n\n>\n*Observações:*\n\n- O componente React está envolvido uma [Box do MUI](https://mui.com/material-ui/react-box/), mas poderia ser uma div com style.\n\n- Quanto maior o brilho brightness mais a imagem fica branca;\n\n- Quanto maior o contraste contrast mais pixelada a imagem fica;\n\n- A chamada ao themeName === \"dark\" é um *context* global do React;\n\n## Conclusão\n\n- E isso resolveu o problema!\n\n- A imagem fica com suas cores originais no modo claro, porém no modo escuro é aplicada a transparência e a cor é alterada ajustada para branco em toda foto.\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda como remover o fundo de uma imagem com CSS",
      "keywords": [
        "imagem",
        "dark",
        "modo",
        "blog",
        "fundo",
        "multiply",
        "exemplo",
        "abaixo",
        "logo",
        "react"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-remover-o-fundo-de-uma-imagem-com-css"
      }
    },
    {
      "id": "05c7704a9828846e",
      "url": "https://matheuscostadesign.github.io/blog/2024/06/2024-06-05-scrcpy",
      "title": "Como espelhar celular Android no PC com scrcpy da Genymobile",
      "content": "Aprenda neste post como espelhar o celular Android no PC Windows com o scrcpy.\n\n# Espelhando a tela (Android)\n\n- Exemplo de uso 👇\n\n<img src=\"/assets/images/posts/2024/06/screenshot.jpg\" alt=\"Exemplo de uso\">\n\n## 1) Download da aplicação\n\nFaça o download da última versão do [**scrcpy**](https://github.com/Genymobile/scrcpy/releases)\n\n- [📱 Download Genymobile / scrcpy](https://github.com/Genymobile/scrcpy/releases)\n\n## 2) Configurações no aparelho\n\nConecte o dispositivo Android no computador **via cabo USB;**\n\nNo aparelho Android, habilite o **modo de desenvolvedor** e **permita a depuração USB**;\n\nPara finalizar, basta executar o arquivo **\"scrcpy.exe\"**\n\n## 3) Personalizando scrcpy\n\nTambém é possível realizar algumas configurações adicionais no scrcpy\n\nPor exemplo:\n\n- Desligar a tela do celular automaticamente ao abrir o programa\n- Configurar a posição inicial de abertura (posição x e y)\n- Entre outras configurações...\n\nPara fazer isso basta criar um arquivo chamado `scrcpy.bat` na raíz da pasta onde está localizado o `scrcpy.exe` com os seguintes comandos:\n\n```bat\nscrcpy -d -S -w --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --always-on-top --window-x=1400 --window-y=60\n```\n\nE toda vez que for espelhar o celular, basta executar esse arquivo `.bat`\n\n## 4) Documentação completa\n\nSe precisar de mais alguma configuração, basta consultar toda documentação aqui:\n\n- [https://github.com/Genymobile/scrcpy?tab=readme-ov-file#user-documentation](https://github.com/Genymobile/scrcpy?tab=readme-ov-file#user-documentation)",
      "description": "Aprenda neste post como espelhar o celular Android no PC Windows com scrcpy",
      "keywords": [
        "scrcpy",
        "genymobile",
        "android",
        "https",
        "github",
        "basta",
        "celular",
        "exemplo",
        "download",
        "configurações"
      ],
      "metadata": {
        "title": "Como espelhar celular Android no PC com scrcpy da Genymobile",
        "description": "Aprenda neste post como espelhar o celular Android no PC Windows com scrcpy",
        "slug": "como-espelhar-celular-android-no-pc-com-scrcpy-genymobile",
        "author": "Matheus Costa",
        "categories": "Tecnologia",
        "image": "/assets/images/posts/2024/06/como-espelhar-celular-android-no-pc-com-scrcpy-genymobile.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2024/06/2024-06-05-scrcpy.md"
      }
    },
    {
      "id": "05ed34a894a3b7cf",
      "url": "https://matheuscostadesign.github.io/blog/2024/04/2024-04-12-axios",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs (Part 3)",
      "content": "- Envolva o arquivo de entrada do app o com componente **AxiosInterceptor**:\n\n<hr>\n\n```tsx\nimport * as React from \"react\";\n\nexport default function App() {\n  return (\n    <AuthProvider>\n      <AxiosInterceptor>\n        <StatusBarCustom />\n        <Routes />\n      </AxiosInterceptor>\n    </AuthProvider>\n  );\n}\n```\n\n### Criando uma tela de sessão expirada\n\n- Tela sessão expirada:\n\n<hr>\n\n```tsx\n...\nimport { BackHandler, View } from \"react-native\";\nimport { Button, Text } from \"react-native-paper\";\n\nexport default function SessionExpired({ route }) {\n  const { t } = useTranslation();\n  const currentRoute = useRoute();\n\n  const {\n    setUser,\n    setToken,\n    setRefreshToken,\n    setTokenDecoded,\n    setRefreshTokenDecoded,\n  } = useAuth();\n\n  // Limpa dados do storage e direciona pra tela de login\n  async function clearAllSession() {\n\t\tstorage.clearAll();\n    setUser(null);\n    setToken(null);\n    setRefreshToken(null);\n    setTokenDecoded(null);\n    setRefreshTokenDecoded(null);\n  }\n\n  // Ação botão \"voltar\" físico Android\n  useFocusEffect(\n    useCallback(() => {\n      const onBackPress = () => {\n        if (route.name === currentRoute.name) {\n          clearAllSession();\n          return true;\n        } else {\n          return false;\n        }\n      };\n      BackHandler.addEventListener(\"hardwareBackPress\", onBackPress);\n      return () =>\n        BackHandler.removeEventListener(\"hardwareBackPress\", onBackPress);\n    }, [route]),\n  );",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axiosinterceptor"
      ],
      "metadata": {
        "title": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "slug": "axios-interceptor-consumindo-varias-apis",
        "author": "Matheus Costa",
        "categories": "Frontend",
        "image": "/assets/images/posts/2024/04/axios-interceptor-consumindo-varias-apis.jpeg",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 4,
        "sourcePath": "blog/2024/04/2024-04-12-axios.md"
      }
    },
    {
      "id": "06bd31ba35f105f0",
      "url": "https://matheuscostadesign.github.io/blog/como-criar-apps-com-react-native",
      "title": "Como criar apps com React Native — Blog Matheus Costa (Part 4)",
      "content": "-\n**O estado fornece memória aos componentes;**\n\n-\nEle é útil para lidar com **dados que mudam** com o **tempo** ou que vêm da **interação do usuário;**\n\n-\nÉ possível adicionar estado a um componente React usando o hook useState;\n\n-\nuseState é um hook que permite adicionar estado aos componentes da função;\n\nimport React, { useState } from \"react\";\nimport { Button, Text, View } from \"react-native\";\n\nconst Cat = (props) => {\nconst [isHungry, setIsHungry] = useState(true);\n\nreturn (\n&#x3C;View>\n&#x3C;Text>\nI am {props.name}, and I am {isHungry ? \"hungry\" : \"full\"}!\n&#x3C;/Text>\n&#x3C;Button\nonPress={() => {\nsetIsHungry(false);\n}}\ndisabled={!isHungry}\ntitle={isHungry ? \"Pour me some milk, please!\" : \"Thank you!\"}\n/>\n&#x3C;/View>\n);\n};\n\nconst Cafe = () => {\nreturn &#x3C;Cat name=\"Munkustrap\" />;\n};\n\nexport default Cafe;\n\n### 2.4.5) Fragmentos\n\n-\nAs tags “vazias” &#x3C;> e &#x3C;/> acima são bits do JSX chamadas de [fragmentos](https://reactjs.org/docs/fragments.html).\n\n-\nFragmentos permitem envolver todo código sem precisar incluir um elemento extra e desnecessário, como uma View, por exemplo.\n\nconst Cafe = () => {\nreturn (\n&#x3C;>\n&#x3C;Cat name=\"Munkustrap\" />\n&#x3C;Cat name=\"Spot\" />\n&#x3C;/>\n);\n};\n\n## 2.5) Código específico Android/iOS\n\n-\nCom React Native é possível **implementar componentes visuais separados** p/ Android e iOS;\n\n-\nHá duas maneiras de separar o código por plataforma:\n\n**Usando o *Platform Module**;*\n\n- **Usando extensões de arquivos específicas;**\n\n### **Platform Module**\n\n-\nEssa opção é recomendada **para pequenas partes de código;**\n\n-\nÉ possível usar a lógica de detecção para implementar o código específico da plataforma;\n\n#### **Platform:**\n\nimport { Platform, StyleSheet } from \"react-native\";\n\nconst styles = StyleSheet.create({\nheight: Platform.OS === \"ios\" ? 200 : 100,\n});\n\n#### **Platform.select - pode ser: 'ios' | 'android' | 'native' | 'default'**\n\nimport { Platform, StyleSheet } from \"react-native\";",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "android",
        "para",
        "native",
        "text",
        "react-native",
        "https",
        "javascript",
        "const",
        "view"
      ],
      "metadata": {
        "chunkIndex": 3,
        "totalChunks": 5,
        "sourcePath": "/blog/como-criar-apps-com-react-native"
      }
    },
    {
      "id": "06ea8b06a2896d05",
      "url": "https://matheuscostadesign.github.io/blog/2024/05/2024-05-31-links-externos",
      "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia (Part 2)",
      "content": "3. **Selecionar todos os links**: `document.querySelectorAll(\"a\")` seleciona todos os elementos `<a>` na página.\n\n4. **Iterar sobre os links**: `forEach` é usado para iterar sobre cada link selecionado.\n\n5. **Verificar se o link é externo**:\n\n   - `href && !href.includes(currentDomain) && href.startsWith(\"http\")`: Isso verifica se o link tem um atributo `href`, se o `href` não contém o domínio atual e se o `href` começa com \"http\" (para garantir que é um link completo).\n\n6. **Adicionar `target=\"_blank\"`**: Se o link for externo, `link.setAttribute(\"target\", \"_blank\")` adiciona o atributo `target` com valor `_blank`, fazendo com que o link abra em uma nova guia.\n\n7. **Adicionar `rel=\"noopener noreferrer\"`**: O atributo `“rel=noopener noreferrer”` é usado para abrir links externos em uma nova janela e evitar que a página de destino acesse a página de origem.\n\n### Como usar:\n\n1. Adicione o código JavaScript acima ao seu arquivo JavaScript principal ou diretamente dentro de uma tag `<script>` no final do seu arquivo HTML, antes da tag de fechamento `</body>`.\n\n```html\n<!DOCTYPE html>\n<html lang=\"pt-br\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>Exemplo</title>\n  </head>\n  <body>\n    <!-- Seu conteúdo aqui -->\n    <script>\n      document.addEventListener(\"DOMContentLoaded\", function () {\n        const currentDomain = window.location.hostname;\n        const links = document.querySelectorAll(\"a\");\n        links.forEach((link) => {\n          const href = link.getAttribute(\"href\");\n          if (\n            href &&\n            !href.includes(currentDomain) &&\n            href.startsWith(\"http\")\n          ) {\n            link.setAttribute(\"target\", \"_blank\");\n            link.setAttribute(\"rel\", \"noopener noreferrer\");\n          }\n        });\n      });\n    </script>\n  </body>\n</html>\n```\n\nDessa forma, todos os links externos na sua página abrirão em uma nova guia automaticamente.\n\nComente aqui em baixo se esta dica te ajudou 👊",
      "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
      "keywords": [
        "link",
        "href",
        "links",
        "página",
        "todos",
        "target",
        "blank",
        "para",
        "domínio",
        "nova"
      ],
      "metadata": {
        "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia",
        "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
        "slug": "como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2024/05/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2024/05/2024-05-31-links-externos.md"
      }
    },
    {
      "id": "09315efd67960db0",
      "url": "https://matheuscostadesign.github.io/blog/2024/06/2024-06-10-acesso-camera",
      "title": "Como habilitar acesso à câmera em sites sem certificado HTTPS/SSL",
      "content": "Já tentou fazer o acesso à câmera do seu dispositivo pelo browser e a permissão de acesso a mesma não apareceu?\n\nIsso provavelmente pode ser porque seu site não tem o certificado HTTPS/SSL, e o navegador bloqueia o acesso.\n\nMas existe uma configuração para ativar essa opção nos principais navegadores da web\n\nEssa configuração é útil para sites locais (_localhost / 127.0.0.1_), em modo de desenvolvimento/testes.\n\nVeja neste artigo como ativar.\n\n### Ativando no Chrome (desktop/mobile)\n\n<img src=\"/assets/images/posts/2024/06/insecure-origins.jpg\" alt=\"Insecure origins\">\n\n1. Digite o link abaixo na barra de navegação do Chrome:\n\n   - `chrome://flags/#unsafely-treat-insecure-origin-as-secure`\n\n2. Ative a opção:\n\n   - **\"Insecure origins treated as secure\"**\n\n3. Insira as URLs que deseja\n\n   - Por exemplo: `http://10.0.0.242:5173`\n\n4. Reinicie navegador e pronto!\n\n### No Safari\n\n#### Desktop\n\n1. Habilitar modo de desenvolvedor\n\n2. Acessar na página:\n   - `Desenvolvedor` > `Mostrar inspetor web` > Tocar no ícone: `Ajustes do Dispositivo` > Habilitar: `WebRTC - Permitir captura de mídia em sites pouco seguros`\n\n<img src=\"/assets/images/posts/2024/06/como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl.jpg\" alt=\"Safari\">\n\n#### Mobile\n\n\\*\\* **_Opção só está disponível a partir do iOS 13_**\n\n1. Com o site aberto, toque no ícone `“AA”` no canto superior esquerdo.\n\n1. Em seguida, toque em:\n   - `Ajustes do site` > `Câmera` > `Permitir`\n\n<div style=\"display: flex; gap: 24px; margin-top: 24px\">\n  <img src=\"/assets/images/posts/2024/06/ios-1.jpg\" alt=\"Safari\">\n  <img src=\"/assets/images/posts/2024/06/ios-2.jpg\" alt=\"Safari\">\n<div>",
      "description": "Aprenda neste post como habilitar acesso à câmera em sites sem certificado HTTPS/SSL",
      "keywords": [
        "2024",
        "assets",
        "images",
        "posts",
        "safari",
        "acesso",
        "site",
        "opção",
        "chrome",
        "câmera"
      ],
      "metadata": {
        "title": "Como habilitar acesso à câmera em sites sem certificado HTTPS/SSL",
        "description": "Aprenda neste post como habilitar acesso à câmera em sites sem certificado HTTPS/SSL",
        "slug": "como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl",
        "author": "Matheus Costa",
        "categories": "Tecnologia",
        "image": "/assets/images/posts/2024/06/como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl.webp",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2024/06/2024-06-10-acesso-camera.md"
      }
    },
    {
      "id": "0bc0789d36b814c2",
      "url": "https://matheuscostadesign.github.io/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites",
      "title": "Melhores ferramentas gratuitas para criar documentação em 2026 — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Melhores ferramentas gratuitas para criar documentação em 2026\n\nMatheus Costa 04 de Março de 2026\n\nConfira neste post alguns links de ferramentas gratuitas (open-source)para criação e manutenção de documentações de projetos.\n\n## Lista de ferramentas de Documentação\n\n- Veja a lista de algumas ferramentas para criar documentação\n\n## 1) [FumaDocs](https://www.fumadocs.dev/)\n\n[](https://www.fumadocs.dev/)\nFumaDocs é um framework poderoso e moderno para criação de documentações, construído sobre Next.js. Ele oferece uma experiência de desenvolvimento excelente com suporte nativo a MDX, busca integrada e temas personalizáveis, permitindo que equipes criem documentações bonitas e performáticas com facilidade.\n\n## 2) [Starlight](https://starlight.astro.build/pt-br/)\n\n[](https://starlight.astro.build/pt-br/)\nStarlight é um tema oficial do Astro voltado para documentações, projetado para ser rápido, acessível e fácil de usar. Com suporte a internacionalização, modo escuro, busca integrada e componentes prontos para uso, ele é uma das melhores opções para quem já utiliza o ecossistema Astro e quer criar uma documentação completa e profissional.\n\n## 3) [Docusaurus](https://docusaurus.io/pt-BR/)\n\n[](https://docusaurus.io/pt-BR/)\nDocusaurus é uma ferramenta open source criada pelo Meta para criação de sites de documentação. Com suporte a Markdown e MDX, versionamento de conteúdo, internacionalização e uma grande comunidade ativa, é uma das escolhas mais populares entre projetos de código aberto que precisam de documentação robusta e escalável.\n\n## 4) [Wiki.js](https://js.wiki/)",
      "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
      "keywords": [
        "para",
        "https",
        "documentação",
        "wiki",
        "ferramentas",
        "documentações",
        "fumadocs",
        "suporte",
        "starlight",
        "astro"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites"
      }
    },
    {
      "id": "0cd00a4a8ae85938",
      "url": "https://matheuscostadesign.github.io/blog/2022/03/2022-03-18-whatsapp",
      "title": "Como enviar dados do formulário HTML para o Whatsapp (Part 1)",
      "content": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.\n\n## Exemplo/Demonstração da funcionalidade:\n\n- Veja o exemplo abaixo de como irá funcionar o envio:\n\n<p class=\"codepen\" data-height=\"600\" data-default-tab=\"html,result\" data-slug-hash=\"jOYWppy\" data-pen-title=\"Enviar dados do formulário HTML para o Whatsapp\" data-user=\"matheuscostadesign\" style=\"height: 600px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\">\n  <span>See the Pen <a href=\"https://codepen.io/matheuscostadesign/pen/jOYWppy\">\n  Enviar dados do formulário HTML para o Whatsapp</a> by Matheus Costa (<a href=\"https://codepen.io/matheuscostadesign\">@matheuscostadesign</a>)\n  on <a href=\"https://codepen.io\">CodePen</a>.</span>\n</p>\n<script async src=\"https://cpwebassets.codepen.io/assets/embed/ei.js\"></script>\n\nVocê também pode acessar o exemplo clicando no link abaixo:\n\n- <a href=\"https://matheuscostadesign.github.io/enviar-para-whatsapp/\" target=\"_blank\" rel=\"noopener noreferrer\">matheuscostadesign.github.io/enviar-para-whatsapp/</a>\n\nCódigo fonte completo:\n\n- <a href=\"https://github.com/matheuscostadesign/enviar-para-whatsapp\" target=\"_blank\" rel=\"noopener noreferrer\">github.com/matheuscostadesign/enviar-para-whatsapp</a>\n\n## Como fazer isso no meu formulário?\n\n### 1) Adicionar onsubmit no form\n\n- Você vai precisar primeiramente passar uma função Javascript no `onsubmit` da tag `form` do HTML:\n\n```html\n<form action=\"#\" method=\"get\" onsubmit=\"abrirWhatsapp()\">\n  <!-- seus campos/inputs aqui -->\n  <button type=\"submit\">Enviar dados p/ Whatsapp</button>\n</form>\n```\n\n### 2) Nomear cada input com um ID exclusivo\n\n- Agora será necessário passar um `ID` exclusivo cada um dos seus campos do formulário, por exemplo:",
      "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
      "keywords": [
        "html",
        "nome",
        "telefone",
        "formulário",
        "matheuscostadesign",
        "https",
        "email",
        "codepen",
        "input",
        "dados"
      ],
      "metadata": {
        "title": "Como enviar dados do formulário HTML para o Whatsapp",
        "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
        "slug": "como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/como-enviar-dados-do-formulário-html-para-o-whatsapp.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2022/03/2022-03-18-whatsapp.md"
      }
    },
    {
      "id": "0f5e852ff7f2c6ab",
      "url": "https://matheuscostadesign.github.io/blog/como-gerar-o-certificado-ssl-https-de-forma-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual — Blog Matheus Costa (Part 3)",
      "content": "- **[](https://www.sslshopper.com/ssl-checker.html)[https://www.sslshopper.com/ssl-checker.html](https://www.sslshopper.com/ssl-checker.html)**\n\n-\nForçar o uso do HTTPS via web.config/.htaccess (redirect)\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let",
      "keywords": [
        "dominio",
        "https",
        "certbot",
        "para",
        "acme-challenge",
        "certificado",
        "well-known",
        "37mksvjmxkiu-wkmsglxg7h-el15kfaddvs6xka4",
        "ssl-checker",
        "subdominio"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "/blog/como-gerar-o-certificado-ssl-https-de-forma-manual"
      }
    },
    {
      "id": "0f5ed70542920a0b",
      "url": "https://matheuscostadesign.github.io",
      "title": "Matheus Costa — UX/UI Designer e Desenvolvedor Front-end (Part 1)",
      "content": "## Frontend Developer\n\nLevo ideias do Figma ao código, criando interfaces modernas,\nintuitivas e funcionais.\n\n[Vamos conversar](https://api.whatsapp.com/send?phone=5517991005132&text=Ol%C3%A1%2C%20Matheus!%20Vi%20seu%20site%20e%20gostaria%20de%20conversar%20sobre%20um%20projeto.)\n[](https://linkedin.com/in/mattheuscosta) [](https://www.instagram.com/matheuscosta.design/) [](https://api.whatsapp.com/send?phone=5517991005132&text=Ol%C3%A1%2C%20Matheus!%20Vi%20seu%20site%20e%20gostaria%20de%20conversar.)\n\n- WordPress\n- Elementor\n- Webflow\n- Figma\n- Framer\n- HTML5\n- CSS3\n- JavaScript\n- TypeScript\n- React\n- React Native\n- Next.js\n- Astro\n- Claude\n\n- WordPress\n- Elementor\n- Webflow\n- Figma\n- Framer\n- HTML5\n- CSS3\n- JavaScript\n- TypeScript\n- React\n- React Native\n- Next.js\n- Astro\n- Claude\n\n- WordPress\n- Elementor\n- Webflow\n- Figma\n- Framer\n- HTML5\n- CSS3\n- JavaScript\n- TypeScript\n- React\n- React Native\n- Next.js\n- Astro\n- Claude\n\n- WordPress\n- Elementor\n- Webflow\n- Figma\n- Framer\n- HTML5\n- CSS3\n- JavaScript\n- TypeScript\n- React\n- React Native\n- Next.js\n- Astro\n- Claude\n\n## O que vamos criar juntos?\n\nLanding pages e sites institucionais sob medida, unindo design\nintuitivo, alta velocidade e a melhor experiência para o usuário.\n\n[Landing Page Página única de alta conversão, feita sob medida para anúncios, tráfego pago e captação de leads. Quero uma](https://api.whatsapp.com/send?phone=5517991005132&text=Ol%C3%A1%2C%20vim%20atrav%C3%A9s%20do%20site!%20Tenho%20interesse%20em%20uma%20Landing%20Page.%20Pode%20me%20ajudar%3F)\n\n[Site Site institucional completo e dinâmico, desenvolvido para transmitir autoridade e fortalecer sua marca. Quero um si](https://api.whatsapp.com/send?phone=5517991005132&text=Ol%C3%A1%2C%20vim%20atrav%C3%A9s%20do%20site!%20Tenho%20interesse%20em%20um%20Site.%20Pode%20me%20ajudar%3F)",
      "description": "UX/UI Designer e Desenvolvedor Front-end em São José do Rio Preto/SP. Sites, landing pages e e-commerces com estratégia, estética e clareza.",
      "keywords": [
        "figma",
        "react",
        "para",
        "https",
        "20site",
        "design",
        "whatsapp",
        "send",
        "phone",
        "5517991005132"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/"
      }
    },
    {
      "id": "12b2e0bf3c379e3d",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 6)",
      "content": "Depois, basta importar o componente e o **React Native selecionará automaticamente o arquivo correto com base na plataforma em execução:**\n\n```jsx\nimport BigButton from \"./BigButton\";\n```\n\n---\n\n# 3) Design\n\n## 3.1) Style\n\n- Todos os componentes principais aceitam a propriedade `style`\n\n- Os nomes dos estilos e valores correspondem à maneira como o CSS funciona na web;\n\n- Porém os nomes são escritos no **formato _camelCase_**, por exemplo:\n\n- `backgroundColor` ao invés de `background-color`;\n\n- A medida que o componente cresce em complexidade é mais limpo usar `StyleSheet.create`\n\n```jsx\nimport React from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nconst styles = StyleSheet.create({\n  container: {\n    marginTop: 50,\n  },\n  red: {\n    color: \"red\",\n  },\n});\n\nconst LotsOfStyles = () => {\n  return (\n    <View style={styles.container}>\n      <Text style={styles.red}>just red</Text>\n    </View>\n  );\n};\n\nexport default LotsOfStyles;\n```\n\n## 3.2) Largura e altura (Width/Height)\n\n- Todas as dimensões no React Native **não precisam de unidade (px, rem, etc)**\n\n- As dimensões representam pixels independentes da densidade.\n\n```js\nimport React from \"react\";\nimport { View } from \"react-native\";\n\nexport function FixedDimensionsBasics() {\n  return (\n    <View>\n      <View\n        style={{\n          width: 100,\n          height: 100,\n          backgroundColor: \"red\",\n        }}\n      />\n    </View>\n  );\n}\n```\n\n- Também é possível utilizar valores percentuais no estilo do componente\n\n- As dimensões percentuais também **requerem um elemento pai** com o tamanho definido;\n\n```js\nimport React from \"react\";\nimport { View } from \"react-native\";",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 5,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "13d40651681039d5",
      "url": "https://matheuscostadesign.github.io/blog/padroes-de-mensagens-de-commit",
      "title": "Padrões de mensagens de commit — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Git\n\n## Padrões de mensagens de commit\n\n*\nMatheus Costa 08 de Agosto de 2023\n\n>\nAprenda neste artigo algumas convenções/padronizações das mensagens de commits para o Git/Github.\n\n## Padronização de Commits\n\n### Formato:\n\n&#x3C;tipo>(escopo): Assunto\n&#x3C;corpo>\nTipo\nOs valores permitidos para o tipo são:\n\n- feat: Nova funcionalidade*;\n\n- fix : *Correção de um bug*;\n\n- refactor: *Alterações em geral*;\n\n- style: *Estilização e layout*;\n\n- docs: *Algo relacionado a documentação*;\n\n- perf: *Melhorias de performance*;\n\n- chore: *Build, configs, deploy e afins*;\n\n- test: *Adicionar ou corrigir testes*;\n\n### Escopo\n\nInforme qual escopo (projeto) está sendo alterado. Valores permitidos para o escopo:\n\n- adm: FreedomNEO - ADM\n\n- app: FreedomNEO - APP Portaria\n\n- frq: FreedomNEO - Franqueados\n\n- www: FreedomNEO - Landing-page\n\n### Assunto\n\n- Máximo de 50 caracteres\n\n- Assunto deve estar no *imperativo*\n\n### Corpo\n\n- *Opcional*\n\n- Deve conter o o que e o por que ao invés de conter o como foi feito\n\n- Se for necessário contextualizar o commit ou explicar o porquê das mudanças, fique a vontade!\n\n### Exemplo de Commit:\n\nrefactor(app): Bloqueia edição da placa do veículo\nInclui trava para o usuário não conseguir editar a placa do veículo\n\n## Referências\n\n- Essa padronização das mensagens tem como base o [Karma Commit](https://karma-runner.github.io/1.0/dev/git-commit-msg.html)\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste artigo algumas convenções/padronizações das mensagens de commits para o Git/Github.",
      "keywords": [
        "commit",
        "para",
        "escopo",
        "freedomneo",
        "blog",
        "mensagens",
        "tipo",
        "assunto",
        "commits",
        "github"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/padroes-de-mensagens-de-commit"
      }
    },
    {
      "id": "18024769fd77f210",
      "url": "https://matheuscostadesign.github.io/blog/como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples",
      "title": "Como enviar dados do formulário HTML para o Whatsapp — Blog Matheus Costa (Part 2)",
      "content": "&#x3C;script>\nfunction abrirWhatsapp() {\nvar nome = document.getElementById(\"nome\").value; // nome é o id do input no HTML\nvar telefone = document.getElementById(\"telefone\").value; // telefone é o id do input no HTML\nvar email = document.getElementById(\"email\").value; // e assim vai\nvar msg = document.getElementById(\"msg\").value;\n\nvar url = \"https://wa.me/5517999999999?text=\" // Seu numero do Whatsapp com DDD\n+ \"*Formulário de Contato*\" + \"%0a\" // Mensagem personalizada\n+ \"%0a\" // Quebra de linha\n+ \"*Nome*: \" + nome + \"%0a\" // Dados do formulário\n+ \"*Telefone*: \" + telefone + \"%0a\"\n+ \"*E-mail*: \" + email + \"%0a\"\n+ \"*Mensagem*: \" + msg;\nwindow.open(url, '_blank').focus();\n}\n&#x3C;/script>\nGostou da dica? Sabia dela ou já usou em algum projeto?\n\nTem alguma dica para acrescentar?\n\nComenta aí o que achou.\n\nValeeu!\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
      "keywords": [
        "nome",
        "telefone",
        "formulário",
        "matheuscostadesign",
        "email",
        "html",
        "https",
        "input",
        "dados",
        "whatsapp"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples"
      }
    },
    {
      "id": "1b52221539fbd0a8",
      "url": "https://matheuscostadesign.github.io/blog/axios-interceptor-consumindo-varias-apis",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs — Blog Matheus Costa (Part 2)",
      "content": "// Se o token expirar, navega p/ tela de sessão expirada\nif (timeExpiryRefreshToken &#x26;&#x26; currentTime >= timeExpiryRefreshToken) {\nnavigation.navigate(\"SessionExpired\");\nreturn Promise.reject(error);\n}\n\nreturn apiAuth()\n.get(\"/tokenrefresh\", {\nheaders: { Authorization: refresh },\n})\n.then(async (responseRefresh) => {\nconst newAccessToken = responseRefresh.data.accesstoken;\nconst newRefreshToken = responseRefresh.data.refreshtoken;\n\nconst newTokenDecoded = jwtDecode(newAccessToken) as JWTPayload;\nconst newRefreshTokenDecoded = jwtDecode(\nnewRefreshToken\n) as JWTPayloadRefresh;\n\nconst newTimeExpireJWT = newRefreshTokenDecoded.exp;\nconst newTimeExpire = new Date(\nnewTimeExpireJWT * 1000\n).toString();\n\nstorage.set(\"token\", newAccessToken);\nstorage.set(\"tokenRefresh\", newRefreshToken);\nstorage.set(\"tokenRefreshExp\", newTimeExpire);\n\nsetToken(newAccessToken);\nsetRefreshToken(newRefreshToken);\nsetTokenDecoded(newTokenDecoded);\nsetRefreshTokenDecoded(newRefreshTokenDecoded);\n\noriginalReq.headers[\"Authorization\"] = newAccessToken;\n\nreturn instance(originalReq);\n})\n.catch((refreshError) => {\nreturn Promise.reject(refreshError);\n});\n} else {\nreturn Promise.reject(error);\n}\n}\n);\n}, []);\n\nreturn children;\n};\n\nexport default AxiosInterceptor;\n\n### Envolvendo a aplicação\n\n- Envolva o arquivo de entrada do app o com componente **AxiosInterceptor**:\n\n---\n\nimport * as React from \"react\";\n\nexport default function App() {\nreturn (\n&#x3C;AuthProvider>\n&#x3C;AxiosInterceptor>\n&#x3C;StatusBarCustom />\n&#x3C;Routes />\n&#x3C;/AxiosInterceptor>\n&#x3C;/AuthProvider>\n);\n}\n\n### Criando uma tela de sessão expirada\n\n- Tela sessão expirada:\n\n---\n\n...\nimport { BackHandler, View } from \"react-native\";\nimport { Button, Text } from \"react-native-paper\";\n\nexport default function SessionExpired({ route }) {\nconst { t } = useTranslation();\nconst currentRoute = useRoute();\n\nconst {\nsetUser,\nsetToken,\nsetRefreshToken,\nsetTokenDecoded,\nsetRefreshTokenDecoded,\n} = useAuth();",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axios"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "/blog/axios-interceptor-consumindo-varias-apis"
      }
    },
    {
      "id": "1b67e77f4e0f8c94",
      "url": "https://matheuscostadesign.github.io/blog/2025/06/2025-06-18-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers (Part 5)",
      "content": "## Benefícios da semântica HTML para UX Writing\n\n1. **Acessibilidade:** Elementos semânticos garantem que o conteúdo seja compreensível por usuários com deficiências, alinhando-se às diretrizes do WCAG.\n\n2. **SEO:** Motores de busca, como o Google, favorecem páginas com HTML semântico, pois entendem melhor a estrutura do conteúdo.\n\n3. **Manutenção:** Um código semântico é mais fácil de atualizar e manter, beneficiando equipes de desenvolvimento.\n\n4. **Consistência:** A semântica promove uma experiência uniforme, especialmente em projetos colaborativos.\n\n## Limitações e desafios\n\nEmbora poderosa, a semântica HTML exige aprendizado e colaboração interdisciplinar. UX Writers podem enfrentar dificuldades iniciais para entender as nuances do código, e a resistência de equipes de desenvolvimento em adotar práticas semânticas pode ser um obstáculo.\n\nNo entanto, investir em treinamentos e ferramentas de colaboração, como design systems, pode superar essas barreiras.\n\n## Conclusão\n\nA semântica HTML é uma aliada indispensável para UX Writers que desejam criar experiências digitais acessíveis e eficazes.\n\nAo compreender e aplicar elementos como cabeçalhos, botões e rótulos, os escritores podem garantir que seus textos sejam claros para usuários e sistemas automatizados.\n\nIntegrar texto e código é mais do que unir disciplinas — é construir experiências digitais mais humanas, acessíveis e significativas. Quando UX Writing se alia ao desenvolvimento, o resultado é uma interface que comunica com clareza e acolhe cada pessoa que a utiliza.\n\n---\n\n_Este artigo foi escrito para a disciplina de projeto em UX Design na pós-graduação do [Senac São Paulo](https://www.sp.senac.br/cursos/pos-graduacao/ux-design)._",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "html",
        "como",
        "semântica",
        "conteúdo",
        "exemplo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "title": "Guia rápido de semântica HTML para UX Writers",
        "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
        "slug": "guia-rapido-de-semantica-html-para-ux-writers",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/06/guia-rapido-de-semantica-html-para-ux-writers.webp",
        "comments": "true",
        "chunkIndex": 4,
        "totalChunks": 5,
        "sourcePath": "blog/2025/06/2025-06-18-ux-writers.md"
      }
    },
    {
      "id": "1bc51d070b61d358",
      "url": "https://matheuscostadesign.github.io/blog/guia-rapido-de-semantica-html-para-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers — Blog Matheus Costa (Part 5)",
      "content": "-\n**Colaboração com desenvolvedores:** UX Writers devem trabalhar junto com desenvolvedores para garantir que o texto seja implementado com as tags corretas. Ferramentas como Figma podem incluir anotações sobre tags recomendadas.\n\n-\n**Documentação clara:** Crie guias ou design systems que especifiquem como os textos devem ser codificados. Por exemplo, indique que mensagens de erro devem sempre usar &#x3C;p> e botões devem usar &#x3C;button>.\n\n-\n**Foco na clareza:** Escreva textos que, quando combinados com HTML semântico, sejam diretos e fáceis de interpretar por humanos e máquinas.\n\n## Benefícios da semântica HTML",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "como",
        "html",
        "semântica",
        "exemplo",
        "conteúdo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "chunkIndex": 4,
        "totalChunks": 5,
        "sourcePath": "/blog/guia-rapido-de-semantica-html-para-ux-writers"
      }
    },
    {
      "id": "1c63e7d041841251",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 8)",
      "content": "- O React Native fornece uma maneira unificada de gerenciar imagens e outros ativos de mídia em seus aplicativos Android e iOS;\n\n### Imagens Estáticas\n\n- Para adicionar uma imagem estática, basta importar o componente `Image`\n\n```jsx\nimport { Image } from \"react-native\";\n```\n\n- Depois é só chamar o componente de imagem e inserir o caminho do arquivo:\n\n```jsx\n<Image source={require(\"./src/assets/imagem.png\")} />\n```\n\n_Observações:_\n\n- Podemos usar os sufixos `@2x`e `@3x`para **fornecer imagens para diferentes densidades de tela**.\n\n```\n└── img\n    ├── check.png\n    ├── check@2x.png\n    └── check@3x.png\n```\n\n- E chamar a imagem normalmente:\n\n```jsx\n<Image source={require(\"./img/check.png\")} />\n```\n\n### Imagens na Rede\n\n- Também podemos exibir imagens que não estão no projeto\n- Porém, ao contrário dos recursos estáticos, **precisamos especificar as dimensões da imagem;**\n\n```js\n// CORRETO\n<Image source={{uri: 'https://reactjs.org/logo-og.png'}}\n       style={{width: 400, height: 400}} />\n\n// ERRADO\n<Image source={{uri: 'https://reactjs.org/logo-og.png'}} />\n```\n\n### Imagens de fundo (Background-Image)\n\n- Para exibir imagens de fundo podemos usar o componente `<ImageBackground>`;\n- Ele tem as mesmas propriedades que o componente `<Image>`\n- Exemplo simples:\n\n```js\n<ImageBackground source={...} style={{width: '100%', height: '100%'}}>\n  <Text>Inside</Text>\n</ImageBackground>\n```\n\n- Exemplo completo com imagem na rede:\n\n```js\nimport React from \"react\";\nimport { ImageBackground, StyleSheet, Text, View } from \"react-native\";\n\nconst image = { uri: \"https://reactjs.org/logo-og.png\" };\n\nconst App = () => (\n  <View style={styles.container}>\n    <ImageBackground source={image} resizeMode=\"cover\" style={styles.image} />\n  </View>\n);\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n  },\n  image: {\n    flex: 1,\n    justifyContent: \"center\",\n  },\n});\n\nexport default App;\n```\n\n## 3.5) Cores",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 7,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "1e3f56878deb89f0",
      "url": "https://matheuscostadesign.github.io/blog/guia-rapido-de-semantica-html-para-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Design\n\n## Guia rápido de semântica HTML para UX Writers\n\n*\nMatheus Costa 18 de Junho de 2025\n\nEste artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica. Ao explorar o uso adequado das tags, aprenda como estruturar o conteúdo de maneira clara, promovendo acessibilidade e elevando a qualidade da experiência do usuário.\n\n## O que é semântica HTML?\n\nA semântica HTML é a prática de usar tags e elementos de forma que reflitam o significado e a estrutura do conteúdo, indo além da simples apresentação visual.\n\nPara UX Writers, que são responsáveis por criar textos claros e impactantes em interfaces digitais, **entender a semântica HTML é essencial para garantir que o conteúdo seja acessível, compreensível por sistemas automatizados e otimizado para a experiência do usuário.**\n\n## Por que o HTML semântico é essencial para UX e SEO?\n\nO HTML semântico utiliza tags específicas — como &#x3C;header>, &#x3C;article>, &#x3C;nav>, e &#x3C;aside> — para descrever o propósito do conteúdo, em vez de apenas sua aparência.\n\nPor exemplo, usar &#x3C;h1> para um título principal não apenas define o tamanho da fonte, mas também indica a hierarquia mais importante na página.\n\nIsso é crucial para tecnologias assistivas, como leitores de tela, que interpretam a estrutura do conteúdo para usuários com deficiência visual.\n\nJakob Nielsen*, um dos pioneiros em usabilidade, enfatiza que a clareza estrutural reduz o esforço cognitivo do usuário ao buscar e processar informações” (Nielsen, 2005).\n\nNo contexto do UX Writing, a semântica HTML amplifica essa clareza, permitindo que o texto seja compreendido tanto por humanos quanto por máquinas, como motores de busca e assistentes de voz.",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "como",
        "html",
        "semântica",
        "exemplo",
        "conteúdo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 5,
        "sourcePath": "/blog/guia-rapido-de-semantica-html-para-ux-writers"
      }
    },
    {
      "id": "1ea2de882f3f15f5",
      "url": "https://matheuscostadesign.github.io/blog/guia-basico-de-comandos-terminal-ssh-bash-putty",
      "title": "Guia básico de comandos terminal SSH/Bash/Putty — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Tecnologia\n\n## Guia básico de comandos terminal SSH/Bash/Putty\n\nMatheus Costa 02 de Maio de 2023\n\nAprenda neste post alguns dos comandos de terminal mais utilizados no dia a dia\n\n## Comandos básicos para terminal\n\n- Localizar pasta:cd nome_da_pasta\n\n- Voltar pasta/diretório: cd ..\n\n- Listar conteúdo do diretório: ls\n\n- Descompactar ZIP:unzip nome_do_arquivo.zip\n\n- Apagar pasta inteira: rm -rf nome_da_pasta\n\n- Apagar arquivo específico: rm nome_do_arquivo1.txt\n\n- Apagar todos arquivos, menos a pasta: rm -rf *\n\n- Limpar comandos: clear\n\n## Backup via SSH\n\n- Acessar a raiz da pasta com o PuTTY\n\n- Executar o comando:\ntar -czvf site.tar.gz public_html &#x26;&#x26; mv site.tar.gz public_html &#x26;&#x26; ls -lha public_html\n\n- O arquivo site.tar.gz será criado na raiz do site\n\n- Basta acessar o domínio e fazer o download.\n\nExemplo: https://safebras.com.br/site.tar.gz\n\n- Comando para excluir o arquivo: rm -f public_html/site.tar.gz\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste post alguns dos comandos de terminal mais utilizados no dia a dia",
      "keywords": [
        "pasta",
        "site",
        "comandos",
        "nome",
        "arquivo",
        "public",
        "html",
        "blog",
        "terminal",
        "apagar"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/guia-basico-de-comandos-terminal-ssh-bash-putty"
      }
    },
    {
      "id": "1ecb791d5369caac",
      "url": "https://matheuscostadesign.github.io/blog/3",
      "title": "Blog (Página 3) — Matheus Costa (Part 1)",
      "content": "Blog (Página 3) — Matheus Costa\n\n[Fazer orçamento no WhatsApp](https://wa.me/5517991005132)\n[](https://linkedin.com/in/mattheuscosta) [](https://github.com/matheuscostadesign) [](https://www.instagram.com/matheuscosta.design/) [](https://www.behance.net/matheuscostadesign)\n\n## Artigos, Dicas & Insights\n\nConteúdos práticos e experiências sobre desenvolvimento web, UI/UX e\ndesign para elevar o nível dos seus projetos.\n\n[Front-end Como enviar dados do formulário HTML para o Whatsapp Veja neste artigo como enviar os dados digitados no formu](/blog/como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples)\n\n[Front-end Como alterar menu header após scroll com Javascript Veja neste artigo como alterar o menu/cabeçalho/header do](/blog/como-alterar-menu-header-apos-scroll-com-javascript)\n\n[Front-end, Deploy Como gerar o certificado SSL/HTTPS de forma manual Veja neste artigo como gerar os arquivos de certifi](/blog/como-gerar-o-certificado-ssl-https-de-forma-manual)\n\n[Front-end Como alterar a cor do texto selecionado de uma página... Aprenda neste artigo como alterar a cor do texto sele](/blog/como-alterar-a-cor-do-texto-selecionado-de-uma-pagina-com-css)\n\n[Front-end Configurações importantes para adicionar no arquivo .... Veja neste artigo configurações importantes de se adi](/blog/configuracoes-importantes-para-adicionar-no-arquivo-htaccess)\n\n[Front-end Atualizar ano atual automaticamente com Javascript Veja neste artigo como mostrar o ano atual automaticamente](/blog/como-atualizar-ano-atual-do-site-automaticamente-com-javascript)\n\n[Front-end Disponibilize imagens em formatos de última geração Veja neste artigo como resolver o problema no resultado do](/blog/como-resolver-o-erro-disponibilize-imagens-em-formatos-de-ultima-geracao)\n\n[Front-end, UX/UI Ferramenta online para otimização de imagens JPEG Ferramenta útil para otimizar imagens em JPG/JPEG Ler](/blog/como-otimizar-imagens-jpeg)",
      "description": "Dicas e conhecimentos sobre desenvolvimento web, frontend, React, Astro e design UX/UI por Matheus Costa.",
      "keywords": [
        "como",
        "blog",
        "front-end",
        "neste",
        "artigo",
        "https",
        "veja",
        "para",
        "alterar",
        "imagens"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/3"
      }
    },
    {
      "id": "1f344b06beafef45",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 7)",
      "content": "const PercentageDimensionsBasics = () => {\n  return (\n    <View style={{ height: \"100%\" }}>\n      <View\n        style={{\n          height: \"10%\",\n          backgroundColor: \"#212121\",\n        }}\n      />\n      <View\n        style={{\n          width: \"66%\",\n          height: \"90%\",\n          backgroundColor: \"#555555\",\n        }}\n      />\n    </View>\n  );\n};\n\nexport default PercentageDimensionsBasics;\n```\n\n## 3.3) Layout com Flexbox\n\n- Por padrão **todos os componentes do React Native são _flex_ e direcionados por _coluna;_**\n\n- **Na web o padrão é por linha (row), um ao lado do outro;**\n\n- Já no React Native, **o padrão é por coluna (column), um em baixo do outro;**\n  - **`display: flex`**\n  - `flexDirection: column`\n- Para que um componente seja expandido e reduzido dinamicamente com base no espaço disponível podemos utilizar `flex: 1`;\n\n<cite>Um componente só pode expandir para preencher o espaço disponível se seu pai tiver dimensões maiores que `0`.</cite>\n\n### Exemplo de layout com Flexbox:\n\n```js\nimport React from \"react\";\nimport { View } from \"react-native\";\n\nconst FlexDimensionsBasics = () => {\n  return (\n    <View style={{ flex: 1 }}>\n      <View style={{ flex: 1, backgroundColor: \"powderblue\" }} />\n      <View style={{ flex: 2, backgroundColor: \"skyblue\" }} />\n      <View style={{ flex: 3, backgroundColor: \"steelblue\" }} />\n    </View>\n  );\n};\n\nexport default FlexDimensionsBasics;\n```\n\n- Todas as outras propriedades do Flexbox estão disponíveis no React Native:\n  - Flex-Direction: `column` `row` `columnReverse` `rowReverse`\n  - Layout-Direction: `LTR` `RTL`\n  - Justify-Content: \\*\\*\\*\\*`flexStart` `flexEnd` `center` `spaceBetween` `spaceAround` `spaceEvenly`\n  - Align-Items: `stretch` `flex-start` `flex-end` `center` `baseline`\n  - Align-Self e Align-Content\n  - Flex-Wrap, Flex-Basis, Grow e Shrink\n  - Row-Gap, Column-Gap e Gap\n  - Posição absoluta e relativa: `relative` `absolute`\n\n## 3.4) Imagens",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 6,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "20b13e068002306d",
      "url": "https://matheuscostadesign.github.io/blog/como-criar-apps-com-react-native",
      "title": "Como criar apps com React Native — Blog Matheus Costa (Part 2)",
      "content": "npx react-native start\n*o Metro é muito parecido com o webpack (React para web) — só que p/ para apps — ele é um empacotador de JavaScript.\n\n### Atalhos\n\nPodemos personalizar os atalhos para executar o app em modo de desenvolvimento;\n\nPara isso, basta editar o arquivo package.json.\n\n\"scripts\": {\n\"android\": \"react-native run-android\",\n\"ios\": \"react-native run-ios\",\n\"lint\": \"eslint .\",\n\"start\": \"react-native start\",\n\"dev\": \"react-native start --reset-cache\",\n\"test\": \"jest\"\n}\nNo exemplo acima foi adicionado o atalho “dev” com —reset-cache.\n\nAssim podemos iniciar o modo de desenvolvimento com:\n\nnpm run dev\n\n---\n\n## 2) O básico\n\n## 2.1) O que é o React Native?\n\nReact Native é uma **estrutura híbrida** e de código aberto para criar apps para *Android* e *iOS* usando [**React**](https://reactjs.org/);\n\nPara aprender React Native é necessário saber os **fundamentos de Javascript, HTML e CSS.**\n\n- [**Fundamentos de Javascript**](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript)\n\n- [**Uma reintrodução ao JavaScript**](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Language_overview)\n\n## 2.2) Desenvolvimento Nativo x Híbrido\n\n-\nPara criar apps nativos em **Android** utilizamos a linguagem **Java ou Kotlin;**\n\n-\nPara criar apps nativos para **iOS** é necessário codificar em **Swift ou Objective-C;**\n\n-\nO React Native é uma **estrutura híbrida** e utiliza a linguagem **Javascript** para criar as visualizações correspondentes do Android e iOS em tempo de execução;\n\n## 2.3) Componentes principais\n\n- O React Native possui muitos componentes principais, como por exemplo:\n\nReact Native\n\nAndroid\n\niOS\n\nWeb (similaridade)\n\n&#x3C;View>\n\n&#x3C;ViewGroup>\n\n&#x3C;UIView>\n\n&#x3C;div>\n\n&#x3C;Text>\n\n&#x3C;TextView>\n\n&#x3C;UITextView>\n\n&#x3C;p>\n\n&#x3C;Image>\n\n&#x3C;ImageView>\n\n&#x3C;UIImageImage>\n\n&#x3C;img>\n\n&#x3C;ScrollView>\n\n&#x3C;ScrollView>\n\n&#x3C;UIScrollView>\n\n&#x3C;div>\n\n&#x3C;TextInput>\n\n&#x3C;EditText>\n\n&#x3C;UITextField>\n\n&#x3C;input type=\"text\">",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "android",
        "para",
        "native",
        "text",
        "react-native",
        "https",
        "javascript",
        "const",
        "view"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 5,
        "sourcePath": "/blog/como-criar-apps-com-react-native"
      }
    },
    {
      "id": "2385499ea4f0fc0a",
      "url": "https://matheuscostadesign.github.io",
      "title": "Matheus Costa — UX/UI Designer e Desenvolvedor Front-end (Part 2)",
      "content": "[Design UI/UX Prototipagem, pesquisa de usuários, design system e interfaces navegáveis com foco em usabilidade e estétic](https://api.whatsapp.com/send?phone=5517991005132&text=Ol%C3%A1%2C%20vim%20atrav%C3%A9s%20do%20site!%20Tenho%20interesse%20em%20Design%20UI%2FUX.%20Pode%20me%20ajudar%3F)\n\n## Artigos & Insights\n\nConteúdos práticos sobre frontend, UI/UX e desenvolvimento web para\nelevar o nível dos seus projetos.\n\n[Front-end Melhores ferramentas gratuitas para criar documen... Links de algumas ferramentas gratuitas para criação de do](/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites)\n\n[Design Guia rápido de semântica HTML para UX Writers Este artigo é um guia prático para UX Writers que desejam entender](/blog/guia-rapido-de-semantica-html-para-ux-writers)\n\n[Design O que é o Figma Buzz? Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a... Ler artigo](/blog/o-que-e-o-figma-buzz)\n\n[Ver todos os artigos](/blog)",
      "description": "UX/UI Designer e Desenvolvedor Front-end em São José do Rio Preto/SP. Sites, landing pages e e-commerces com estratégia, estética e clareza.",
      "keywords": [
        "figma",
        "react",
        "para",
        "https",
        "20site",
        "design",
        "whatsapp",
        "send",
        "phone",
        "5517991005132"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/"
      }
    },
    {
      "id": "2395e19838f7b47b",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 1)",
      "content": "> Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos **Android e iOS** utilizando React Native.\n\n# 1) Configuração do ambiente\n\n## 1.2) Quais as ferramentas de desenvolvimento?\n\n- [Node.js](https://nodejs.org/)\n- [Git](https://git-scm.com/downloads)\n- [Visual Studio Code](https://code.visualstudio.com/)\n  - _Extensões:_ [React Native Tools](https://marketplace.visualstudio.com/items?itemName=msjsdiag.vscode-react-native) _e_ [Expo Tools](https://marketplace.visualstudio.com/items?itemName=byCedric.vscode-expo)\n- [Android Studio](https://developer.android.com/studio)\n- [Genynobile Scrcpy](https://github.com/Genymobile/scrcpy) (Para espelhar o smartphone no computador)\n\n## 1.3) Criando um app em React Native (com Expo)\n\n### Criando o app\n\n```bash\nnpx create-expo-app NomeApp\n```\n\nO comando acima irá criar um o aplicativo utilizando o [Expo](https://expo.dev/).\n\n### Executando o app\n\n```bash\ncd NomeApp\nnpx expo start\n```\n\n_Observações:_\n\n- Instalar o app **Expo Go** (Android/iOS\\*)\n- Ler o QR-Code gerado através do aplicativo Expo Go;\n  - \\*no iOS basta ler o QR-Code com o aplicativo de câmera;\n\n## 1.4) Criando um app em React Native (por CLI)\n\n_Observações:_\n\n- Ambiente: **Windows**\n- Dispositivo: **Android**\n- Conectar o dispositivo Android no computador via cabo USB;\n- No aparelho, **habilitar o modo de desenvolvedor** e **permitir a depuração USB**;\n- Ao conectar o celular no computador, **permitir a transferência de arquivos**;\n\n### Criando o app\n\n```bash\nnpx react-native@latest init NomeApp\n```\n\nO comando acima irá criar todos os arquivos necessários para o app;\n\n### Iniciando o app\n\n```bash\ncd NomeApp\nnpx react-native run-android\n```\n\nO aplicativo será instalado automaticamente no aparelho Android\n\nTambém é possível iniciar com Metro\\* separadamente com o comando:\n\n```bash\nnpx react-native start\n```",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "23a13b4aa64618f8",
      "url": "https://matheuscostadesign.github.io/blog/como-otimizar-imagens-jpeg",
      "title": "Ferramenta online para otimização de imagens JPEG — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end, UX/UI\n\n## Ferramenta online para otimização de imagens JPEG\n\nMatheus Costa 14 de Janeiro de 2022\n\nFerramenta útil para otimizar imagens em JPG/JPEG\n\n[](https://jpeg.rocks/)[https://jpeg.rocks/](https://jpeg.rocks/)\n\n[Ver todos os artigos](/blog)",
      "description": "Ferramenta útil para otimizar imagens em JPG/JPEG",
      "keywords": [
        "jpeg",
        "blog",
        "https",
        "rocks",
        "ferramenta",
        "para",
        "imagens",
        "2022",
        "voltar",
        "front-end"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-otimizar-imagens-jpeg"
      }
    },
    {
      "id": "2bf08087c25ea637",
      "url": "https://matheuscostadesign.github.io/blog/como-gerar-o-certificado-ssl-https-de-forma-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end, Deploy\n\n## Como gerar o certificado SSL/HTTPS de forma manual\n\n*\nMatheus Costa 21 de Fevereiro de 2022\n\nVeja neste artigo como gerar os arquivos de certificado SSL da Let’s Encrypt para seu site de forma manual e gratuita.\n\nEste procedimento é necessário para hospedagens em servidores com versões antigas do Windows (Windows Server 2008, por exemplo) ou hospedagens que não suportam e/ou não tem integração com a Let’s Encrypt para renovar o certificado automaticamente.\n\nEntão o procedimento será realizado manualmente, beleza?!\n\nE de 3 em 3 meses será necessário refazer todo processo.\n\n## Processo no servidor de hospedagem\n\n-\nCriar as pastas **“.well-known”** e **“acme-challenge”** na raiz do site (e também nos subdomínios)\n\nEx: dominio.com.br/.well-known/acme-challenge/...\n\n- Ex: subdominio.dominio.com.br/.well-known/acme-challenge/...\n\n-\nCriar o arquivo **“web.config”** com a seguinte estrutura XML na pasta **“acme-challenge”** (e também nos subdomínios) - **PARA SERVIDOR WINDOWS**\n\n&#x3C;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&#x3C;configuration>\n&#x3C;system.webServer>\n&#x3C;staticContent>\n&#x3C;mimeMap fileExtension=\".\" mimeType=\"text/plain\" />\n&#x3C;/staticContent>\n&#x3C;/system.webServer>\n&#x3C;/configuration>\n\n## Geração do certificado e dos arquivos\n\n-\nFazer a instalação do Certbot no Windows\n\n**[](https://github.com/certbot/certbot/releases/download/v1.23.0/certbot-beta-installer-win32.exe)[https://dl.eff.org/certbot-beta-installer-win32.exe](https://dl.eff.org/certbot-beta-installer-win32.exe)**\n\n-\nAbrir **Prompt de Comando** como administrador\n\n-\nExecutar o comando:\n\ncertbot certonly —manual\n\n-\nSe for a primeira utilização, informe um email e aceite os termos de uso\n\n-\nInsira o nome do domínio (Se for incluir os subdominios, fazer a separação por espaço ou vírgula)*\n\nEx 1: subdominio.dominio.com.br www.dominio.com.br dominio.com.br\n\n- Ex 2: subdominio.dominio.com.br,www.dominio.com.br,dominio.com.br,",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let",
      "keywords": [
        "dominio",
        "https",
        "certbot",
        "para",
        "acme-challenge",
        "certificado",
        "well-known",
        "37mksvjmxkiu-wkmsglxg7h-el15kfaddvs6xka4",
        "ssl-checker",
        "subdominio"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "/blog/como-gerar-o-certificado-ssl-https-de-forma-manual"
      }
    },
    {
      "id": "2ebd459d00f37ac8",
      "url": "https://matheuscostadesign.github.io/blog/axios-interceptor-consumindo-varias-apis",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Frontend\n\n## Exemplo prático Axios Interceptor consumindo várias APIs\n\nMatheus Costa 12 de Abril de 2024\n\nExemplo prático de como configurar o Axios Interceptor consumindo várias APIs\n\n### Configurando o serviço\n\n- Arquivo services/apis.tsx\n\n---\n\nimport axios, { AxiosInstance } from \"axios\";\n\ntype ICustomInstace = AxiosInstance &#x26; {\ndefaults: {\ncustomBaseURL?: string;\n};\n};\n\nexport const instance: ICustomInstace = axios.create({});\n\nexport const apiExemplo1 = () => {\ninstance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO1;\nreturn instance;\n};\n\nexport const apiExemplo2 = () => {\ninstance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO2;\nreturn instance;\n};\n\nexport const apiExemplo3 = () => {\ninstance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO3;\nreturn instance;\n};\n\n### Criando componente funcional\n\n- Arquivo services/apis.interceptor.tsx como um componente funcional:\n\n---\n\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useEffect } from \"react\";\nimport { apiAuth, instance } from \"./apis\";\nimport { storage } from \"./storage\";\n\nconst AxiosInterceptor = ({ children }) => {\nconst { setToken, setRefreshToken, setTokenDecoded, setRefreshTokenDecoded } =\nuseAuth();\nconst navigation = useNavigation();\n\nuseEffect(() => {\n// Intercepta a requisição (request)\ninstance.interceptors.request.use((request) => {\nreturn request;\n});\n\n// Intercepta a resposta (response)\ninstance.interceptors.response.use(\n(response) => {\nreturn response;\n},\nasync (error) => {\nconst originalReq = error.config;\nif (\nerror.response.status === 401 &#x26;&#x26;\noriginalReq &#x26;&#x26;\n!originalReq._retry\n) {\noriginalReq._retry = true;\n\nconst refresh = storage.getString(\"tokenRefresh\");\n\nif (!refresh) {\nreturn Promise.reject(error);\n}\n\nconst storagedTokenRefresh = storage.getString(\"tokenRefreshExp\");\nconst currentTime = new Date();\nconst timeExpiryRefreshToken = new Date(storagedTokenRefresh);",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axios"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "/blog/axios-interceptor-consumindo-varias-apis"
      }
    },
    {
      "id": "2ed18419b6e60bbd",
      "url": "https://matheuscostadesign.github.io/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites",
      "title": "Melhores ferramentas gratuitas para criar documentação em 2026 — Blog Matheus Costa (Part 2)",
      "content": "[](https://js.wiki/)\nWiki.js é uma plataforma de wiki moderna, open source e extremamente poderosa, construída com Node.js. Ela oferece uma interface de edição rica, suporte a múltiplos bancos de dados, autenticação via diferentes provedores e armazenamento de conteúdo em Git, tornando-a ideal para equipes que precisam de uma solução completa e auto-hospedada para gestão de conhecimento e documentação interna.\n\n[Ver todos os artigos](/blog)",
      "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
      "keywords": [
        "para",
        "https",
        "documentação",
        "wiki",
        "ferramentas",
        "documentações",
        "fumadocs",
        "suporte",
        "starlight",
        "astro"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites"
      }
    },
    {
      "id": "32443c61775c0c48",
      "url": "https://matheuscostadesign.github.io/blog/como-formatar-um-curriculo-de-maneira-adequada",
      "title": "Como formatar um currículo de maneira adequada — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Carreira\n\n## Como formatar um currículo de maneira adequada\n\nMatheus Costa 31 de Maio de 2024\n\n## Nunca sou chamado para uma vaga…\n\nAgradecemos seu interesse na vaga de UX Designer em Brasil. Infelizmente, não daremos prosseguimento à sua candidatura, mas agradecemos o tempo dispensado e o interesse na empresa tal…\n\nSabia que o seu CV pode estar sendo ignorado? Muitas vezes, nós, designers, queremos criar um currículo que reflete a profissão, fazer algo complemente personalizado, com uma tipografia moderna, cores, gráficos, etc…\n\nPorém, ao aplicar para vagas de UX Designer, por exemplo, muitas vezes não somos nem chamados.\n\nE o porque isso acontece? Isso pode estar relacionado a má-formatação do seu currículo.\n\nNão adianta aplicar para centenas de vagas se o seu currículo está formatado de maneira inadequada.\n\n### 1) Diferença entre Currículo ATS e Currículo Personalizado\n\nUm currículo **ATS-friendly** é um documento extremamente simples que você usará para fazer upload em plataformas de recrutamento como LinkedIn, Gupy, Greenhouse, Catho, Glassdoor, entre outras.\n\nJá um currículo personalizado é aquele mais visualmente atraente que você entrega pessoalmente ou envia diretamente para o e-mail de um recrutador específico.\n\n### 2) Por que o Currículo ATS é essencial?\n\nOs ATS são sistemas automatizados utilizados por muitas empresas para filtrar e classificar candidatos antes mesmo que seus currículos cheguem aos recrutadores humanos, procurando por palavras-chave, formação, habilidades, etc.\n\nPor isso, é crucial formatá-lo corretamente.\n\n### 3) Como formatar um Currículo ATS?\n\n- Usar uma fonte apropriada (Arial, de preferência);\n\n- Padronizar tamanho da fonte entre 11 e 12;\n\n- Detalhes de contato ou perfil como cabeçalho;\n\n- Divida em 6 seções: contato, resumo, experiência, educação, habilidades e referências;\n\n- Evite o uso de gráficos;\n\n- Use espaçamento simples entre o texto;\n\n- Crie títulos claros e padronizados para cada seção;",
      "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
      "keywords": [
        "currículo",
        "para",
        "como",
        "nome",
        "entre",
        "mês",
        "blog",
        "não",
        "muitas",
        "fazer"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-formatar-um-curriculo-de-maneira-adequada"
      }
    },
    {
      "id": "32dac30cd85ef97f",
      "url": "https://matheuscostadesign.github.io/blog/2024/05/2024-05-31-links-externos",
      "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia (Part 1)",
      "content": "Aprenda como fazer com que todos os links externos do seu site abram em uma nova guia do navegador automaticamente, sem precisar ficar adicionando `target=\"_blank\"` manualmente para cada tag `a` (âncora) no HTML.\n\n## Adicionando script\n\nPara fazer com que todos os links externos (aqueles que não apontam para o seu domínio) abram em uma nova guia, você pode usar JavaScript para adicionar o atributo `target=\"_blank\"` a esses links. Aqui está um exemplo de como fazer isso:\n\n1. **Obter todos os links da página**: Você pode selecionar todos os elementos `<a>`.\n2. **Verificar se o link é externo**: Comparar o domínio do link com o domínio da sua página.\n3. **Adicionar `target=\"_blank\"` aos links externos**: Se o link for externo, adicionar o atributo para que ele abra em uma nova guia.\n\nAqui está um código JavaScript que realiza essas etapas:\n\n```javascript\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // Obter o domínio atual\n  const currentDomain = window.location.hostname;\n\n  // Selecionar todos os links na página\n  const links = document.querySelectorAll(\"a\");\n\n  // Iterar sobre cada link\n  links.forEach((link) => {\n    // Obter o href do link\n    const href = link.getAttribute(\"href\");\n\n    // Verificar se o href é um link externo\n    if (href && !href.includes(currentDomain) && href.startsWith(\"http\")) {\n      // Adicionar o atributo target=\"_blank\"\n      link.setAttribute(\"target\", \"_blank\");\n      // Evita que a página de destino acesse a página de origem\n      link.setAttribute(\"rel\", \"noopener noreferrer\");\n    }\n  });\n});\n```\n\n### Explicação do código:\n\n1. **Evento DOMContentLoaded**: O código é executado quando o DOM é carregado e pronto. Isso garante que todos os links estejam presentes na página antes de tentar manipulá-los.\n\n2. **Obter o domínio atual**: `window.location.hostname` retorna o domínio do site atual, sem incluir o protocolo (http/https) e o caminho.",
      "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
      "keywords": [
        "link",
        "href",
        "links",
        "página",
        "todos",
        "target",
        "blank",
        "para",
        "domínio",
        "nova"
      ],
      "metadata": {
        "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia",
        "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
        "slug": "como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2024/05/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2024/05/2024-05-31-links-externos.md"
      }
    },
    {
      "id": "3377318538ad8cee",
      "url": "https://matheuscostadesign.github.io/blog/o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? — Blog Matheus Costa (Part 2)",
      "content": "**Integração com design**\n\nTotal com Figma\n\nParcial\n\n**Facilidade de uso**\n\nMédia (exige noção de Figma)\n\nMuito fácil\n\n**Liberdade de layout**\n\nTotal\n\nLimitada\n\n**IA integrada**\n\nSim\n\nSim\n\n**Preço**\n\nGrátis com limites (ou plano Figma)\n\nGrátis + plano Pro\n\n## Use o Figma Buzz se:\n\n- Você já usa Figma.\n\n- Precisa manter rigor na identidade visual.\n\n- Quer que não-designers editem com segurança.\n\n## Use o Canva se:\n\n- Precisa de algo rápido e fácil.\n\n- Quer muitos templates prontos.\n\n- Trabalha com equipes variadas (RH, vendas, educação).\n\n## Principais Funcionalidades do Figma Buzz\n\n### Modelos Personalizáveis\n\nCrie e compartilhe modelos de marca que sua equipe pode utilizar, garantindo que todos os materiais produzidos estejam em conformidade com as diretrizes visuais estabelecidas.\n\n### Edição Simplificada\n\nCom uma interface intuitiva, mesmo membros da equipe sem experiência em design podem editar e adaptar modelos conforme necessário, promovendo agilidade na produção de conteúdo.\n\n### Controle de Elementos\n\nDefina quais partes dos modelos são editáveis e quais permanecem fixas, assegurando que elementos essenciais da identidade visual não sejam alterados inadvertidamente.\n\n### Visualização em Grade\n\nOrganize e visualize todos os ativos criados em uma única tela, facilitando a gestão e a manutenção da consistência entre os materiais.\n\n### Recursos de IA\n\nUtilize ferramentas de inteligência artificial integradas para remover fundos de imagens, ajustar textos e gerar imagens a partir de prompts, otimizando o processo criativo.\n\n### Estatísticas Recentes do Figma\n\nO Figma tem apresentado um crescimento significativo nos últimos anos. Em 2024, a empresa alcançou uma receita de US$ 400 milhões, um aumento considerável em relação aos US$ 190 milhões registrados em 2022. Além disso, a base de usuários cresceu a uma taxa de 159%, refletindo a crescente adoção de ferramentas de colaboração remota no setor de design.\n\n## Conclusão",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "design",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "/blog/o-que-e-o-figma-buzz"
      }
    },
    {
      "id": "344fa8bccf2ebb26",
      "url": "https://matheuscostadesign.github.io/blog/como-criar-apps-com-react-native",
      "title": "Como criar apps com React Native — Blog Matheus Costa (Part 3)",
      "content": "### 2.3.1) Amostra das visualizações no Android x iOS\n\n*\n\n## 2.4) Fundamentos de React\n\n-\nReact Native é executado com base no React, por isso, é necessário saber os fundamentos de:\n\n2.4.1) componentes\n\n- 2.4.2) JSX\n\n- 2.4.3) props\n\n- 2.4.4) estado\n\n### 2.4.1) Componentes\n\n-\n**Um componente é um elemento básico da interface do usuário;**\n\n-\nPodemos criar componentes de função (hooks com estado*) e com classes (*forma antiga*);\n\n-\nO React Native irá renderizar no aparelho do usuário o componente de acordo com o sistema operacional do dispositivo (iOS ou Android);\n\nimport React from \"react\";\nimport { Text } from \"react-native\";\n\nconst Cat = () => {\nreturn &#x3C;Text>Hello, I am your cat!&#x3C;/Text>;\n};\n\nexport default Cat;\n\n### 2.4.2) JSX\n\n-\nJSX é uma extensão da sintaxe do JavaScript que **permite escrever HTML dentro do JavaScript**;\n\n-\n**Em JSX podemos misturar JavaScript e HTML** (ou XML) **em um único arquivo**;\n\n-\nComo JSX é JavaScript, podemos usar **variáveis** dentro dele;\n\n-\nQualquer expressão JavaScript funcionará entre chaves no JSX, como por exemplo:\n\nimport React from \"react\";\nimport { Text } from \"react-native\";\n\nconst getFullName = (\nfirstName: string,\nsecondName: string,\nthirdName: string\n) => {\nreturn firstName + \" \" + secondName + \" \" + thirdName;\n};\n\nconst Cat = () => {\nreturn &#x3C;Text>Hello, I am {getFullName(\"Rum\", \"Tum\", \"Tugger\")}!&#x3C;/Text>;\n};\n\nexport default Cat;\n\n### 2.4.3) Props\n\n-\nProps é uma abreviação para **propriedades**;\n\n-\n**As propriedades permitem personalizar os componentes React,** por exemplo:\n\nimport React from \"react\";\nimport { Text, View } from \"react-native\";\n\nconst Cat = (props) => {\nreturn (\n&#x3C;View>\n&#x3C;Text>Hello, I am {props.name}!&#x3C;/Text>\n&#x3C;/View>\n);\n};\n\nconst Cafe = () => {\nreturn (\n&#x3C;View>\n&#x3C;Cat name=\"Maru\" />\n&#x3C;Cat name=\"Jellylorum\" />\n&#x3C;Cat name=\"Spot\" />\n&#x3C;/View>\n);\n};\n\nexport default Cafe;\n\n### 2.4.4) Estado\n\n-\n**Estado** é a forma de **armazenar dados** de um componente;",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "android",
        "para",
        "native",
        "text",
        "react-native",
        "https",
        "javascript",
        "const",
        "view"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 5,
        "sourcePath": "/blog/como-criar-apps-com-react-native"
      }
    },
    {
      "id": "3ad98aaab24cd958",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-21-ssl-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual (Part 1)",
      "content": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.\n\nEste procedimento é necessário para hospedagens em servidores com versões antigas do Windows (Windows Server 2008, por exemplo) ou hospedagens que não suportam e/ou não tem integração com a Let's Encrypt para renovar o certificado automaticamente.\n\nEntão o procedimento será realizado manualmente, beleza?!\n\nE de 3 em 3 meses será necessário refazer todo processo.\n\n## Processo no servidor de hospedagem\n\n1. Criar as pastas **\".well-known\"** e **\"acme-challenge\"** na raiz do site (e também nos subdomínios)\n   - Ex: `dominio.com.br/.well-known/acme-challenge/...`\n   - Ex: `subdominio.dominio.com.br/.well-known/acme-challenge/...`\n\n2. Criar o arquivo **\"web.config\"** com a seguinte estrutura XML na pasta **\"acme-challenge\"** (e também nos subdomínios) - **PARA SERVIDOR WINDOWS**\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <system.webServer>\n        <staticContent>\n            <mimeMap fileExtension=\".\" mimeType=\"text/plain\" />\n        </staticContent>\n    </system.webServer>\n</configuration>\n```\n\n## Geração do certificado e dos arquivos\n\n1. Fazer a instalação do Certbot no Windows\n   - **<a href=\"https://github.com/certbot/certbot/releases/download/v1.23.0/certbot-beta-installer-win32.exe\" rel=\"noopener noreferrer\">https://dl.eff.org/certbot-beta-installer-win32.exe</a>**\n\n2. Abrir **Prompt de Comando** como administrador\n\n3. Executar o comando:\n   - <kbd>certbot certonly --manual</kbd>\n\n4. Se for a primeira utilização, informe um email e aceite os termos de uso\n\n5. Insira o nome do domínio _(Se for incluir os subdominios, fazer a separação por espaço ou vírgula)_\n   - Ex 1: `subdominio.dominio.com.br www.dominio.com.br dominio.com.br`\n   - Ex 2: `subdominio.dominio.com.br,www.dominio.com.br,dominio.com.br,`",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
      "keywords": [
        "dominio",
        "certbot",
        "para",
        "certificado",
        "acme-challenge",
        "https",
        "well-known",
        "pasta",
        "pelo",
        "arquivos"
      ],
      "metadata": {
        "title": "Como gerar o certificado SSL/HTTPS de forma manual",
        "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
        "slug": "como-gerar-o-certificado-ssl-https-de-forma-manual",
        "author": "Matheus Costa",
        "categories": "Front-end, Deploy",
        "image": "/assets/images/posts/2022/como-gerar-certificado-ssl-https-de-forma-manual.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "blog/2022/02/2022-02-21-ssl-manual.md"
      }
    },
    {
      "id": "3b3f81d434da34ad",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 10)",
      "content": "## 4.2) Navegação entre telas\n\n- Aplicativos raramente são compostos de **uma única tela**.\n- No React Native, a **forma mais simples de criar a navegação entre telas e guias é usando o [React Natigation](https://reactnavigation.org/);**\n\n### **React Navigation**\n\n- Primeiramente é preciso instalar a biblioteca:\n\n```bash\nnpm install @react-navigation/native @react-navigation/native-stack\n```\n\n### Dependências do React Navigation\n\n- Se for um projeto **React Native simples**, instale as dependências com `npm`:\n\n```bash\nnpm install react-native-screens react-native-safe-area-context\n```\n\n- Se for um projeto **gerenciado pelo Expo**, instale as dependências com `expo`:\n\n```bash\nnpx expo install react-native-screens react-native-safe-area-context\n```\n\n### Envolvendo a aplicação\n\n- Agora precisamos envolver todo o aplicativo com o `NavigationContainer`.\n- Isso é feito no arquivo de entrada de nosso projeto, como `index.js`ou `App.js`:\n\n```jsx\nimport * as React from \"react\";\nimport { NavigationContainer } from \"@react-navigation/native\";\n\nconst App = () => {\n  return (\n    <NavigationContainer>{/* Restante da aplicação */}</NavigationContainer>\n  );\n};\n\nexport default App;\n```\n\n### Criando as telas\n\n- Exemplo completo abaixo com 2 telas:\n  - 1. Tela inicial (_HomeScreen_)\n  - 2. Tela de perfil (_ProfileScreen_)\n\n```jsx\nimport * as React from \"react\";\nimport { NavigationContainer } from \"@react-navigation/native\";\nimport { createNativeStackNavigator } from \"@react-navigation/native-stack\";\n\nconst Stack = createNativeStackNavigator();\n\nconst App = () => {\n  return (\n    <NavigationContainer>\n      <Stack.Navigator>\n        <Stack.Screen\n          name=\"Home\"\n          component={HomeScreen}\n          options={{ title: \"Welcome\" }}\n        />\n        <Stack.Screen\n          name=\"Profile\"\n          component={ProfileScreen}\n          options={{ title: \"Profile\" }}\n        />\n      </Stack.Navigator>\n    </NavigationContainer>\n  );\n};\n\nexport default App;\n```",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 9,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "40a9bddf8942d94b",
      "url": "https://matheuscostadesign.github.io/blog/2025/06/2025-06-18-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers (Part 3)",
      "content": "```html\n<button type=\"submit\">Enviar</button>\n```\n\n### 4) Rótulos de formulário (`<label>`)\n\nO elemento <label> associa um texto descritivo a um campo de entrada, como um campo de texto ou checkbox. Isso é crucial para acessibilidade, pois permite que leitores de tela identifiquem o propósito do campo. _Exemplo:_\n\n```html\n<label for=\"email\">E-mail:</label>\n<input type=\"email\" id=\"email\" name=\"email\" required />\n<p>Utilize um e-mail válido para continuar</p>\n```\n\n### 5) Listas (`<ul>`, `<ol>`, `<li>`)\n\nListas semânticas organizam itens relacionados, como opções de menu ou etapas de um processo. `<ul>` é para listas não ordenadas, enquanto `<ol>` é para listas ordenadas. _Exemplo:_\n\n```html\n<ol>\n  <li>Faça login no sistema</li>\n  <li>Escolha o plano ideal</li>\n  <li>Confirme o pagamento</li>\n</ol>\n```\n\n### 6) Elementos de navegação (`<nav>`)\n\nO elemento `<nav>` agrupa links de navegação, como menus principais. Isso ajuda tecnologias assistivas a identificar áreas navegáveis. _Exemplo:_\n\n```html\n<nav>\n  <ul>\n    <li><a href=\"/\">Início</a></li>\n    <li><a href=\"/sobre\">Sobre</a></li>\n  </ul>\n</nav>\n```\n\n### 7) Artigos e seções (`<article>`, `<section>`)\n\nO elemento `<article>` representa conteúdo independente, como um post de blog, enquanto `<section>` agrupa conteúdo relacionado. Esses elementos criam uma estrutura lógica. _Exemplo:_\n\n```html\n<section>\n  <h2>Perguntas frequentes</h2>\n  <article>\n    <h3>Como recuperar minha senha?</h3>\n    <p>Clique em \"Esqueci minha senha\" e siga as instruções</p>\n  </article>\n</section>\n```\n\n## Exemplo prático: formulário de login\n\nConsidere um formulário de login simples. Um UX Writer pode redigir os textos e sugerir a seguinte estrutura HTML semântica:",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "html",
        "como",
        "semântica",
        "conteúdo",
        "exemplo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "title": "Guia rápido de semântica HTML para UX Writers",
        "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
        "slug": "guia-rapido-de-semantica-html-para-ux-writers",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/06/guia-rapido-de-semantica-html-para-ux-writers.webp",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 5,
        "sourcePath": "blog/2025/06/2025-06-18-ux-writers.md"
      }
    },
    {
      "id": "435ca4738c131349",
      "url": "https://matheuscostadesign.github.io/blog/3",
      "title": "Blog (Página 3) — Matheus Costa (Part 2)",
      "content": "[Front-end Como visualizar alterações em um site ou projeto em t... Essa dica irá aumentar muito a sua produtividade no m](/blog/como-visualizar-alteracoes-em-um-site-ou-projeto-em-tempo-real-usando-o-visual-studio-code-e-o-live-server)",
      "description": "Dicas e conhecimentos sobre desenvolvimento web, frontend, React, Astro e design UX/UI por Matheus Costa.",
      "keywords": [
        "como",
        "blog",
        "front-end",
        "neste",
        "artigo",
        "https",
        "veja",
        "para",
        "alterar",
        "imagens"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/3"
      }
    },
    {
      "id": "43c09ea2ed98bd3e",
      "url": "https://matheuscostadesign.github.io/blog/2025/06/2025-06-18-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers (Part 2)",
      "content": "UX Writers criam textos que guiam, informam e engajam os usuários em interfaces digitais, como botões, mensagens de erro e formulários. Embora tradicionalmente o foco esteja na escolha das palavras, a forma como esse texto é codificado no HTML afeta sua eficácia.\n\nUm texto mal estruturado pode confundir leitores de tela ou ser mal interpretado por sistemas automatizados, comprometendo a experiência do usuário.\n\nPor exemplo, um botão com o texto “Enviar” codificado como `<div>Enviar</div>` não será reconhecido como um elemento interativo por tecnologias assistivas. Em vez disso, usar `<button>Enviar</button>` garante que o elemento seja identificado corretamente, permitindo que usuários com deficiência naveguem com facilidade.\n\nPara UX Writers, colaborar com desenvolvedores na escolha de tags HTML corretas é, portanto, uma extensão natural de seu trabalho.\n\n## Principais elementos semânticos HTML para UX Writers\n\nAbaixo, apresentamos os elementos semânticos mais relevantes para UX Writers, com explicações e exemplos práticos:\n\n### 1) Hierarquia de cabeçalhos (`<h1>` a `<h6>`)\n\nCabeçalhos organizam o conteúdo em níveis de importância, facilitando a navegação e a compreensão. Um `<h1>` deve ser usado para o título principal da página, enquanto `<h2>` a `<h6>` indicam subtítulos. _Exemplo:_\n\n```html\n<h1>Crie sua conta</h1>\n<h2>Informações pessoais</h2>\n<h3>Endereço</h3>\n<h4>CEP</h4>\n```\n\n### 2) Parágrafos (`<p>`)\n\nO elemento `<p>` é usado para blocos de texto, garantindo que o conteúdo seja apresentado como uma unidade coesa. _Exemplo:_\n\n```html\n<p>O e-mail informado é inválido. Tente novamente.</p>\n<p>Todos os campos marcados com * são obrigatórios.</p>\n```\n\n### 3) Botões (`<button>`)\n\nSegundo Podmajersky (2019, p. 66):\n\n> _“os botões são o texto mais importante na experiência”._\n\nOs botões indicam ações interativas, como “Enviar” ou “Cancelar”. Usar `<button>` em vez de `<div>` ou `<span>` assegura acessibilidade. _Exemplo:_",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "html",
        "como",
        "semântica",
        "conteúdo",
        "exemplo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "title": "Guia rápido de semântica HTML para UX Writers",
        "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
        "slug": "guia-rapido-de-semantica-html-para-ux-writers",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/06/guia-rapido-de-semantica-html-para-ux-writers.webp",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 5,
        "sourcePath": "blog/2025/06/2025-06-18-ux-writers.md"
      }
    },
    {
      "id": "45fd3971772e9774",
      "url": "https://matheuscostadesign.github.io/blog/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc",
      "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC — Blog Matheus Costa (Part 2)",
      "content": "### 3) Atualize o arquivo tsconfig.json\n\nSe você estiver usando TypeScript, também pode querer atualizar seu arquivo tsconfig.json para incluir as mesmas configurações de alias.\n\nIsso garante que o TypeScript entenda como resolver esses caminhos.\n\nAdicione ou atualize a seção compilerOptions.paths para corresponder aos seus aliases:\n\n{\n\"compilerOptions\": {\n\"baseUrl\": \".\",\n\"paths\": {\n\"@/*\": [\"./src/*\"]\n}\n}\n}\nCom essas configurações, você agora deve ser capaz de usar os path aliases em seu projeto Vite com o plugin React SWC.\n\nDessa forma, você pode importar componentes da seguinte maneira:\n\nimport logo from \"@/assets/logo.png\";\nE não ficar procurando o caminho da pasta assim:\n\nimport logo from \"../../../../../../../assets/logo.png\";\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste post como configurar as importações com ",
      "keywords": [
        "path",
        "aliases",
        "projeto",
        "vite",
        "react",
        "logo",
        "para",
        "você",
        "import",
        "from"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc"
      }
    },
    {
      "id": "48cc34db10b7956f",
      "url": "https://matheuscostadesign.github.io/blog/como-detectar-imagens-quebradas",
      "title": "Como detectar imagens quebradas — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Git\n\n## Como detectar imagens quebradas\n\nMatheus Costa 14 de Setembro de 2023\n\n## O problema\n\nLidamos com muitas imagens em projetos web e muitas vezes esquecemos de tratar quando a foto está com algum problema de referência, link quebrado ou até uma imagem que depende da gestão do usuário (onde o mesmo não adicionou ou excluiu a mesma).\n\n## Exemplo de imagem quebrada\n\nExemplo de como uma imagem é exibida no navegador sem tratamento de erros:\n\nErro ao carregar o logo\n\n## Soluções\n\n### 1) Tag &#x3C;img> no HTML\n\n-\nA solução mais simples é se a imagem estiver sendo renderizada em uma tag &#x3C;img>\n\n-\nBasta adicionar a propriedade onerror abaixo e o caminho da imagem que será renderizada caso a principal esteja com problema\n\n&#x3C;img\nsrc=\"logo.png\"\nonerror=\"this.onerror=null;this.src='https://placehold.co/200x100';\"\n/>\n\n### 2) Background-image no CSS\n\nSe a imagem estiver sendo renderizada via CSS com a propriedade background-image também podemos adicionar uma foto alternativa para substituir a que está quebrada:\n\n&#x3C;div class=\"bg\">Imagem como background&#x3C;/div>\n\n#### CSS\n\n.bg {\nwidth: 200px;\nheight: 100px;\nbackground-image: url(\"image-broken.png\"), url(\"https://placehold.co/200x100\");\nbackground-size: cover;\nbackground-repeat: no-repeat;\n}\n\n### 3) Imagem no React\n\nExemplo de como adicionar a imagem de fallback para um componente &#x3C;img> no React:\n\n&#x3C;img\nsrc=\"/assets/logo.png\"\nalt=\"Logo do cliente\"\nonError={(e) => {\ne.target.onerror = null;\ne.target.src = \"/assets/logo-fallback.png\";\n}}\n/>\n\n### 4) Componente React com background\n\nExemplo de background image para um componente MUI Box (React JSX):\n\nimport React from \"react\";\n\nexport default function Image() {\nreturn (\n&#x3C;Box\nwidth={200}\nheight={100}\nsx={{\nbackground: `url(\"/assets/image-broken.png\"), url(\"/assets/img-fallback.svg\")`,\nbackgroundPosition: \"center\",\nbackgroundSize: \"cover\",\nbackgroundRepeat: \"no-repeat\",\n}}\n/>\n);\n}\n\n## Conclusão",
      "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
      "keywords": [
        "imagem",
        "react",
        "onerror",
        "como",
        "exemplo",
        "logo",
        "background",
        "assets",
        "blog",
        "imagens"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-detectar-imagens-quebradas"
      }
    },
    {
      "id": "4a189ca4b4577cdb",
      "url": "https://matheuscostadesign.github.io/blog/2025/05/2025-05-05-o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? (Part 1)",
      "content": "# O que é o Figma Buzz?\n\nO Figma Buzz é uma ferramenta lançada pelo Figma em 2025, projetada para facilitar a criação, gestão e distribuição de recursos visuais alinhados à marca.\n\nEle oferece um espaço colaborativo onde designers e profissionais de marketing podem trabalhar juntos para produzir ativos como posts para redes sociais, anúncios digitais, materiais para eventos, documentos de uma página e folhetos, mantendo a consistência da identidade visual da marca.\n\n<img src=\"/assets/images/posts/2025/05/figma-buzz.gif\">\n\n## O que é possível criar com o Figma Buzz?\n\nCom o Figma Buzz, é possível criar uma variedade de materiais visuais que seguem as diretrizes da marca de forma rápida e colaborativa.\n\nEntre os principais tipos de conteúdo que podem ser produzidos estão:\n\n- **Posts para redes sociais**: Crie modelos reutilizáveis para Instagram, LinkedIn, X (Twitter) e outras redes, mantendo identidade visual consistente.\n\n- **Anúncios digitais (ads)**: Produza banners e criativos de campanhas publicitárias online com elementos fixos da marca, como logos e cores.\n\n- **Apresentações e documentos de uma página**: Monte slides ou arquivos para envio rápido com informações chave e visual atraente.\n\n- **Materiais de eventos**: Cartazes, flyers, credenciais e outros materiais promocionais para eventos e conferências.\n\n- **Folhetos e panfletos**: Crie peças impressas ou digitais com layouts prontos e fáceis de editar.\n\n- **Campanhas de e-mail e thumbnails**: Imagens padronizadas para newsletters e plataformas de vídeo como YouTube.\n\n- **Ativos internos**: Como manuais, guias rápidos, templates para RH, entre outros.\n\n<img src=\"/assets/images/posts/2025/05/o-que-e-possivel-criar-com-o-figma-buzz.jpg\">\n\n## Figma Buzz ou Canva?\n\nA escolha ideal depende do perfil da equipe e do nível de controle desejado sobre a identidade visual.\n\n### 🔍 Comparativo Rápido",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade",
        "design"
      ],
      "metadata": {
        "title": "O que é o Figma Buzz?",
        "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
        "slug": "o-que-e-o-figma-buzz",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/05/o-que-e-o-figma-buzz.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "blog/2025/05/2025-05-05-o-que-e-o-figma-buzz.md"
      }
    },
    {
      "id": "4d6e292b64ca1f77",
      "url": "https://matheuscostadesign.github.io/blog/como-configurar-chave-ssh-github",
      "title": "Como configurar chave SSH para o Github — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Tecnologia\n\n## Como configurar chave SSH para o Github\n\n*\nMatheus Costa 12 de Julho de 2024\n\nAprenda neste post como configurar chave SSH para o Github\n\n### 1) Gerando chave SSH\n\n- Executar no terminal\n\nssh-keygen -t ed25519 -C \"your_email@example.com\"\n\n- Colocar o e-mail do Github em “your_email…”\n\n- Pressionar **“Enter”** p/ gerar a chave no diretório padrão\n\n- Após isso, irá solicitar uma senha.\n\n- Insira e repita a senha, por exemplo:\n\n123456\n\n- Se der certo, **2 chaves serão criadas** (pública e privada)*\n\n- Acesse o diretório do arquivo público\n\n- No terminal irá mostrar onde o arquivo foi gerado, por exemplo:\n\nYour public key has been saved in /Users/users/.ssh/id_ed25519.pub\n\n- Agora, acesse essa pasta e abra o arquivo “id_ed25519.pub” em um editor de texto (VSCode, por exemplo)\n\n- O arquivo deve conter o seguinte:\n\nssh-ed25519 BBBBD4OabD2mZK26PU5BBBbqT7SzVqptcJOdFw2gXMGQ2ZeyGAfhZHcb2Qo9wmdZ your_email@example.com\n\n- Copie esse conteúdo do arquivo.\n\n### 2) Configuração no Github\n\n- O próximo passo é [**abrir a página de configurações do Github**](https://github.com/settings/profile)\n\n- No menu lateral, clique em:\n\n**SSH and GPG keys**\n\n- Clique no botão: **New SSH key**\n\n- Informe um título p/ esta chave (Ex: MacOS)\n\n- Cole o conteúdo do arquivo “id_ed25519.pub” no campo “Key” e salve as configurações\n\n- O próximo passo é fazer o clone do projeto\n\n- Vá até o repositório no Github e copie a URL de clone via SSH\n\n- Exemplo: git@github.com:repo/app.git\n\nBaixe o [Fork](https://git-fork.com/)\n\n- Navegue até: Fork > File > Clone\n\n- Insira a URL SSH, faça o login na conta e pronto!\n\n[Documentação completa](https://docs.github.com/pt/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste post como configurar chave SSH para o Github",
      "keywords": [
        "github",
        "arquivo",
        "chave",
        "ed25519",
        "your",
        "exemplo",
        "blog",
        "email",
        "https",
        "clone"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-configurar-chave-ssh-github"
      }
    },
    {
      "id": "548bb779bdf86602",
      "url": "https://matheuscostadesign.github.io/blog/2023/09/2023-09-14-imagens-quebradas",
      "title": "Como detectar imagens quebradas (Part 2)",
      "content": "export default function Image() {\n  return (\n    <Box\n      width={200}\n      height={100}\n      sx={{\n        background: `url(\"/assets/image-broken.png\"), url(\"/assets/img-fallback.svg\")`,\n        backgroundPosition: \"center\",\n        backgroundSize: \"cover\",\n        backgroundRepeat: \"no-repeat\",\n      }}\n    />\n  );\n}\n```\n\n## Conclusão\n\n- É isso aí, espero ter ajudado a evitar imagens quebradas em seus projetos web!",
      "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
      "keywords": [
        "imagem",
        "react",
        "logo",
        "assets",
        "onerror",
        "exemplo",
        "background",
        "problema",
        "como",
        "html"
      ],
      "metadata": {
        "title": "Como detectar imagens quebradas",
        "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
        "slug": "como-detectar-imagens-quebradas",
        "author": "Matheus Costa",
        "categories": "Git",
        "image": "/assets/images/posts/2023/09/como-detectar-imagens-quebradas.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2023/09/2023-09-14-imagens-quebradas.md"
      }
    },
    {
      "id": "56c6d5249c62b99b",
      "url": "https://matheuscostadesign.github.io/blog/2",
      "title": "Blog (Página 2) — Matheus Costa",
      "content": "Blog (Página 2) — Matheus Costa\n\n[Fazer orçamento no WhatsApp](https://wa.me/5517991005132)\n[](https://linkedin.com/in/mattheuscosta) [](https://github.com/matheuscostadesign) [](https://www.instagram.com/matheuscosta.design/) [](https://www.behance.net/matheuscostadesign)\n\n## Artigos, Dicas & Insights\n\nConteúdos práticos e experiências sobre desenvolvimento web, UI/UX e\ndesign para elevar o nível dos seus projetos.\n\n[Frontend Exemplo prático Axios Interceptor consumindo várias APIs Exemplo prático Axios Interceptor consumindo várias AP](/blog/axios-interceptor-consumindo-varias-apis)\n\n[Frontend Como remover o fundo de uma imagem com CSS Aprenda como remover o fundo de uma imagem com CSS Ler artigo](/blog/como-remover-o-fundo-de-uma-imagem-com-css)\n\n[Git Como detectar imagens quebradas Aprenda como detectar e corrigir imagens quebradas de um site Ler artigo](/blog/como-detectar-imagens-quebradas)\n\n[Git Padrões de mensagens de commit Aprenda neste artigo algumas convenções/padronizações das mensagens de commits par...](/blog/padroes-de-mensagens-de-commit)\n\n[React Native Como criar apps com React Native Neste post estarei compartilhando e documentando minha experiência durante](/blog/como-criar-apps-com-react-native)\n\n[Git Comandos básicos de Git Aprenda neste post alguns dos comandos básicos de Git Ler artigo](/blog/comandos-basicos-de-git)\n\n[Tecnologia Guia básico de comandos terminal SSH/Bash/Putty Aprenda neste post alguns dos comandos de terminal mais utili](/blog/guia-basico-de-comandos-terminal-ssh-bash-putty)\n\n[Front-end As melhores bibliotecas de UI para Frontend em 2024 Links de algumas bibliotecas de estilização no front-end L](/blog/bibliotecas-ui-para-frontend)\n\n[Front-end Como fazer o efeito voltar ao topo suave com jQuery Veja neste artigo como fazer o efeito voltar ao topo da pá](/blog/como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery)",
      "description": "Dicas e conhecimentos sobre desenvolvimento web, frontend, React, Astro e design UX/UI por Matheus Costa.",
      "keywords": [
        "blog",
        "como",
        "https",
        "aprenda",
        "artigo",
        "neste",
        "comandos",
        "fazer",
        "frontend",
        "post"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/2"
      }
    },
    {
      "id": "56dc5808ada4cc54",
      "url": "https://matheuscostadesign.github.io/blog/como-formatar-um-curriculo-de-maneira-adequada",
      "title": "Como formatar um currículo de maneira adequada — Blog Matheus Costa (Part 2)",
      "content": "- Exporte em formato PDF.\n\n### 4) Qual software utilizar?\n\nUtilize os mais conhecidos:\n\n- Google Docs\n\n- Microsoft Word.\n\n### 5) Existem templates disponíveis?\n\nSim. Procure por \"resumeworded ats templates\" no Google.\n\nVocê encontrará vários templates gratuitos para diversas áreas.\n\n### 6) Como fazer o teste do currículo?\n\n[](https://www.resumego.net/resume-checker/)\nAcesse o site [Resume Checker](https://www.resumego.net/resume-checker/) e faça o upload do seu CV atual.\n\n### 7) O Que é o Resume Checker?\n\nO Resume Checker é uma ferramenta online desenvolvida pelo ResumoGO, projetada para analisar e otimizar currículos com foco em superar as barreiras impostas pelos ATS.\n\n### 8) Exemplo de formato de currículo ATS:\n\nNome do Candidato\n[Endereço de Email] | [Telefone] | [LinkedIn]\n\nResumo Profissional:\nBreve resumo das qualificações e experiências relevantes para o cargo.\n\nExperiência Profissional:\nTítulo do Cargo\nNome da Empresa, Localização\nMês/Ano – Mês/Ano\n\n- Descrição das responsabilidades e realizações utilizando palavras-chave relevantes.\n- Outra responsabilidade importante.\n\nEducação:\nNome do Curso\nNome da Instituição, Localização\nMês/Ano de Conclusão\n\nHabilidades:\n\n- Habilidade 1\n- Habilidade 2\n- Habilidade 3\n\nCertificações:\n\n- Nome da Certificação, Instituição Emissora, Mês/Ano\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
      "keywords": [
        "currículo",
        "para",
        "como",
        "nome",
        "entre",
        "mês",
        "blog",
        "não",
        "muitas",
        "fazer"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-formatar-um-curriculo-de-maneira-adequada"
      }
    },
    {
      "id": "59f73fcfe395ee47",
      "url": "https://matheuscostadesign.github.io/blog/2023/09/2023-09-15-bg-css",
      "title": "Como remover o fundo de uma imagem com CSS",
      "content": "## Imagens com fundo transparente no CSS\n\n- Sabia que é possível remover o fundo de uma imagem via código CSS?\n- Basta adicionar a propriedade `“mix-blend-mode”` como `“multiply”`\n- Veja o exemplo abaixo:\n\n## HTML\n\n```html\n<img src=\"/assets/logo.png\" class=\"logo\" />\n```\n\n## CSS\n\n```css\n.logo {\n  mix-blend-mode: multiply;\n}\n```\n\n## React\n\n- Essa solução é viável para quem precisa ter um controle da imagem **tanto em temas claros, quanto em temas escuros** (_dark/light mode_).\n- Nesse exemplo abaixo a ideia era que **a imagem permanecesse com suas cores originais no modo claro e que no modo escuro fosse aplicado a transparência nas partes brancas da imagem e que todo seu conteúdo fosse alterado para a cor branca.**\n- Veja abaixo o exemplo:\n\n```tsx\n<Box\n  sx={\n    mixBlendMode: themeName === \"dark\" ? \"plus-lighter\" : \"multiply\",\n  }\n>\n  <img\n    src={img}\n    width={props.width}\n    height={props.height}\n    style={\n      filter:\n        themeName === \"dark\"\n          ? \"grayscale(1) contrast(1) invert(1) brightness(130%)\"\n          : \"none\",\n    }\n  />\n</Box>\n```\n\n> _Observações:_\n\n- O componente React está envolvido uma [Box do MUI](https://mui.com/material-ui/react-box/), mas poderia ser uma `div` com `style`.\n- Quanto maior o brilho `brightness` mais a imagem fica branca;\n- Quanto maior o contraste `contrast` mais pixelada a imagem fica;\n- A chamada ao `themeName === \"dark\"` é um _context_ global do React;\n\n## Conclusão\n\n- E isso resolveu o problema! 👊\n- A imagem fica com suas cores originais no modo claro, porém no modo escuro é aplicada a transparência e a cor é alterada ajustada para branco em toda foto.",
      "description": "Aprenda como remover o fundo de uma imagem com CSS",
      "keywords": [
        "imagem",
        "dark",
        "modo",
        "multiply",
        "exemplo",
        "abaixo",
        "logo",
        "react",
        "para",
        "quanto"
      ],
      "metadata": {
        "title": "Como remover o fundo de uma imagem com CSS",
        "description": "Aprenda como remover o fundo de uma imagem com CSS",
        "slug": "como-remover-o-fundo-de-uma-imagem-com-css",
        "author": "Matheus Costa",
        "categories": "Frontend",
        "image": "/assets/images/posts/2023/09/como-remover-o-fundo-de-uma-imagem-com-css.webp",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2023/09/2023-09-15-bg-css.md"
      }
    },
    {
      "id": "5a606f4847e9f17a",
      "url": "https://matheuscostadesign.github.io/blog/como-alterar-a-cor-do-texto-selecionado-de-uma-pagina-com-css",
      "title": "Como alterar a cor do texto selecionado de uma página com CSS — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como alterar a cor do texto selecionado de uma página com CSS\n\nMatheus Costa 18 de Fevereiro de 2022\n\nSabia que é possível alterar a cor padrão do texto selecionado pelo usuário no navegador?\n\nCom essas duas linhas de CSS é possível alterar as cores e personalizá-las de acordo com a identidade visual do projeto/site/empresa.\n\n## Alterando a cor do texto selecionado\n\n::-moz-selection {\ncolor: #ffffff;\nbackground-color: #bf4b8a;\n}\n::selection {\ncolor: #ffffff;\nbackground-color: #bf4b8a;\n}\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste artigo como alterar a cor do texto selecionado do site com CSS",
      "keywords": [
        "blog",
        "alterar",
        "texto",
        "selecionado",
        "sabia",
        "possível",
        "projeto",
        "color",
        "ffffff",
        "background-color"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-alterar-a-cor-do-texto-selecionado-de-uma-pagina-com-css"
      }
    },
    {
      "id": "5b646bf10d6659e3",
      "url": "https://matheuscostadesign.github.io/blog/2025/05/2025-05-05-o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? (Part 3)",
      "content": "Utilize ferramentas de inteligência artificial integradas para remover fundos de imagens, ajustar textos e gerar imagens a partir de prompts, otimizando o processo criativo.\n\n### Estatísticas Recentes do Figma\n\nO Figma tem apresentado um crescimento significativo nos últimos anos. Em 2024, a empresa alcançou uma receita de US$ 400 milhões, um aumento considerável em relação aos US$ 190 milhões registrados em 2022. Além disso, a base de usuários cresceu a uma taxa de 159%, refletindo a crescente adoção de ferramentas de colaboração remota no setor de design.\n\n## Conclusão\n\nO Figma Buzz representa uma evolução significativa na forma como equipes de design e marketing colaboram na criação de materiais visuais. Ao centralizar a produção de ativos em uma plataforma intuitiva e integrada, ele promove eficiência, consistência e agilidade, atendendo às demandas dinâmicas do mercado atual. Para profissionais interessados em design, o Figma Buzz oferece uma oportunidade valiosa de otimizar processos e fortalecer a presença da marca em diversos canais de comunicação.",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade",
        "design"
      ],
      "metadata": {
        "title": "O que é o Figma Buzz?",
        "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
        "slug": "o-que-e-o-figma-buzz",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/05/o-que-e-o-figma-buzz.jpg",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "blog/2025/05/2025-05-05-o-que-e-o-figma-buzz.md"
      }
    },
    {
      "id": "5cad8bad3a943afb",
      "url": "https://matheuscostadesign.github.io/blog/2024/05/2024-05-31-cv",
      "title": "Como formatar um currículo de maneira adequada (Part 1)",
      "content": "## Nunca sou chamado para uma vaga...\n\n<cite>Agradecemos seu interesse na vaga de UX Designer em Brasil. Infelizmente, não daremos prosseguimento à sua candidatura, mas agradecemos o tempo dispensado e o interesse na empresa tal...</cite>\n\nSabia que o seu CV pode estar sendo ignorado? Muitas vezes, nós, designers, queremos criar um currículo que reflete a profissão, fazer algo complemente personalizado, com uma tipografia moderna, cores, gráficos, etc...\n\nPorém, ao aplicar para vagas de UX Designer, por exemplo, muitas vezes não somos nem chamados.\n\nE o porque isso acontece? Isso pode estar relacionado a má-formatação do seu currículo.\n\nNão adianta aplicar para centenas de vagas se o seu currículo está formatado de maneira inadequada.\n\n### 1) Diferença entre Currículo ATS e Currículo Personalizado\n\nUm currículo **ATS-friendly** é um documento extremamente simples que você usará para fazer upload em plataformas de recrutamento como LinkedIn, Gupy, Greenhouse, Catho, Glassdoor, entre outras.\n\nJá um currículo personalizado é aquele mais visualmente atraente que você entrega pessoalmente ou envia diretamente para o e-mail de um recrutador específico.\n\n### 2) Por que o Currículo ATS é essencial?\n\nOs ATS são sistemas automatizados utilizados por muitas empresas para filtrar e classificar candidatos antes mesmo que seus currículos cheguem aos recrutadores humanos, procurando por palavras-chave, formação, habilidades, etc.\n\nPor isso, é crucial formatá-lo corretamente.\n\n### 3) Como formatar um Currículo ATS?\n\n- ✅ Usar uma fonte apropriada (Arial, de preferência);\n- ✅ Padronizar tamanho da fonte entre 11 e 12;\n- ✅ Detalhes de contato ou perfil como cabeçalho;\n- ✅ Divida em 6 seções: contato, resumo, experiência, educação, habilidades e referências;\n- ✅ Evite o uso de gráficos;\n- ✅ Use espaçamento simples entre o texto;\n- ✅ Crie títulos claros e padronizados para cada seção;\n- ✅ Exporte em formato PDF.\n\n### 4) Qual software utilizar?\n\nUtilize os mais conhecidos:",
      "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
      "keywords": [
        "currículo",
        "para",
        "nome",
        "entre",
        "como",
        "resume",
        "checker",
        "mês",
        "não",
        "muitas"
      ],
      "metadata": {
        "title": "Como formatar um currículo de maneira adequada",
        "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
        "slug": "como-formatar-um-curriculo-de-maneira-adequada",
        "author": "Matheus Costa",
        "categories": "Carreira",
        "image": "/assets/images/posts/2024/05/como-formatar-um-curriculo-de-maneira-adequada.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2024/05/2024-05-31-cv.md"
      }
    },
    {
      "id": "5fdbc08a5a2e77b9",
      "url": "https://matheuscostadesign.github.io/blog/bibliotecas-ui-para-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 — Blog Matheus Costa (Part 2)",
      "content": "[](https://mui.com/material-ui/)\nMaterial UI, também conhecida como MUI, é uma biblioteca aberta de componentes React que implementa o Material Design do Google. Esta biblioteca é abrangente e pode ser utilizada prontamente em produção. Com mais de 2.500 colaboradores de código aberto, Material UI oferece uma extensa coleção de componentes prontos para uso, permitindo que os desenvolvedores se concentrem na lógica principal de seus negócios.\n\nA biblioteca é meticulosa em sua implementação do Material Design, garantindo que cada componente atenda aos mais altos padrões de forma e função. Além disso, Material UI é altamente customizável, permitindo que os usuários personalizem os componentes de acordo com suas necessidades específicas. É uma escolha confiável, com uma grande comunidade de usuários e é apoiada por milhares de organizações.\n\nMaterial UI oferece uma experiência intuitiva para desenvolvedores, facilitando a colaboração entre equipes técnicas e de design. A biblioteca também fornece recursos de design, como modelos gratuitos e ferramentas de personalização, para impulsionar o fluxo de trabalho de design e desenvolvimento\n\n## 4) [Radix UI](https://www.radix-ui.com/)\n\n[](https://www.radix-ui.com/)\nRadix UI é uma biblioteca de componentes de interface do usuário de código aberto otimizada para um desenvolvimento rápido, fácil manutenção e acessibilidade. Esta biblioteca é projetada para ser importada e utilizada sem a necessidade de configuração adicional, facilitando a integração em projetos de desenvolvimento web.\n\nRadix UI oferece componentes de baixo nível com foco em acessibilidade, personalização e experiência do desenvolvedor. Esses componentes podem ser usados como a camada base de um sistema de design ou adotados incrementalmente, proporcionando flexibilidade no desenvolvimento de interfaces de alta qualidade e acessíveis\n\n## 5) [Next UI](https://nextui.org/)",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "experiência",
        "desenvolvimento",
        "material",
        "design",
        "desenvolvedores"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "/blog/bibliotecas-ui-para-frontend"
      }
    },
    {
      "id": "61db19fc50e4e818",
      "url": "https://matheuscostadesign.github.io/blog/como-criar-apps-com-react-native",
      "title": "Como criar apps com React Native — Blog Matheus Costa (Part 5)",
      "content": "const styles = StyleSheet.create({\ncontainer: {\nflex: 1,\n...Platform.select({\nios: {\nbackgroundColor: \"red\",\n},\nandroid: {\nbackgroundColor:",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "android",
        "para",
        "native",
        "text",
        "react-native",
        "https",
        "javascript",
        "const",
        "view"
      ],
      "metadata": {
        "chunkIndex": 4,
        "totalChunks": 5,
        "sourcePath": "/blog/como-criar-apps-com-react-native"
      }
    },
    {
      "id": "658a45f52d759cad",
      "url": "https://matheuscostadesign.github.io/blog/configuracoes-importantes-para-adicionar-no-arquivo-htaccess",
      "title": "Configurações importantes para adicionar no arquivo .htaccess — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Configurações importantes para adicionar no arquivo .htaccess\n\nMatheus Costa 11 de Fevereiro de 2022\n\nVeja neste artigo configurações importantes de se adicionar no arquivo .htaccess para servidores web/PHP:\n\n## Redirecionamento HTTP para HTTPs\n\nRewriteEngine On\nRewriteCond %{SERVER_PORT} 80\nRewriteRule ^(.*)$ https://www.dominio.com.br/$1 [R,L]\n\n## Remover extensões dos arquivos na URL\n\n&#x3C;IfModule mod_rewrite.c>\nOptions +FollowSymLinks -MultiViews\nRewriteEngine On\nRewriteBase /\nRewriteCond %{THE_REQUEST} ^[A-Z]{3,}\\s([^.]+)\\.html [NC]\nRewriteRule ^ %1 [R,L]\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME}.html -f\nRewriteRule ^(.*?)/?$ $1.html [L]\n&#x3C;/IfModule>\n\n## Exibir página não encontrada - 404\n\nErrorDocument 404 /404.html\n\n## Ativar compactação GZIP\n\nAddOutputFilterByType DEFLATE text/plain\nAddOutputFilterByType DEFLATE text/xml\nAddOutputFilterByType DEFLATE application/xhtml+xml\nAddOutputFilterByType DEFLATE text/css\nAddOutputFilterByType DEFLATE application/xml\nAddOutputFilterByType DEFLATE image/svg+xml\nAddOutputFilterByType DEFLATE application/rss+xml\nAddOutputFilterByType DEFLATE application/atom_xml\nAddOutputFilterByType DEFLATE application/x-javascript\nAddOutputFilterByType DEFLATE application/javascript\nAddOutputFilterByType DEFLATE application/x-httpd-php\nAddOutputFilterByType DEFLATE application/x-httpd-fastphp\nAddOutputFilterByType DEFLATE application/x-httpd-eruby\nAddOutputFilterByType DEFLATE text/html\nSetOutputFilter DEFLATE\nBrowserMatch ^Mozilla/4 gzip-only-text/html\nBrowserMatch ^Mozilla/4.0[678] no-gzip\nBrowserMatch ^HMSI[E] !no-gzip !gzip-only-text/html\nSetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary\n\n## Habilitar Keep Alive\n\n&#x3C;ifModule mod_headers.c>\nHeader set Connection keep-alive\n&#x3C;/ifModule>\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo configurações importantes de se adicionar no arquivo .htaccess para servidores web/PHP",
      "keywords": [
        "deflate",
        "addoutputfilterbytype",
        "application",
        "html",
        "rewritecond",
        "ifmodule",
        "request",
        "text",
        "blog",
        "para"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/configuracoes-importantes-para-adicionar-no-arquivo-htaccess"
      }
    },
    {
      "id": "6b1292702684a042",
      "url": "https://matheuscostadesign.github.io/blog/2022/01/2022-01-21-atualizar-ano",
      "title": "Atualizar ano atual automaticamente com Javascript",
      "content": "Veja neste artigo como mostrar o ano atual automaticamente no footer do site\n\n## HTML\n\n- Adicione o conteúdo da tag `<span>` abaixo no seu arquivo HTML, onde deseja exibir o ano atual automaticamente.\n\n```html\n<span id=\"mostrarAnoAtual\"></span>\n```\n\n## Javascript\n\n- Já no arquivo no seu arquivo Javascript, insira os comandos abaixo:\n\n```js\nconst ano = document.getElementById(\"mostrarAnoAtual\");\nconst anoAtual = new Date();\nano.innerHTML = anoAtual.getFullYear();\n```\n\n- Dessa forma, na tag `<span>` que foi adicionado no seu HTML será exibido o ano atual automaticamente, sem a necessidade de ficar trocando todo ano.\n\n> Gostou da dica? Sabe de algo que possa melhor? Então comente abaixo!\n\nValeeu! 👊",
      "description": "Veja neste artigo como mostrar o ano atual automaticamente no footer do site",
      "keywords": [
        "html",
        "span",
        "atual",
        "automaticamente",
        "abaixo",
        "arquivo",
        "mostraranoatual",
        "javascript",
        "const",
        "anoatual"
      ],
      "metadata": {
        "title": "Atualizar ano atual automaticamente com Javascript",
        "description": "Veja neste artigo como mostrar o ano atual automaticamente no footer do site",
        "slug": "como-atualizar-ano-atual-do-site-automaticamente-com-javascript",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/mostrar-ano-atual-com-javascript.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2022/01/2022-01-21-atualizar-ano.md"
      }
    },
    {
      "id": "6b97570ac484a726",
      "url": "https://matheuscostadesign.github.io/blog/2025/06/2025-06-18-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers (Part 4)",
      "content": "```html\n<form>\n  <h1>Entrar na sua conta</h1>\n  <div>\n    <label for=\"email\">E-mail:</label>\n    <input type=\"email\" id=\"email\" required />\n  </div>\n  <div>\n    <label for=\"senha\">Senha:</label>\n    <input type=\"password\" id=\"senha\" required />\n  </div>\n  <p class=\"erro\" hidden>E-mail ou senha incorretos</p>\n  <button type=\"submit\">Entrar</button>\n  <a href=\"/recuperar-senha\">Esqueceu sua senha?</a>\n</form>\n```\n\nNesse exemplo:\n\n- `<h1>` estabelece a hierarquia principal.\n- `<label>` associa os campos aos seus textos descritivos.\n- `<p class=\"erro\">` fornece feedback claro em caso de erro.\n- `<button>` indica uma ação interativa.\n\nEssa estrutura é acessível, legível por máquinas e fácil de navegar, demonstrando como a semântica HTML amplifica o impacto do texto.\n\n## Práticas recomendadas para UX Writers\n\nPara integrar a semântica HTML ao fluxo de trabalho de UX Writing, algumas práticas são indispensáveis:\n\n- **Testes de acessibilidade:** Utilize ferramentas como o Lighthouse no DevTools para verificar se o HTML atende às diretrizes do WCAG. Uma das maneiras de executar o Lighthouse é usar o [PageSpeed Insights](https://pagespeed.web.dev/), ferramenta oficial do Google para analisar a semântica e a velocidade das páginas da Web. Seguir as recomendações do teste garante que o conteúdo seja acessível a todos os usuários.\n\n<img src=\"/assets/images/posts/2025/06/pagespeed.png\" class=\"w-full\">\n\n- **Colaboração com desenvolvedores:** UX Writers devem trabalhar junto com desenvolvedores para garantir que o texto seja implementado com as tags corretas. Ferramentas como Figma podem incluir anotações sobre tags recomendadas.\n\n- **Documentação clara:** Crie guias ou design systems que especifiquem como os textos devem ser codificados. Por exemplo, indique que mensagens de erro devem sempre usar `<p>` e botões devem usar `<button>`.\n\n- **Foco na clareza:** Escreva textos que, quando combinados com HTML semântico, sejam diretos e fáceis de interpretar por humanos e máquinas.",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "html",
        "como",
        "semântica",
        "conteúdo",
        "exemplo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "title": "Guia rápido de semântica HTML para UX Writers",
        "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
        "slug": "guia-rapido-de-semantica-html-para-ux-writers",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/06/guia-rapido-de-semantica-html-para-ux-writers.webp",
        "comments": "true",
        "chunkIndex": 3,
        "totalChunks": 5,
        "sourcePath": "blog/2025/06/2025-06-18-ux-writers.md"
      }
    },
    {
      "id": "6f60e7b4080ea73d",
      "url": "https://matheuscostadesign.github.io/blog/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc",
      "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como configurar path aliases em um projeto React + Vite + TypeScript + SWC\n\nMatheus Costa 03 de Junho de 2024\n\nVeja neste post como configurar as importações com '@' **(path aliases)** em um projeto Vite/React com Typescript e SWC e melhorar a organização do código.\n\n## Exemplos:\n\n// Importação sem Path Aliases\nimport logo from \"../../../../../../../assets/logo.png\";\n\n// Importação com Path Aliases\nimport logo from \"@/assets/logo.png\";\n\n### Criação do projeto\n\nPara configurar path aliases no Vite com o plugin React SWC, você precisa seguir alguns passos simples.\n\nPrimeiro, certifique-se de que seu projeto está configurado para usar o Vite com o plugin React SWC.\n\nSe ainda não estiver, você pode criar um novo projeto usando o comando:\n\n- npm create vite@latest\n\nSelecione a opção React com a variante TypeScript + SWC durante a criação do projeto.\n\nDepois de ter o projeto configurado, siga estas etapas para configurar os path aliases:\n\n### 1) Instale as dependências necessárias:\n\nCertifique-se de que você tem o @types/node`` instalado como uma dependência de desenvolvimento (npm i -D @types/node)`.\n\n- Isso é necessário para evitar erros relacionados ao uso de __dirname em arquivos TypeScript ou JavaScript.\n\n### 2) Configure o arquivo vite.config.ts\n\nNo seu arquivo vite.config.ts, você precisará importar o módulo path do Node.js e definir os aliases desejados na seção resolve.alias.\n\nAqui está um exemplo de como fazer isso:\n\nimport { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport * as path from \"path\"; // Importe o módulo path\n\nexport default defineConfig({\nplugins: [react()],\nresolve: {\nalias: [{\nfind: \"@\",\nreplacement: path.resolve(__dirname, \"src\"),\n// Defina seus aliases aqui\n},],\n},\n});\nNeste exemplo, estamos configurando um alias para \"@\" que aponta para o diretório src do seu projeto.\n\nVocê pode adicionar mais aliases conforme necessário, seguindo o mesmo formato.",
      "description": "Veja neste post como configurar as importações com ",
      "keywords": [
        "path",
        "aliases",
        "projeto",
        "vite",
        "react",
        "logo",
        "para",
        "você",
        "import",
        "from"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc"
      }
    },
    {
      "id": "71aa536570034584",
      "url": "https://matheuscostadesign.github.io/blog/como-criar-apps-com-react-native",
      "title": "Como criar apps com React Native — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) React Native\n\n## Como criar apps com React Native\n\n*\nMatheus Costa 04 de Maio de 2023\n\n**\nNeste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS** utilizando React Native.\n\n## 1) Configuração do ambiente\n\n## 1.2) Quais as ferramentas de desenvolvimento?\n\n- [Node.js](https://nodejs.org/)\n\n- [Git](https://git-scm.com/downloads)\n\n- [Visual Studio Code](https://code.visualstudio.com/)\n\nExtensões:* [React Native Tools](https://marketplace.visualstudio.com/items?itemName=msjsdiag.vscode-react-native) *e* [Expo Tools](https://marketplace.visualstudio.com/items?itemName=byCedric.vscode-expo)\n\n- [Android Studio](https://developer.android.com/studio)\n\n- [Genynobile Scrcpy](https://github.com/Genymobile/scrcpy) (Para espelhar o smartphone no computador)\n\n## 1.3) Criando um app em React Native (com Expo)\n\n### Criando o app\n\nnpx create-expo-app NomeApp\nO comando acima irá criar um o aplicativo utilizando o [Expo](https://expo.dev/).\n\n### Executando o app\n\ncd NomeApp\nnpx expo start\n*Observações:*\n\n- Instalar o app **Expo Go** (Android/iOS*)\n\n- Ler o QR-Code gerado através do aplicativo Expo Go;\n\n*no iOS basta ler o QR-Code com o aplicativo de câmera;\n\n## 1.4) Criando um app em React Native (por CLI)\n\n*Observações:*\n\n- Ambiente: **Windows**\n\n- Dispositivo: **Android**\n\n- Conectar o dispositivo Android no computador via cabo USB;\n\n- No aparelho, **habilitar o modo de desenvolvedor** e **permitir a depuração USB**;\n\n- Ao conectar o celular no computador, **permitir a transferência de arquivos**;\n\n### Criando o app\n\nnpx react-native@latest init NomeApp\nO comando acima irá criar todos os arquivos necessários para o app;\n\n### Iniciando o app\n\ncd NomeApp\nnpx react-native run-android\nO aplicativo será instalado automaticamente no aparelho Android\n\nTambém é possível iniciar com Metro* separadamente com o comando:",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "android",
        "para",
        "native",
        "text",
        "react-native",
        "https",
        "javascript",
        "const",
        "view"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 5,
        "sourcePath": "/blog/como-criar-apps-com-react-native"
      }
    },
    {
      "id": "72d1c46d631ac927",
      "url": "https://matheuscostadesign.github.io/blog/2024/05/2024-05-31-cv",
      "title": "Como formatar um currículo de maneira adequada (Part 2)",
      "content": "- Google Docs\n- Microsoft Word.\n\n### 5) Existem templates disponíveis?\n\nSim. Procure por `\"resumeworded ats templates\"` no Google.\n\nVocê encontrará vários templates gratuitos para diversas áreas.\n\n### 6) Como fazer o teste do currículo?\n\n<a href=\"https://www.resumego.net/resume-checker/\">\n  <img src=\"/assets/images/posts/2024/05/resume-checker.jpg\" alt=\"Resume Checker\">\n</a>\n\nAcesse o site [Resume Checker](https://www.resumego.net/resume-checker/) e faça o upload do seu CV atual.\n\n### 7) O Que é o Resume Checker?\n\nO Resume Checker é uma ferramenta online desenvolvida pelo ResumoGO, projetada para analisar e otimizar currículos com foco em superar as barreiras impostas pelos ATS.\n\n### 8) Exemplo de formato de currículo ATS:\n\n```txt\nNome do Candidato\n[Endereço de Email] | [Telefone] | [LinkedIn]\n\nResumo Profissional:\nBreve resumo das qualificações e experiências relevantes para o cargo.\n\nExperiência Profissional:\nTítulo do Cargo\nNome da Empresa, Localização\nMês/Ano – Mês/Ano\n\n- Descrição das responsabilidades e realizações utilizando palavras-chave relevantes.\n- Outra responsabilidade importante.\n\nEducação:\nNome do Curso\nNome da Instituição, Localização\nMês/Ano de Conclusão\n\nHabilidades:\n\n- Habilidade 1\n- Habilidade 2\n- Habilidade 3\n\nCertificações:\n\n- Nome da Certificação, Instituição Emissora, Mês/Ano\n```",
      "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
      "keywords": [
        "currículo",
        "para",
        "nome",
        "entre",
        "como",
        "resume",
        "checker",
        "mês",
        "não",
        "muitas"
      ],
      "metadata": {
        "title": "Como formatar um currículo de maneira adequada",
        "description": "Veja neste artigo uma dica de ferramenta para melhorar seu currículo e conseguir passar pelas ferramentas atuais de seleção, as chamadas ATS.",
        "slug": "como-formatar-um-curriculo-de-maneira-adequada",
        "author": "Matheus Costa",
        "categories": "Carreira",
        "image": "/assets/images/posts/2024/05/como-formatar-um-curriculo-de-maneira-adequada.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2024/05/2024-05-31-cv.md"
      }
    },
    {
      "id": "7368a8b85a610a73",
      "url": "https://matheuscostadesign.github.io/blog/2023/09/2023-09-14-imagens-quebradas",
      "title": "Como detectar imagens quebradas (Part 1)",
      "content": "## O problema\n\nLidamos com muitas imagens em projetos web e muitas vezes esquecemos de tratar quando a foto está com algum problema de referência, link quebrado ou até uma imagem que depende da gestão do usuário (onde o mesmo não adicionou ou excluiu a mesma).\n\n## Exemplo de imagem quebrada\n\nExemplo de como uma imagem é exibida no navegador sem tratamento de erros:\n\n![Erro ao carregar o logo](/assets/images/posts/2023/09/exemplo-erro.jpg)\n\nErro ao carregar o logo\n\n## Soluções\n\n### 1) Tag `<img>` no HTML\n\n- A solução mais simples é se a imagem estiver sendo renderizada em uma tag `<img>`\n\n- Basta adicionar a propriedade `onerror` abaixo e o caminho da imagem que será renderizada caso a principal esteja com problema\n\n```html\n<img\n  src=\"logo.png\"\n  onerror=\"this.onerror=null;this.src='https://placehold.co/200x100';\"\n/>\n```\n\n### 2) Background-image no CSS\n\nSe a imagem estiver sendo renderizada via CSS com a propriedade `background-image` também podemos adicionar uma foto alternativa para substituir a que está quebrada:\n\n```html\n<div class=\"bg\">Imagem como background</div>\n```\n\n#### CSS\n\n```css\n.bg {\n  width: 200px;\n  height: 100px;\n  background-image: url(\"image-broken.png\"), url(\"https://placehold.co/200x100\");\n  background-size: cover;\n  background-repeat: no-repeat;\n}\n```\n\n### 3) Imagem no React\n\nExemplo de como adicionar a imagem de fallback para um componente `<img>` no React:\n\n```jsx\n<img\n  src=\"/assets/logo.png\"\n  alt=\"Logo do cliente\"\n  onError={(e) => {\n    e.target.onerror = null;\n    e.target.src = \"/assets/logo-fallback.png\";\n  }}\n/>\n```\n\n### 4) Componente React com background\n\nExemplo de background image para um componente MUI Box (React JSX):\n\n```js\nimport React from \"react\";",
      "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
      "keywords": [
        "imagem",
        "react",
        "logo",
        "assets",
        "onerror",
        "exemplo",
        "background",
        "problema",
        "como",
        "html"
      ],
      "metadata": {
        "title": "Como detectar imagens quebradas",
        "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
        "slug": "como-detectar-imagens-quebradas",
        "author": "Matheus Costa",
        "categories": "Git",
        "image": "/assets/images/posts/2023/09/como-detectar-imagens-quebradas.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2023/09/2023-09-14-imagens-quebradas.md"
      }
    },
    {
      "id": "75c76dea4706a8a8",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-22-header-scroll",
      "title": "Como alterar menu header após scroll com Javascript (Part 2)",
      "content": "- No exemplo acima, eu adiciono uma cor de fundo (branco), diminuo a altura do cabeçalho e adiciono também uma sombra.\n- Todas essas mudança só são aplicadas após o scroll na página.\n- E se voltar ao topo, a classe é removida e os estilos também.\n\n## Inspecionando elemento\n\n- Para validar o funcionamento da função, inspecione a página (F12) e verifique se seu menu está recebendo a classe `.ativo` quando o scroll é feito na página.\n\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!",
      "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
      "keywords": [
        "header",
        "scroll",
        "classe",
        "ativo",
        "página",
        "alterar",
        "html",
        "arquivo",
        "função",
        "para"
      ],
      "metadata": {
        "title": "Como alterar menu header após scroll com Javascript",
        "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
        "slug": "como-alterar-menu-header-apos-scroll-com-javascript",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/como-alterar-menu-header-apos-scroll.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2022/02/2022-02-22-header-scroll.md"
      }
    },
    {
      "id": "799f2daf09c65ce7",
      "url": "https://matheuscostadesign.github.io/blog",
      "title": "Blog (Página 1) — Matheus Costa (Part 2)",
      "content": "[Front-end Como fazer todos os links externos do site abrir em u... Veja neste artigo como fazer com que todos os links e](/blog/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia)",
      "description": "Dicas e conhecimentos sobre desenvolvimento web, frontend, React, Astro e design UX/UI por Matheus Costa.",
      "keywords": [
        "como",
        "blog",
        "para",
        "neste",
        "https",
        "design",
        "artigo",
        "configurar",
        "post",
        "fazer"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog"
      }
    },
    {
      "id": "7cb2375d78622e77",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-18-cor-texto",
      "title": "Como alterar a cor do texto selecionado de uma página com CSS",
      "content": "Sabia que é possível alterar a cor padrão do texto selecionado pelo usuário no navegador?\n\nCom essas duas linhas de CSS é possível alterar as cores e personalizá-las de acordo com a identidade visual do projeto/site/empresa.\n\n## Alterando a cor do texto selecionado\n\n```css\n::-moz-selection {\n  color: #ffffff;\n  background-color: #bf4b8a;\n}\n::selection {\n  color: #ffffff;\n  background-color: #bf4b8a;\n}\n```\n\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!",
      "description": "Aprenda neste artigo como alterar a cor do texto selecionado do site com CSS",
      "keywords": [
        "sabia",
        "possível",
        "alterar",
        "texto",
        "selecionado",
        "projeto",
        "color",
        "ffffff",
        "background-color",
        "bf4b8a"
      ],
      "metadata": {
        "title": "Como alterar a cor do texto selecionado de uma página com CSS",
        "description": "Aprenda neste artigo como alterar a cor do texto selecionado do site com CSS",
        "slug": "como-alterar-a-cor-do-texto-selecionado-de-uma-pagina-com-css",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/como-alterar-cor-do-texto-selecionado-de-um-site.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2022/02/2022-02-18-cor-texto.md"
      }
    },
    {
      "id": "80a79aa5c047357b",
      "url": "https://matheuscostadesign.github.io/blog/como-resolver-o-erro-disponibilize-imagens-em-formatos-de-ultima-geracao",
      "title": "Disponibilize imagens em formatos de última geração — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Disponibilize imagens em formatos de última geração\n\n*\nMatheus Costa 17 de Janeiro de 2022\n\nVeja neste artigo como resolver o problema no resultado do Google Pagespeed: “Disponibilize imagens em formatos de última geração”*\n\n### Convertendo imagens para WEBP com Photoshop\n\n- Baixar o plugin: WebPShop.8bi\n\n[Documentação WEBP do Google](https://developers.google.com/speed/webp/docs/webpshop#windows_installation_steps)\n\n- [Baixar projeto no Github](https://github.com/webmproject/WebPShop/releases)\n\n- Inserir o arquivo WebPShop.8bi no pasta Plugins do Photoshop\n\nEx: Photoshop18\\App\\Ps\\Plug-ins\n\n- Para exportar a imagem como WEBP basta clicar em Save As e selecionar o tipo: WEBP\n\n### Usando imagens WEBP no HTML\n\n&#x3C;picture>\n&#x3C;source type=\"image/webp\" srcset=\"flower.webp\" />\n&#x3C;source type=\"image/jpeg\" srcset=\"flower.jpg\" />\n&#x3C;img src=\"flower.jpg\" alt=\"\" />\n&#x3C;/picture>\n\n### WebP em imagens no background CSS\n\nbackground: url(\"../assets/images/bg-info.jpg\");\nbackground: -webkit-image-set(url(\"../assets/images/bg-info.webp\") 1x) no-repeat;\n\n### Referencias\n\n- [Ole Michelsen](https://ole.michelsen.dk/blog/using-webp-images-html-css/)\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como resolver o problema no resultado do Google Pagespeed: Disponibilize imagens em formatos de última geração",
      "keywords": [
        "webp",
        "imagens",
        "blog",
        "webpshop",
        "google",
        "https",
        "flower",
        "background",
        "disponibilize",
        "formatos"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-resolver-o-erro-disponibilize-imagens-em-formatos-de-ultima-geracao"
      }
    },
    {
      "id": "873cf3a8e722839e",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 11)",
      "content": "### Navegando entre as telas\n\n- Cada tela `<Stack.Screen>` tem uma propriedade chamada: `component`;\n- A propriedade `component` é uma referência a um componente React;\n- Esses componentes recebem uma propriedade chamada `navigation`;\n- O `navigation` possui vários métodos para vincular a outras telas;\n\n### Componente _HomeScreen.jsx_\n\n```jsx\nconst HomeScreen = ({ navigation }) => {\n  return (\n    <Button\n      title=\"Go to profile screen\"\n      onPress={() => navigation.navigate(\"Profile\", { name: \"Jane\" })}\n    />\n  );\n};\n```\n\n### Componente _ProfileScreen.jsx_\n\n```jsx\nconst ProfileScreen = ({ navigation, route }) => {\n  return <Text>This is {route.params.name}'s profile</Text>;\n};\n```\n\n---\n\n# 5) Observações Expo\n\n- Fluxos de trabalho no Expo\n  - Managed Workflow (padrão, sem acesso as pastas Android e iOS)\n  - Bare Workflow\n  - Development Builds\n    - Config Plugins\n    - Custom Clients\n\nParar mudar um fluxo Managed Workflow para Bare Workflow basta rodar o comando:\n\n```jsx\nnpx expo prebuild\n```\n\nhttps://docs.expo.dev/workflow/prebuild/\n\nConfigurar Build\n\nhttps://docs.expo.dev/build/setup/\n\nGerar APK\n\nhttps://docs.expo.dev/build-reference/apk/",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 10,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "89b3a7a4ecffbdfd",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 2)",
      "content": "\\*o Metro é muito parecido com o webpack (React para web) — só que p/ para apps — ele é um empacotador de JavaScript.\n\n### Atalhos\n\nPodemos personalizar os atalhos para executar o app em modo de desenvolvimento;\n\nPara isso, basta editar o arquivo `package.json.`\n\n```json\n\"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"lint\": \"eslint .\",\n    \"start\": \"react-native start\",\n    \"dev\": \"react-native start --reset-cache\",\n    \"test\": \"jest\"\n  }\n```\n\nNo exemplo acima foi adicionado o atalho `“dev”` com `—reset-cache`.\n\nAssim podemos iniciar o modo de desenvolvimento com:\n\n```bash\nnpm run dev\n```\n\n---\n\n# 2) O básico\n\n## 2.1) O que é o React Native?\n\nReact Native é uma **estrutura híbrida** e de código aberto para criar apps para _Android_ e _iOS_ usando [**React**](https://reactjs.org/);\n\nPara aprender React Native é necessário saber os **fundamentos de Javascript, HTML e CSS.**\n\n- [**Fundamentos de Javascript**](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript)\n- [**Uma reintrodução ao JavaScript**](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Language_overview)\n\n## 2.2) Desenvolvimento Nativo x Híbrido\n\n- Para criar apps nativos em **Android** utilizamos a linguagem **Java ou Kotlin;**\n\n- Para criar apps nativos para **iOS** é necessário codificar em **Swift ou Objective-C;**\n\n- O React Native é uma **estrutura híbrida** e utiliza a linguagem **Javascript** para criar as visualizações correspondentes do Android e iOS em tempo de execução;\n\n## 2.3) Componentes principais\n\n- O React Native possui muitos componentes principais, como por exemplo:",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "8ac6b6b3d60228aa",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-02-comandos-bash",
      "title": "Guia básico de comandos terminal SSH/Bash/Putty",
      "content": "Aprenda neste post alguns dos comandos de terminal mais utilizados no dia a dia\n\n## Comandos básicos para terminal\n\n- Localizar pasta:`cd nome_da_pasta`\n- Voltar pasta/diretório: `cd ..`\n- Listar conteúdo do diretório: `ls`\n- Descompactar ZIP:`unzip nome_do_arquivo.zip`\n- Apagar pasta inteira: `rm -rf nome_da_pasta`\n- Apagar arquivo específico: `rm nome_do_arquivo1.txt`\n- Apagar todos arquivos, menos a pasta: `rm -rf *`\n- Limpar comandos: `clear`\n\n## Backup via SSH\n\n- Acessar a raiz da pasta com o `PuTTY`\n- Executar o comando:\n  `tar -czvf site.tar.gz public_html && mv site.tar.gz public_html && ls -lha public_html`\n- O arquivo `site.tar.gz` será criado na raiz do site\n- Basta acessar o domínio e fazer o download.\n  - Exemplo: `https://safebras.com.br/site.tar.gz`\n- Comando para excluir o arquivo: `rm -f public_html/site.tar.gz`",
      "description": "Aprenda neste post alguns dos comandos de terminal mais utilizados no dia a dia",
      "keywords": [
        "pasta",
        "site",
        "nome",
        "arquivo",
        "public",
        "html",
        "comandos",
        "apagar",
        "terminal",
        "para"
      ],
      "metadata": {
        "title": "Guia básico de comandos terminal SSH/Bash/Putty",
        "description": "Aprenda neste post alguns dos comandos de terminal mais utilizados no dia a dia",
        "slug": "guia-basico-de-comandos-terminal-ssh-bash-putty",
        "author": "Matheus Costa",
        "categories": "Tecnologia",
        "image": "/assets/images/posts/2023/05/guia-basico-de-comandos-terminal-ssh-bash-putty.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2023/05/2023-05-02-comandos-bash.md"
      }
    },
    {
      "id": "8b9463ddbfcc0ad0",
      "url": "https://matheuscostadesign.github.io/blog/como-alterar-menu-header-apos-scroll-com-javascript",
      "title": "Como alterar menu header após scroll com Javascript — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como alterar menu header após scroll com Javascript\n\nMatheus Costa 22 de Fevereiro de 2022\n\nVeja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS), sem utilizar o framework jQuery.\n\n## Configurando o HTML\n\n- Primeiramente vamos chamar em nosso HTML o arquivo Javascript que irá conter a função para alterar o header.\n\n- Neste exemplo, o arquivo de scripts está na pasta js/scripts\n\n- Insira o comando abaixo antes do fechamento da tag &#x3C;/body>\n\n&#x3C;script src=\"js/scripts.js\">&#x3C;/script>\n\n## Adicionando função no Javascript\n\n- Agora insira o comando abaixo no arquivo de scripts\n\n- Lembrando que é necessário alterar o seletor: querySelector(\".header\") para que ele capture o seu elemento HTML, seja uma classe ou um ID.\n\n- Exemplo: document.querySelector(\"NOME-DA-SUA-CLASSE-OU-ID\")\n\n// Função Alterar Header Apos Scroll\nfunction alterarHeaderAposScroll() {\nconst header = document.querySelector(\".header\"); // captura o header\nconst navHeight = header.offsetHeight;\nif (window.scrollY >= navHeight) {\n// se o scroll for maior que a altura do header adiciona a classe ativo\nheader.classList.add(\"ativo\");\n} else {\nheader.classList.remove(\"ativo\"); // remove a classe\n}\n}\n\n// Chamada das funções pelo scroll\nwindow.addEventListener(\"scroll\", function () {\nalterarHeaderAposScroll();\n});\n\n## Personalizando a classe no CSS\n\n- Agora é só adicionar a classe .ativo no arquivo .CSS do seu menu e fazer as personalizações desejadas.\n\n- Toda vez que o scroll na página for maior que a altura do header a classe será adicionada\n\n.header {\nposition: fixed;\nz-index: 10;\nwidth: 100%;\nheight: 12.5rem;\nbackground: transparent;\ndisplay: flex;\nalign-items: center;\ntransition: all 0.3s;\n}\n\n// Habilita classe .ativo após o scroll\n.header.ativo {\nbackground: $white;\nheight: 8rem;\nbox-shadow: 0px 4px 16px rgba(0, 0, 0, 0.05);\n}",
      "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
      "keywords": [
        "header",
        "scroll",
        "classe",
        "ativo",
        "alterar",
        "página",
        "menu",
        "após",
        "javascript",
        "arquivo"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-alterar-menu-header-apos-scroll-com-javascript"
      }
    },
    {
      "id": "9271813f515cff87",
      "url": "https://matheuscostadesign.github.io/blog/como-atualizar-ano-atual-do-site-automaticamente-com-javascript",
      "title": "Atualizar ano atual automaticamente com Javascript — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Atualizar ano atual automaticamente com Javascript\n\nMatheus Costa 21 de Janeiro de 2022\n\nVeja neste artigo como mostrar o ano atual automaticamente no footer do site\n\n## HTML\n\n- Adicione o conteúdo da tag &#x3C;span> abaixo no seu arquivo HTML, onde deseja exibir o ano atual automaticamente.\n\n&#x3C;span id=\"mostrarAnoAtual\">&#x3C;/span>\n\n## Javascript\n\n- Já no arquivo no seu arquivo Javascript, insira os comandos abaixo:\n\nconst ano = document.getElementById(\"mostrarAnoAtual\");\nconst anoAtual = new Date();\nano.innerHTML = anoAtual.getFullYear();\n\n- Dessa forma, na tag &#x3C;span> que foi adicionado no seu HTML será exibido o ano atual automaticamente, sem a necessidade de ficar trocando todo ano.\n\n>\nGostou da dica? Sabe de algo que possa melhor? Então comente abaixo!\n\nValeeu!\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como mostrar o ano atual automaticamente no footer do site",
      "keywords": [
        "atual",
        "automaticamente",
        "span",
        "blog",
        "javascript",
        "html",
        "abaixo",
        "arquivo",
        "mostraranoatual",
        "const"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-atualizar-ano-atual-do-site-automaticamente-com-javascript"
      }
    },
    {
      "id": "996bd195b6b5ac1f",
      "url": "https://matheuscostadesign.github.io/blog/2022/03/2022-03-22-voltar-topo",
      "title": "Como fazer o efeito voltar ao topo suave com jQuery (Part 1)",
      "content": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery, que irá funcionar perfeitamente nos browsers para Windows (Chrome, Brave, Firefox, Edge, etc) quanto para o browser da Apple/iOS/Macbook (Safari).\n\n## 1. Inserindo o jQuery no HTML\n\n- Primeiramente faça o download da biblioteca jQuery (ou utilize via CDN):\n\n- <a href=\"https://jquery.com/download/\" target=\"_blank\" rel=\"noopener noreferrer\">https://jquery.com/download/</a>\n\n- Referencie a biblioteca jQuery em seu HTML, antes do fechamento da tag `</body>`\n\n```html\n<script src=\"js/jquery-3.6.0.min.js\"></script>\n```\n\n## 2. Criando o elemento/botão que irá fazer o efeito de voltar ao topo\n\n- No exemplo abaixo, vamos criar um simples link, com um ícone em SVG:\n\n```html\n<a href=\"#\" title=\"Voltar ao topo\" class=\"voltar-topo\">\n  <img src=\"assets/icone-top.svg\" alt=\"Voltar ao topo\" />\n</a>\n```\n\n### 3. Scroll suave ativado pelo botão\n\n- Agora basta adicionar o código abaixo no seu arquivo de scripts e pronto!\n- Lembrando que o comando `$(\".voltar-topo\")` faz referencia ao elemento HTML\n- Portanto, se seu botão está com outro nome, ou um ID, por exemplo, é só alterar essa opção\n\n```js\n// Voltar ao topo suave (jQuery)\n$(document).ready(function () {\n  $(\".voltar-topo\").click(function () {\n    // elemento/botao\n    $(\"html, body\").animate({ scrollTop: 0 }, \"slow\");\n    return false;\n  });\n});\n```\n\n### 4. Scroll suave no menu (Header)\n\n- Caso queira que os links do seu menu também levem a sessão de sua página de forma suave, adicione o código abaixo em seu arquivo de scripts e faça as mudanças necessárias nas linhas onde o código está comentado",
      "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
      "keywords": [
        "html",
        "header",
        "jquery",
        "suave",
        "voltar",
        "topo",
        "href",
        "class",
        "menu",
        "sessão"
      ],
      "metadata": {
        "title": "Como fazer o efeito voltar ao topo suave com jQuery",
        "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
        "slug": "como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/botao-voltar-ao-topo-suave-jquery.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2022/03/2022-03-22-voltar-topo.md"
      }
    },
    {
      "id": "9a55788b4344d3d2",
      "url": "https://matheuscostadesign.github.io/blog/guia-rapido-de-semantica-html-para-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers — Blog Matheus Costa (Part 2)",
      "content": "Além disso, um HTML bem estruturado melhora a acessibilidade, atendendo às diretrizes do [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag/), e pode até contribuir para o SEO, aumentando a visibilidade do conteúdo.\n\n## Como a semântica HTML impacta o trabalho de UX Writers?\n\nUX Writers criam textos que guiam, informam e engajam os usuários em interfaces digitais, como botões, mensagens de erro e formulários. Embora tradicionalmente o foco esteja na escolha das palavras, a forma como esse texto é codificado no HTML afeta sua eficácia.\n\nUm texto mal estruturado pode confundir leitores de tela ou ser mal interpretado por sistemas automatizados, comprometendo a experiência do usuário.\n\nPor exemplo, um botão com o texto “Enviar” codificado como &#x3C;div>Enviar&#x3C;/div> não será reconhecido como um elemento interativo por tecnologias assistivas. Em vez disso, usar &#x3C;button>Enviar&#x3C;/button> garante que o elemento seja identificado corretamente, permitindo que usuários com deficiência naveguem com facilidade.\n\nPara UX Writers, colaborar com desenvolvedores na escolha de tags HTML corretas é, portanto, uma extensão natural de seu trabalho.\n\n## Principais elementos semânticos HTML para UX Writers\n\nAbaixo, apresentamos os elementos semânticos mais relevantes para UX Writers, com explicações e exemplos práticos:\n\n### 1) Hierarquia de cabeçalhos (&#x3C;h1> a &#x3C;h6>)\n\nCabeçalhos organizam o conteúdo em níveis de importância, facilitando a navegação e a compreensão. Um &#x3C;h1> deve ser usado para o título principal da página, enquanto &#x3C;h2> a &#x3C;h6> indicam subtítulos. *Exemplo:*\n\n&#x3C;h1>Crie sua conta&#x3C;/h1>\n&#x3C;h2>Informações pessoais&#x3C;/h2>\n&#x3C;h3>Endereço&#x3C;/h3>\n&#x3C;h4>CEP&#x3C;/h4>\n\n### 2) Parágrafos (&#x3C;p>)\n\nO elemento &#x3C;p> é usado para blocos de texto, garantindo que o conteúdo seja apresentado como uma unidade coesa. *Exemplo:*",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "como",
        "html",
        "semântica",
        "exemplo",
        "conteúdo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 5,
        "sourcePath": "/blog/guia-rapido-de-semantica-html-para-ux-writers"
      }
    },
    {
      "id": "9adfbe8d7e382c54",
      "url": "https://matheuscostadesign.github.io/blog/2024/04/2024-04-12-axios",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs (Part 4)",
      "content": "return (\n    <ImgBackground>\n      <Container>\n        <ContainerSurface>\n          <View className=\"items-center justify-center gap-y-4\">\n            <LottieSessionExpired />\n            <Text className=\"font-title text-2xl\">\n              {t(\"session-expired.title\")}\n            </Text>\n            <Text className=\"font-body\">\n              {t(\"session-expired.description\")}\n            </Text>\n            <Button\n              mode=\"contained\"\n              icon=\"logout\"\n              className=\"w-[300]\"\n              onPress={() => {\n                clearAllSession();\n              }}\n            >\n              {t(\"session-expired.button\")}\n            </Button>\n          </View>\n        </ContainerSurface>\n      </Container>\n    </ImgBackground>\n  );\n}\n```",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axiosinterceptor"
      ],
      "metadata": {
        "title": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "slug": "axios-interceptor-consumindo-varias-apis",
        "author": "Matheus Costa",
        "categories": "Frontend",
        "image": "/assets/images/posts/2024/04/axios-interceptor-consumindo-varias-apis.jpeg",
        "comments": "true",
        "chunkIndex": 3,
        "totalChunks": 4,
        "sourcePath": "blog/2024/04/2024-04-12-axios.md"
      }
    },
    {
      "id": "a4413e88d6dfb5bb",
      "url": "https://matheuscostadesign.github.io/blog/2022/03/2022-03-18-whatsapp",
      "title": "Como enviar dados do formulário HTML para o Whatsapp (Part 2)",
      "content": "```html\n<!-- id=\"nome\" -->\n<input\n  type=\"text\"\n  name=\"nome\"\n  id=\"nome\"\n  placeholder=\"Informe seu nome completo\"\n  required\n/>\n<!-- id=\"telefone\" -->\n<input\n  type=\"tel\"\n  name=\"telefone\"\n  id=\"telefone\"\n  placeholder=\"Informe seu telefone\"\n  required\n/>\n<!-- id=\"email\" -->\n<input\n  type=\"email\"\n  name=\"email\"\n  id=\"email\"\n  placeholder=\"Seu melhor e-mail\"\n  required\n/>\n```\n\n### 3) Criar script\n\n- Agora, no seu JavaScript inclua o código abaixo:\n\n  - **Lembrando que você deve alterar o código de acordo com os campos do seu formulário.**\n\n```js\n<script>\n    function abrirWhatsapp() {\n      var nome = document.getElementById(\"nome\").value; // nome é o id do input no HTML\n      var telefone = document.getElementById(\"telefone\").value; // telefone é o id do input no HTML\n      var email = document.getElementById(\"email\").value; // e assim vai\n      var msg = document.getElementById(\"msg\").value;\n\n      var url = \"https://wa.me/5517999999999?text=\" // Seu numero do Whatsapp com DDD\n        + \"*Formulário de Contato*\" + \"%0a\" // Mensagem personalizada\n        + \"%0a\" // Quebra de linha\n        + \"*Nome*: \" + nome + \"%0a\" // Dados do formulário\n        + \"*Telefone*: \" + telefone + \"%0a\"\n        + \"*E-mail*: \" + email + \"%0a\"\n        + \"*Mensagem*: \" + msg;\n      window.open(url, '_blank').focus();\n    }\n</script>\n```\n\nGostou da dica? Sabia dela ou já usou em algum projeto?\n\nTem alguma dica para acrescentar?\n\nComenta aí o que achou.\n\nValeeu! 👊",
      "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
      "keywords": [
        "html",
        "nome",
        "telefone",
        "formulário",
        "matheuscostadesign",
        "https",
        "email",
        "codepen",
        "input",
        "dados"
      ],
      "metadata": {
        "title": "Como enviar dados do formulário HTML para o Whatsapp",
        "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
        "slug": "como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/como-enviar-dados-do-formulário-html-para-o-whatsapp.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2022/03/2022-03-18-whatsapp.md"
      }
    },
    {
      "id": "a6462ab3a6689018",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 5)",
      "content": "```jsx\nconst Cafe = () => {\n  return (\n    <>\n      <Cat name=\"Munkustrap\" />\n      <Cat name=\"Spot\" />\n    </>\n  );\n};\n```\n\n## 2.5) Código específico Android/iOS\n\n- Com React Native é possível **implementar componentes visuais separados** p/ Android e iOS;\n\n- Há duas maneiras de separar o código por plataforma:\n\n  1. **Usando o \\*Platform Module**;\\*\n  2. **Usando extensões de arquivos específicas;**\n\n### **Platform Module**\n\n- Essa opção é recomendada **para pequenas partes de código;**\n\n- É possível usar a lógica de detecção para implementar o código específico da plataforma;\n\n#### **Platform:**\n\n```jsx\nimport { Platform, StyleSheet } from \"react-native\";\n\nconst styles = StyleSheet.create({\n  height: Platform.OS === \"ios\" ? 200 : 100,\n});\n```\n\n#### **Platform.select - pode ser: `'ios' | 'android' | 'native' | 'default'`**\n\n```jsx\nimport { Platform, StyleSheet } from \"react-native\";\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    ...Platform.select({\n      ios: {\n        backgroundColor: \"red\",\n      },\n      android: {\n        backgroundColor: \"green\",\n      },\n      default: {\n        // outras plataformas, web por exemplo\n        backgroundColor: \"blue\",\n      },\n    }),\n  },\n});\n```\n\n#### **Detectar a versão do Android:**\n\n```jsx\nimport { Platform } from \"react-native\";\n\nif (Platform.Version === 25) {\n  console.log(\"Running on Nougat!\");\n}\n```\n\n#### **Detectar a versão do iOS:**\n\n```jsx\nimport { Platform } from \"react-native\";\n\nconst majorVersionIOS = parseInt(Platform.Version, 10);\nif (majorVersionIOS <= 9) {\n  console.log(\"Work around a change in behavior\");\n}\n```\n\n### **Extensões de arquivos específicas**\n\n- Recomendado para **códigos específicos da plataforma mais complexos;**\n\n- Com essa opção é possível **dividir o código em arquivos separados**;\n\n- Para utilizar esse opção é só criar o componente com o nome de cada plataforma, por exemplo:\n\n```jsx\nBigButton.ios.js;\nBigButton.android.js;\n```",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 4,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "a65257f43b36f336",
      "url": "https://matheuscostadesign.github.io/blog/guia-rapido-de-semantica-html-para-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers — Blog Matheus Costa (Part 4)",
      "content": "&#x3C;section>\n&#x3C;h2>Perguntas frequentes&#x3C;/h2>\n&#x3C;article>\n&#x3C;h3>Como recuperar minha senha?&#x3C;/h3>\n&#x3C;p>Clique em \"Esqueci minha senha\" e siga as instruções&#x3C;/p>\n&#x3C;/article>\n&#x3C;/section>\n\n## Exemplo prático: formulário de login\n\nConsidere um formulário de login simples. Um UX Writer pode redigir os textos e sugerir a seguinte estrutura HTML semântica:\n\n&#x3C;form>\n&#x3C;h1>Entrar na sua conta&#x3C;/h1>\n&#x3C;div>\n&#x3C;label for=\"email\">E-mail:&#x3C;/label>\n&#x3C;input type=\"email\" id=\"email\" required />\n&#x3C;/div>\n&#x3C;div>\n&#x3C;label for=\"senha\">Senha:&#x3C;/label>\n&#x3C;input type=\"password\" id=\"senha\" required />\n&#x3C;/div>\n&#x3C;p class=\"erro\" hidden>E-mail ou senha incorretos&#x3C;/p>\n&#x3C;button type=\"submit\">Entrar&#x3C;/button>\n&#x3C;a href=\"/recuperar-senha\">Esqueceu sua senha?&#x3C;/a>\n&#x3C;/form>\nNesse exemplo:\n\n- &#x3C;h1> estabelece a hierarquia principal.\n\n- &#x3C;label> associa os campos aos seus textos descritivos.\n\n- &#x3C;p class=\"erro\"> fornece feedback claro em caso de erro.\n\n- &#x3C;button> indica uma ação interativa.\n\nEssa estrutura é acessível, legível por máquinas e fácil de navegar, demonstrando como a semântica HTML amplifica o impacto do texto.\n\n## Práticas recomendadas para UX Writers\n\nPara integrar a semântica HTML ao fluxo de trabalho de UX Writing, algumas práticas são indispensáveis:\n\n- Testes de acessibilidade:** Utilize ferramentas como o Lighthouse no DevTools para verificar se o HTML atende às diretrizes do WCAG. Uma das maneiras de executar o Lighthouse é usar o [PageSpeed Insights](https://pagespeed.web.dev/), ferramenta oficial do Google para analisar a semântica e a velocidade das páginas da Web. Seguir as recomendações do teste garante que o conteúdo seja acessível a todos os usuários.\n\n*",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "como",
        "html",
        "semântica",
        "exemplo",
        "conteúdo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "chunkIndex": 3,
        "totalChunks": 5,
        "sourcePath": "/blog/guia-rapido-de-semantica-html-para-ux-writers"
      }
    },
    {
      "id": "a7c1f347caebb161",
      "url": "https://matheuscostadesign.github.io/blog/como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl",
      "title": "Como habilitar acesso à câmera em sites sem certificado HTTPS/SSL — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Tecnologia\n\n## Como habilitar acesso à câmera em sites sem certificado HTTPS/SSL\n\n*\nMatheus Costa 10 de Junho de 2024\n\nJá tentou fazer o acesso à câmera do seu dispositivo pelo browser e a permissão de acesso a mesma não apareceu?\n\nIsso provavelmente pode ser porque seu site não tem o certificado HTTPS/SSL, e o navegador bloqueia o acesso.\n\nMas existe uma configuração para ativar essa opção nos principais navegadores da web\n\nEssa configuração é útil para sites locais (localhost / 127.0.0.1*), em modo de desenvolvimento/testes.\n\nVeja neste artigo como ativar.\n\n### Ativando no Chrome (desktop/mobile)\n\n*\n\n-\nDigite o link abaixo na barra de navegação do Chrome:\n\nchrome://flags/#unsafely-treat-insecure-origin-as-secure\n\n-\nAtive a opção:\n\n**“Insecure origins treated as secure”**\n\n-\nInsira as URLs que deseja\n\nPor exemplo: http://10.0.0.242:5173\n\n-\nReinicie navegador e pronto!\n\n### No Safari\n\n#### Desktop\n\n-\nHabilitar modo de desenvolvedor\n\n-\nAcessar na página:\n\nDesenvolvedor > Mostrar inspetor web > Tocar no ícone: Ajustes do Dispositivo > Habilitar: WebRTC - Permitir captura de mídia em sites pouco seguros\n\n#### Mobile\n\n** **Opção só está disponível a partir do iOS 13***\n\n-\nCom o site aberto, toque no ícone “AA” no canto superior esquerdo.\n\n-\nEm seguida, toque em:\n\nAjustes do site > Câmera > Permitir\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste post como habilitar acesso à câmera em sites sem certificado HTTPS/SSL",
      "keywords": [
        "acesso",
        "blog",
        "habilitar",
        "câmera",
        "sites",
        "site",
        "opção",
        "chrome",
        "como",
        "certificado"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl"
      }
    },
    {
      "id": "a8270318565567f4",
      "url": "https://matheuscostadesign.github.io/blog/bibliotecas-ui-para-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## As melhores bibliotecas de UI para Frontend em 2024\n\nMatheus Costa 01 de Maio de 2023\n\nConfira neste post alguns links de bibliotecas para estilização e construção de páginas web modernas.\n\n## Lista de bibliotecas Front-end\n\n- Veja a lista de algumas libs para usar no Front-end\n\n## 1) [Astro](https://astro.build/)\n\n[](https://astro.build/)\nAstro é um framework moderno para construção de sites que permite aos desenvolvedores criar aplicações web rápidas e eficientes sem comprometer a experiência do usuário ou o desempenho da página. Ele foi projetado com o objetivo de oferecer uma alternativa ao tradicional “full-stack” JavaScript, permitindo que os desenvolvedores escolham como querem renderizar suas páginas (no lado do servidor, no cliente ou em ambos) sem ter que se preocupar com a complexidade adicional que isso pode trazer.\n\n## 2) [Shadcn/UI](https://ui.shadcn.com/)\n\n[](https://ui.shadcn.com/)\nA biblioteca Shadcn/UI é uma coleção de componentes reutilizáveis baseados no Radix UI e Tailwind CSS. Ela é projetada para ser fácil de usar e personalizar, oferecendo uma experiência intuitiva e descomplicada em comparação com outras bibliotecas de componentes.\n\nOs componentes são acessíveis através de métodos de copiar e colar ou instalação via CLI, permitindo uma rápida integração nos projetos de desenvolvimento web com React.\n\nA Shadcn/UI é popularmente utilizada em projetos com Next.js, Gatsby, Remix, Astro, Laravel e Vite, e pode ser integrada manualmente com outras tecnologias. Ela oferece recursos como temas prontos, suporte ao modo escuro e editor de temas para personalizar a aparência dos componentes. Além disso, os componentes são acessíveis e podem ser customizados para atender às necessidades específicas dos aplicativos\n\n## 3) [Material UI (MUI)](https://mui.com/material-ui/)",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "experiência",
        "desenvolvimento",
        "material",
        "design",
        "desenvolvedores"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "/blog/bibliotecas-ui-para-frontend"
      }
    },
    {
      "id": "a96eda14cf5a166d",
      "url": "https://matheuscostadesign.github.io/blog/2024/07/2024-07-12-ssh-github",
      "title": "Como configurar chave SSH para o Github",
      "content": "Aprenda neste post como configurar chave SSH para o Github\n\n### 1) Gerando chave SSH\n\n- Executar no terminal\n  - `ssh-keygen -t ed25519 -C \"your_email@example.com\"`\n- Colocar o e-mail do Github em “your_email…”\n- Pressionar **“Enter”** p/ gerar a chave no diretório padrão\n- Após isso, irá solicitar uma senha.\n- Insira e repita a senha, por exemplo:\n  - `123456`\n- Se der certo, **2 chaves serão criadas** _(pública e privada)_\n- Acesse o diretório do arquivo público\n- No terminal irá mostrar onde o arquivo foi gerado, por exemplo:\n  - `Your public key has been saved in /Users/users/.ssh/id_ed25519.pub`\n- Agora, acesse essa pasta e abra o arquivo `“id_ed25519.pub”` em um editor de texto (VSCode, por exemplo)\n- O arquivo deve conter o seguinte:\n  - `ssh-ed25519 BBBBD4OabD2mZK26PU5BBBbqT7SzVqptcJOdFw2gXMGQ2ZeyGAfhZHcb2Qo9wmdZ your_email@example.com`\n- Copie esse conteúdo do arquivo.\n\n### 2) Configuração no Github\n\n- O próximo passo é [**abrir a página de configurações do Github**](https://github.com/settings/profile)\n- No menu lateral, clique em:\n  - **SSH and GPG keys**\n  - Clique no botão: **New SSH key**\n  - Informe um título p/ esta chave `(Ex: MacOS)`\n  - Cole o conteúdo do arquivo `“id_ed25519.pub”` no campo “Key” e salve as configurações\n- O próximo passo é fazer o clone do projeto\n- Vá até o repositório no Github e copie a URL de clone via SSH\n- Exemplo: `git@github.com:repo/app.git`\n  - Baixe o [Fork](https://git-fork.com/)\n  - Navegue até: `Fork > File > Clone`\n  - Insira a URL SSH, faça o login na conta e pronto!\n\n[Documentação completa](https://docs.github.com/pt/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)",
      "description": "Aprenda neste post como configurar chave SSH para o Github",
      "keywords": [
        "github",
        "arquivo",
        "chave",
        "ed25519",
        "your",
        "exemplo",
        "email",
        "https",
        "clone",
        "terminal"
      ],
      "metadata": {
        "title": "Como configurar chave SSH para o Github",
        "description": "Aprenda neste post como configurar chave SSH para o Github",
        "slug": "como-configurar-chave-ssh-github",
        "author": "Matheus Costa",
        "categories": "Tecnologia",
        "image": "/assets/images/posts/2024/07/como-configurar-chave-ssh-github.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2024/07/2024-07-12-ssh-github.md"
      }
    },
    {
      "id": "ab1f01fe4d7e4195",
      "url": "https://matheuscostadesign.github.io/blog/como-visualizar-alteracoes-em-um-site-ou-projeto-em-tempo-real-usando-o-visual-studio-code-e-o-live-server",
      "title": "Como visualizar alterações em um site ou projeto em tempo real usando o Visual Studio Code e o Live Server — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como visualizar alterações em um site ou projeto em tempo real usando o Visual Studio Code e o Live Server\n\nMatheus Costa 01 de Setembro de 2020\n\nEssa dica irá aumentar muito a sua produtividade no momento em que estiver desenvolvendo o seu site/projeto e quiser ver as alterações em tempo real, sem a necessidade de ficar atualizando a página do navegador o tempo todo.\n\nEntão sem mais enrolações, vamos lá…\n\n## Instalação\n\n- Abra o gerenciador de Extensões do Visual Studio Code;\n\n- Pesquise por: [**Live Server**](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer);\n\n- Clique em: **Install**;\n\n- Aguarde o processo de instalação e se necessário for reinicie o VSCode;\n\n## Execução\n\n- Abra a pasta do seu projeto;\n\n- Na barra inferior do software selecione a opção: **Go Live**\n\n## Pronto!\n\nO seu navegador padrão será executado automaticamente e qualquer alteração no seu projeto será visualizada em tempo real.\n\n[Ver todos os artigos](/blog)",
      "description": "Essa dica irá aumentar muito a sua produtividade no momento em que estiver desenvolvendo o seu site/projeto e quiser ver as alterações em tempo real",
      "keywords": [
        "projeto",
        "tempo",
        "blog",
        "real",
        "live",
        "alterações",
        "site",
        "visual",
        "studio",
        "code"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-visualizar-alteracoes-em-um-site-ou-projeto-em-tempo-real-usando-o-visual-studio-code-e-o-live-server"
      }
    },
    {
      "id": "acc5b50cf4bcf8d6",
      "url": "https://matheuscostadesign.github.io/blog/o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? — Blog Matheus Costa (Part 3)",
      "content": "O Figma Buzz representa uma evolução significativa na forma como equipes de design e marketing colaboram na criação de materiais visuais. Ao centralizar a produção de ativos em uma plataforma intuitiva e integrada, ele promove eficiência, consistência e agilidade, atendendo às demandas dinâmicas do mercado atual. Para profissionais interessados em design, o Figma Buzz oferece uma oportunidade valiosa de otimizar processos e fortalecer a presença da marca em diversos canais de comunicação.\n\n[Ver todos os artigos](/blog)",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "design",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "/blog/o-que-e-o-figma-buzz"
      }
    },
    {
      "id": "ace2036808b7649e",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-01-libs-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 (Part 1)",
      "content": "Confira neste post alguns links de bibliotecas para estilização e construção de páginas web modernas.\n\n## Lista de bibliotecas Front-end\n\n- Veja a lista de algumas libs para usar no Front-end\n\n## 1) [Astro](https://astro.build/)\n\n<a href=\"https://astro.build/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/astro.jpeg\" alt=\"Astro\">\n</a>\n\nAstro é um framework moderno para construção de sites que permite aos desenvolvedores criar aplicações web rápidas e eficientes sem comprometer a experiência do usuário ou o desempenho da página. Ele foi projetado com o objetivo de oferecer uma alternativa ao tradicional \"full-stack\" JavaScript, permitindo que os desenvolvedores escolham como querem renderizar suas páginas (no lado do servidor, no cliente ou em ambos) sem ter que se preocupar com a complexidade adicional que isso pode trazer.\n\n## 2) [Shadcn/UI](https://ui.shadcn.com/)\n\n<a href=\"https://ui.shadcn.com/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/shadcnui.jpg\" alt=\"Shadcn/UI\">\n</a>\n\nA biblioteca Shadcn/UI é uma coleção de componentes reutilizáveis baseados no Radix UI e Tailwind CSS. Ela é projetada para ser fácil de usar e personalizar, oferecendo uma experiência intuitiva e descomplicada em comparação com outras bibliotecas de componentes.\n\nOs componentes são acessíveis através de métodos de copiar e colar ou instalação via CLI, permitindo uma rápida integração nos projetos de desenvolvimento web com React.\n\nA Shadcn/UI é popularmente utilizada em projetos com Next.js, Gatsby, Remix, Astro, Laravel e Vite, e pode ser integrada manualmente com outras tecnologias. Ela oferece recursos como temas prontos, suporte ao modo escuro e editor de temas para personalizar a aparência dos componentes. Além disso, os componentes são acessíveis e podem ser customizados para atender às necessidades específicas dos aplicativos\n\n## 3) [Material UI (MUI)](https://mui.com/material-ui/)",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "2023",
        "astro",
        "href",
        "target",
        "blank"
      ],
      "metadata": {
        "title": "As melhores bibliotecas de UI para Frontend em 2024",
        "description": "Links de algumas bibliotecas de estilização no front-end",
        "slug": "bibliotecas-ui-para-frontend",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2023/bibliotecas-ui-para-frontend.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 4,
        "sourcePath": "blog/2023/05/2023-05-01-libs-frontend.md"
      }
    },
    {
      "id": "b1b47e3cf2955a7f",
      "url": "https://matheuscostadesign.github.io/blog/como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery",
      "title": "Como fazer o efeito voltar ao topo suave com jQuery — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como fazer o efeito voltar ao topo suave com jQuery\n\nMatheus Costa 22 de Março de 2022\n\nVeja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery, que irá funcionar perfeitamente nos browsers para Windows (Chrome, Brave, Firefox, Edge, etc) quanto para o browser da Apple/iOS/Macbook (Safari).\n\n## 1. Inserindo o jQuery no HTML\n\n-\nPrimeiramente faça o download da biblioteca jQuery (ou utilize via CDN):\n\n-\n[](https://jquery.com/download/)[https://jquery.com/download/](https://jquery.com/download/)\n\n-\nReferencie a biblioteca jQuery em seu HTML, antes do fechamento da tag &#x3C;/body>\n\n&#x3C;script src=\"js/jquery-3.6.0.min.js\">&#x3C;/script>\n\n## 2. Criando o elemento/botão que irá fazer o efeito de voltar ao topo\n\n- No exemplo abaixo, vamos criar um simples link, com um ícone em SVG:\n\n&#x3C;a href=\"#\" title=\"Voltar ao topo\" class=\"voltar-topo\">\n&#x3C;img src=\"assets/icone-top.svg\" alt=\"Voltar ao topo\" />\n&#x3C;/a>\n\n### 3. Scroll suave ativado pelo botão\n\n- Agora basta adicionar o código abaixo no seu arquivo de scripts e pronto!\n\n- Lembrando que o comando $(\".voltar-topo\") faz referencia ao elemento HTML\n\n- Portanto, se seu botão está com outro nome, ou um ID, por exemplo, é só alterar essa opção\n\n// Voltar ao topo suave (jQuery)\n$(document).ready(function () {\n$(\".voltar-topo\").click(function () {\n// elemento/botao\n$(\"html, body\").animate({ scrollTop: 0 }, \"slow\");\nreturn false;\n});\n});\n\n### 4. Scroll suave no menu (Header)\n\n- Caso queira que os links do seu menu também levem a sessão de sua página de forma suave, adicione o código abaixo em seu arquivo de scripts e faça as mudanças necessárias nas linhas onde o código está comentado",
      "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
      "keywords": [
        "jquery",
        "header",
        "voltar",
        "suave",
        "topo",
        "html",
        "class",
        "download",
        "href",
        "menu"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery"
      }
    },
    {
      "id": "b4c2f3e4d435c09f",
      "url": "https://matheuscostadesign.github.io/blog/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia",
      "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia — Blog Matheus Costa (Part 2)",
      "content": "-\n**Selecionar todos os links**: document.querySelectorAll(\"a\") seleciona todos os elementos &#x3C;a> na página.\n\n-\n**Iterar sobre os links**: forEach é usado para iterar sobre cada link selecionado.\n\n-\n**Verificar se o link é externo**:\n\nhref &#x26;&#x26; !href.includes(currentDomain) &#x26;&#x26; href.startsWith(\"http\"): Isso verifica se o link tem um atributo href, se o href não contém o domínio atual e se o href começa com “http” (para garantir que é um link completo).\n\n-\n**Adicionar target=\"_blank\"**: Se o link for externo, link.setAttribute(\"target\", \"_blank\") adiciona o atributo target com valor _blank, fazendo com que o link abra em uma nova guia.\n\n-\n**Adicionar rel=\"noopener noreferrer\"**: O atributo “rel=noopener noreferrer” é usado para abrir links externos em uma nova janela e evitar que a página de destino acesse a página de origem.\n\n### Como usar:\n\n- Adicione o código JavaScript acima ao seu arquivo JavaScript principal ou diretamente dentro de uma tag &#x3C;script> no final do seu arquivo HTML, antes da tag de fechamento &#x3C;/body>.\n\n&#x3C;!DOCTYPE html>\n&#x3C;html lang=\"pt-br\">\n&#x3C;head>\n&#x3C;meta charset=\"UTF-8\" />\n&#x3C;title>Exemplo&#x3C;/title>\n&#x3C;/head>\n&#x3C;body>\n&#x3C;!-- Seu conteúdo aqui -->\n&#x3C;script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\nconst currentDomain = window.location.hostname;\nconst links = document.querySelectorAll(\"a\");\nlinks.forEach((link) => {\nconst href = link.getAttribute(\"href\");\nif (\nhref &#x26;&#x26;\n!href.includes(currentDomain) &#x26;&#x26;\nhref.startsWith(\"http\")\n) {\nlink.setAttribute(\"target\", \"_blank\");\nlink.setAttribute(\"rel\", \"noopener noreferrer\");\n}\n});\n});\n&#x3C;/script>\n&#x3C;/body>\n&#x3C;/html>\nDessa forma, todos os links externos na sua página abrirão em uma nova guia automaticamente.\n\nComente aqui em baixo se esta dica te ajudou\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
      "keywords": [
        "link",
        "href",
        "links",
        "todos",
        "página",
        "target",
        "blank",
        "para",
        "nova",
        "domínio"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia"
      }
    },
    {
      "id": "b505fe903394435d",
      "url": "https://matheuscostadesign.github.io/blog/o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Design\n\n## O que é o Figma Buzz?\n\nMatheus Costa 05 de Maio de 2025\n\n## O que é o Figma Buzz?\n\nO Figma Buzz é uma ferramenta lançada pelo Figma em 2025, projetada para facilitar a criação, gestão e distribuição de recursos visuais alinhados à marca.\n\nEle oferece um espaço colaborativo onde designers e profissionais de marketing podem trabalhar juntos para produzir ativos como posts para redes sociais, anúncios digitais, materiais para eventos, documentos de uma página e folhetos, mantendo a consistência da identidade visual da marca.\n\n## O que é possível criar com o Figma Buzz?\n\nCom o Figma Buzz, é possível criar uma variedade de materiais visuais que seguem as diretrizes da marca de forma rápida e colaborativa.\n\nEntre os principais tipos de conteúdo que podem ser produzidos estão:\n\n-\n**Posts para redes sociais**: Crie modelos reutilizáveis para Instagram, LinkedIn, X (Twitter) e outras redes, mantendo identidade visual consistente.\n\n-\n**Anúncios digitais (ads)**: Produza banners e criativos de campanhas publicitárias online com elementos fixos da marca, como logos e cores.\n\n-\n**Apresentações e documentos de uma página**: Monte slides ou arquivos para envio rápido com informações chave e visual atraente.\n\n-\n**Materiais de eventos**: Cartazes, flyers, credenciais e outros materiais promocionais para eventos e conferências.\n\n-\n**Folhetos e panfletos**: Crie peças impressas ou digitais com layouts prontos e fáceis de editar.\n\n-\n**Campanhas de e-mail e thumbnails**: Imagens padronizadas para newsletters e plataformas de vídeo como YouTube.\n\n-\n**Ativos internos**: Como manuais, guias rápidos, templates para RH, entre outros.\n\n## Figma Buzz ou Canva?\n\nA escolha ideal depende do perfil da equipe e do nível de controle desejado sobre a identidade visual.\n\n### Comparativo Rápido\n\nCaracterística\n\n**Figma Buzz**\n\n**Canva**\n\n**Foco**\n\nTimes que já usam Figma\n\nUsuários em geral\n\n**Modelos controlados**\n\nAlta precisão\n\nMenos controle",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "design",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 3,
        "sourcePath": "/blog/o-que-e-o-figma-buzz"
      }
    },
    {
      "id": "b55c56dbfeb7bb0c",
      "url": "https://matheuscostadesign.github.io/blog/2024/04/2024-04-12-axios",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs (Part 2)",
      "content": "const storagedTokenRefresh = storage.getString(\"tokenRefreshExp\");\n          const currentTime = new Date();\n          const timeExpiryRefreshToken = new Date(storagedTokenRefresh);\n\n          // Se o token expirar, navega p/ tela de sessão expirada\n          if (timeExpiryRefreshToken && currentTime >= timeExpiryRefreshToken) {\n            navigation.navigate(\"SessionExpired\");\n            return Promise.reject(error);\n          }\n\n          return apiAuth()\n            .get(\"/tokenrefresh\", {\n              headers: { Authorization: refresh },\n            })\n            .then(async (responseRefresh) => {\n              const newAccessToken = responseRefresh.data.accesstoken;\n              const newRefreshToken = responseRefresh.data.refreshtoken;\n\n              const newTokenDecoded = jwtDecode(newAccessToken) as JWTPayload;\n              const newRefreshTokenDecoded = jwtDecode(\n                newRefreshToken\n              ) as JWTPayloadRefresh;\n\n              const newTimeExpireJWT = newRefreshTokenDecoded.exp;\n              const newTimeExpire = new Date(\n                newTimeExpireJWT * 1000\n              ).toString();\n\n              storage.set(\"token\", newAccessToken);\n              storage.set(\"tokenRefresh\", newRefreshToken);\n              storage.set(\"tokenRefreshExp\", newTimeExpire);\n\n              setToken(newAccessToken);\n              setRefreshToken(newRefreshToken);\n              setTokenDecoded(newTokenDecoded);\n              setRefreshTokenDecoded(newRefreshTokenDecoded);\n\n              originalReq.headers[\"Authorization\"] = newAccessToken;\n\n              return instance(originalReq);\n            })\n            .catch((refreshError) => {\n              return Promise.reject(refreshError);\n            });\n        } else {\n          return Promise.reject(error);\n        }\n      }\n    );\n  }, []);\n\n  return children;\n};\n\nexport default AxiosInterceptor;\n```\n\n### Envolvendo a aplicação",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axiosinterceptor"
      ],
      "metadata": {
        "title": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "slug": "axios-interceptor-consumindo-varias-apis",
        "author": "Matheus Costa",
        "categories": "Frontend",
        "image": "/assets/images/posts/2024/04/axios-interceptor-consumindo-varias-apis.jpeg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 4,
        "sourcePath": "blog/2024/04/2024-04-12-axios.md"
      }
    },
    {
      "id": "b650fabc01735a67",
      "url": "https://matheuscostadesign.github.io/blog/como-alterar-menu-header-apos-scroll-com-javascript",
      "title": "Como alterar menu header após scroll com Javascript — Blog Matheus Costa (Part 2)",
      "content": "- No exemplo acima, eu adiciono uma cor de fundo (branco), diminuo a altura do cabeçalho e adiciono também uma sombra.\n\n- Todas essas mudança só são aplicadas após o scroll na página.\n\n- E se voltar ao topo, a classe é removida e os estilos também.\n\n## Inspecionando elemento\n\n- Para validar o funcionamento da função, inspecione a página (F12) e verifique se seu menu está recebendo a classe .ativo quando o scroll é feito na página.\n\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
      "keywords": [
        "header",
        "scroll",
        "classe",
        "ativo",
        "alterar",
        "página",
        "menu",
        "após",
        "javascript",
        "arquivo"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-alterar-menu-header-apos-scroll-com-javascript"
      }
    },
    {
      "id": "b77f61bc5974eda7",
      "url": "https://matheuscostadesign.github.io/blog/2024/06/2024-06-03-path-aliases",
      "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC (Part 2)",
      "content": "Se você estiver usando TypeScript, também pode querer atualizar seu arquivo `tsconfig.json` para incluir as mesmas configurações de alias.\n\nIsso garante que o TypeScript entenda como resolver esses caminhos.\n\nAdicione ou atualize a seção `compilerOptions.paths` para corresponder aos seus aliases:\n\n```json\n{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  }\n}\n```\n\nCom essas configurações, você agora deve ser capaz de usar os path aliases em seu projeto Vite com o plugin React SWC.\n\nDessa forma, você pode importar componentes da seguinte maneira:\n\n```tsx\nimport logo from \"@/assets/logo.png\";\n```\n\nE não ficar procurando o caminho da pasta assim:\n\n```tsx\nimport logo from \"../../../../../../../assets/logo.png\";\n```",
      "description": "Veja neste post como configurar as importações com '@' (path aliases) em um projeto Vite/React com Typescript e SWC",
      "keywords": [
        "path",
        "aliases",
        "projeto",
        "vite",
        "logo",
        "para",
        "você",
        "react",
        "import",
        "from"
      ],
      "metadata": {
        "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC",
        "description": "Veja neste post como configurar as importações com '@' (path aliases) em um projeto Vite/React com Typescript e SWC",
        "slug": "como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2024/06/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2024/06/2024-06-03-path-aliases.md"
      }
    },
    {
      "id": "b8d7e0fbf81f386b",
      "url": "https://matheuscostadesign.github.io/blog/2024/06/2024-06-03-path-aliases",
      "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC (Part 1)",
      "content": "Veja neste post como configurar as importações com `'@'` **(path aliases)** em um projeto Vite/React com Typescript e SWC e melhorar a organização do código.\n\n## Exemplos:\n\n```tsx\n// 🚫 Importação sem Path Aliases\nimport logo from \"../../../../../../../assets/logo.png\";\n\n// 👍 Importação com Path Aliases\nimport logo from \"@/assets/logo.png\";\n```\n\n### Criação do projeto\n\nPara configurar path aliases no Vite com o plugin React SWC, você precisa seguir alguns passos simples.\n\nPrimeiro, certifique-se de que seu projeto está configurado para usar o Vite com o plugin React SWC.\n\nSe ainda não estiver, você pode criar um novo projeto usando o comando:\n\n- `npm create vite@latest`\n\nSelecione a opção React com a variante TypeScript + SWC durante a criação do projeto.\n\nDepois de ter o projeto configurado, siga estas etapas para configurar os path aliases:\n\n### 1) Instale as dependências necessárias:\n\nCertifique-se de que você tem o ` @types/node`` instalado como uma dependência de desenvolvimento  `(npm i -D @types/node)`.\n\n- Isso é necessário para evitar erros relacionados ao uso de `__dirname` em arquivos TypeScript ou JavaScript.\n\n### 2) Configure o arquivo `vite.config.ts`\n\nNo seu arquivo `vite.config.ts`, você precisará importar o módulo path do Node.js e definir os aliases desejados na seção resolve.alias.\n\nAqui está um exemplo de como fazer isso:\n\n```ts\nimport { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport * as path from \"path\"; // Importe o módulo path\n\nexport default defineConfig({\n  plugins: [react()],\n  resolve: {\n    alias: [\n      {\n        find: \"@\",\n        replacement: path.resolve(__dirname, \"src\"),\n        // Defina seus aliases aqui\n      },\n    ],\n  },\n});\n```\n\n<cite>Neste exemplo, estamos configurando um alias para `\"@\"` que aponta para o diretório `src` do seu projeto.</cite>\n\nVocê pode adicionar mais aliases conforme necessário, seguindo o mesmo formato.\n\n### 3) Atualize o arquivo `tsconfig.json`",
      "description": "Veja neste post como configurar as importações com '@' (path aliases) em um projeto Vite/React com Typescript e SWC",
      "keywords": [
        "path",
        "aliases",
        "projeto",
        "vite",
        "logo",
        "para",
        "você",
        "react",
        "import",
        "from"
      ],
      "metadata": {
        "title": "Como configurar path aliases em um projeto React + Vite + TypeScript + SWC",
        "description": "Veja neste post como configurar as importações com '@' (path aliases) em um projeto Vite/React com Typescript e SWC",
        "slug": "como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2024/06/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2024/06/2024-06-03-path-aliases.md"
      }
    },
    {
      "id": "bd4e9716a410577b",
      "url": "https://matheuscostadesign.github.io/blog/como-gerar-o-certificado-ssl-https-de-forma-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual — Blog Matheus Costa (Part 2)",
      "content": "-\nCrie um arquivo com os dados que foram gerados pelo Certbot *(exatamente com o mesmo nome gerado pelo Certbot, sem nenhuma extenção)*\n\n**Exemplo:**\n\n- **Nome do arquivo:** LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4\n\n- **Conteúdo:** LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4.rt9TPxI7m6aoCBhS6YVbWpDqZSBD2vGrEyr88dPom_M\n\n-\nAcessar o servidor de hospedagem e inserir o arquivo gerado na pasta **“acme-challenge”** (no domínio principal e nos subdominios)\n\nEx: **[http://dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4](http://dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4)**\n\n- Ex: **[http://subdominio.dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4](http://subdominio.dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4)**\n\n-\nAbra a URL gerada pelo Certbot no navegador. A página deve carregar normalmente e exibir o conteúdo em forma de texto.\n\n-\nVolte no prompt de comando e pressione **“Enter”**\n\n-\nPronto! O certificado será gerado na pasta:\n\n- C:\\Certbot\\live\\dominio.com.br\\fullchain.pem\n\n- C:\\Certbot\\live\\dominio.com.br\\privkey.pem\n\n![ssl.png]({{ site.baseurl }}/assets/images/posts/2022/ssl.png)\n\n## Enviando certificado para a empresa de hospedagem\n\n-\nPegar os arquivos gerados pelo certbot e **alterar a extensão**\n\nfullchain.pem para fullchain.crt e\n\n- privkey.pem para privkey.key\n\n-\nCriar uma pasta na raiz do do servidor\n\nEx: Web > ssl\n\n-\nInserir os arquivos **“fullchain.crt”** e **“privkey.key”** na pasta criada via FTP\n\n-\nAbrir um chamado com a empresa de hospedagem (de 3 em 3 meses) e informá-los sobre a instalação do certificado tanto para o domínio principal quanto para subdomínios\n\n-\nValidar o funcionamento do certificado pelo site:\n\n**[](https://certlogik.com/ssl-checker/)[https://certlogik.com/ssl-checker/](https://certlogik.com/ssl-checker/)**",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let",
      "keywords": [
        "dominio",
        "https",
        "certbot",
        "para",
        "acme-challenge",
        "certificado",
        "well-known",
        "37mksvjmxkiu-wkmsglxg7h-el15kfaddvs6xka4",
        "ssl-checker",
        "subdominio"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "/blog/como-gerar-o-certificado-ssl-https-de-forma-manual"
      }
    },
    {
      "id": "c26c4d2a4e0a04b2",
      "url": "https://matheuscostadesign.github.io/blog/2022/01/2022-01-14-imagens-jpeg",
      "title": "Ferramenta online para otimização de imagens JPEG",
      "content": "Ferramenta útil para otimizar imagens em JPG/JPEG\n\n<a href=\"https://jpeg.rocks/\" rel=\"noopener noreferrer\">https://jpeg.rocks/</a>",
      "description": "Ferramenta útil para otimizar imagens em JPG/JPEG",
      "keywords": [
        "jpeg",
        "https",
        "rocks",
        "ferramenta",
        "útil",
        "para",
        "otimizar",
        "imagens",
        "href",
        "noopener"
      ],
      "metadata": {
        "title": "Ferramenta online para otimização de imagens JPEG",
        "description": "Ferramenta útil para otimizar imagens em JPG/JPEG",
        "slug": "como-otimizar-imagens-jpeg",
        "author": "Matheus Costa",
        "categories": "Front-end, UX/UI",
        "image": "/assets/images/posts/2022/otimizando-imagens-jpeg.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2022/01/2022-01-14-imagens-jpeg.md"
      }
    },
    {
      "id": "c70099cdc858c934",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 9)",
      "content": "- Os componentes no React Native são estilizados usando Javascript;\n- As propriedades de cores geralmente **correspondem à forma como o CSS funciona na web;**\n\n### Cores em Hexadecimal\n\n- É possível inserir cores conforme o padrão da web que é hexadecimal, como por exemplo:\n  - `#fafafa`\n  - `#000000`\n  - `#000` (abreviado)\n\n### Cores em RGB\n\n- React Native tem suporte para cores em `rgb()` e `rgba()`\n  - `'#f0f'` (#rgb)\n  - `'#ff00ff'` (#rrggbb)\n  - `'#f0ff'` (#rgba)\n  - `'#ff00ff00'` (#rrggbbaa)\n  - `'rgb(255, 0, 255)'`\n  - `'rgb(255 0 255)'`\n  - `'rgba(255, 0, 255, 1.0)'`\n  - `'rgba(255 0 255 / 1.0)'`\n\n### Cores Nomeadas\n\n- No React Native, também podemos usar strings de nomes de cores como valores;\n  - **`transparent` (**Um atalho para `rgba(0,0,0,0)`)\n  - `aliceblue, coral, green, blue, etc...`\n  - [_A lista completa de cores pode ser acessada aqui_](https://www.w3.org/TR/css-color-3/#svg-color)\n\n### Cores em HSL\n\n- Também é possível usar `hsl()` e `hsla()`:\n  - `'hsl(360, 100%, 100%)'`\n  - `'hsl(360 100% 100%)'`\n  - `'hsla(360, 100%, 100%, 1.0)'`\n  - `'hsla(360 100% 100% / 1.0)'`\n\n### Cores em Matriz (HWB)\n\n- React Native suporta `hwb()`em notação funcional:\n  - `'hwb(0, 0%, 100%)'`\n  - `'hwb(360, 100%, 100%)'`\n  - `'hwb(0 0% 0%)'`\n  - `'hwb(70 50% 0%)'`\n\n---\n\n# 4) Gestos e Toques\n\n- Com o React Native é possível lidar com todos os tipos de gestos comuns;\n\n### 4.1) Botões\n\n- Um botão é um componente básico que é renderizado em todas as plataformas;\n\n### Botão simples\n\n- Um exemplo básico é o botão:\n\n```jsx\n<Button\n  onPress={() => {\n    console.log(\"O botão foi pressionado!\");\n  }}\n  title=\"Toque aqui\"\n  color=\"#841584\"\n/>\n```\n\n### Componentes tocáveis (**Touchables)**\n\n- Os componentes \"tocáveis\" podem capturar gestos de toque e exibir feedback;\n\n```\n<TouchableHighlight\n  onPress={() => {\n    console.log('O botão foi pressionado!');\n  }}\n  underlayColor=\"white\">\n  <View>\n    <Text>TouchableHighlight</Text>\n  </View>\n</TouchableHighlight>;\n```",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 8,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "c7e29aa1f267efca",
      "url": "https://matheuscostadesign.github.io/blog/como-detectar-imagens-quebradas",
      "title": "Como detectar imagens quebradas — Blog Matheus Costa (Part 2)",
      "content": "- É isso aí, espero ter ajudado a evitar imagens quebradas em seus projetos web!\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda como detectar e corrigir imagens quebradas de um site",
      "keywords": [
        "imagem",
        "react",
        "onerror",
        "como",
        "exemplo",
        "logo",
        "background",
        "assets",
        "blog",
        "imagens"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-detectar-imagens-quebradas"
      }
    },
    {
      "id": "cc73f71ae273b6e9",
      "url": "https://matheuscostadesign.github.io/blog/2020/09/2020-09-01-live-server",
      "title": "Como visualizar alterações em um site ou projeto em tempo real usando o Visual Studio Code e o Live Server",
      "content": "Essa dica irá aumentar muito a sua produtividade no momento em que estiver desenvolvendo o seu site/projeto e quiser ver as alterações em tempo real, sem a necessidade de ficar atualizando a página do navegador o tempo todo.\n\nEntão sem mais enrolações, vamos lá…\n\n## Instalação\n\n- Abra o gerenciador de Extensões do Visual Studio Code;\n- Pesquise por: [**Live Server**](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer);\n- Clique em: **Install**;\n- Aguarde o processo de instalação e se necessário for reinicie o VSCode;\n\n<img src=\"/assets/images/posts/2020/09/live-server-1.webp\">\n\n## Execução\n\n- Abra a pasta do seu projeto;\n- Na barra inferior do software selecione a opção: **Go Live**\n\n<img src=\"/assets/images/posts/2020/09/live-server-2.webp\">\n\n## Pronto!\n\nO seu navegador padrão será executado automaticamente e qualquer alteração no seu projeto será visualizada em tempo real.\n\n<img src=\"/assets/images/posts/2020/09/live-server-3.gif\">",
      "description": "Essa dica irá aumentar muito a sua produtividade no momento em que estiver desenvolvendo o seu site/projeto e quiser ver as alterações em tempo real",
      "keywords": [
        "2020",
        "projeto",
        "tempo",
        "assets",
        "images",
        "posts",
        "real",
        "navegador",
        "instalação",
        "abra"
      ],
      "metadata": {
        "title": "Como visualizar alterações em um site ou projeto em tempo real usando o Visual Studio Code e o Live Server",
        "description": "Essa dica irá aumentar muito a sua produtividade no momento em que estiver desenvolvendo o seu site/projeto e quiser ver as alterações em tempo real",
        "slug": "como-visualizar-alteracoes-em-um-site-ou-projeto-em-tempo-real-usando-o-visual-studio-code-e-o-live-server",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2020/09/live-server-vscode.webp",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2020/09/2020-09-01-live-server.md"
      }
    },
    {
      "id": "ccac14ef9ef8772b",
      "url": "https://matheuscostadesign.github.io/blog/axios-interceptor-consumindo-varias-apis",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs — Blog Matheus Costa (Part 3)",
      "content": "// Limpa dados do storage e direciona pra tela de login\nasync function clearAllSession() {\nstorage.clearAll();\nsetUser(null);\nsetToken(null);\nsetRefreshToken(null);\nsetTokenDecoded(null);\nsetRefreshTokenDecoded(null);\n}\n\n// Ação botão \"voltar\" físico Android\nuseFocusEffect(\nuseCallback(() => {\nconst onBackPress = () => {\nif (route.name === currentRoute.name) {\nclearAllSession();\nreturn true;\n} else {\nreturn false;\n}\n};\nBackHandler.addEventListener(\"hardwareBackPress\", onBackPress);\nreturn () =>\nBackHandler.removeEventListener(\"hardwareBackPress\", onBackPress);\n}, [route]),\n);\n\nreturn (\n&#x3C;ImgBackground>\n&#x3C;Container>\n&#x3C;ContainerSurface>\n&#x3C;View className=\"items-center justify-center gap-y-4\">\n&#x3C;LottieSessionExpired />\n&#x3C;Text className=\"font-title text-2xl\">\n{t(\"session-expired.title\")}\n&#x3C;/Text>\n&#x3C;Text className=\"font-body\">\n{t(\"session-expired.description\")}\n&#x3C;/Text>\n&#x3C;Button\nmode=\"contained\"\nicon=\"logout\"\nclassName=\"w-[300]\"\nonPress={() => {\nclearAllSession();\n}}\n>\n{t(\"session-expired.button\")}\n&#x3C;/Button>\n&#x3C;/View>\n&#x3C;/ContainerSurface>\n&#x3C;/Container>\n&#x3C;/ImgBackground>\n);\n}\n\n[Ver todos os artigos](/blog)",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axios"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "/blog/axios-interceptor-consumindo-varias-apis"
      }
    },
    {
      "id": "ccfc1a0aa18c9878",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 4)",
      "content": "const Cat = () => {\n  return <Text>Hello, I am {getFullName(\"Rum\", \"Tum\", \"Tugger\")}!</Text>;\n};\n\nexport default Cat;\n```\n\n### 2.4.3) Props\n\n- Props é uma abreviação para **propriedades**;\n\n- **As propriedades permitem personalizar os componentes React,** por exemplo:\n\n```jsx\nimport React from \"react\";\nimport { Text, View } from \"react-native\";\n\nconst Cat = (props) => {\n  return (\n    <View>\n      <Text>Hello, I am {props.name}!</Text>\n    </View>\n  );\n};\n\nconst Cafe = () => {\n  return (\n    <View>\n      <Cat name=\"Maru\" />\n      <Cat name=\"Jellylorum\" />\n      <Cat name=\"Spot\" />\n    </View>\n  );\n};\n\nexport default Cafe;\n```\n\n### 2.4.4) Estado\n\n- **Estado** é a forma de **armazenar dados** de um componente;\n\n- **O estado fornece memória aos componentes;**\n\n- Ele é útil para lidar com **dados que mudam** com o **tempo** ou que vêm da **interação do usuário;**\n\n- É possível adicionar estado a um componente React usando o hook `useState`;\n\n- `useState` é um hook que permite adicionar estado aos componentes da função;\n\n```jsx\nimport React, { useState } from \"react\";\nimport { Button, Text, View } from \"react-native\";\n\nconst Cat = (props) => {\n  const [isHungry, setIsHungry] = useState(true);\n\n  return (\n    <View>\n      <Text>\n        I am {props.name}, and I am {isHungry ? \"hungry\" : \"full\"}!\n      </Text>\n      <Button\n        onPress={() => {\n          setIsHungry(false);\n        }}\n        disabled={!isHungry}\n        title={isHungry ? \"Pour me some milk, please!\" : \"Thank you!\"}\n      />\n    </View>\n  );\n};\n\nconst Cafe = () => {\n  return <Cat name=\"Munkustrap\" />;\n};\n\nexport default Cafe;\n```\n\n### 2.4.5) Fragmentos\n\n- As tags “vazias” `<>` e `</>` acima são bits do JSX chamadas de [fragmentos](https://reactjs.org/docs/fragments.html).\n\n- Fragmentos permitem envolver todo código sem precisar incluir um elemento extra e desnecessário, como uma `View`, por exemplo.",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 3,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "cdb5fe2708d7038d",
      "url": "https://matheuscostadesign.github.io/blog/2022/01/2022-01-17-imagens-webp",
      "title": "Disponibilize imagens em formatos de última geração",
      "content": "Veja neste artigo como resolver o problema no resultado do Google Pagespeed: _\"Disponibilize imagens em formatos de última geração\"_\n\n### Convertendo imagens para WEBP com Photoshop\n\n- Baixar o plugin: WebPShop.8bi\n  - [Documentação WEBP do Google][link1]\n  - [Baixar projeto no Github][link2]\n- Inserir o arquivo `WebPShop.8bi` no pasta Plugins do Photoshop\n  - Ex: `Photoshop18\\App\\Ps\\Plug-ins`\n- Para exportar a imagem como WEBP basta clicar em `Save As` e selecionar o tipo: `WEBP`\n\n[link1]: https://developers.google.com/speed/webp/docs/webpshop#windows_installation_steps\n[link2]: https://github.com/webmproject/WebPShop/releases\n\n### Usando imagens WEBP no HTML\n\n```html\n<picture>\n  <source type=\"image/webp\" srcset=\"flower.webp\" />\n  <source type=\"image/jpeg\" srcset=\"flower.jpg\" />\n  <img src=\"flower.jpg\" alt=\"\" />\n</picture>\n```\n\n### WebP em imagens no background CSS\n\n```css\nbackground: url(\"../assets/images/bg-info.jpg\");\nbackground: -webkit-image-set(url(\"../assets/images/bg-info.webp\") 1x) no-repeat;\n```\n\n### Referencias\n\n- [Ole Michelsen](https://ole.michelsen.dk/blog/using-webp-images-html-css/)",
      "description": "Veja neste artigo como resolver o problema no resultado do Google Pagespeed: Disponibilize imagens em formatos de última geração",
      "keywords": [
        "webp",
        "imagens",
        "webpshop",
        "google",
        "https",
        "flower",
        "background",
        "como",
        "para",
        "photoshop"
      ],
      "metadata": {
        "title": "Disponibilize imagens em formatos de última geração",
        "description": "Veja neste artigo como resolver o problema no resultado do Google Pagespeed: Disponibilize imagens em formatos de última geração",
        "slug": "como-resolver-o-erro-disponibilize-imagens-em-formatos-de-ultima-geracao",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/converter-imagem-webp.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2022/01/2022-01-17-imagens-webp.md"
      }
    },
    {
      "id": "cea4d0a6716f5a6b",
      "url": "https://matheuscostadesign.github.io/blog/2025/05/2025-05-05-o-que-e-o-figma-buzz",
      "title": "O que é o Figma Buzz? (Part 2)",
      "content": "| Característica            | **Figma Buzz**                      | **Canva**          |\n| ------------------------- | ----------------------------------- | ------------------ |\n| **Foco**                  | Times que já usam Figma             | Usuários em geral  |\n| **Modelos controlados**   | ✅ Alta precisão                    | ✅ Menos controle  |\n| **Integração com design** | ✅ Total com Figma                  | 🔸 Parcial         |\n| **Facilidade de uso**     | 🔸 Média (exige noção de Figma)     | ✅ Muito fácil     |\n| **Liberdade de layout**   | ✅ Total                            | 🔸 Limitada        |\n| **IA integrada**          | ✅ Sim                              | ✅ Sim             |\n| **Preço**                 | Grátis com limites (ou plano Figma) | Grátis + plano Pro |\n\n## ✅ Use o Figma Buzz se:\n\n- Você já usa Figma.\n- Precisa manter rigor na identidade visual.\n- Quer que não-designers editem com segurança.\n\n## ✅ Use o Canva se:\n\n- Precisa de algo rápido e fácil.\n- Quer muitos templates prontos.\n- Trabalha com equipes variadas (RH, vendas, educação).\n\n## Principais Funcionalidades do Figma Buzz\n\n### Modelos Personalizáveis\n\nCrie e compartilhe modelos de marca que sua equipe pode utilizar, garantindo que todos os materiais produzidos estejam em conformidade com as diretrizes visuais estabelecidas.\n\n### Edição Simplificada\n\nCom uma interface intuitiva, mesmo membros da equipe sem experiência em design podem editar e adaptar modelos conforme necessário, promovendo agilidade na produção de conteúdo.\n\n### Controle de Elementos\n\nDefina quais partes dos modelos são editáveis e quais permanecem fixas, assegurando que elementos essenciais da identidade visual não sejam alterados inadvertidamente.\n\n### Visualização em Grade\n\nOrganize e visualize todos os ativos criados em uma única tela, facilitando a gestão e a manutenção da consistência entre os materiais.\n\n### Recursos de IA",
      "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
      "keywords": [
        "figma",
        "para",
        "buzz",
        "materiais",
        "marca",
        "visual",
        "modelos",
        "como",
        "identidade",
        "design"
      ],
      "metadata": {
        "title": "O que é o Figma Buzz?",
        "description": "Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação de materiais visuais consistentes para marcas, com colaboração, modelos prontos e recursos de IA.",
        "slug": "o-que-e-o-figma-buzz",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/05/o-que-e-o-figma-buzz.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "blog/2025/05/2025-05-05-o-que-e-o-figma-buzz.md"
      }
    },
    {
      "id": "d16af96ae2acba04",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-21-ssl-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual (Part 3)",
      "content": "6. Forçar o uso do HTTPS via web.config/.htaccess (redirect)",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
      "keywords": [
        "dominio",
        "certbot",
        "para",
        "certificado",
        "acme-challenge",
        "https",
        "well-known",
        "pasta",
        "pelo",
        "arquivos"
      ],
      "metadata": {
        "title": "Como gerar o certificado SSL/HTTPS de forma manual",
        "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
        "slug": "como-gerar-o-certificado-ssl-https-de-forma-manual",
        "author": "Matheus Costa",
        "categories": "Front-end, Deploy",
        "image": "/assets/images/posts/2022/como-gerar-certificado-ssl-https-de-forma-manual.jpg",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "blog/2022/02/2022-02-21-ssl-manual.md"
      }
    },
    {
      "id": "d2ab7893f2671844",
      "url": "https://matheuscostadesign.github.io/blog/bibliotecas-ui-para-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 — Blog Matheus Costa (Part 3)",
      "content": "[](https://nextui.org/)\nNextUI é uma biblioteca de interface do usuário para React que ajuda a construir interfaces de usuário bonitas e acessíveis. Ela foi criada em cima do Tailwind CSS e React Aria, com o objetivo principal de simplificar o processo de desenvolvimento, oferecendo um sistema de design belo e adaptável para uma experiência de usuário melhorada. É importante destacar que NextUI não está relacionado ao Vercel e é um projeto independente da comunidade.\n\nNextUI é especificamente projetado para React, pois é construído em cima do React Aria. No entanto, você ainda pode usar a parte de estilo dos componentes do NextUI com outros frameworks ou bibliotecas. Isso significa que, embora seja otimizado para React, sua abordagem modular permite certa flexibilidade na integração com outras tecnologias.\n\n## 6) [Stitches](https://stitches.dev/)\n\n[](https://stitches.dev/)\nStitches é uma biblioteca de estilização CSS-in-JS desenvolvida pelo WorkOS, projetada para oferecer uma experiência de desenvolvimento (DX) superior e ser framework-agnóstica. Ela é conhecida por sua API totalmente tipada, propriedades conscientes de tokens e utilitários personalizados, proporcionando uma experiência divertida e intuitiva para os desenvolvedores.\n\n## 7) [Nextra](https://nextra.site/)\n\n[](https://nextra.site/)\nNextra é uma ferramenta de geração de sites baseada em Next.js e MDX, projetada para ajudar desenvolvedores a criar sites bonitos e documentações completas rapidamente. Ele combina a simplicidade e a flexibilidade do Next.js com o poderoso formato de conteúdo MDX, permitindo que você escreva documentos ricos em markdown e componentes React.\n\n[Ver todos os artigos](/blog)",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "experiência",
        "desenvolvimento",
        "material",
        "design",
        "desenvolvedores"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 3,
        "sourcePath": "/blog/bibliotecas-ui-para-frontend"
      }
    },
    {
      "id": "d6e81b25105e43dc",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-01-libs-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 (Part 4)",
      "content": "Nextra é uma ferramenta de geração de sites baseada em Next.js e MDX, projetada para ajudar desenvolvedores a criar sites bonitos e documentações completas rapidamente. Ele combina a simplicidade e a flexibilidade do Next.js com o poderoso formato de conteúdo MDX, permitindo que você escreva documentos ricos em markdown e componentes React.",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "2023",
        "astro",
        "href",
        "target",
        "blank"
      ],
      "metadata": {
        "title": "As melhores bibliotecas de UI para Frontend em 2024",
        "description": "Links de algumas bibliotecas de estilização no front-end",
        "slug": "bibliotecas-ui-para-frontend",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2023/bibliotecas-ui-para-frontend.jpg",
        "comments": "true",
        "chunkIndex": 3,
        "totalChunks": 4,
        "sourcePath": "blog/2023/05/2023-05-01-libs-frontend.md"
      }
    },
    {
      "id": "da6ef8b23a30144d",
      "url": "https://matheuscostadesign.github.io/blog/guia-rapido-de-semantica-html-para-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers — Blog Matheus Costa (Part 3)",
      "content": "&#x3C;p>O e-mail informado é inválido. Tente novamente.&#x3C;/p>\n&#x3C;p>Todos os campos marcados com * são obrigatórios.&#x3C;/p>\n\n### 3) Botões (&#x3C;button>)\n\nSegundo Podmajersky (2019, p. 66):\n\n**\n*“os botões são o texto mais importante na experiência”.*\n\nOs botões indicam ações interativas, como “Enviar” ou “Cancelar”. Usar &#x3C;button> em vez de &#x3C;div> ou &#x3C;span> assegura acessibilidade. *Exemplo:*\n\n&#x3C;button type=\"submit\">Enviar&#x3C;/button>\n\n### 4) Rótulos de formulário (&#x3C;label>)\n\nO elemento associa um texto descritivo a um campo de entrada, como um campo de texto ou checkbox. Isso é crucial para acessibilidade, pois permite que leitores de tela identifiquem o propósito do campo. *Exemplo:*\n\n&#x3C;label for=\"email\">E-mail:&#x3C;/label>\n&#x3C;input type=\"email\" id=\"email\" name=\"email\" required />\n&#x3C;p>Utilize um e-mail válido para continuar&#x3C;/p>\n\n### 5) Listas (&#x3C;ul>, &#x3C;ol>, &#x3C;li>)\n\nListas semânticas organizam itens relacionados, como opções de menu ou etapas de um processo. &#x3C;ul> é para listas não ordenadas, enquanto &#x3C;ol> é para listas ordenadas. *Exemplo:*\n\n&#x3C;ol>\n&#x3C;li>Faça login no sistema&#x3C;/li>\n&#x3C;li>Escolha o plano ideal&#x3C;/li>\n&#x3C;li>Confirme o pagamento&#x3C;/li>\n&#x3C;/ol>\n\n### 6) Elementos de navegação (&#x3C;nav>)\n\nO elemento &#x3C;nav> agrupa links de navegação, como menus principais. Isso ajuda tecnologias assistivas a identificar áreas navegáveis. *Exemplo:*\n\n&#x3C;nav>\n&#x3C;ul>\n&#x3C;li>&#x3C;a href=\"/\">Início&#x3C;/a>&#x3C;/li>\n&#x3C;li>&#x3C;a href=\"/sobre\">Sobre&#x3C;/a>&#x3C;/li>\n&#x3C;/ul>\n&#x3C;/nav>\n\n### 7) Artigos e seções (&#x3C;article>, &#x3C;section>)\n\nO elemento &#x3C;article> representa conteúdo independente, como um post de blog, enquanto &#x3C;section> agrupa conteúdo relacionado. Esses elementos criam uma estrutura lógica. *Exemplo:*",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "como",
        "html",
        "semântica",
        "exemplo",
        "conteúdo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "chunkIndex": 2,
        "totalChunks": 5,
        "sourcePath": "/blog/guia-rapido-de-semantica-html-para-ux-writers"
      }
    },
    {
      "id": "dac18e800a822cc8",
      "url": "https://matheuscostadesign.github.io/blog/2026/03/2026-03-04-ferramentas-documentacao",
      "title": "Melhores ferramentas gratuitas para criar documentação em 2026 (Part 1)",
      "content": "Confira neste post alguns links de ferramentas gratuitas (open-source)para criação e manutenção de documentações de projetos.\n\n## Lista de ferramentas de Documentação\n\n- Veja a lista de algumas ferramentas para criar documentação\n\n## 1) [FumaDocs](https://www.fumadocs.dev/)\n\n<a href=\"https://www.fumadocs.dev/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2026/03/fumadocs.png\" alt=\"FumaDocs\">\n</a>\n\nFumaDocs é um framework poderoso e moderno para criação de documentações, construído sobre Next.js. Ele oferece uma experiência de desenvolvimento excelente com suporte nativo a MDX, busca integrada e temas personalizáveis, permitindo que equipes criem documentações bonitas e performáticas com facilidade.\n\n## 2) [Starlight](https://starlight.astro.build/pt-br/)\n\n<a href=\"https://starlight.astro.build/pt-br/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2026/03/starlight.jpg\" alt=\"Starlight\">\n</a>\n\nStarlight é um tema oficial do Astro voltado para documentações, projetado para ser rápido, acessível e fácil de usar. Com suporte a internacionalização, modo escuro, busca integrada e componentes prontos para uso, ele é uma das melhores opções para quem já utiliza o ecossistema Astro e quer criar uma documentação completa e profissional.\n\n## 3) [Docusaurus](https://docusaurus.io/pt-BR/)\n\n<a href=\"https://docusaurus.io/pt-BR/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2026/03/docusaurus.png\" alt=\"Docusaurus\">\n</a>\n\nDocusaurus é uma ferramenta open source criada pelo Meta para criação de sites de documentação. Com suporte a Markdown e MDX, versionamento de conteúdo, internacionalização e uma grande comunidade ativa, é uma das escolhas mais populares entre projetos de código aberto que precisam de documentação robusta e escalável.\n\n## 4) [Wiki.js](https://js.wiki/)\n\n<a href=\"https://js.wiki/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2026/03/wikijs.png\" alt=\"Wiki.js\">\n</a>",
      "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
      "keywords": [
        "para",
        "https",
        "documentação",
        "fumadocs",
        "starlight",
        "docusaurus",
        "wiki",
        "2026",
        "documentações",
        "href"
      ],
      "metadata": {
        "title": "Melhores ferramentas gratuitas para criar documentação em 2026",
        "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
        "slug": "melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2026/03/ferramentas-documentacao.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2026/03/2026-03-04-ferramentas-documentacao.md"
      }
    },
    {
      "id": "db361bfd030d4066",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-01-libs-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 (Part 2)",
      "content": "<a href=\"https://mui.com/material-ui/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/mui.jpg\" alt=\"MUI\">\n</a>\n\nMaterial UI, também conhecida como MUI, é uma biblioteca aberta de componentes React que implementa o Material Design do Google. Esta biblioteca é abrangente e pode ser utilizada prontamente em produção. Com mais de 2.500 colaboradores de código aberto, Material UI oferece uma extensa coleção de componentes prontos para uso, permitindo que os desenvolvedores se concentrem na lógica principal de seus negócios.\n\nA biblioteca é meticulosa em sua implementação do Material Design, garantindo que cada componente atenda aos mais altos padrões de forma e função. Além disso, Material UI é altamente customizável, permitindo que os usuários personalizem os componentes de acordo com suas necessidades específicas. É uma escolha confiável, com uma grande comunidade de usuários e é apoiada por milhares de organizações.\n\nMaterial UI oferece uma experiência intuitiva para desenvolvedores, facilitando a colaboração entre equipes técnicas e de design. A biblioteca também fornece recursos de design, como modelos gratuitos e ferramentas de personalização, para impulsionar o fluxo de trabalho de design e desenvolvimento\n\n## 4) [Radix UI](https://www.radix-ui.com/)\n\n<a href=\"https://www.radix-ui.com/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/radix.jpg\" alt=\"Radix\">\n</a>\n\nRadix UI é uma biblioteca de componentes de interface do usuário de código aberto otimizada para um desenvolvimento rápido, fácil manutenção e acessibilidade. Esta biblioteca é projetada para ser importada e utilizada sem a necessidade de configuração adicional, facilitando a integração em projetos de desenvolvimento web.",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "2023",
        "astro",
        "href",
        "target",
        "blank"
      ],
      "metadata": {
        "title": "As melhores bibliotecas de UI para Frontend em 2024",
        "description": "Links de algumas bibliotecas de estilização no front-end",
        "slug": "bibliotecas-ui-para-frontend",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2023/bibliotecas-ui-para-frontend.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 4,
        "sourcePath": "blog/2023/05/2023-05-01-libs-frontend.md"
      }
    },
    {
      "id": "db641a5fa1716a66",
      "url": "https://matheuscostadesign.github.io/blog/2022/03/2022-03-22-voltar-topo",
      "title": "Como fazer o efeito voltar ao topo suave com jQuery (Part 2)",
      "content": "```js\n// Scroll suave nos links do Header\n$('.header a[href^=\"#\"]').on(\"click\", function (e) {\n  // seu menu\n  e.preventDefault();\n  var id = $(this).attr(\"href\"),\n    targetOffset = $(id).offset().top;\n  $(\"html, body\").animate(\n    {\n      scrollTop: targetOffset - 80, // margin-top (altura do header)\n    },\n    400 // velocidade transição\n  );\n});\n```\n\n- Lembrando que é necessário seu menu/header chame esta sessão. Por exemplo:\n\n```html\n<header class=\"header\">\n  <div class=\"container\">\n    <nav>\n      <ul>\n        <li><a href=\"#contato\" class=\"link under\">Contato</a></li>\n      </ul>\n    </nav>\n  </div>\n</header>\n```\n\n- E a sessão deve ter o mesmo ID:\n\n```html\n<section class=\"s-contato\" id=\"contato\"></section>\n```\n\nDessa forma, quando o usuário clicar no link a página irá descer suavemente até a sessão desejada.\n\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!",
      "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
      "keywords": [
        "html",
        "header",
        "jquery",
        "suave",
        "voltar",
        "topo",
        "href",
        "class",
        "menu",
        "sessão"
      ],
      "metadata": {
        "title": "Como fazer o efeito voltar ao topo suave com jQuery",
        "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
        "slug": "como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/botao-voltar-ao-topo-suave-jquery.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2022/03/2022-03-22-voltar-topo.md"
      }
    },
    {
      "id": "dca4893e852d3562",
      "url": "https://matheuscostadesign.github.io/blog",
      "title": "Blog (Página 1) — Matheus Costa (Part 1)",
      "content": "Blog (Página 1) — Matheus Costa\n\n[Fazer orçamento no WhatsApp](https://wa.me/5517991005132)\n[](https://linkedin.com/in/mattheuscosta) [](https://github.com/matheuscostadesign) [](https://www.instagram.com/matheuscosta.design/) [](https://www.behance.net/matheuscostadesign)\n\n## Artigos, Dicas & Insights\n\nConteúdos práticos e experiências sobre desenvolvimento web, UI/UX e\ndesign para elevar o nível dos seus projetos.\n\n[Front-end Melhores ferramentas gratuitas para criar documentaçã... Links de algumas ferramentas gratuitas para criação d](/blog/melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites)\n\n[Design Guia rápido de semântica HTML para UX Writers Este artigo é um guia prático para UX Writers que desejam entender](/blog/guia-rapido-de-semantica-html-para-ux-writers)\n\n[Design O que é o Figma Buzz? Descubra o que é o Figma Buzz, a nova ferramenta do Figma que facilita a criação d... Ler a](/blog/o-que-e-o-figma-buzz)\n\n[Tecnologia Como configurar chave SSH para o Github Aprenda neste post como configurar chave SSH para o Github Ler artigo](/blog/como-configurar-chave-ssh-github)\n\n[Tecnologia Como habilitar acesso à câmera em sites sem certifica... Aprenda neste post como habilitar acesso à câmera em](/blog/como-habilitar-acesso-a-camera-em-sites-sem-certificado-https-ssl)\n\n[Tecnologia Como espelhar celular Android no PC com scrcpy da Gen... Aprenda neste post como espelhar o celular Android n](/blog/como-espelhar-celular-android-no-pc-com-scrcpy-genymobile)\n\n[Front-end Como configurar path aliases em um projeto React + Vi... Veja neste post como configurar as importações com &#](/blog/como-configurar-path-aliases-em-um-projeto-react-com-vite-typescript-swc)\n\n[Carreira Como formatar um currículo de maneira adequada Veja neste artigo uma dica de ferramenta para melhorar seu currí](/blog/como-formatar-um-curriculo-de-maneira-adequada)",
      "description": "Dicas e conhecimentos sobre desenvolvimento web, frontend, React, Astro e design UX/UI por Matheus Costa.",
      "keywords": [
        "como",
        "blog",
        "para",
        "neste",
        "https",
        "design",
        "artigo",
        "configurar",
        "post",
        "fazer"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog"
      }
    },
    {
      "id": "deab9fe3a04d2d41",
      "url": "https://matheuscostadesign.github.io/blog/como-espelhar-celular-android-no-pc-com-scrcpy-genymobile",
      "title": "Como espelhar celular Android no PC com scrcpy da Genymobile — Blog Matheus Costa",
      "content": "[Voltar ao Blog](/blog) Tecnologia\n\n## Como espelhar celular Android no PC com scrcpy da Genymobile\n\nMatheus Costa 05 de Junho de 2024\n\nAprenda neste post como espelhar o celular Android no PC Windows com o scrcpy.\n\n## Espelhando a tela (Android)\n\n- Exemplo de uso\n\n## 1) Download da aplicação\n\nFaça o download da última versão do [**scrcpy**](https://github.com/Genymobile/scrcpy/releases)\n\n- [Download Genymobile / scrcpy](https://github.com/Genymobile/scrcpy/releases)\n\n## 2) Configurações no aparelho\n\nConecte o dispositivo Android no computador **via cabo USB;**\n\nNo aparelho Android, habilite o **modo de desenvolvedor** e **permita a depuração USB**;\n\nPara finalizar, basta executar o arquivo **“scrcpy.exe”**\n\n## 3) Personalizando scrcpy\n\nTambém é possível realizar algumas configurações adicionais no scrcpy\n\nPor exemplo:\n\n- Desligar a tela do celular automaticamente ao abrir o programa\n\n- Configurar a posição inicial de abertura (posição x e y)\n\n- Entre outras configurações…\n\nPara fazer isso basta criar um arquivo chamado scrcpy.bat na raíz da pasta onde está localizado o scrcpy.exe com os seguintes comandos:\n\nscrcpy -d -S -w --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --always-on-top --window-x=1400 --window-y=60\nE toda vez que for espelhar o celular, basta executar esse arquivo .bat\n\n## 4) Documentação completa\n\nSe precisar de mais alguma configuração, basta consultar toda documentação aqui:\n\n- [https://github.com/Genymobile/scrcpy?tab=readme-ov-file#user-documentation](https://github.com/Genymobile/scrcpy?tab=readme-ov-file#user-documentation)\n\n[Ver todos os artigos](/blog)",
      "description": "Aprenda neste post como espelhar o celular Android no PC Windows com scrcpy",
      "keywords": [
        "scrcpy",
        "genymobile",
        "android",
        "celular",
        "https",
        "github",
        "basta",
        "blog",
        "espelhar",
        "download"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "/blog/como-espelhar-celular-android-no-pc-com-scrcpy-genymobile"
      }
    },
    {
      "id": "e034cca132f30995",
      "url": "https://matheuscostadesign.github.io/blog/2025/06/2025-06-18-ux-writers",
      "title": "Guia rápido de semântica HTML para UX Writers (Part 1)",
      "content": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica. Ao explorar o uso adequado das tags, aprenda como estruturar o conteúdo de maneira clara, promovendo acessibilidade e elevando a qualidade da experiência do usuário.\n\n## O que é semântica HTML?\n\nA semântica HTML é a prática de usar tags e elementos de forma que reflitam o significado e a estrutura do conteúdo, indo além da simples apresentação visual.\n\nPara UX Writers, que são responsáveis por criar textos claros e impactantes em interfaces digitais, **entender a semântica HTML é essencial para garantir que o conteúdo seja acessível, compreensível por sistemas automatizados e otimizado para a experiência do usuário.**\n\n## Por que o HTML semântico é essencial para UX e SEO?\n\nO HTML semântico utiliza tags específicas — como `<header>`, `<article>`, `<nav>`, e `<aside>`  —  para descrever o propósito do conteúdo, em vez de apenas sua aparência.\n\nPor exemplo, usar `<h1>` para um título principal não apenas define o tamanho da fonte, mas também indica a hierarquia mais importante na página.\n\nIsso é crucial para tecnologias assistivas, como leitores de tela, que interpretam a estrutura do conteúdo para usuários com deficiência visual.\n\n_Jakob Nielsen_, um dos pioneiros em usabilidade, enfatiza que a clareza estrutural reduz o esforço cognitivo do usuário ao buscar e processar informações” (Nielsen, 2005).\n\nNo contexto do UX Writing, a semântica HTML amplifica essa clareza, permitindo que o texto seja compreendido tanto por humanos quanto por máquinas, como motores de busca e assistentes de voz.\n\nAlém disso, um HTML bem estruturado melhora a acessibilidade, atendendo às diretrizes do [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/standards-guidelines/wcag/), e pode até contribuir para o SEO, aumentando a visibilidade do conteúdo.\n\n## Como a semântica HTML impacta o trabalho de UX Writers?",
      "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
      "keywords": [
        "para",
        "html",
        "como",
        "semântica",
        "conteúdo",
        "exemplo",
        "writers",
        "texto",
        "button",
        "label"
      ],
      "metadata": {
        "title": "Guia rápido de semântica HTML para UX Writers",
        "description": "Este artigo é um guia prático para UX Writers que desejam entender e aplicar a semântica HTML de forma estratégica.",
        "slug": "guia-rapido-de-semantica-html-para-ux-writers",
        "author": "Matheus Costa",
        "categories": "Design",
        "image": "/assets/images/posts/2025/06/guia-rapido-de-semantica-html-para-ux-writers.webp",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 5,
        "sourcePath": "blog/2025/06/2025-06-18-ux-writers.md"
      }
    },
    {
      "id": "e60af1427043ca7d",
      "url": "https://matheuscostadesign.github.io/blog/como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery",
      "title": "Como fazer o efeito voltar ao topo suave com jQuery — Blog Matheus Costa (Part 2)",
      "content": "// Scroll suave nos links do Header\n$('.header a[href^=\"#\"]').on(\"click\", function (e) {\n// seu menu\ne.preventDefault();\nvar id = $(this).attr(\"href\"),\ntargetOffset = $(id).offset().top;\n$(\"html, body\").animate(\n{\nscrollTop: targetOffset - 80, // margin-top (altura do header)\n},\n400 // velocidade transição\n);\n});\n\n- Lembrando que é necessário seu menu/header chame esta sessão. Por exemplo:\n\n&#x3C;header class=\"header\">\n&#x3C;div class=\"container\">\n&#x3C;nav>\n&#x3C;ul>\n&#x3C;li>&#x3C;a href=\"#contato\" class=\"link under\">Contato&#x3C;/a>&#x3C;/li>\n&#x3C;/ul>\n&#x3C;/nav>\n&#x3C;/div>\n&#x3C;/header>\n\n- E a sessão deve ter o mesmo ID:\n\n&#x3C;section class=\"s-contato\" id=\"contato\">&#x3C;/section>\nDessa forma, quando o usuário clicar no link a página irá descer suavemente até a sessão desejada.\n\nGostou da dica? Sabia dela ou já usou em algum projeto? Tem alguma dica para acrescentar? Comenta aí o que achou. Valeeu!\n\n[Ver todos os artigos](/blog)",
      "description": "Veja neste artigo como fazer o efeito voltar ao topo da página de forma suave (smooth scrolling) utilizando a biblioteca jQuery",
      "keywords": [
        "jquery",
        "header",
        "voltar",
        "suave",
        "topo",
        "html",
        "class",
        "download",
        "href",
        "menu"
      ],
      "metadata": {
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "/blog/como-fazer-o-efeito-de-voltar-ao-topo-suave-com-jquery"
      }
    },
    {
      "id": "e8945648dff029a5",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-21-ssl-manual",
      "title": "Como gerar o certificado SSL/HTTPS de forma manual (Part 2)",
      "content": "6. Crie um arquivo com os dados que foram gerados pelo Certbot _(exatamente com o mesmo nome gerado pelo Certbot, sem nenhuma extenção)_\n   - **Exemplo:**\n   - **Nome do arquivo:** <kbd>LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4</kbd>\n   - **Conteúdo:** <kbd>LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4.rt9TPxI7m6aoCBhS6YVbWpDqZSBD2vGrEyr88dPom_M</kbd>\n\n7. Acessar o servidor de hospedagem e inserir o arquivo gerado na pasta **\"acme-challenge\"** (no domínio principal e nos subdominios)\n   - Ex: **http://dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4**\n   - Ex: **http://subdominio.dominio.com.br/.well-known/acme-challenge/LD_37mksvJMxkIU-wKmsglXG7h-EL15kfaddVS6XKa4**\n\n8. Abra a URL gerada pelo Certbot no navegador. A página deve carregar normalmente e exibir o conteúdo em forma de texto.\n\n9. Volte no prompt de comando e pressione **\"Enter\"**\n\n10. Pronto! O certificado será gerado na pasta:\n\n- `C:\\Certbot\\live\\dominio.com.br\\fullchain.pem`\n- `C:\\Certbot\\live\\dominio.com.br\\privkey.pem`\n\n![ssl.png]({{ site.baseurl }}/assets/images/posts/2022/ssl.png)\n\n## Enviando certificado para a empresa de hospedagem\n\n1. Pegar os arquivos gerados pelo certbot e **alterar a extensão**\n   - <kbd>fullchain.pem</kbd> para <kbd>fullchain.crt</kbd> e\n   - <kbd>privkey.pem</kbd> para <kbd>privkey.key</kbd>\n\n2. Criar uma pasta na raiz do do servidor\n   - Ex: `Web > ssl`\n\n3. Inserir os arquivos **\"fullchain.crt\"** e **\"privkey.key\"** na pasta criada via FTP\n\n4. Abrir um chamado com a empresa de hospedagem (de 3 em 3 meses) e informá-los sobre a instalação do certificado tanto para o domínio principal quanto para subdomínios\n\n5. Validar o funcionamento do certificado pelo site:\n   - **<a href=\"https://certlogik.com/ssl-checker/\" rel=\"noopener noreferrer\">https://certlogik.com/ssl-checker/</a>**\n   - **<a href=\"https://www.sslshopper.com/ssl-checker.html\" rel=\"noopener noreferrer\">https://www.sslshopper.com/ssl-checker.html</a>**",
      "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
      "keywords": [
        "dominio",
        "certbot",
        "para",
        "certificado",
        "acme-challenge",
        "https",
        "well-known",
        "pasta",
        "pelo",
        "arquivos"
      ],
      "metadata": {
        "title": "Como gerar o certificado SSL/HTTPS de forma manual",
        "description": "Veja neste artigo como gerar os arquivos de certificado SSL da Let's Encrypt para seu site de forma manual e gratuita.",
        "slug": "como-gerar-o-certificado-ssl-https-de-forma-manual",
        "author": "Matheus Costa",
        "categories": "Front-end, Deploy",
        "image": "/assets/images/posts/2022/como-gerar-certificado-ssl-https-de-forma-manual.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 3,
        "sourcePath": "blog/2022/02/2022-02-21-ssl-manual.md"
      }
    },
    {
      "id": "ea2c6aa7ee00d132",
      "url": "https://matheuscostadesign.github.io/blog/como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples",
      "title": "Como enviar dados do formulário HTML para o Whatsapp — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como enviar dados do formulário HTML para o Whatsapp\n\nMatheus Costa 18 de Março de 2022\n\nVeja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.\n\n## Exemplo/Demonstração da funcionalidade:\n\n- Veja o exemplo abaixo de como irá funcionar o envio:\n\nSee the Pen [Enviar dados do formulário HTML para o Whatsapp](https://codepen.io/matheuscostadesign/pen/jOYWppy) by Matheus Costa ([@matheuscostadesign](https://codepen.io/matheuscostadesign))\non [CodePen](https://codepen.io).\n\nVocê também pode acessar o exemplo clicando no link abaixo:\n\n- [matheuscostadesign.github.io/enviar-para-whatsapp/](https://matheuscostadesign.github.io/enviar-para-whatsapp/)\n\nCódigo fonte completo:\n\n- [github.com/matheuscostadesign/enviar-para-whatsapp](https://github.com/matheuscostadesign/enviar-para-whatsapp)\n\n## Como fazer isso no meu formulário?\n\n### 1) Adicionar onsubmit no form\n\n- Você vai precisar primeiramente passar uma função Javascript no onsubmit da tag form do HTML:\n\n&#x3C;form action=\"#\" method=\"get\" onsubmit=\"abrirWhatsapp()\">\n&#x3C;!-- seus campos/inputs aqui -->\n&#x3C;button type=\"submit\">Enviar dados p/ Whatsapp&#x3C;/button>\n&#x3C;/form>\n\n### 2) Nomear cada input com um ID exclusivo\n\n- Agora será necessário passar um ID exclusivo cada um dos seus campos do formulário, por exemplo:\n\n&#x3C;!-- id=\"nome\" -->\n&#x3C;input\ntype=\"text\"\nname=\"nome\"\nid=\"nome\"\nplaceholder=\"Informe seu nome completo\"\nrequired\n/>\n&#x3C;!-- id=\"telefone\" -->\n&#x3C;input\ntype=\"tel\"\nname=\"telefone\"\nid=\"telefone\"\nplaceholder=\"Informe seu telefone\"\nrequired\n/>\n&#x3C;!-- id=\"email\" -->\n&#x3C;input\ntype=\"email\"\nname=\"email\"\nid=\"email\"\nplaceholder=\"Seu melhor e-mail\"\nrequired\n/>\n\n### 3) Criar script\n\n-\nAgora, no seu JavaScript inclua o código abaixo:\n\n**Lembrando que você deve alterar o código de acordo com os campos do seu formulário.**",
      "description": "Veja neste artigo como enviar os dados digitados no formulário HTML para o Whatsapp com validação de campos obrigatórios.",
      "keywords": [
        "nome",
        "telefone",
        "formulário",
        "matheuscostadesign",
        "email",
        "html",
        "https",
        "input",
        "dados",
        "whatsapp"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-enviar-dados-do-formulario-html-para-o-whatsapp-de-forma-simples"
      }
    },
    {
      "id": "ec7ab0074bbfe4cb",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-22-header-scroll",
      "title": "Como alterar menu header após scroll com Javascript (Part 1)",
      "content": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS), sem utilizar o framework jQuery.\n\n## Configurando o HTML\n\n- Primeiramente vamos chamar em nosso HTML o arquivo Javascript que irá conter a função para alterar o header.\n- Neste exemplo, o arquivo de scripts está na pasta `js/scripts`\n- Insira o comando abaixo antes do fechamento da tag `</body>`\n\n```html\n<script src=\"js/scripts.js\"></script>\n```\n\n## Adicionando função no Javascript\n\n- Agora insira o comando abaixo no arquivo de scripts\n- Lembrando que é necessário alterar o seletor: `querySelector(\".header\")` para que ele capture o seu elemento HTML, seja uma classe ou um ID.\n- Exemplo: `document.querySelector(\"NOME-DA-SUA-CLASSE-OU-ID\")`\n\n```js\n// Função Alterar Header Apos Scroll\nfunction alterarHeaderAposScroll() {\n  const header = document.querySelector(\".header\"); // captura o header\n  const navHeight = header.offsetHeight;\n  if (window.scrollY >= navHeight) {\n    // se o scroll for maior que a altura do header adiciona a classe ativo\n    header.classList.add(\"ativo\");\n  } else {\n    header.classList.remove(\"ativo\"); // remove a classe\n  }\n}\n\n// Chamada das funções pelo scroll\nwindow.addEventListener(\"scroll\", function () {\n  alterarHeaderAposScroll();\n});\n```\n\n## Personalizando a classe no CSS\n\n- Agora é só adicionar a classe `.ativo` no arquivo .CSS do seu menu e fazer as personalizações desejadas.\n- Toda vez que o scroll na página for maior que a altura do header a classe será adicionada\n\n```scss\n.header {\n  position: fixed;\n  z-index: 10;\n  width: 100%;\n  height: 12.5rem;\n  background: transparent;\n  display: flex;\n  align-items: center;\n  transition: all 0.3s;\n}\n\n// Habilita classe .ativo após o scroll\n.header.ativo {\n  background: $white;\n  height: 8rem;\n  box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.05);\n}\n```",
      "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
      "keywords": [
        "header",
        "scroll",
        "classe",
        "ativo",
        "página",
        "alterar",
        "html",
        "arquivo",
        "função",
        "para"
      ],
      "metadata": {
        "title": "Como alterar menu header após scroll com Javascript",
        "description": "Veja neste artigo como alterar o menu/cabeçalho/header do site após scroll na página com Vanilla Javascript (Pure JS).",
        "slug": "como-alterar-menu-header-apos-scroll-com-javascript",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/como-alterar-menu-header-apos-scroll.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "blog/2022/02/2022-02-22-header-scroll.md"
      }
    },
    {
      "id": "efeb5086e4484186",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-04-react-native",
      "title": "Como criar apps com React Native (Part 3)",
      "content": "| React Native   | Android        | iOS              | Web (similaridade)    |\n| -------------- | -------------- | ---------------- | --------------------- |\n| `<View>`       | `<ViewGroup>`  | `<UIView>`       | `<div>`               |\n| `<Text>`       | `<TextView>`   | `<UITextView>`   | `<p>`                 |\n| `<Image>`      | `<ImageView>`  | `<UIImageImage>` | `<img>`               |\n| `<ScrollView>` | `<ScrollView>` | `<UIScrollView>` | `<div> `              |\n| `<TextInput>`  | `<EditText>`   | `<UITextField>`  | `<input type=\"text\">` |\n\n### 2.3.1) Amostra das visualizações no Android x iOS\n\n<img src=\"/assets/images/posts/2023/05/android-e-ios-react-native.png\" alt=\"Android x iOS\">\n\n## 2.4) Fundamentos de React\n\n- React Native é executado com base no React, por isso, é necessário saber os fundamentos de:\n\n  - 2.4.1) componentes\n  - 2.4.2) JSX\n  - 2.4.3) props\n  - 2.4.4) estado\n\n### 2.4.1) Componentes\n\n- **Um componente é um elemento básico da interface do usuário;**\n\n- Podemos criar componentes de função (_hooks com estado_) e com classes (_forma antiga_);\n\n- O React Native irá renderizar no aparelho do usuário o componente de acordo com o sistema operacional do dispositivo (iOS ou Android);\n\n```jsx\nimport React from \"react\";\nimport { Text } from \"react-native\";\n\nconst Cat = () => {\n  return <Text>Hello, I am your cat!</Text>;\n};\n\nexport default Cat;\n```\n\n### 2.4.2) JSX\n\n- JSX é uma extensão da sintaxe do JavaScript que **permite escrever HTML dentro do JavaScript**;\n\n- **Em JSX podemos misturar JavaScript e HTML** (ou XML) **em um único arquivo**;\n\n- Como JSX é JavaScript, podemos usar **variáveis** dentro dele;\n\n- Qualquer expressão JavaScript funcionará entre chaves no JSX, como por exemplo:\n\n```jsx\nimport React from \"react\";\nimport { Text } from \"react-native\";\n\nconst getFullName = (\n  firstName: string,\n  secondName: string,\n  thirdName: string\n) => {\n  return firstName + \" \" + secondName + \" \" + thirdName;\n};",
      "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
      "keywords": [
        "react",
        "view",
        "native",
        "para",
        "import",
        "from",
        "text",
        "const",
        "android",
        "react-native"
      ],
      "metadata": {
        "title": "Como criar apps com React Native",
        "description": "Neste post estarei compartilhando e documentando minha experiência durante o processo de criação de aplicativos Android e iOS utilizando React Native.",
        "slug": "como-criar-apps-com-react-native",
        "author": "Matheus Costa",
        "categories": "React Native",
        "image": "/assets/images/posts/2023/05/como-criar-apps-com-react-native.jpg",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 11,
        "sourcePath": "blog/2023/05/2023-05-04-react-native.md"
      }
    },
    {
      "id": "f2ab0df32c716727",
      "url": "https://matheuscostadesign.github.io/blog/2026/03/2026-03-04-ferramentas-documentacao",
      "title": "Melhores ferramentas gratuitas para criar documentação em 2026 (Part 2)",
      "content": "Wiki.js é uma plataforma de wiki moderna, open source e extremamente poderosa, construída com Node.js. Ela oferece uma interface de edição rica, suporte a múltiplos bancos de dados, autenticação via diferentes provedores e armazenamento de conteúdo em Git, tornando-a ideal para equipes que precisam de uma solução completa e auto-hospedada para gestão de conhecimento e documentação interna.",
      "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
      "keywords": [
        "para",
        "https",
        "documentação",
        "fumadocs",
        "starlight",
        "docusaurus",
        "wiki",
        "2026",
        "documentações",
        "href"
      ],
      "metadata": {
        "title": "Melhores ferramentas gratuitas para criar documentação em 2026",
        "description": "Links de algumas ferramentas gratuitas para criação de documentação de projetos",
        "slug": "melhores-ferramentas-para-criar-documentacao-de-sistemas-e-sites",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2026/03/ferramentas-documentacao.jpg",
        "comments": "true",
        "chunkIndex": 1,
        "totalChunks": 2,
        "sourcePath": "blog/2026/03/2026-03-04-ferramentas-documentacao.md"
      }
    },
    {
      "id": "f42d984a9e33e904",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-03-comandos-git",
      "title": "Comandos básicos de Git",
      "content": "Inicializar repositório Git\n\n```jsx\ngit init\n```\n\nCriar arquivo .gitignore\n\n```jsx\nnpx gitignore node\n```\n\nVer os arquivos que serão adicionados\n\n```jsx\ngit status\n```\n\nAdicionar todas mudanças (stage)\n\n```jsx\ngit add .\n```\n\nComitar e escrever o que foi feito\n\n```jsx\ngit commit -m \"feat: primeiro commit\"\n```\n\nGarantir que está na branch “main”\n\n```jsx\ngit branch -M main\n```\n\nLinkar a pasta local com a pasta remota do repositório no Github\n\n```jsx\ngit remote add origin https://github.com/matheuscostadesign/aluratube.git\n```\n\nMandar os arquivos pra pasta remota (Push to Remote)\n\n```jsx\ngit push -u origin main\n```",
      "description": "Aprenda neste post alguns dos comandos básicos de Git",
      "keywords": [
        "main",
        "pasta",
        "repositório",
        "gitignore",
        "arquivos",
        "commit",
        "branch",
        "remota",
        "github",
        "remote"
      ],
      "metadata": {
        "title": "Comandos básicos de Git",
        "description": "Aprenda neste post alguns dos comandos básicos de Git",
        "slug": "comandos-basicos-de-git",
        "author": "Matheus Costa",
        "categories": "Git",
        "image": "/assets/images/posts/2023/05/comandos-basicos-de-git.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2023/05/2023-05-03-comandos-git.md"
      }
    },
    {
      "id": "f87519a22653087a",
      "url": "https://matheuscostadesign.github.io/blog/2023/08/2023-08-08-padroes-commit",
      "title": "Padrões de mensagens de commit",
      "content": "> Aprenda neste artigo algumas convenções/padronizações das mensagens de commits para o Git/Github.\n\n## Padronização de Commits\n\n### Formato:\n\n```\n<tipo>(escopo): Assunto\n<corpo>\nTipo\n```\n\nOs valores permitidos para o `tipo` são:\n\n- `feat`: _Nova funcionalidade_;\n- `fix` : _Correção de um bug_;\n- `refactor`: _Alterações em geral_;\n- `style`: _Estilização e layout_;\n- `docs`: _Algo relacionado a documentação_;\n- `perf`: _Melhorias de performance_;\n- `chore`: _Build, configs, deploy e afins_;\n- `test`: _Adicionar ou corrigir testes_;\n\n### Escopo\n\nInforme qual escopo (projeto) está sendo alterado. Valores permitidos para o `escopo`:\n\n- `adm`: FreedomNEO - ADM\n- `app`: FreedomNEO - APP Portaria\n- `frq`: FreedomNEO - Franqueados\n- `www`: FreedomNEO - Landing-page\n\n### Assunto\n\n- Máximo de 50 caracteres\n- Assunto deve estar no _imperativo_\n\n### Corpo\n\n- _Opcional_\n- Deve conter o `o que` e o `por que` ao invés de conter o `como` foi feito\n- Se for necessário contextualizar o commit ou explicar o porquê das mudanças, fique a vontade!\n\n### Exemplo de Commit:\n\n```\nrefactor(app): Bloqueia edição da placa do veículo\nInclui trava para o usuário não conseguir editar a placa do veículo\n```\n\n## Referências\n\n- Essa padronização das mensagens tem como base o [Karma Commit](https://karma-runner.github.io/1.0/dev/git-commit-msg.html)",
      "description": "Aprenda neste artigo algumas convenções/padronizações das mensagens de commits para o Git/Github.",
      "keywords": [
        "para",
        "escopo",
        "freedomneo",
        "tipo",
        "assunto",
        "commit",
        "mensagens",
        "commits",
        "github",
        "padronização"
      ],
      "metadata": {
        "title": "Padrões de mensagens de commit",
        "description": "Aprenda neste artigo algumas convenções/padronizações das mensagens de commits para o Git/Github.",
        "slug": "padroes-de-mensagens-de-commit",
        "author": "Matheus Costa",
        "categories": "Git",
        "image": "/assets/images/posts/2023/08/padroes-de-mensagens-de-commit.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2023/08/2023-08-08-padroes-commit.md"
      }
    },
    {
      "id": "fa14af88c8dae7c4",
      "url": "https://matheuscostadesign.github.io/blog/2024/04/2024-04-12-axios",
      "title": "Exemplo prático Axios Interceptor consumindo várias APIs (Part 1)",
      "content": "Exemplo prático de como configurar o Axios Interceptor consumindo várias APIs\n\n### Configurando o serviço\n\n- Arquivo `services/apis.tsx`\n\n<hr>\n\n```tsx\nimport axios, { AxiosInstance } from \"axios\";\n\ntype ICustomInstace = AxiosInstance & {\n  defaults: {\n    customBaseURL?: string;\n  };\n};\n\nexport const instance: ICustomInstace = axios.create({});\n\nexport const apiExemplo1 = () => {\n  instance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO1;\n  return instance;\n};\n\nexport const apiExemplo2 = () => {\n  instance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO2;\n  return instance;\n};\n\nexport const apiExemplo3 = () => {\n  instance.defaults.baseURL = process.env.EXPO_PUBLIC_API_EXEMPLO3;\n  return instance;\n};\n```\n\n### Criando componente funcional\n\n- Arquivo `services/apis.interceptor.tsx` como um componente funcional:\n\n<hr>\n\n```tsx\nimport { useAuth } from \"@/hooks/useAuth\";\nimport { useEffect } from \"react\";\nimport { apiAuth, instance } from \"./apis\";\nimport { storage } from \"./storage\";\n\nconst AxiosInterceptor = ({ children }) => {\n  const { setToken, setRefreshToken, setTokenDecoded, setRefreshTokenDecoded } =\n    useAuth();\n  const navigation = useNavigation();\n\n  useEffect(() => {\n    // Intercepta a requisição (request)\n    instance.interceptors.request.use((request) => {\n      return request;\n    });\n\n    // Intercepta a resposta (response)\n    instance.interceptors.response.use(\n      (response) => {\n        return response;\n      },\n      async (error) => {\n        const originalReq = error.config;\n        if (\n          error.response.status === 401 &&\n          originalReq &&\n          !originalReq._retry\n        ) {\n          originalReq._retry = true;\n\n          const refresh = storage.getString(\"tokenRefresh\");\n\n          if (!refresh) {\n            return Promise.reject(error);\n          }",
      "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
      "keywords": [
        "const",
        "return",
        "instance",
        "storage",
        "import",
        "from",
        "export",
        "error",
        "originalreq",
        "axiosinterceptor"
      ],
      "metadata": {
        "title": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "description": "Exemplo prático Axios Interceptor consumindo várias APIs",
        "slug": "axios-interceptor-consumindo-varias-apis",
        "author": "Matheus Costa",
        "categories": "Frontend",
        "image": "/assets/images/posts/2024/04/axios-interceptor-consumindo-varias-apis.jpeg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 4,
        "sourcePath": "blog/2024/04/2024-04-12-axios.md"
      }
    },
    {
      "id": "fe0533adfedeebae",
      "url": "https://matheuscostadesign.github.io/blog/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia",
      "title": "Como fazer todos os links externos do site abrir em uma nova aba/guia — Blog Matheus Costa (Part 1)",
      "content": "[Voltar ao Blog](/blog) Front-end\n\n## Como fazer todos os links externos do site abrir em uma nova aba/guia\n\nMatheus Costa 31 de Maio de 2024\n\nAprenda como fazer com que todos os links externos do seu site abram em uma nova guia do navegador automaticamente, sem precisar ficar adicionando target=\"_blank\" manualmente para cada tag a (âncora) no HTML.\n\n## Adicionando script\n\nPara fazer com que todos os links externos (aqueles que não apontam para o seu domínio) abram em uma nova guia, você pode usar JavaScript para adicionar o atributo target=\"_blank\" a esses links. Aqui está um exemplo de como fazer isso:\n\n- **Obter todos os links da página**: Você pode selecionar todos os elementos &#x3C;a>.\n\n- **Verificar se o link é externo**: Comparar o domínio do link com o domínio da sua página.\n\n- **Adicionar target=\"_blank\" aos links externos**: Se o link for externo, adicionar o atributo para que ele abra em uma nova guia.\n\nAqui está um código JavaScript que realiza essas etapas:\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n// Obter o domínio atual\nconst currentDomain = window.location.hostname;\n\n// Selecionar todos os links na página\nconst links = document.querySelectorAll(\"a\");\n\n// Iterar sobre cada link\nlinks.forEach((link) => {\n// Obter o href do link\nconst href = link.getAttribute(\"href\");\n\n// Verificar se o href é um link externo\nif (href &#x26;&#x26; !href.includes(currentDomain) &#x26;&#x26; href.startsWith(\"http\")) {\n// Adicionar o atributo target=\"_blank\"\nlink.setAttribute(\"target\", \"_blank\");\n// Evita que a página de destino acesse a página de origem\nlink.setAttribute(\"rel\", \"noopener noreferrer\");\n}\n});\n});\n\n### Explicação do código:\n\n-\n**Evento DOMContentLoaded**: O código é executado quando o DOM é carregado e pronto. Isso garante que todos os links estejam presentes na página antes de tentar manipulá-los.\n\n-\n**Obter o domínio atual**: window.location.hostname retorna o domínio do site atual, sem incluir o protocolo (http/https) e o caminho.",
      "description": "Veja neste artigo como fazer com que todos os links externos do seu site abram em uma nova guia do navegador.",
      "keywords": [
        "link",
        "href",
        "links",
        "todos",
        "página",
        "target",
        "blank",
        "para",
        "nova",
        "domínio"
      ],
      "metadata": {
        "chunkIndex": 0,
        "totalChunks": 2,
        "sourcePath": "/blog/como-abrir-todos-links-externos-do-site-em-uma-nova-aba-ou-guia"
      }
    },
    {
      "id": "ff2395c2909d7099",
      "url": "https://matheuscostadesign.github.io/blog/2023/05/2023-05-01-libs-frontend",
      "title": "As melhores bibliotecas de UI para Frontend em 2024 (Part 3)",
      "content": "Radix UI oferece componentes de baixo nível com foco em acessibilidade, personalização e experiência do desenvolvedor. Esses componentes podem ser usados como a camada base de um sistema de design ou adotados incrementalmente, proporcionando flexibilidade no desenvolvimento de interfaces de alta qualidade e acessíveis\n\n## 5) [Next UI](https://nextui.org/)\n\n<a href=\"https://nextui.org/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/nextui.jpg\" alt=\"Next UI\">\n</a>\n\nNextUI é uma biblioteca de interface do usuário para React que ajuda a construir interfaces de usuário bonitas e acessíveis. Ela foi criada em cima do Tailwind CSS e React Aria, com o objetivo principal de simplificar o processo de desenvolvimento, oferecendo um sistema de design belo e adaptável para uma experiência de usuário melhorada. É importante destacar que NextUI não está relacionado ao Vercel e é um projeto independente da comunidade.\n\nNextUI é especificamente projetado para React, pois é construído em cima do React Aria. No entanto, você ainda pode usar a parte de estilo dos componentes do NextUI com outros frameworks ou bibliotecas. Isso significa que, embora seja otimizado para React, sua abordagem modular permite certa flexibilidade na integração com outras tecnologias.\n\n## 6) [Stitches](https://stitches.dev/)\n\n<a href=\"https://stitches.dev/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/stitches.jpg\" alt=\"Stitches\">\n</a>\n\nStitches é uma biblioteca de estilização CSS-in-JS desenvolvida pelo WorkOS, projetada para oferecer uma experiência de desenvolvimento (DX) superior e ser framework-agnóstica. Ela é conhecida por sua API totalmente tipada, propriedades conscientes de tokens e utilitários personalizados, proporcionando uma experiência divertida e intuitiva para os desenvolvedores.\n\n## 7) [Nextra](https://nextra.site/)\n\n<a href=\"https://nextra.site/\" target=\"_blank\">\n  <img src=\"/assets/images/posts/2023/ui/nextra.jpg\" alt=\"Nextra\">\n</a>",
      "description": "Links de algumas bibliotecas de estilização no front-end",
      "keywords": [
        "para",
        "https",
        "componentes",
        "biblioteca",
        "react",
        "2023",
        "astro",
        "href",
        "target",
        "blank"
      ],
      "metadata": {
        "title": "As melhores bibliotecas de UI para Frontend em 2024",
        "description": "Links de algumas bibliotecas de estilização no front-end",
        "slug": "bibliotecas-ui-para-frontend",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2023/bibliotecas-ui-para-frontend.jpg",
        "comments": "true",
        "chunkIndex": 2,
        "totalChunks": 4,
        "sourcePath": "blog/2023/05/2023-05-01-libs-frontend.md"
      }
    },
    {
      "id": "ff380dc7d1d72e1b",
      "url": "https://matheuscostadesign.github.io/blog/2022/02/2022-02-11-htaccess",
      "title": "Configurações importantes para adicionar no arquivo .htaccess",
      "content": "Veja neste artigo configurações importantes de se adicionar no arquivo `.htaccess` para servidores web/PHP:\n\n## Redirecionamento HTTP para HTTPs\n\n```txt\nRewriteEngine On\nRewriteCond %{SERVER_PORT} 80\nRewriteRule ^(.*)$ https://www.dominio.com.br/$1 [R,L]\n```\n\n## Remover extensões dos arquivos na URL\n\n```txt\n<IfModule mod_rewrite.c>\nOptions +FollowSymLinks -MultiViews\nRewriteEngine On\nRewriteBase /\nRewriteCond %{THE_REQUEST} ^[A-Z]{3,}\\s([^.]+)\\.html [NC]\nRewriteRule ^ %1 [R,L]\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME}.html -f\nRewriteRule ^(.*?)/?$ $1.html [L]\n</IfModule>\n```\n\n## Exibir página não encontrada - 404\n\n```txt\nErrorDocument 404 /404.html\n```\n\n## Ativar compactação GZIP\n\n```txt\nAddOutputFilterByType DEFLATE text/plain\nAddOutputFilterByType DEFLATE text/xml\nAddOutputFilterByType DEFLATE application/xhtml+xml\nAddOutputFilterByType DEFLATE text/css\nAddOutputFilterByType DEFLATE application/xml\nAddOutputFilterByType DEFLATE image/svg+xml\nAddOutputFilterByType DEFLATE application/rss+xml\nAddOutputFilterByType DEFLATE application/atom_xml\nAddOutputFilterByType DEFLATE application/x-javascript\nAddOutputFilterByType DEFLATE application/javascript\nAddOutputFilterByType DEFLATE application/x-httpd-php\nAddOutputFilterByType DEFLATE application/x-httpd-fastphp\nAddOutputFilterByType DEFLATE application/x-httpd-eruby\nAddOutputFilterByType DEFLATE text/html\nSetOutputFilter DEFLATE\nBrowserMatch ^Mozilla/4 gzip-only-text/html\nBrowserMatch ^Mozilla/4.0[678] no-gzip\nBrowserMatch ^HMSI[E] !no-gzip !gzip-only-text/html\nSetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary\n```\n\n## Habilitar Keep Alive\n\n```txt\n<ifModule mod_headers.c>\nHeader set Connection keep-alive\n</ifModule>\n```",
      "description": "Veja neste artigo configurações importantes de se adicionar no arquivo .htaccess para servidores web/PHP",
      "keywords": [
        "deflate",
        "addoutputfilterbytype",
        "application",
        "html",
        "rewritecond",
        "ifmodule",
        "request",
        "text",
        "rewriterule",
        "browsermatch"
      ],
      "metadata": {
        "title": "Configurações importantes para adicionar no arquivo .htaccess",
        "description": "Veja neste artigo configurações importantes de se adicionar no arquivo .htaccess para servidores web/PHP",
        "slug": "configuracoes-importantes-para-adicionar-no-arquivo-htaccess",
        "author": "Matheus Costa",
        "categories": "Front-end",
        "image": "/assets/images/posts/2022/configuracoes-no-htaccess.jpg",
        "comments": "true",
        "chunkIndex": 0,
        "totalChunks": 1,
        "sourcePath": "blog/2022/02/2022-02-11-htaccess.md"
      }
    }
  ],
  "metadata": {
    "totalEntries": 117,
    "generator": "aeo.js",
    "generatorUrl": "https://aeojs.org",
    "embedding": {
      "recommended": "text-embedding-ada-002",
      "dimensions": 1536
    }
  }
}