mirror of
https://github.com/domfelipe/chef-zero.git
synced 2026-08-07 10:56:49 +00:00
feat: launch ChefZero static app
This commit is contained in:
commit
a85cbfd559
8 changed files with 1274 additions and 0 deletions
38
.github/workflows/deploy.yml
vendored
Normal file
38
.github/workflows/deploy.yml
vendored
Normal 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
1
.nojekyll
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
|
||||||
46
README.md
Normal file
46
README.md
Normal 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
24
docs/FINALIZACAO.md
Normal 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
29
docs/PLANEJAMENTO.md
Normal 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
29
docs/QA.md
Normal 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
31
docs/REDTEAM.md
Normal 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
1076
index.html
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue