WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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 |