Skip to content

fix: corrige tipos de conteúdo inválidos e três links quebrados#412

Open
vascoginde wants to merge 1 commit into
mainfrom
fix/tipos-de-conteudo-invalidos
Open

fix: corrige tipos de conteúdo inválidos e três links quebrados#412
vascoginde wants to merge 1 commit into
mainfrom
fix/tipos-de-conteudo-invalidos

Conversation

@vascoginde

@vascoginde vascoginde commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

O problema

O campo type de cada conteúdo passa pelo enum CardContentType do GraphQL (_api/modules/cards/index.ts). Valores fora do enum são serializados como null, e o componente que desenha a etiqueta usa type || "CONTENT" como fallback (ItemContent.tsx).

O efeito é que o conteúdo continua listado e clicável, mas classificado errado: um artigo com type: ARTIGO chega ao componente como null e aparece com a etiqueta cinza "Conteúdo" em vez da rosa "Artigo".

Encontrei 70 ocorrências assim, em 48 arquivos, nos três idiomas.

Os tipos aceitos, conforme o enum e o _data/locale/pt-BR.ts:
SITE · ARTICLE · COURSE · YOUTUBE · PODCAST · BOOK · CHALLENGE · ALURAPLUS

A correção

Feita por evidência, não por suposição — os casos ambíguos foram resolvidos olhando o endereço do link:

de para critério
20x podcast PODCAST só diferença de caixa
15x ARTIGO ARTICLE tradução
9x VIDEO ALURAPLUS links cursos.alura.com.br/extra/alura-mais/
6x challenge CHALLENGE só diferença de caixa
6x CURSO COURSE tradução
3x VIDEO YOUTUBE links youtube.com
3x LIVRO BOOK tradução
1x VIDEO CONTENT link ted.com, não se encaixa nos demais
1x EBOOK BOOK e-book da UFSC
1x TEMPLATE SITE template no Miro
1x MATERIAL SITE material no Figma
1x MANUAL SITE página do IFSC
1x FAQ SITE página do gov.br
1x YOUTUBLE YOUTUBE erro de digitação
1x ARTICLE PM3 ARTICLE "PM3" é o nome do site, não parte do tipo

Mais três URLs que não abrem:

  • first-contact-with-UX.yamlhttps:https://... (protocolo repetido)
  • machine-learning-fundamentals.yamlhhttps://... (um h a mais)
  • lottie.yaml — fragmento #:~:text= com espaços, que invalida a URL

Sobre o CONTENT do vídeo do TED: ele não está no enum do GraphQL, então também será serializado como null e cairá no mesmo fallback — o rótulo renderizado é "Conteúdo", que é o pretendido. Três conteúdos já existentes no repositório usam esse valor da mesma forma. Se preferirem SITE, é uma linha.

Verificação

Comparando a página pt-BR/path/marketing-digital entre produção e o deploy de preview desta branch:

"type":null na página
produção (hoje no ar) 5
preview desta branch 0

Os 5 são exatamente os conteúdos que este PR corrige naquele guide (4 ARTIGO + 1 LIVRO).

Escopo

Só os campos type e link foram tocados. Nenhum título, ordem de itens ou estrutura muda aqui — o diff é de 140 linhas de type e 6 de link, e nada mais.

Verificado depois da mudança: os 48 arquivos continuam YAML válido, todo type agora é aceito pelo enum, e o conteúdo é idêntico ao anterior em tudo que não seja esses dois campos.

O que este PR não resolve

Na mesma varredura encontrei problemas que precisam de decisão de conteúdo e por isso ficaram de fora — estão no #413. O mais sério é o motion-design, que referencia 8 cards inexistentes.

@vascoginde

Copy link
Copy Markdown
Collaborator Author

Sobre o build-preview vermelho aqui: não tem relação com as mudanças deste PR.

O build em si termina bem (Export successful); a falha é no passo seguinte, de publicação na Vercel:

Vercel CLI 37.5.3
Error: Your Vercel CLI version is outdated.
This endpoint requires version 47.2.2 or later.

É um problema preexistente — o PR anterior, de fevereiro de 2026, falhou com exatamente o mesmo padrão (build, test e lint verdes, só build-preview vermelho).

Abri o #414 para corrigir, e lá o build-preview passou: a CLI subiu para a 56.5.0 e o deploy de preview foi publicado normalmente, com o comentário do link voltando a aparecer.

Sugestão de ordem: mergear o #414 primeiro. Depois disso, os checks daqui ficam todos verdes — e, mais importante, o deploy de produção volta a funcionar, senão este PR entra no repositório mas não chega ao site.

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

Preview Deployment Successful!

Check deploy info

https://techguide-static-pnm1w4kz3-tech-guide-alura.vercel.app

O campo type de cada conteúdo passa pelo enum CardContentType do GraphQL
(_api/modules/cards/index.ts). Valores fora do enum são serializados como
null, e o componente que desenha a etiqueta usa `type || "CONTENT"` como
fallback (ItemContent.tsx).

O efeito é que o conteúdo continua listado e clicável, mas classificado
errado: um artigo com `type: ARTIGO` chega ao componente como null e
aparece com a etiqueta cinza "Conteúdo" em vez da rosa "Artigo".

