Files

2.6 KiB

Disponibilidade das demos de projetos

A homepage seleciona projetos pelo campo featured de public/portfolio-data.json. O snapshot de health nunca decide se um card existe; ele serve somente para apresentar o estado do CTA da demo.

Estados

lib/project-health.ts deriva quatro estados:

Estado Condição Comportamento do CTA
available A demo tem URL e a última resposta conhecida foi 200 com Content-Type: text/html. Exibe “Abrir projeto”.
unavailable A demo tem URL e a última resposta conhecida foi conclusiva, mas não atende ao contrato 200 + HTML. Exibe “Demo indisponível na última verificação” sem link.
unknown A demo tem URL, mas não existe observação ou a tentativa terminou em erro/status nulo. Mantém “Abrir projeto” com aviso acessível de disponibilidade não verificada.
none O projeto não tem demoUrl. Não exibe CTA de demo.

Links de código e os demais dados do card independem desses estados.

Leitura durante a renderização

loadFeaturedProjects() lê data/project-health.json quando a homepage é renderizada.

  • Produção: usa a última observação disponível, mesmo antiga. Não faz fetch externo durante render e continua exibindo todos os projetos featured se o arquivo estiver ausente ou inválido.
  • Desenvolvimento: usa imediatamente um snapshot com até 15 minutos. Se o snapshot estiver ausente ou antigo, consulta as demos em memória. Uma falha conserva a última observação conclusiva daquele projeto quando ela existe; caso contrário, o estado fica unknown. Esse refresh não grava o arquivo.

Atualização manual opcional

Para atualizar a observação versionada:

pnpm check:projects

scripts/check-projects.mjs lê as demos de public/portfolio-data.json, segue redirecionamentos, aplica timeout de 10 segundos e registra status, content type, URL final, latência, horário e eventual erro. A escrita é atômica: o processo grava data/project-health.json.<pid>.tmp e só então renomeia o arquivo para data/project-health.json.

O comando consulta serviços externos e altera data/project-health.json; execute-o apenas quando uma nova observação deva ser revisada e versionada.

Papel do snapshot

data/project-health.json é a última observação conhecida, não um gate de build, deploy ou conteúdo. Ele pode estar antigo, ausente ou conter falhas sem esconder os cards selecionados. Nenhum cron é necessário para a aplicação funcionar; uma automação externa pode executar a atualização manual, mas não faz parte deste repositório nem da renderização de produção.