<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Luiz</title>
    <description>The latest articles on DEV Community by Gabriel Luiz (@gabrielluizs1996).</description>
    <link>https://dev.to/gabrielluizs1996</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3667950%2F5f3da4e8-d92a-40ef-be5d-82fa77fae57a.jpg</url>
      <title>DEV Community: Gabriel Luiz</title>
      <link>https://dev.to/gabrielluizs1996</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabrielluizs1996"/>
    <language>en</language>
    <item>
      <title>Evoluindo a arquitetura do PsyHub com Monorepo + Nx + Module Federation</title>
      <dc:creator>Gabriel Luiz</dc:creator>
      <pubDate>Tue, 17 Feb 2026 16:47:19 +0000</pubDate>
      <link>https://dev.to/gabrielluizs1996/evoluindo-a-arquitetura-do-psyhub-com-monorepo-nx-module-federation-2mkl</link>
      <guid>https://dev.to/gabrielluizs1996/evoluindo-a-arquitetura-do-psyhub-com-monorepo-nx-module-federation-2mkl</guid>
      <description>&lt;p&gt;🚀 Migrando para Microfrontends sem reescrever o passado&lt;/p&gt;

&lt;p&gt;Nos últimos dias compartilhei um material mostrando, na prática, como conduzir a migração de uma aplicação para microfrontends começando por uma página real: a tela de login.&lt;/p&gt;

&lt;p&gt;Mas o ponto não é só técnico.&lt;br&gt;
É sobre arquitetura como estratégia.&lt;/p&gt;

&lt;p&gt;Mostro nos slides:&lt;br&gt;
O que é host e o que é remote na prática&lt;br&gt;
Como funciona o consumo de um microfrontend&lt;br&gt;
Como estruturar o compartilhamento entre aplicações&lt;br&gt;
Como migrar de forma incremental, sem “big bang”&lt;br&gt;
E principalmente: como sustentar evolução sem reescrever tudo&lt;/p&gt;

&lt;p&gt;Esse conteúdo é para:&lt;br&gt;
 👨‍💼 Lideranças que precisam tomar decisões arquiteturais sustentáveis&lt;br&gt;
 🧑‍💻 Devs que querem entender microfrontends além do hype&lt;br&gt;
 🎯 Recrutadores que buscam profissionais com visão de arquitetura e escalabilidade&lt;br&gt;
 🚀 Pessoas iniciantes que querem entender como grandes sistemas evoluem na prática&lt;/p&gt;

&lt;p&gt;A leitura completa dos slides leva em média 5 a 7 minutos.&lt;/p&gt;

&lt;p&gt;Se você acredita que arquitetura não é sobre o hoje, mas sobre viabilizar o amanhã — esse material é para você.&lt;/p&gt;

&lt;p&gt;Depois me conta o que achou 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmldu3n87moevv94g1g9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmldu3n87moevv94g1g9.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfjwjtfqc4q8zdw66oyd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfjwjtfqc4q8zdw66oyd.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfq6c01wvcpop4wdggij.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyfq6c01wvcpop4wdggij.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05o7buv2rzy8rkqdzy5g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F05o7buv2rzy8rkqdzy5g.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyegotpyissrvon7psojk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyegotpyissrvon7psojk.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyh093f1pdx5pf6yo0k5z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyh093f1pdx5pf6yo0k5z.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32ne69ljkgaflm782gmk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32ne69ljkgaflm782gmk.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtyaad1gb0w6so40tcnb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtyaad1gb0w6so40tcnb.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtsmlj6pf6cnf4d1pd4s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtsmlj6pf6cnf4d1pd4s.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnvohgdrk57n41jks8xa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnvohgdrk57n41jks8xa.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monorepo</category>
      <category>nx</category>
      <category>architecture</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Acessibilidade na Prática</title>
      <dc:creator>Gabriel Luiz</dc:creator>
      <pubDate>Tue, 30 Dec 2025 01:38:49 +0000</pubDate>
      <link>https://dev.to/gabrielluizs1996/acessibilidade-na-pratica-i54</link>
      <guid>https://dev.to/gabrielluizs1996/acessibilidade-na-pratica-i54</guid>
      <description>&lt;h2&gt;
  
  
  Um guia inicial
&lt;/h2&gt;

&lt;p&gt;A acessibilidade digital vai muito além de cumprir regras técnicas.&lt;br&gt;&lt;br&gt;
Ela trata de &lt;strong&gt;incluir pessoas&lt;/strong&gt;, garantir autonomia e permitir que todos naveguem, interajam e consumam conteúdo de forma justa.&lt;/p&gt;

&lt;p&gt;Neste post, quero compartilhar conceitos &lt;strong&gt;práticos e aplicáveis&lt;/strong&gt; sobre acessibilidade no desenvolvimento frontend — do HTML semântico ao uso consciente de ARIA e ferramentas essenciais.&lt;/p&gt;


&lt;h2&gt;
  
  
  O Papel do Desenvolvedor na Acessibilidade
&lt;/h2&gt;

&lt;p&gt;O desenvolvedor tem um papel fundamental na construção de interfaces acessíveis.&lt;br&gt;&lt;br&gt;
É nossa responsabilidade garantir que produtos digitais sejam utilizáveis por &lt;strong&gt;todas as pessoas&lt;/strong&gt;, incluindo usuários com deficiência visual, motora, auditiva ou cognitiva.&lt;/p&gt;

&lt;p&gt;Acessibilidade envolve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boas práticas de código&lt;/li&gt;
&lt;li&gt;Uso de padrões como &lt;strong&gt;WCAG&lt;/strong&gt; e &lt;strong&gt;ARIA&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Preocupação desde o início do desenvolvimento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Brasil, acessibilidade digital &lt;strong&gt;é um direito garantido por lei&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Incluir no código é incluir no mundo.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  O que é ARIA?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ARIA (Accessible Rich Internet Applications)&lt;/strong&gt; é uma especificação do W3C que fornece atributos para tornar componentes dinâmicos mais acessíveis.&lt;/p&gt;

&lt;p&gt;Ela permite que tecnologias assistivas entendam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o &lt;strong&gt;papel&lt;/strong&gt; de um elemento&lt;/li&gt;
&lt;li&gt;seu &lt;strong&gt;estado&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;suas &lt;strong&gt;propriedades&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso é essencial em interfaces modernas com muitos componentes customizados.&lt;/p&gt;

&lt;p&gt;Documentação oficial: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/wai-aria/" rel="noopener noreferrer"&gt;https://www.w3.org/TR/wai-aria/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/pt-BR/docs/Web/Accessibility/ARIA" rel="noopener noreferrer"&gt;https://developer.mozilla.org/pt-BR/docs/Web/Accessibility/ARIA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Os 4 Princípios da Acessibilidade (WCAG)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Perceptível
&lt;/h3&gt;

&lt;p&gt;A informação deve ser apresentada de forma que todos possam perceber.&lt;br&gt;
&lt;strong&gt;Exemplo:&lt;/strong&gt;  Adicionar textos alternativos em imagens.&lt;/p&gt;


&lt;h3&gt;
  
  
  Operável
&lt;/h3&gt;

&lt;p&gt;A interface deve ser utilizável por qualquer usuário.&lt;br&gt;
&lt;strong&gt;Exemplo:&lt;/strong&gt; Permitir navegação completa pelo teclado.&lt;/p&gt;


&lt;h3&gt;
  
  
  Compreensível
&lt;/h3&gt;

&lt;p&gt;O conteúdo deve ser fácil de entender.&lt;br&gt;
&lt;strong&gt;Exemplo:&lt;/strong&gt; Formulários com instruções claras e mensagens objetivas.&lt;/p&gt;


&lt;h3&gt;
  
  
  Robusto
&lt;/h3&gt;

&lt;p&gt;O código deve ser compatível com tecnologias assistivas.&lt;br&gt;
&lt;strong&gt;Exemplo:&lt;/strong&gt; Uso correto de HTML semântico e ARIA.&lt;/p&gt;


&lt;h2&gt;
  
  
  Ferramentas Essenciais para Acessibilidade
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Axe DevTools
&lt;/h3&gt;

&lt;p&gt;Extensão que analisa problemas de acessibilidade com base na WCAG.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como usar:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instale no Chrome ou Firefox&lt;/li&gt;
&lt;li&gt;Abra o DevTools&lt;/li&gt;
&lt;li&gt;Vá até a aba &lt;strong&gt;axe DevTools&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Clique em &lt;strong&gt;Scan&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Analise os problemas e sugestões&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5jkebvp56t8r9zxufip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5jkebvp56t8r9zxufip.png" alt="Tela do axe DevTools exibindo o resultado de uma varredura de acessibilidade no site youtube.com, com 95 problemas identificados. O painel mostra a divisão dos erros por tipo, incluindo falhas relacionadas a ARIA sem nome acessível, botões sem texto discernível, controles interativos aninhados e tooltips ARIA sem nome acessível, além da indicação de critérios WCAG 2.1 AA ativados." width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  WCAG Color Contrast Checker
&lt;/h3&gt;