Havia 70 ocorrências assim. A correção foi feita por evidência, não por
suposição — os casos ambíguos foram resolvidos olhando o endereço:

  20x  podcast      -> PODCAST      (só diferença de caixa)
  15x  ARTIGO       -> ARTICLE
   9x  VIDEO        -> ALURAPLUS    (links cursos.alura.com.br/extra/alura-mais/)
   6x  challenge    -> CHALLENGE    (só diferença de caixa)
   6x  CURSO        -> COURSE
   3x  VIDEO        -> YOUTUBE      (links youtube.com)
   3x  LIVRO        -> BOOK
   1x  VIDEO        -> CONTENT      (link ted.com, não se encaixa nos demais)
   1x  EBOOK        -> BOOK         (e-book da UFSC)
   1x  TEMPLATE     -> SITE         (template no Miro)
   1x  MATERIAL     -> SITE         (material no Figma)
   1x  MANUAL       -> SITE         (página do IFSC)
   1x  FAQ          -> SITE         (página do gov.br)
   1x  YOUTUBLE     -> YOUTUBE      (erro de digitação)
   1x  ARTICLE PM3  -> ARTICLE      (PM3 é o nome do site, não parte do tipo)

Também corrige três URLs que não abrem:

  first-contact-with-UX.yaml         https: repetido no começo
  machine-learning-fundamentals.yaml um h a mais no começo
  lottie.yaml                        fragmento #:~:text= com espaços

Verificação no deploy de preview: a página de marketing-digital tem hoje,
em produção, 5 conteúdos com "type":null — exatamente os 5 corrigidos
neste PR naquele guide. No preview desta branch, nenhum.

Fora esses dois campos, nada mais foi tocado: nenhum título, ordem de
itens ou estrutura muda neste PR.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6yBa1mA33fppRH8WzZCFN
@vascoginde
vascoginde force-pushed the fix/tipos-de-conteudo-invalidos branch from 263c5bc to 62167e7 Compare July 22, 2026 23:38
@vascoginde

Copy link
Copy Markdown
Collaborator Author

Correção da descrição original. Eu havia escrito que a etiqueta "aparece quebrada na tela". Não é o que acontece, e o texto do PR e do commit já foram corrigidos.

O que ocorre de fato: o enum CardContentType do GraphQL serializa valores desconhecidos como null, e o componente usa type || "CONTENT" como fallback. Então o conteúdo continua listado e clicável, só que com a etiqueta cinza genérica "Conteúdo" no lugar da correta.

O bug é real — 70 conteúdos classificados como genéricos quando deveriam mostrar seu tipo — mas o sintoma é classificação errada, não interface quebrada. Verifiquei comparando produção com o preview desta branch: a página de marketing-digital tem 5 "type":null hoje no ar, e nenhum no preview.

@vascoginde

Copy link
Copy Markdown
Collaborator Author

@omariosouto @fabriciocarraro @steppat — pedindo revisão de vocês antes de mergear, principalmente porque parte disto aqui é decisão editorial e não minha.

Contexto. Estou montando um fluxo para minha equipe criar e revisar tech guides a partir de planilhas. Ao validar os arquivos de _data/ contra as regras que o site aplica, apareceram 88 problemas. Separei em três partes:

  • fix: usa a versão atual da CLI da Vercel nos deploys #414 (já mergeado) — a CLI da Vercel estava presa na versão 37 e a API passou a exigir 47+. O build-preview falhava em todo PR desde pelo menos fevereiro, e o comentário com o link de preview nunca era postado porque roda depois do deploy no mesmo job. Mergeei esse sozinho por ser infraestrutura de duas linhas destravando o pipeline — se preferirem que eu tivesse esperado, me digam e ajusto daqui pra frente. Detalhe que descobrimos no caminho: o último deploy de produção bem-sucedido tinha sido em 2025-09-08, que é também o último commit da main, então a incompatibilidade estava latente e ia estourar no próximo merge de qualquer um. Depois do merge, o deploy de produção rodou com sucesso.
  • este PR — 70 tipos de conteúdo inválidos e 3 URLs quebradas.
  • Guides apontam para 13 cards que não existem, e 4 conteúdos estão sem link válido #413 — o que precisa de decisão de conteúdo de vocês. O mais sério é o motion-design, que referencia 8 cards inexistentes; os três níveis de expertise dele são formados só por esses cards.

O que merece o olhar de vocês neste PR. Dos 70 consertos, 65 são mecânicos e indiscutíveis: diferença de maiúscula (podcastPODCAST), tradução (ARTIGOARTICLE, CURSOCOURSE), e os VIDEO que apontam para /extra/alura-mais/ e viraram ALURAPLUS.

Os 5 restantes são julgamento meu e podem muito bem estar errados:

card de para meu critério
organizational-structure VIDEO CONTENT link do TED; não é YouTube nem curso
game-design-as-product MATERIAL SITE "Game Design Canvas" hospedado no Figma
business-model-canvas TEMPLATE SITE template no Miro
best-practices-as-a-habit MANUAL SITE manual em página do IFSC
starting-business-correctly FAQ SITE página de perguntas frequentes do gov.br

Qualquer um desses eu troco em uma linha se vocês preferirem outro rótulo.

Sobre o escopo. Só os campos type e link foram tocados — nenhum título, ordem ou estrutura muda aqui. E a verificação está no corpo do PR: a página pt-BR/path/marketing-digital tem hoje 5 conteúdos com "type":null em produção, e nenhum no preview desta branch.

Se fizer sentido, eu também posso mandar depois um PR adicionando essas validações ao CI, para o lint pegar tipo inválido e referência a card inexistente antes de entrar. Fico à disposição.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant