Plataforma inteligente que conecta doadores de alimentos com ONGs, utilizando Inteligência Artificial para garantir validação jurídica e sanitária em conformidade com a Lei 14.016/2020
Equipe 17 - Devs de Impacto 2025
- Fabricio Cavalcante
- Gabriel Maia
- Pedro Henrique
- Iggor Ferreira
- Sobre o Projeto
- Problema
- Solução
- Funcionalidades
- Tecnologias Utilizadas
- Arquitetura
- Pré-requisitos
- Instalação e Execução
- Estrutura do Projeto
- Documentação da API
- Contribuição
- Licença
- Equipe
O Fome Zero - Doe Seguro é uma plataforma web desenvolvida para o hackathon Devs de Impacto 2025 que visa facilitar e garantir a segurança jurídica e sanitária das doações de alimentos excedentes, conectando doadores (empresas e pessoas físicas) com Organizações Não Governamentais (ONGs).
A plataforma está em conformidade com a Lei nº 14.016/2020, que estabelece normas para a doação de excedentes de alimentos para o consumo humano. Esta lei garante que doadores de boa-fé não sejam responsabilizados civil ou criminalmente pela doação de alimentos próprios para consumo, desde que observados os critérios de segurança sanitária.
Muitas empresas e estabelecimentos comerciais têm excedentes de alimentos próprios para consumo, mas não realizam doações devido a:
- Medo de responsabilização jurídica: Incerteza sobre a conformidade legal das doações
- Complexidade normativa: Dificuldade em entender e aplicar os critérios da Lei 14.016/2020
- Falta de conexão: Dificuldade em encontrar ONGs que possam receber as doações
- Validação sanitária: Necessidade de garantir que os alimentos estão próprios para consumo
- Rastreabilidade: Ausência de documentação adequada das doações
O Doe Seguro resolve esses problemas através de:
- Análise Inteligente com IA: Utiliza OpenAI para analisar imagens de alimentos e determinar se estão próprios para doação conforme critérios legais
- Checklist Digital: Sistema de validação que garante conformidade com a Lei 14.016/2020
- Certificados Digitais: Geração automática de certificados PDF com QR Code e hash SHA-256 para rastreabilidade
- Matching Inteligente: Conexão automática entre doadores e ONGs interessadas
- Dashboard Completo: Interfaces dedicadas para doadores e ONGs gerenciarem suas doações
- Chat com IA: Assistente virtual para tirar dúvidas sobre doações e legislação
- ✅ Cadastro e Autenticação: Sistema seguro de autenticação com Better Auth
- 📸 Análise de Alimentos com IA: Upload de imagens para análise automática de conformidade
- 📋 Checklist de Validação: Formulário digital que garante conformidade legal
- 📄 Certificados Digitais: Geração automática de certificados PDF com QR Code
- 📊 Dashboard de Doações: Acompanhamento do status de todas as doações
- 💬 Chat com IA: Assistente virtual para esclarecer dúvidas
- 🔔 Notificações: Acompanhamento de matches e status das doações
- ✅ Cadastro e Autenticação: Acesso seguro à plataforma
- 🔍 Busca de Doações: Visualização de doações disponíveis na região
- ✅ Aceite de Doações: Sistema de matching para aceitar doações
- 📊 Dashboard de Doações: Gerenciamento de doações aceitas e coletadas
- 📝 Sugestões de Receitas: Receitas sugeridas pela IA baseadas nos alimentos recebidos
- 🔔 Notificações: Alertas sobre novas doações disponíveis
- 🔐 Autenticação Segura: Sistema completo de autenticação com Better Auth
- 💳 Assinaturas: Integração com Stripe para planos premium (futuro)
- 📧 Notificações por Email: Integração com Resend para envio de emails
- 🔒 Segurança: Rate limiting, CORS, validação de dados
- 📱 Responsivo: Interface adaptada para desktop e mobile
- 🌐 API RESTful: API completa documentada com OpenAPI/Swagger
- Elysia.js - Framework web rápido e type-safe
- Bun - Runtime JavaScript/TypeScript de alta performance
- PostgreSQL - Banco de dados relacional
- Drizzle ORM - ORM type-safe para TypeScript
- Better Auth - Sistema de autenticação moderno
- OpenAI - API de IA para análise de imagens
- Stripe - Processamento de pagamentos
- Resend - Serviço de envio de emails
- PDFKit - Geração de PDFs
- QRCode - Geração de QR Codes
- Next.js 16 - Framework React com App Router
- React 19 - Biblioteca para interfaces de usuário
- TypeScript - Superset tipado do JavaScript
- Tailwind CSS 4 - Framework CSS utility-first
- Radix UI - Componentes acessíveis e não estilizados
- Lucide React - Ícones modernos
- Sonner - Sistema de notificações toast
- Eden Treaty - Cliente type-safe para Elysia
- Docker - Containerização
- Docker Compose - Orquestração de containers
- Turbo - Build system para monorepos
- Biome - Linter e formatter
- Vitest - Framework de testes
- Husky - Git hooks
- Pino - Logger estruturado
graph TB
subgraph Client["Cliente (Browser)"]
FE[Next.js Frontend]
end
subgraph Backend["Backend Services"]
API[Elysia.js API]
Auth[Better Auth]
AIService[AI Service]
CertService[Certificate Service]
MatchService[Match Service]
EmailService[Email Service]
end
subgraph Database["Database"]
PG[(PostgreSQL)]
end
subgraph External["Serviços Externos"]
OpenAI[OpenAI API]
Stripe[Stripe API]
Resend[Resend API]
end
subgraph Storage["Storage"]
CertStorage[Certificados PDF]
end
FE -->|HTTP/REST| API
FE -->|Auth| Auth
API --> Auth
API --> AIService
API --> CertService
API --> MatchService
API --> EmailService
API --> PG
AIService --> OpenAI
API --> Stripe
EmailService --> Resend
CertService --> CertStorage
sequenceDiagram
participant D as Doador
participant FE as Frontend
participant API as Backend API
participant AI as OpenAI
participant DB as Database
participant ONG as ONG
D->>FE: Upload imagem do alimento
FE->>API: POST /api/donations/analyze
API->>AI: Analisar imagem
AI-->>API: Resultado da análise
API-->>FE: Análise retornada
FE-->>D: Exibir resultado
D->>FE: Preencher checklist
FE->>API: POST /api/donations
API->>DB: Salvar doação
API->>DB: Salvar análise
API-->>FE: Doação criada
API->>DB: Atualizar status para "available"
ONG->>FE: Visualizar doações disponíveis
FE->>API: GET /api/donations/available
API->>DB: Buscar doações
API-->>FE: Lista de doações
FE-->>ONG: Exibir doações
ONG->>FE: Aceitar doação
FE->>API: POST /api/donations/:id/accept
API->>DB: Criar match
API->>DB: Atualizar status
API->>CertService: Gerar certificado
CertService-->>API: Certificado gerado
API-->>FE: Match criado
FE-->>ONG: Confirmação
erDiagram
USER ||--o{ DONATION : "cria"
USER ||--o{ DONATION_MATCH : "participa"
DONATION ||--o| DONATION_ANALYSIS : "tem"
DONATION ||--o| CHECKLIST_RESPONSE : "tem"
DONATION ||--o| CERTIFICATE : "gera"
DONATION ||--o{ DONATION_MATCH : "gera"
DONATION_MATCH ||--o| RECIPE_SUGGESTION : "tem"
USER ||--o| SESSION : "tem"
USER ||--o| ACCOUNT : "tem"
USER ||--o| SUBSCRIPTION : "tem"
USER {
string id PK
string name
string email
string role
timestamp created_at
}
DONATION {
string id PK
string doador_id FK
string status
string tipo_alimento
text descricao
timestamp created_at
}
DONATION_ANALYSIS {
string id PK
string donation_id FK
jsonb ai_response
timestamp created_at
}
DONATION_MATCH {
string id PK
string donation_id FK
string ong_id FK
string status
timestamp accepted_at
}
CERTIFICATE {
string id PK
string donation_id FK
string certificate_number
string pdf_url
string qr_code
string hash_sha256
}
Antes de começar, certifique-se de ter instalado:
- Bun (versão 1.0 ou superior)
- Docker e Docker Compose
- Node.js (versão 18 ou superior) - opcional, apenas para compatibilidade
- Git
O projeto requer as seguintes variáveis de ambiente:
# Ambiente
NODE_ENV=development
PORT=3002
# Banco de Dados
DATABASE_URL=postgres://postgres:postgres@localhost:5432/fomezero_test
# Autenticação
BETTER_AUTH_SECRET=seu-secret-aqui
BETTER_AUTH_URL=http://localhost:3002
FRONTEND_URL=http://localhost:3000
# OpenAI (para análise de imagens)
OPENAI_API_KEY=sua-chave-openai
OPENAI_ASSISTANT_ID=asst_vyRpt1RqBGGCZUN31bQXVCak
# Stripe (opcional, para assinaturas)
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_BASIC_PRICE_ID=price_...
STRIPE_PRO_PRICE_ID=price_...
# Resend (opcional, para emails)
RESEND_API_KEY=re_...
# Certificados
CERTIFICATE_STORAGE_PATH=./certificatesNEXT_PUBLIC_API_URL=http://localhost:3002
NODE_ENV=developmentgit clone https://github.com/seu-usuario/fome-zero.git
cd fome-zerobun installCopie os arquivos de exemplo e configure as variáveis:
# Backend
cp apps/backend/.env.example apps/backend/.env
# Edite apps/backend/.env com suas configurações
# Frontend
cp apps/frontend/.env.example apps/frontend/.env.local
# Edite apps/frontend/.env.local com suas configurações# Inicia o PostgreSQL via Docker
npm run db:start
# Ou usando docker-compose diretamente
docker-compose up -d postgres# Gera as migrações (se necessário)
npm run db:generate
# Executa as migrações
npm run db:migrate# Inicia backend e frontend simultaneamente
npm run devIsso iniciará:
- Backend:
http://localhost:3002 - Frontend:
http://localhost:3000
# Terminal 1 - Backend
cd apps/backend
bun run dev
# Terminal 2 - Frontend
cd apps/frontend
bun run dev- Frontend: http://localhost:3000
- API: http://localhost:3002
- Documentação da API: http://localhost:3002/docs (Swagger/OpenAPI)
- Drizzle Studio (para visualizar o banco):
cd apps/backend && bun run db:studio
fome-zero/
├── apps/
│ ├── backend/ # API Backend (Elysia.js + Bun)
│ │ ├── src/
│ │ │ ├── auth.ts # Configuração Better Auth
│ │ │ ├── index.ts # Entry point do servidor
│ │ │ ├── config/ # Configurações
│ │ │ ├── db/ # Database (Drizzle ORM)
│ │ │ │ ├── schema.ts # Schema do banco
│ │ │ │ └── migrations/ # Migrações
│ │ │ ├── plugins/ # Plugins Elysia
│ │ │ ├── repositories/ # Camada de acesso a dados
│ │ │ ├── routes/ # Rotas da API
│ │ │ ├── services/ # Lógica de negócio
│ │ │ └── utils/ # Utilitários
│ │ ├── certificates/ # Certificados PDF gerados
│ │ └── package.json
│ │
│ └── frontend/ # Frontend (Next.js 16)
│ ├── app/ # App Router (Next.js)
│ │ ├── dashboard/ # Dashboards (doador/ong)
│ │ ├── login/ # Páginas de login
│ │ ├── signup/ # Páginas de cadastro
│ │ └── page.tsx # Landing page
│ ├── components/ # Componentes React
│ │ ├── chat/ # Componentes de chat
│ │ ├── dashboard/ # Componentes do dashboard
│ │ ├── donations/ # Componentes de doações
│ │ ├── landing/ # Componentes da landing page
│ │ └── ui/ # Componentes UI (Radix)
│ ├── lib/ # Bibliotecas e utilitários
│ │ ├── api/ # Clientes API
│ │ └── hooks/ # React Hooks customizados
│ └── package.json
│
├── scripts/ # Scripts utilitários
│ └── start-db.sh # Script para iniciar DB
│
├── docker-compose.yml # Configuração Docker
├── turbo.json # Configuração Turbo
├── package.json # Workspace root
└── README.md # Este arquivo
O projeto utiliza um monorepo gerenciado com:
- npm workspaces para gerenciamento de pacotes
- Turbo para build e execução otimizada
- Docker Compose para orquestração de serviços
A API está documentada usando OpenAPI/Swagger. Quando o backend estiver rodando, acesse:
POST /api/auth/sign-up- Cadastro de usuárioPOST /api/auth/sign-in- LoginPOST /api/auth/sign-out- LogoutGET /api/auth/session- Obter sessão atual
POST /api/donations/analyze- Analisar imagem de alimento (IA)POST /api/donations- Criar nova doaçãoGET /api/donations- Listar doações do usuárioGET /api/donations/available- Listar doações disponíveis (ONGs)GET /api/donations/:id- Obter detalhes de uma doaçãoPUT /api/donations/:id- Atualizar doaçãoPOST /api/donations/:id/checklist- Submeter checklistPOST /api/donations/:id/accept- Aceitar doação (ONG)POST /api/donations/:id/collect- Confirmar coletaGET /api/donations/:id/certificate- Obter certificado PDF
POST /api/chat- Enviar mensagem para o assistente IA
GET /api/user- Obter perfil do usuárioPUT /api/user- Atualizar perfil
Contribuições são bem-vindas! Para contribuir:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Utilize TypeScript para type safety
- Siga os padrões do Biome (linter configurado)
- Escreva testes para novas funcionalidades
- Mantenha a documentação atualizada
- Siga os convenções de commit (Conventional Commits)
# Todos os testes
npm run test
# Apenas backend
npm run test:backend
# Frontend com watch
cd apps/frontend && bun run test:watch# Verificar código
npm run lint:biome
# Formatar código
npm run formatEste projeto está licenciado sob a ISC License. Veja o arquivo LICENSE para mais detalhes.
- Devs de Impacto 2025
- Lei 14.016/2020
- Documentação Elysia.js
- Documentação Next.js
- Documentação Better Auth
Desenvolvido com ❤️ para o Devs de Impacto 2025