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
featuredse 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.