Plataforma open source para conectar pessoas a ONGs que fazem a diferença.
🌐 Site: https://dwildt.github.io/letshelpit
- Sobre o Projeto
- Tecnologias
- Estrutura do Projeto
- Desenvolvimento
- Testes
- Linting
- Como Contribuir
- História
- Licença
Let's Help It é uma aplicação web estática que facilita a descoberta e apoio a organizações sem fins lucrativos no Brasil. Com navegação intuitiva por localização (país > estado > cidade), filtros por categoria e tipo de doação, e suporte bilíngue completo (PT-BR/EN).
- 🗺️ Navegação geográfica - Breadcrumb interativo (Brasil > RS > Porto Alegre)
- 🔍 Busca e filtros avançados - Por categoria, tipo de doação e localização
- 💰 10 tipos de doação - PIX, Nota Fiscal Gaúcha, roupas, alimentos, voluntariado, etc.
- 🎯 5 categorias - Crianças/Adolescentes, Educação, Deficiência, Esporte, Vulnerabilidade Social
- 🌐 Bilíngue - Português (BR) e English com alternância instantânea via bandeira 🇧🇷/🇺🇸
- 📍 Integração com mapas - Google Maps e Waze para localização das ONGs
- 📱 Design responsivo - Mobile-first com Tailwind CSS
- ♿ Acessível - Suporte a leitores de tela e navegação por teclado
- 🚀 Performance - Site estático, carregamento instantâneo
- ✅ Qualidade - >80% de cobertura de testes, zero erros de lint
- Modal detalhado para cada ONG com informações completas
- Cards visuais com categorias coloridas
- Filtros interativos com contadores em tempo real
- Sistema de badges para métodos de doação
- Breadcrumb navigation para navegação geográfica
- HTML5 - Markup semântico
- CSS3 - Tailwind CSS (via CDN)
- JavaScript Vanilla - ES2021, sem frameworks
- Nenhuma dependência em runtime - Site 100% estático
- Provider Pattern - Abstração para múltiplas fontes de dados (JSON/SQLite)
- i18n nativo - Sistema próprio de internacionalização
- JSON Schema - Validação de dados estruturados
- Modular - Separação clara entre UI, lógica e dados
- ✅ Jest - Framework de testes com >80% de cobertura
- ✅ ESLint - Linting configurado (v9)
- ✅ Testes unitários - 27 testes passando
- ✅ Commits semânticos - Conventional Commits
- 📦 GitHub Pages - Hospedagem estática gratuita
- 🚀 Zero backend - Sem servidor, sem banco de dados
- 🔄 CI/CD automático - Deploy em cada push para
main
letshelpit/
├── docs/ # Documentação markdown
│ ├── br-rs.md # ONGs do Rio Grande do Sul
│ └── donate.md # Campanhas emergenciais
│
├── public/ # Site estático (GitHub Pages)
│ ├── index.html # Página principal
│ │
│ ├── data/ # Dados estruturados (JSON)
│ │ ├── config/
│ │ │ ├── categories.json # 5 categorias de ONGs
│ │ │ └── donation-types.json # 10 tipos de doação
│ │ ├── organizations/
│ │ │ └── br-rs.json # ONGs do Rio Grande do Sul (4)
│ │ ├── locations.json # Hierarquia geográfica (BR > Estados > Cidades)
│ │ └── schema/
│ │ └── organization.schema.json # JSON Schema para validação
│ │
│ ├── css/
│ │ └── styles.css # Estilos customizados + Tailwind
│ │
│ └── js/
│ ├── config.js # Configuração da aplicação
│ ├── i18n.js # Sistema de internacionalização
│ ├── app.js # Lógica principal da aplicação
│ ├── ui.js # Componentes e renderização de UI
│ │
│ ├── providers/ # Provider Pattern para dados
│ │ ├── DataProvider.js # Interface abstrata
│ │ ├── JSONProvider.js # Provider JSON (ativo)
│ │ └── SQLiteProvider.js # Provider SQLite (preparado)
│ │
│ └── __tests__/ # Testes unitários (Jest)
│ ├── setup.js # Configuração de testes
│ ├── config.test.js # Testes de configuração
│ └── i18n.test.js # Testes de i18n
│
├── specs/ # Especificações técnicas
│ ├── implementation-plan.md # Plano de implementação
│ ├── data-providers.md # Arquitetura de providers
│ ├── donation-types.md # Documentação de tipos
│ ├── categories.md # Documentação de categorias
│ └── managing-options.md # Como gerenciar opções
│
├── .github/ # Configurações GitHub
│ └── ISSUE_TEMPLATE/ # Templates de issues
│
├── package.json # Scripts NPX (sem dependências)
├── jest.config.js # Configuração do Jest
├── eslint.config.mjs # Configuração do ESLint (v9)
├── .gitignore # Arquivos ignorados
└── README.md # Este arquivo
- Node.js 16+ (para npx e ferramentas de desenvolvimento)
- Navegador moderno (Chrome, Firefox, Safari, Edge)
# Clonar repositório
git clone https://github.com/dwildt/letshelpit.git
cd letshelpit
# Nenhuma instalação necessária!
# O projeto usa npx para executar ferramentas sem instalação global# Opção 1: Usar script npm (recomendado)
npm run dev
# Opção 2: Usar npx diretamente
npx http-server public -p 8000 -o
# O site abrirá automaticamente em http://localhost:8000# Desenvolvimento
npm start # Inicia servidor de desenvolvimento
npm run dev # Alias para npm start
# Qualidade de Código
npm run lint # Verifica código com ESLint
npm run lint:fix # Corrige problemas automaticamente
# Testes
npm test # Executa todos os testes
npm run test:watch # Testes em modo watch (desenvolvimento)
npm run test:coverage # Gera relatório de cobertura
# Validação Completa
npm run validate # Lint + Testes (rodar antes de commit!)Todos os comandos usam npx, então não é necessário instalar dependências globalmente:
# ✅ Funciona sem npm install
npx http-server public -p 8000
# ✅ ESLint on-demand
npx eslint public/js --ext .js
# ✅ Jest on-demand
npx jest# Todos os testes
npm test
# Com watch mode (útil durante desenvolvimento)
npm run test:watch
# Com relatório de cobertura
npm run test:coverageO projeto mantém >80% de cobertura em:
- Branches
- Functions
- Lines
- Statements
Veja o relatório em coverage/index.html após executar npm run test:coverage.
✅ 27 testes passando
- 13 testes de configuração (
config.test.js) - 14 testes de internacionalização (
i18n.test.js)
# Verificar problemas
npm run lint
# Corrigir automaticamente
npm run lint:fix- Indentação: 2 espaços
- Quotes: Single quotes (aspas simples)
- Semicolons: Não usar
- Line breaks: Unix (LF)
- ES Version: ES2021
Você pode ajudar o Let's Help It de várias formas:
Conhece uma ONG que deveria estar no Let's Help It?
👉 Abra uma issue usando o template "Cadastro de ONG"
Precisamos dos seguintes dados:
- ✅ Nome da organização
- ✅ Localização (cidade/estado)
- ✅ Categorias de atuação
- ✅ Formas de doação aceitas (PIX, roupas, alimentos, voluntariado, etc.)
- ✅ Contatos (site, e-mail, Instagram, WhatsApp)
- ✅ Informações de doação (PIX, conta bancária, links)
- ✅ Site oficial e transparência (CNPJ, relatórios)
Importante: A ONG será revisada pela equipe antes de ser adicionada ao site.
Quer adicionar funcionalidades ou corrigir bugs?
# 1. Fork o projeto no GitHub
# 2. Clone seu fork
git clone https://github.com/SEU-USUARIO/letshelpit.git
cd letshelpit
# 3. Crie uma branch
git checkout -b feature/nome-da-funcionalidade
# 4. Faça suas alterações
# - Edite o código
# - Adicione testes se necessário
# - Siga os padrões de código (ESLint)
# 5. Valide suas alterações (IMPORTANTE!)
npm run validate
# Deve passar em:
# ✓ Lint sem erros
# ✓ Todos os testes passando
# 6. Commit suas alterações
git add .
git commit -m "feat: adiciona filtro por estado"
# 7. Push para seu fork
git push origin feature/nome-da-funcionalidade
# 8. Abra um Pull Request no GitHubfeat: Nova funcionalidadefix: Correção de bugdocs: Documentaçãostyle: Formatação (não afeta código)refactor: Refatoraçãotest: Testeschore: Manutenção/configuração
Exemplos:
git commit -m "feat: adiciona filtro por estado"
git commit -m "fix: corrige bug na busca"
git commit -m "docs: atualiza README"
git commit -m "test: adiciona testes para i18n"Ajude a manter o projeto ativo:
- 🩷 GitHub Sponsors - Patrocínio recorrente
- ☕ Apoia.se - Apoio brasileiro
- 🎨 Patreon - Recompensas exclusivas
- ⭐ Dê uma estrela no repositório GitHub
- 📢 Compartilhe nas redes sociais
- 💬 Fale sobre o projeto em comunidades
Desde 2002, Daniel Wildt participa de comunidades de prática e realiza eventos ligados com tecnologia. Em muitas destas situações, se buscou ações de doação de alimentos não perecíveis para instituições de caridade como forma de apoio e conexão da comunidade de tecnologia com as diferentes realidades.
Durante os anos 2010 até 2015, o projeto operou usando uma estrutura gratuita da plataforma Heroku, que hospedava gratuitamente soluções feitas em Ruby on Rails.
A solução parou de funcionar pois bots de cadastro de fraude começaram a cadastrar instituições diversas (não existentes) no sistema, e isso estourou a capacidade gratuita que a plataforma permitia. Depois de ficar algum tempo lutando contra atacantes e fraudadores, resolvemos por desligar o sistema presente e manter o conjunto de instituições que estavam sendo assistidas pelas comunidades de prática em Porto Alegre.
Dado o contexto das enchentes de Maio/2024 no Rio Grande do Sul, se começou a montar uma lista de instituições para doações e conexão com apoios... e chegamos por outro caminho no propósito do projeto iniciado em 2010.
Vamos novamente! 🚀
O site é automaticamente deployado no GitHub Pages quando há push na branch main.
URL Produção: https://dwildt.github.io/letshelpit/public/
- Plano de Implementação - Roadmap completo do projeto
- Arquitetura de Providers - Sistema de dados (JSON/SQLite)
- Tipos de Doação - 10 tipos validados
- Categorias - 5 categorias validadas
- Gerenciar Opções - Como adicionar tipos/categorias
- Site: https://dwildt.github.io/letshelpit/public/
- Repositório: https://github.com/dwildt/letshelpit
- Issues: https://github.com/dwildt/letshelpit/issues
- ONGs Cadastradas: docs/br-rs.md
- Campanhas SOS RS: docs/donate.md
- Licença: Apache 2.0
- ✅ Site funcional com 4 ONGs de Porto Alegre
- ✅ Busca e filtros avançados
- ✅ Bilíngue (PT-BR / EN) com alternância via bandeira
- ✅ Mobile responsive (Tailwind CSS)
- ✅ Integração Google Maps + Waze
- ✅ Testes >80% cobertura (27 testes passando)
- ✅ Arquitetura extensível (Provider Pattern)
- ✅ JSON Schema validation
- ⏳ SQLite provider (preparado, não ativo)
- ⏳ Expansão para mais estados e cidades
- ⏳ Sistema de avaliações (planejado)
Autor: Daniel Wildt
- 🐙 GitHub: @dwildt
- 📺 YouTube: @danielwildt
- 🩷 GitHub Sponsors: sponsors/dwildt
- ☕ Apoia.se: apoia.se/dwildt
- 🎨 Patreon: patreon.com/dwildt
Apache License 2.0 - veja LICENSE para detalhes.
Feito com ❤️ para conectar pessoas que querem ajudar com organizações que fazem a diferença.
⭐ Se este projeto te ajudou, considere dar uma estrela no GitHub!