WallpaperMachine
The wallpapers you love. A new home on your Mac.
Solicite a coleta do seu lixo eletrônico em Diadema-SP. A EcoByte recolhe e leva ao ecoponto.
Translation pending
LifestyleTypeScript · CSSGitHub @ErickLarssenOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Plataforma de coleta de lixo eletrônico em Diadema-SP. O cliente solicita a coleta pelo site, um coletor da equipe EcoByte recolhe o material no endereço informado e o leva ao ecoponto EcoByte, e o cliente acompanha cada etapa até a conclusão.
Projeto acadêmico full-stack, construído com documentação primeiro: regras, decisões e questões em aberto ficam em docs/.
| Parte | Endereço |
|---|---|
| Site | https://eco-byte-neon.vercel.app |
| API (verificação de saúde) | https://ecobyte-api-rp3e.onrender.com/api/v1/health |
A API usa o plano gratuito do Render, que "dorme" após 15 minutos sem uso. O primeiro acesso depois disso leva cerca de 1 minuto.
Cliente (pessoa física ou jurídica)
Coletor
Administrador
$facet, $unwind, $lookup, $group):
Site institucional
Navegador ──HTTPS──▶ Frontend (Next.js, Vercel)
│ proxy de /api/v1/* (mesma origem: cookie de sessão first-party)
▼
Backend (Express, Render) ──▶ MongoDB Atlas
HttpOnly. Nada sensível vai para o localStorage.Detalhes em docs/01_ARCHITECTURE.md.
| Camada | Tecnologias |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, shadcn/ui (Radix), Lucide, TanStack Query, React Hook Form, Zod |
| Backend | Node.js 22, Express 5, TypeScript, Mongoose 9, Zod, express-session + connect-mongo, Argon2id, Nodemailer |
| Banco | MongoDB (Atlas em produção), com índices geoespaciais 2dsphere, TTL e únicos |
| Testes | Vitest, Testing Library, Supertest e MongoDB em memória (mongodb-memory-server) |
| Infraestrutura | Vercel (frontend), Render (backend), MongoDB Atlas, GitHub Actions e Dependabot |
__Host- em produção. Trocar a senha encerra as demais sessões, e a sessão do administrador expira após 30 minutos sem uso.Cache-Control: no-store nas respostas da API.Detalhes em docs/09_AUTHENTICATION_SECURITY.md e nas decisões DEC-090 a DEC-096.
.nvmrc) e npmmongodb://localhost:27017# 1. Clonar e instalar (monorepo com npm workspaces, um único lockfile)
git clone https://github.com/ErickLarssen/EcoByte.git
cd EcoByte
npm ci
# 2. Criar os arquivos de ambiente a partir dos exemplos
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
No backend/.env, preencha SESSION_SECRET com pelo menos 32 caracteres. Para gerar um valor:
node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))"
Sem SMTP_HOST, os e-mails (confirmação e redefinição de senha) aparecem no console do backend.
# 3. Popular o banco local com dados de demonstração (apaga o banco local)
npm run seed --workspace backend
# 4. Subir frontend e backend juntos
npm run dev
O site abre em http://localhost:3000, e a API fica em http://localhost:4000. O navegador acessa só a porta 3000; o Next.js repassa /api/v1/* ao backend.
Criadas pelo seed. Não existem em produção: lá, o primeiro administrador é criado pelo npm run bootstrap.
| Perfil | Senha | |
|---|---|---|
| Administrador | [email protected] | SenhaAdmin123! |
| Cliente (pessoa física) | [email protected] | ClientePF123! |
| Cliente (pessoa jurídica) | [email protected] | ClientePJ123! |
| Coletor | [email protected] | Coletor123! |
| Comando | O que faz |
|---|---|
npm run dev | Frontend e backend em modo de desenvolvimento |
npm test | Testes dos dois workspaces |
npm run lint / npm run typecheck | Lint e verificação de tipos |
npm run build | Build de produção dos dois workspaces |
npm run seed --workspace backend | Dados de demonstração. Apaga o banco e é bloqueado em produção |
npm run bootstrap --workspace backend | Banco novo: cria o primeiro administrador e o ecoponto, sem apagar nada |
npm run purge --workspace backend | Remove definitivamente perfis listados em PURGE_EMAILS. Só simula, a não ser com PURGE_CONFIRMAR=APAGAR |
Estratégia em docs/17_TESTING.md.
Frontend na Vercel, backend no Render (configurado por render.yaml) e banco no MongoDB Atlas. O passo a passo, com a inicialização do banco e o teste após o deploy, está em docs/19_DEPLOYMENT.md §21.2.
EcoByte/
├── frontend/ Next.js (App Router)
│ └── src/
│ ├── app/ páginas e layouts (site, autenticação, cliente, coletor, admin)
│ ├── components/ ui (shadcn), common, domain, features, layouts
│ ├── hooks/ consultas e mutações (TanStack Query)
│ ├── lib/ cliente da API, validações, navegação, cabeçalhos de segurança
│ └── proxy.ts CSP com nonce por requisição
├── backend/ API Express
│ ├── src/
│ │ ├── routes/ controllers/ services/ rotas → controle → regras de negócio
│ │ ├── models/ validators/ middlewares/ Mongoose, Zod, autenticação e segurança
│ │ ├── domain/ máquina de estados da coleta
│ │ └── database/ seed, bootstrap e purge
│ └── tests/
├── docs/ documentação do projeto (fonte da verdade)
├── .github/ CI e Dependabot
└── render.yaml configuração do backend no Render
| Documento | Conteúdo |
|---|---|
| 00 Visão geral | Objetivo, perfis e escopo |
| 01 Arquitetura · 02 Domínio | Camadas e entidades |
| 03 Regras de negócio · 04 Requisitos | O que o sistema deve fazer |
| 05 Rotas · 06 API | Contrato da API |
| 07 Banco · 08 Consultas | Modelagem e consultas no MongoDB |
| 09 Segurança | Autenticação, autorização e proteção de dados |
| 10 Design system · 11 Componentes · 12 Responsividade |
Desenvolvido por @ErickLarssen.
| Interface |
| 13 Fluxo do coletor · 14 Máquina de estados | Operação da coleta |
| 15 Interações · 16 Assets | Movimento e recursos visuais |
| 17 Testes · 18 Desenvolvimento · 19 Deploy · 20 Seed | Operação do projeto |
| Decisões · Questões em aberto | Registro de decisões (DEC) e pontos sem definição (OQ) |
| Avaliação heurística (IHC) | Diagnóstico de usabilidade com as 10 heurísticas de Nielsen |
| Arquitetura e HTTP (Web III) | Por que Express em camadas, o HTTP na prática e os fluxos de request/response, com trocas reais |