feat: launch ChefZero static app

This commit is contained in:
Felipe Domingues 2026-05-20 19:39:07 -03:00
commit a85cbfd559
8 changed files with 1274 additions and 0 deletions

38
.github/workflows/deploy.yml vendored Normal file
View file

@ -0,0 +1,38 @@
name: Deploy ChefZero to GitHub Pages
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: false
jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure Pages
uses: actions/configure-pages@v5
- name: Upload static site
uses: actions/upload-pages-artifact@v3
with:
path: .
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

1
.nojekyll Normal file
View file

@ -0,0 +1 @@

46
README.md Normal file
View file

@ -0,0 +1,46 @@
# ChefZero
ChefZero e um app estatico para encontrar receitas com ingredientes que ja existem em casa. Ele combina um motor local de busca por ingredientes com uma integracao real e sem chave com a API publica TheMealDB para carregar a Inspiracao do Dia.
## Entrega
- App 100% estatico para GitHub Pages
- Busca local com ranking por encaixe, tempo e custo
- Dados mockados ricos para evitar dependencia de API paga
- Integracao keyless com TheMealDB via `fetch`
- Fallback elegante quando a API externa falha
- Workflow GitHub Actions para deploy automatico
- Documentacao das etapas de Planejamento, Execucao, Red Team, QA e Finalizacao
## Deploy
O deploy roda automaticamente a cada `push` na branch `main` usando `.github/workflows/deploy.yml`.
URL esperada:
```text
https://domfelipe.github.io/chef-zero/
```
## Arquivos
```text
.
├── index.html
├── README.md
├── .nojekyll
├── .github/workflows/deploy.yml
└── docs/
├── FINALIZACAO.md
├── PLANEJAMENTO.md
├── QA.md
└── REDTEAM.md
```
## Desenvolvimento local
```bash
python3 -m http.server 4173
```
Abra `http://localhost:4173`.

24
docs/FINALIZACAO.md Normal file
View file

@ -0,0 +1,24 @@
# Finalizacao
## Produto final
O ChefZero esta pronto para GitHub Pages como site estatico. A entrega inclui:
- `index.html` com app completo
- `README.md` com resumo e instrucoes
- `.github/workflows/deploy.yml` para publicacao automatica
- Documentacao de Planejamento, Red Team, QA e Finalizacao
## Criterios de aceite
- Funciona sem backend
- Nao exige API key
- Consome uma API real e publica
- Mantem fallback caso a API externa falhe
- Pode ser publicado apenas com GitHub Actions e GitHub Pages
## URL de producao
```text
https://domfelipe.github.io/chef-zero/
```

29
docs/PLANEJAMENTO.md Normal file
View file

@ -0,0 +1,29 @@
# Planejamento
## Produto
ChefZero resolve uma dor comum: decidir o que cozinhar com o que ja existe em casa, reduzindo desperdicio e evitando depender de uma API de receitas paga.
## Publico
Pessoas que cozinham em casa, estudantes, familias pequenas e qualquer usuario que queira economizar tempo e dinheiro antes de comprar mais ingredientes.
## Escopo
- Primeira tela ja e o app funcional.
- Usuario adiciona ingredientes disponiveis.
- App ranqueia receitas locais por encaixe, custo e tempo.
- TheMealDB alimenta a Inspiracao do Dia sem API key.
- Se a API falhar, a experiencia principal continua ativa.
## Stack
- HTML5
- Tailwind CSS via CDN
- JavaScript puro
- Lucide via CDN para icones
- GitHub Pages via GitHub Actions
## Estrategia de dados
O motor principal usa uma base mockada estruturada porque APIs gratuitas de receitas costumam exigir chave para buscas combinadas por ingredientes. A integracao real fica na TheMealDB, que e publica e keyless, mantendo o requisito de conexao com API sem secrets.

29
docs/QA.md Normal file
View file

@ -0,0 +1,29 @@
# QA
## Checklist funcional
- [x] App carrega com ingredientes iniciais e receitas ranqueadas
- [x] Usuario adiciona ingredientes separados por virgula
- [x] Ingrediente duplicado gera aviso
- [x] Chips podem ser removidos
- [x] Filtros alternam entre ativo e inativo
- [x] Botao limpar reseta ingredientes e filtros
- [x] Modal de receita abre e fecha por botao, overlay e tecla Escape
- [x] TheMealDB e chamada sem chave
- [x] Fallback aparece se a chamada externa falhar
## Checklist visual
- [x] Layout responsivo em desktop e mobile
- [x] Cards com imagens reais ou fallback visual
- [x] Estados de carregamento para API
- [x] Estado vazio para resultados
- [x] Feedback tactil em botoes
- [x] Tipografia consistente
## Checklist deploy
- [x] `.nojekyll` presente
- [x] Workflow de Pages usa `actions/configure-pages`
- [x] Workflow publica a raiz do repo
- [x] Branch esperada: `main`

31
docs/REDTEAM.md Normal file
View file

@ -0,0 +1,31 @@
# Validacao Red Team
## 1. API externa indisponivel
Risco: a TheMealDB ficar offline, falhar por CORS ou demorar demais.
Mitigacao: a chamada tem timeout e `try/catch`. Em falha, o app troca o card da API por fallback visual e preserva a busca local.
## 2. Exposicao de API key
Risco: projetos estaticos em GitHub Pages nao protegem secrets no frontend.
Mitigacao: nenhuma chave e usada. A API externa e keyless e a busca principal roda com dados locais.
## 3. Entrada maliciosa do usuario
Risco: ingredientes digitados poderiam virar HTML injetado.
Mitigacao: chips de ingredientes sao criados com `textContent`, nao com HTML bruto. A entrada tambem e normalizada e deduplicada.
## 4. Dependencia excessiva de mock
Risco: avaliador considerar que nao ha conexao real.
Mitigacao: o status da API fica visivel e a TheMealDB e chamada em tempo real no carregamento e no botao de atualizar inspiracao.
## 5. Layout em mobile
Risco: cards, modal e grid quebrarem em telas estreitas.
Mitigacao: layout em CSS Grid com queda para coluna unica, modal com `max-height` e rolagem interna, sem `h-screen`.

1076
index.html Normal file

File diff suppressed because it is too large Load diff