Este é um projeto de matchmaking de habilidades, onde usuários podem se conectar com outras pessoas interessadas em aprender ou ensinar determinadas habilidades. Criado como estudo prático de React, TypeScript, Express e Prisma.
O objetivo principal deste projeto foi praticar:
Integração de frontend e backend com TypeScript.
Utilização de hooks personalizados no React.
Uso de Prisma com PostgreSQL.
Criação de uma API REST com Express.
Organização de pastas e tratamento de erros.
Estilização com Bootstrap e animações com Framer Motion.
- ⚛️ React + TypeScript
- 💅 Bootstrap 5
- 📦 Axios
- 🍞 React-Toastify (notificações)
- 🔄 React Router DOM
- 🎞 Framer Motion (transições animadas)
- 🧩 Node.js + Express
- 🧬 TypeScript
- 🛠 Prisma ORM
- 🐘 PostgreSQL
- 🔐 Autenticação via localStorage (token JWT)
- 📄 Swagger (documentação interativa da API)
├── backend/
│ ├── src/
│ │ ├── controllers/
│ │ ├── services/
│ │ ├── repositories/
│ │ ├── routes/
│ │ ├── middlewares/
│ │ ├── prisma/
│ │ ├── utils/
│ │ └── index.ts
│ └── swaggerConfig.ts
├── frontend/
│ ├── src/
│ │ ├── pages/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ │ ├── types/
│ │ └── App.tsx
│ └── public/git clone https://github.com/seu-usuario/skillmatch.git
cd skillmatchcd server
npm install
npx prisma generate
npx prisma migrate dev --name init
npm run devCrie um .env com:
DATABASE_URL="postgresql://usuario:senha@localhost:5432/skillmatch"
PORT=3000cd client
npm install
npm run devVocê pode usar o comando
npm run seedspara criação de 20 usuários com 10 habilidades e diferentes matches entre eles Depois, é só usar o comando
npx prisma studiopara conseguir visualizar o email de um desses usuários para fazer o login. Cada usuário é criado com a senha padrão "123456".
Acesse a documentação Swagger interativa em:
📄 http://localhost:3000/api-docs
Exemplos de rotas:
POST /users– Criar usuárioGET /skills/matches/:id– Buscar possíveis matches por IDPOST /matches– Enviar matchGET /matches/:userId– Buscar matches por status
Um match acontece apenas quando:
- O usuário A quer aprender uma habilidade (
isLearning: true) - O usuário B ensina essa mesma habilidade (
isLearning: false)
E vice-versa.
- 🔍 Explorar usuários e habilidades
- ⚖️ Sistema inteligente de possíveis matches
- 💌 Enviar e gerenciar solicitações de match (pendentes, aceitos, recusados)
- 📁 Perfil de usuário com habilidades listadas
- ✅ Botões interativos de "Fazer Match"
- 📊 UI responsiva com Sidebar fixa e Topbar fixa
- 🔐 Autenticação com localStorage
Contribuições são bem-vindas! Abra uma issue ou envie um pull request com melhorias ou correções.