Uma rede social completa construída com Node.js, Express, MongoDB, Mongoose, JWT e Bootstrap 5. O projeto inclui autenticação, autorização, feed de posts, curtidas, comentários, perfil de usuário, upload de imagens, follow/unfollow, e interface responsiva.
-
backend/- API Node.js com Express e MongoDBsrc/config/database.js- conexão com MongoDBsrc/controllers/- lógica de negóciossrc/middlewares/- autenticação, upload, tratamento de errossrc/models/- schemas do Mongoosesrc/routes/- endpoints RESTsrc/services/- utilitários de autenticaçãosrc/utils/- helpers JWT e validaçõessrc/uploads/- arquivos de imagem enviadosseeds/seed.js- script para popular dados iniciais
-
frontend/- interface desacoplada com HTML, CSS, Bootstrap e JavaScriptassets/css/- estilos personalizadosassets/js/- lógica de fetch e interfacepages/- tela de login, cadastro, home, perfil e explorar
- Cadastro e login com JWT
- Autorização de rotas protegidas
- Feed cronológico de posts
- Curtidas e comentários em tempo real
- Sistema de seguidores
- Upload de avatar, banner e imagens de post
- Busca de usuários e explorações
- Interface responsiva com dark mode
- API REST completa e modular
- Docker e Docker Compose para backend + MongoDB
- Instale dependências do backend:
cd backend
npm install- Inicie o MongoDB e o backend:
npm run dev-
Abra o frontend com um servidor local ou
Live Serverapontando parafrontend/. -
Configure variáveis de ambiente no arquivo
backend/.env.
Se estiver usando o frontend via file://, prefira um servidor local para evitar problemas de CORS e garantir o carregamento correto das imagens.
MONGO_URI- URI de conexão com MongoDBJWT_SECRET- chave secreta para tokens JWTJWT_EXPIRES_IN- tempo de expiração do token (ex:7d)PORT- porta do servidor backendFRONTEND_URL- origem permitida para CORS
Para iniciar com Docker Compose:
docker compose up --buildnpm start- inicia o backendnpm run dev- inicia backend com nodemonnpm run seed- popula dados iniciais no MongoDB
- Email: ana@social.dev
- Senha: senha123
A arquitetura foi planejada para ser modular, com separação clara entre rotas, controladores, serviços e modelos. O frontend consome a API via Fetch e utiliza localStorage para armazenamento do token JWT.