Plataforma full stack para operacao de pedidos de hamburgueria, com foco em produtividade de atendimento, fluxo de cozinha e consistencia de dados.
- Visao de Produto
- Arquitetura
- Prints da Aplicacao
- Funcionalidades
- Stack Tecnologica
- Estrutura do Projeto
- Modelo de Dados
- API e Endpoints
- Como Rodar Localmente
- Qualidade e Engenharia
- Deploy
- Roadmap Sugerido
O BurgerApp cobre a jornada completa do pedido:
- Cliente navega no cardapio.
- Cliente monta burger customizado.
- Pedido e enviado para API.
- Cozinha recebe em painel operacional.
- Time atualiza status ate entrega.
Resultado: menos atrito no atendimento, melhor visibilidade da cozinha e controle total de pedidos.
┌──────────────────────────────┐ HTTP/JSON ┌──────────────────────────────┐
│ Frontend Web │ <-------------------> │ Backend API │
│ Vue 3 + Vite │ │ Go + Gin │
│ Porta 5173 │ │ Porta 8080 │
└──────────────────────────────┘ └───────────────┬──────────────┘
│
│ SQL
▼
┌───────────────────────────┐
│ PostgreSQL │
│ Porta 5432 │
└───────────────────────────┘
- Frontend desacoplado da persistencia: comunicacao apenas via API.
- Backend com responsabilidade de validacao, regra e orquestracao de fluxo.
- Banco relacional para integridade e rastreabilidade de pedidos.
- Contratos HTTP claros e testaveis com Swagger.
Cardapio/Montagem -> POST /api/orders -> Persistencia -> Painel de Cozinha
Painel de Cozinha -> PUT /api/orders/:id/status -> Atualizacao de estado -> Recarregamento da fila
Sugestao: colocar as capturas em
./docs/prints/e manter nome padrao por tela.
- Listagem de produtos por categoria.
- Cards com imagem, descricao e preco.
- Disponibilidade controlada por produto.
- Selecao de ingredientes por tipo (pao, carne, queijo, molho etc.).
- Composicao de itens customizados por pedido.
- Ajuste de observacoes por item.
- Criacao de pedido com dados estruturados.
- Registro de itens e totais.
- Persistencia em banco de dados.
- Lista de pedidos em andamento.
- Atualizacao de status:
pending -> preparing -> ready -> delivered. - Visualizacao orientada a operacao.
- Dados nao se perdem em recarregamento.
- Historizacao via timestamps.
- Integridade de relacionamento por chaves estrangeiras.
Vue.js 3com Composition API.Vitepara desenvolvimento e build.CSS3para UI responsiva e visual consistente.
Go 1.23.Ginpara API REST.lib/pqpara acesso ao PostgreSQL.
PostgreSQL 12+.- Modelo relacional com tabelas de dominio e relacionamento.
Swaggerpara exploracao e teste de endpoints.Dockerpara subida rapida dos servicos.
Projeto/
├── projeto-hamburgueria/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Header.vue
│ │ │ ├── Menu.vue
│ │ │ ├── Kitchen.vue
│ │ │ └── CustomBurger.vue
│ │ ├── assets/
│ │ ├── App.vue
│ │ ├── api.js
│ │ └── main.js
│ ├── public/
│ └── package.json
│
├── backend-hamburgueria/
│ ├── config/
│ │ └── config.go
│ ├── database/
│ │ └── database.go
│ ├── handlers/
│ │ └── handlers.go
│ ├── models/
│ │ └── models.go
│ ├── routes/
│ │ └── routes.go
│ ├── scripts/
│ ├── main.go
│ └── go.mod
│
└── READMES.md
id: chave primarianame: nome da categoriadescription: descricaocreated_at: auditoria de criacao
id: chave primarianame: nome do produtodescription: descricao do produtoprice: preco de vendacategory_id: referencia de categoriaimage_url: imagem do cardapiois_available: disponibilidadecreated_at: auditoria de criacao
id: chave primarianame: nome do ingredienteprice: adicionalcategory: agrupamento logicois_available: disponibilidadecreated_at: auditoria de criacao
id: chave primariacustomer_name: clientetable_number: mesatotal_amount: total do pedidostatus: estado operacionalnotes: observacoes geraiscreated_at: criacaoupdated_at: atualizacao
id: chave primariaorder_id: referencia do pedidoproduct_id: referencia de produtoingredients: payload de customizacaoquantity: quantidadeunit_price: valor unitariototal_price: valor total do itemnotes: observacoes do itemcreated_at: criacao
Com backend ativo:
http://localhost:8080/swagger/index.html
GET /api/products
GET /api/categories
GET /api/ingredients
GET /api/orders
GET /api/orders?status=preparing
GET /api/orders/:id
GET /healthPOST /api/orders
PUT /api/orders/:id/status- Frontend consome
/api/productse/api/ingredients. - Usuario monta pedido no cliente.
- Frontend envia
POST /api/orders. - Cozinha atualiza progresso com
PUT /api/orders/:id/status.
Node.js 18+Go 1.23+PostgreSQL 12+
createdb hamburgueriaAlternativa:
psql -U postgres -c "CREATE DATABASE hamburgueria;"cd backend-hamburgueria
go mod download
go run main.goBackend: http://localhost:8080
cd projeto-hamburgueria
npm install
npm run devFrontend: http://localhost:5173
- Abrir app web no navegador.
- Criar um pedido de teste.
- Verificar pedido no painel da cozinha.
- Atualizar status e confirmar persistencia.
VITE_API_URL=http://localhost:8080/apiPORT=8080
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=hamburgueria
JWT_SECRET=trocar_em_producao- Arquitetura em camadas (UI -> API -> DB).
- Regras de negocio centralizadas no backend.
- Persistencia relacional com integridade referencial.
- Contratos de API navegaveis via Swagger.
cd backend-hamburgueria
go test ./...
go vet ./...
gofmt -w .cd projeto-hamburgueria
npm run lint
npm run test
npm run build- Validacao de input no frontend e backend.
- Uso de prepared statements.
- Operacoes sensiveis com transacoes curtas.
- CORS configurado por ambiente.
docker-compose up -d- Frontend responde em
:5173. - Backend responde em
:8080. - Endpoint
/healthretorna sucesso. - Swagger acessivel.
- tempo medio entre criacao e entrega de pedido;
- quantidade de pedidos por status;
- taxa de erro em criacao de pedido;
- disponibilidade da API (
/health).
- erro de validacao de payload;
- erro de conexao com banco;
- falha de transicao de status;
- tempo de resposta por endpoint.
- Autenticacao para painel de cozinha.
- Impressao automatica de pedidos.
- WebSocket para atualizacao em tempo real sem polling.
- Dashboard com metricas operacionais.
- Painel administrativo para produtos/ingredientes/categorias.
- Thiago Matos Tertuliano
BurgerApp foi desenhado para escalar de MVP para operacao real com base tecnica limpa, observavel e facil de manter.