&lt;p&gt;Verifica se o contraste de cores atende aos níveis &lt;strong&gt;AA&lt;/strong&gt; ou &lt;strong&gt;AAA&lt;/strong&gt; da WCAG.&lt;/p&gt;

&lt;p&gt;Ideal para garantir legibilidade.&lt;/p&gt;


&lt;h3&gt;
  
  
  NVDA (Leitor de Tela)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsupxckifar60vhu4ljn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsupxckifar60vhu4ljn4.png" alt="Logo do NVDA com fundo roxo e a letra N estilizada em branco." width="200" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ferramenta essencial para testar a experiência de usuários cegos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dica:&lt;/strong&gt; Pressione &lt;code&gt;INSERT + S&lt;/code&gt; para alternar os modos de fala.&lt;br&gt;
&lt;strong&gt;Site oficial:&lt;/strong&gt; &lt;a href="https://www.nvaccess.org/" rel="noopener noreferrer"&gt;https://www.nvaccess.org/&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  HTML Semântico: A Base de Tudo
&lt;/h2&gt;

&lt;p&gt;Evite usar &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; para tudo.&lt;/p&gt;

&lt;p&gt;HTML semântico ajuda:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usuários&lt;/li&gt;
&lt;li&gt;leitores de tela&lt;/li&gt;
&lt;li&gt;SEO&lt;/li&gt;
&lt;li&gt;manutenção do código&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Elementos importantes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Representa o cabeçalho de uma página ou de uma seção. Geralmente contém logotipo, título, introdução ou elementos de apoio à navegação. Pode existir mais de um &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; na página, desde que cada um esteja associado a um contexto diferente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Define um bloco de navegação principal ou secundário. Deve ser usado apenas para conjuntos de links que representam a navegação do site ou de uma seção específica, facilitando a identificação por leitores de tela.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Contém o conteúdo principal da página. Deve ser único e excluir conteúdos repetidos, como menus e rodapés. Ajuda tecnologias assistivas a pular diretamente para o conteúdo central.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Use quando você precisa agrupar conteúdos relacionados dentro de um tema maior. Deve possuir um título que descreva seu propósito, ajudando a criar uma hierarquia clara de conteúdo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Representa conteúdos complementares ou secundários ao conteúdo principal. Exemplos comuns incluem barras laterais, conteúdos relacionados, anúncios ou informações adicionais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Define o rodapé de uma página ou de uma seção. Geralmente contém informações institucionais, direitos autorais, links auxiliares ou metadados relacionados ao conteúdo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;&lt;/strong&gt;: Use quando o conteúdo faz sentido sozinho, fora da página. Ideal para posts, cards, notícias, produtos ou qualquer conteúdo que possa ser reutilizado, listado ou compartilhado de forma independente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsno57l61agtyzcx7ra6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsno57l61agtyzcx7ra6q.png" alt="Wireframe de página web demonstrando a estrutura semântica com HTML. No topo há um header; à esquerda, um aside. A área principal (main) contém duas sections: a primeira com um título H1 e dois cards representados por articles com títulos H3; a segunda com um título H2 e três cards em articles, também com H3. Na parte inferior, há um footer. O layout destaca visualmente a hierarquia de títulos e o uso de section e article." width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Hierarquia de Títulos
&lt;/h2&gt;

&lt;p&gt;Uma boa hierarquia (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; → &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;) facilita:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;navegação por leitores de tela&lt;/li&gt;
&lt;li&gt;compreensão do conteúdo&lt;/li&gt;
&lt;li&gt;organização visual e semântica&lt;/li&gt;
&lt;li&gt;Nunca pule níveis sem necessidade.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;main&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Cursos Disponíveis&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"frontend-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"frontend-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cursos de Frontend&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Angular com Acessibilidade&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Aprenda a criar aplicações acessíveis usando Angular.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;React e WCAG na Prática&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Boas práticas de acessibilidade aplicadas ao React.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"backend-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"backend-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cursos de Backend&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;APIs REST Acessíveis&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Como documentar e estruturar APIs pensando em acessibilidade.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O Poder do &lt;code&gt;alt&lt;/code&gt; nas Imagens
&lt;/h2&gt;

&lt;p&gt;O atributo &lt;code&gt;alt&lt;/code&gt; descreve imagens para quem não pode vê-las.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkj6bnh89dc95v1pdoi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkj6bnh89dc95v1pdoi7.png" alt="Imagem abstrata com uma pizza de pepperoni ao fundo; abaixo, mãos posicionadas sobre um teclado de computador. No centro, há uma caixa de texto destacando um exemplo de código HTML com o atributo alt descrevendo a imagem." width="709" height="609"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; 
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"pizza.jpg"&lt;/span&gt; 
  &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Pizza de pepperoni com queijo derretido e bordas crocantes"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Principais atributos ARIA
&lt;/h2&gt;

&lt;p&gt;ARIA não cria comportamento, apenas informa semântica e estado para tecnologias assistivas.&lt;/p&gt;

&lt;p&gt;Regra de ouro:&lt;br&gt;
Use HTML semântico primeiro. ARIA só quando necessário.&lt;/p&gt;
&lt;h3&gt;
  
  
  aria-label
&lt;/h3&gt;

&lt;p&gt;Fornece um nome acessível quando não há texto visível.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Fechar modal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ✕
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Leitores de tela anunciam corretamente&lt;br&gt;
❌ Não visível para usuários visuais&lt;/p&gt;


&lt;h3&gt;
  
  
  aria-labelledby
&lt;/h3&gt;

&lt;p&gt;Usa um elemento existente como rótulo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"titulo-perfil"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Perfil do usuário&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"titulo-perfil"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Preferível ao aria-label&lt;br&gt;
✔ Mantém conteúdo visível e reutilizável&lt;/p&gt;


&lt;h3&gt;
  
  
  aria-describedby
&lt;/h3&gt;

&lt;p&gt;Fornece descrições adicionais, como ajuda ou erro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"email-ajuda"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email-ajuda"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Insira um e-mail válido
&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leitores de tela:&lt;/p&gt;

&lt;p&gt;"Campo de edição, insira um e-mail válido"&lt;/p&gt;




&lt;h3&gt;
  
  
  aria-hidden
&lt;/h3&gt;

&lt;p&gt;Oculta conteúdo apenas para leitores de tela.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;★&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Útil para ícones decorativos&lt;br&gt;
❌ Não substitui display: none&lt;/p&gt;


&lt;h3&gt;
  
  
  role
&lt;/h3&gt;

&lt;p&gt;Define a função semântica de um elemento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"menu"&lt;/span&gt; &lt;span class="na"&gt;tabindex=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"menuitem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Estados ARIA comuns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  aria-expanded
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-expanded=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;aria-controls=&lt;/span&gt;&lt;span class="s"&gt;"menu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Menu
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"menu"&lt;/span&gt; &lt;span class="na"&gt;hidden&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Indica estado aberto/fechado&lt;/p&gt;




&lt;h3&gt;
  
  
  aria-selected
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"option"&lt;/span&gt; &lt;span class="na"&gt;aria-selected=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Opção 1
&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  aria-disabled
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;aria-disabled=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Enviar
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Ainda recebe foco&lt;br&gt;
Use junto com disabled quando possível.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dica prática: Experiência visual com NVDA
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthig44qh7u18brrwlsbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fthig44qh7u18brrwlsbo.png" alt="Céu estrelado ao fundo, com o texto “Experiência visual NVDA” em degradê verde e laranja." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Uma das formas mais eficazes de entender &lt;strong&gt;o impacto real da acessibilidade&lt;/strong&gt; é simular a experiência de um usuário cego.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exercício simples e poderoso&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abra uma implementação sua &lt;strong&gt;sem ajustes de acessibilidade&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Inicie o &lt;strong&gt;NVDA&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feche os olhos&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Tente navegar apenas com o teclado e o leitor de tela&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Acessibilidade não é um detalhe visual, é uma experiência completa.&lt;br&gt;
Quando projetamos pensando em quem navega sem ver, criamos interfaces melhores para todos.&lt;br&gt;
Teste, escute o leitor de tela e deixe a inclusão guiar suas decisões.&lt;/p&gt;

&lt;p&gt;Muito obrigado!&lt;br&gt;
Gabriel Luiz da Silva.&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/gabrielluizs1996/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/gabrielluizs1996/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>a11y</category>
      <category>web3</category>
      <category>w3c</category>
    </item>
  </channel>
</rss>
