- Visão Geral do Projeto
- Estrutura do Projeto
- Funcionalidades
- Tecnologias Utilizadas
- Arquitetura e Design Patterns
- Fluxo de Usuário
- Componentes
- Estilização e Temas
- Gerenciamento de Estado
- Roteamento
- Variáveis de Ambiente
- Testes
- Deploy e Build
- Melhorias Futuras
- Contribuição
- Licença
DevMach é uma aplicação web moderna e elegante, inspirada no Tinder, mas voltada para desenvolvedores. O objetivo é conectar profissionais de tecnologia através de um sistema de match baseado em interesses, tecnologias e localização.
- Conectar desenvolvedores em potencial colaborações
- Facilitar networking profissional na área de tecnologia
- Criar uma experiência visual moderna e tecnológica
- Fornecer filtros avançados para encontrar o perfil ideal
- Desenvolvedores Front-end, Back-end, Full Stack
- Mobile Developers
- Data Scientists
- DevOps Engineers
- Tech Leads e Arquitetos de Software
devmach/
├── 📄 index.html # HTML principal
├── 📄 package.json # Dependências do projeto
├── 📄 tsconfig.json # Configuração TypeScript
├── 📄 vite.config.ts # Configuração Vite
├── 📄 README.md # README do projeto
├── 📄 DOCUMENTACAO.md # Esta documentação
└── 📁 src/
├── 📄 main.tsx # Entry point da aplicação
├── 📄 App.tsx # Componente principal
├── 📄 index.css # Estilos globais e animações
├── 📁 utils/
│ └── 📄 cn.ts # Utilitário para classes Tailwind
├── 📁 contexts/
│ └── 📄 ThemeContext.tsx # Gerenciamento de temas
└── 📁 pages/
├── 📄 Login.tsx # Tela de login
├── 📄 Signup.tsx # Tela de cadastro
├── 📄 Swipe.tsx # Tela principal de swipe
├── 📄 ProfileDetail.tsx # Detalhes do perfil
└── 📄 Messages.tsx # Área de mensagens
- Login: Formulário de autenticação com email e senha
- Cadastro: Formulário completo com seleção de área de atuação
- Acesso Rápido: Botões demo para testar o sistema rapidamente
- Validação: Validação de campos obrigatórios
- Cards de Perfil: Visualização atraente com foto, nome, localização e tecnologias
- Ações de Swipe:
- ❤️ Like (curtir)
- ❌ Dislike (não curtir)
- 👁️ Ver perfil completo
- Animações: Transições suaves para direita/esquerda
- Contador: Mostra posição atual e total de perfis
- Filtro por Região:
- São Paulo
- Rio de Janeiro
- Minas Gerais
- Rio Grande do Sul
- Outros
- Todas
- Filtro por Área de Atuação:
- Front-end
- Back-end
- Full Stack
- Mobile
- Data Science
- DevOps
- Todas
- Foto e Nome: Exibição destacada
- Localização: Cidade/Estado
- Descrição: Bio do desenvolvedor
- Experiência: Histórico profissional
- Tecnologias: Tags com tecnologias dominadas
- Projetos: Lista de projetos destacados
- Links Sociais: GitHub e LinkedIn
- Lista de Conversas: Visualização estilo Facebook Messenger
- Status Online: Indicador visual de disponibilidade
- Mensagens Não Lidas: Badge com contagem
- Chat em Tempo Real: Interface de conversação
- Envio de Mensagens: Input com envio via Enter ou botão
- Timestamps: Horário das mensagens
- Tema Claro: Gradiente azul/púrpura, cards brancos
- Tema Escuro: Fundo cinza escuro, cards cinza 800
- Tema Neon: Preto profundo, bordas ciano, efeitos glow
- Persistência: Tema mantido durante a sessão
| Tecnologia | Versão | Propósito |
|---|---|---|
| React | 19.2.3 | Framework principal |
| TypeScript | 5.9.3 | Tipagem estática |
| Tailwind CSS | 4.1.17 | Estilização |
| Vite | 7.2.4 | Build tool e dev server |
| React Router | 6.23.1 | Navegação e roteamento |
| Ferramenta | Versão | Propósito |
|---|---|---|
| @vitejs/plugin-react | 5.1.1 | Plugin React para Vite |
| @tailwindcss/vite | 4.1.17 | Integração Tailwind com Vite |
| vite-plugin-singlefile | 2.3.0 | Build como arquivo único |
| TypeScript | 5.9.3 | Compilação TypeScript |
clsx- Utilitário para construção de classes condicionaistailwind-merge- Merge de classes Tailwind
A aplicação é dividida em componentes reutilizáveis e independentes:
Layout Components
├── Header (recorrente em todas as páginas)
├── Cards (perfis, conversas)
└── Forms (login, cadastro, filtros)
Page Components
├── Login (autenticação)
├── Signup (cadastro)
├── Swipe (feed principal)
├── ProfileDetail (visualização completa)
└── Messages (chat)
Context Providers
└── ThemeContext (gerenciamento de tema)
Usado para gerenciar o estado global do tema:
- Centraliza a lógica de mudança de tema
- Acessível em qualquer componente via hook
useTheme() - Facilita a adição de novos temas no futuro
Navegação declarativa baseada em rotas:
- Rotas protegidas (lógica implementada)
- Navegação programática via
useNavigate() - Passagem de estado entre rotas via
location.state
Custom hooks para lógica reutilizável:
useTheme()- Acesso ao contexto de tema- Hooks built-in do React (
useState,useEffect,useNavigate)
1. Acesso à Landing Page (/login)
↓
2. Login ou Cadastro
↓
3. Tela de Swipe (/swipe)
├── Ver perfis
├── Aplicar filtros
├── Curtir/Não curtir
└── Ver detalhes
↓
4. Detalhes do Perfil (/profile)
├── Informações completas
├── Links sociais
└── Enviar mensagem
↓
5. Mensagens (/messages)
├── Lista de conversas
├── Selecionar conversa
├── Enviar mensagens
└── Ver histórico
1. Usuário acessa /login
2. Preenche email e senha
3. Sistema valida (simulado)
4. Redireciona para /swipe
5. Exibe lista de perfis
1. Usuário acessa /signup
2. Preenche dados pessoais
3. Seleciona área de atuação
4. Cria conta (simulado)
5. Redireciona para /swipe
1. Usuário acessa /messages
2. Vê lista de conversas
3. Seleciona conversa
4. Visualiza histórico
5. Digita e envia mensagem
6. Mensagem aparece no chat
Responsabilidade: Autenticação do usuário
Props: Nenhuma (componente de página)
Estado:
email- Email do usuáriopassword- Senha do usuárioshowPassword- Toggle de visibilidade da senha
Funcionalidades:
- Formulário de login
- Validação de campos
- Botões de acesso rápido (demo)
- Seletor de tema
Estilização:
- Cards com sombras
- Gradientes para botões
- Animações de hover
Responsabilidade: Criação de conta
Props: Nenhuma (componente de página)
Estado:
name- Nome completoemail- Emailpassword- SenhadevType- Área de atuaçãoshowPassword- Toggle de visibilidade
Funcionalidades:
- Formulário completo
- Grid de seleção de área de atuação
- Validação de campos obrigatórios
- Botão desabilitado até preencher todos os campos
Estilização:
- Cards responsivos
- Grid de opções interativas
- Feedback visual de seleção
Responsabilidade: Feed principal de perfis
Props: Nenhuma (componente de página)
Estado:
currentIndex- Índice do perfil atualfilterRegion- Filtro de regiãofilterRole- Filtro de área de atuaçãoisAnimating- Estado de animação do swipe
Funcionalidades:
- Exibição de cards de perfil
- Ações de like/dislike/ver perfil
- Filtros dinâmicos
- Contador de perfis
- Animações de swipe
Estilização:
- Cards com gradientes
- Botões de ação coloridos
- Filtros com dropdowns
Responsabilidade: Visualização completa do perfil
Props: Nenhuma (recebe estado via location.state)
Estado: Nenhum (usa dados do location)
Funcionalidades:
- Exibição detalhada do perfil
- Seção de experiência
- Lista de tecnologias
- Projetos destacados
- Links para GitHub e LinkedIn
- Botão de ação rápida para mensagem
Estilização:
- Layout de página completa
- Seções organizadas
- Tags de tecnologia estilizadas
- Botões de links sociais
Responsabilidade: Sistema de mensagens
Props: Nenhuma (componente de página)
Estado:
conversations- Lista de conversasselectedConversation- Conversa selecionadamessages- Mensagens da conversa atualnewMessage- Nova mensagem digitada
Funcionalidades:
- Lista de conversas com status
- Seleção de conversa
- Chat em tempo real
- Envio de mensagens
- Indicadores de online/offline
- Badge de mensagens não lidas
Estilização:
- Layout sidebar + chat
- Mensagens alinhadas à direita/esquerda
- Cores diferenciadas para remetente/destinatário
- Design responsivo
Background: linear-gradient(135deg, #f0f4ff 0%, #ffffff 50%, #faf5ff 100%);
Cards: #ffffff
Texto primário: #1f2937 (gray-800)
Texto secundário: #6b7280 (gray-600)
Accent: #4f46e5 (indigo-600)
Botões: gradient indigo-600 → purple-600Background: #111827 (gray-900)
Cards: #1f2937 (gray-800)
Texto primário: #f9fafb (gray-50)
Texto secundário: #9ca3af (gray-400)
Accent: #818cf8 (indigo-400)
Botões: gradient indigo-500 → purple-500Background: #0a0a0a (preto profundo)
Cards: #0f0f0f com borda cyan
Texto primário: #ffffff
Texto secundário: #9ca3af
Accent: #00ffff (cyan)
Efeitos: text-shadow e box-shadow cyan
Botões: gradient cyan → azul com glow@keyframes swipe-right {
0% { transform: translateX(0) rotate(0); opacity: 1; }
100% { transform: translateX(200%) rotate(20deg); opacity: 0; }
}
@keyframes swipe-left {
0% { transform: translateX(0) rotate(0); opacity: 1; }
100% { transform: translateX(-200%) rotate(-20deg); opacity: 0; }
}@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 20px rgba(99, 102, 241, 0.3); }
50% { box-shadow: 0 0 40px rgba(99, 102, 241, 0.6); }
}.glass {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}Cada componente gerencia seu próprio estado local:
- Login: email, password, showPassword
- Signup: name, email, password, devType
- Swipe: currentIndex, filters, isAnimating
- Messages: conversations, selectedConversation, messages, newMessage
ThemeContext:
interface ThemeContextType {
theme: 'light' | 'dark' | 'neon';
setTheme: (theme: Theme) => void;
getThemeClasses: () => string;
}Uso:
const { theme, setTheme } = useTheme();// Enviando estado
navigate('/profile', { state: profile });
// Recebendo estado
const location = useLocation();
const profile = location.state as DevProfile;| Rota | Componente | Descrição |
|---|---|---|
/ |
Login | Página inicial / Login |
/login |
Login | Tela de login |
/signup |
Signup | Tela de cadastro |
/swipe |
Swipe | Feed principal |
/profile |
ProfileDetail | Detalhes do perfil |
/messages |
Messages | Área de mensagens |
// Navegar para rota
navigate('/swipe');
// Navegar com estado
navigate('/profile', { state: profile });
// Voltar (simulado)
navigate('/swipe');O projeto usa variáveis de ambiente via Vite. Não há variáveis sensíveis configuradas atualmente, mas o sistema está preparado para:
# Exemplo de variáveis
VITE_API_URL=https://api.devmach.com
VITE_APP_NAME=DevMachconst apiUrl = import.meta.env.VITE_API_URL;O projeto está configurado para suportar testes, mas atualmente não possui testes implementados.
- Vitest - Test runner integrado ao Vite
- @testing-library/react - Testes de componentes React
import { render, screen } from '@testing-library/react';
import { Login } from './pages/Login';
describe('Login Component', () => {
it('should render login form', () => {
render(<Login />);
expect(screen.getByLabelText(/email/i)).toBeInTheDocument();
expect(screen.getByLabelText(/senha/i)).toBeInTheDocument();
});
});npm install
npm run devnpm run buildnpm run previewO projeto usa vite-plugin-singlefile para gerar um arquivo único:
- Saída:
dist/index.html - Formato: Single-file (HTML + CSS + JS embutidos)
- Ideal para: Hospedagem estática (GitHub Pages, Netlify, Vercel)
- GitHub Pages - Gratuito, ideal para projetos open source
- Netlify - Deploy contínuo, gratuito para projetos pessoais
- Vercel - Deploy rápido, excelente para projetos React
- Firebase Hosting - Gratuito, integrado ao ecossistema Google
# 1. Build o projeto
npm run build
# 2. Configure o GitHub Pages no repositório
# Settings > Pages > Source: gh-pages branch
# 3. Deploy
npx gh-pages -d dist- Backend Real: API com Node.js + Express + MongoDB
- Autenticação JWT: Tokens de acesso e refresh
- Match System: Sistema de matching bidirecional
- Notificações: Push notifications para novas mensagens
- Video Call: Integração com WebRTC para chamadas
- Portfólio: Upload de projetos e casos de estudo
- Reviews: Sistema de reviews entre desenvolvedores
- Analytics: Dashboard para métricas de uso
- Testes Unitários: Vitest + Testing Library
- Testes E2E: Cypress ou Playwright
- Storybook: Documentação de componentes
- PWA: Progressive Web App
- Offline Support: Service Workers
- SEO: Meta tags dinâmicas
- Dark Mode Toggle: Switcher de tema em tempo real
- Custom Themes: Usuários criam seus próprios temas
- Animations: Framer Motion para animações avançadas
- Micro-interações: Feedback visual aprimorado
- Code Splitting: Lazy loading de rotas
- Image Optimization: Imagens otimizadas
- Caching: Estratégias de cache
- PWA: Instalação offline
- Fork o repositório
- Clone seu fork:
git clone https://github.com/seu-usuario/devmach.git - Crie uma branch:
git checkout -b feature/nova-feature - Faça suas alterações
- Commit:
git commit -m "Adiciona nova feature" - Push:
git push origin feature/nova-feature - Pull Request no repositório principal
- Commits: Use Conventional Commits (feat:, fix:, docs:, etc.)
- Branches: feature/, fix/, docs/, chore/
- Code Style: Prettier + ESLint
- TypeScript: Tipagem estrita
- Verifique se o bug já foi reportado
- Crie uma issue com:
- Título claro
- Passos para reproduzir
- Ambiente (SO, navegador, versão)
- Prints ou logs
- Abra uma issue com label
enhancement - Descreva a feature detalhadamente
- Explique o problema que resolve
- Sugira implementação se possível
Este projeto está sob a licença MIT.
MIT License
Copyright (c) 2024 DevMach
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- Projeto: DevMach
- Repositório: https://github.com/seu-usuario/devmach
- Issues: https://github.com/seu-usuario/devmach/issues
| Termo | Definição |
|---|---|
| Swipe | Ação de arrastar o card para direita (like) ou esquerda (dislike) |
| Match | Quando dois usuários se curtem mutuamente |
| Full Stack | Desenvolvedor que trabalha com front-end e back-end |
| Front-end | Desenvolvedor focado na interface do usuário |
| Back-end | Desenvolvedor focado na lógica do servidor |
| DevOps | Profissional que combina desenvolvimento e operações |
| Context API | Sistema de estado global do React |
| Single-file | Build que gera um único arquivo HTML |
- Tempo de Carregamento: < 2 segundos
- Taxa de Conversão Login: > 60%
- Taxa de Match: > 20%
- Engajamento Mensagens: > 3 conversas por usuário
- Retenção: > 40% após 7 dias
- Bundle Size: < 500KB
- Lighthouse Score: > 90/100
- Test Coverage: > 80%
- Build Time: < 30 segundos
- React Documentation
- TypeScript Documentation
- Tailwind CSS Documentation
- Vite Documentation
- React Router Documentation
- Tinder - Design de swipe e cards
- LinkedIn - Perfil profissional
- Facebook Messenger - Interface de mensagens
- GitHub - Perfil de desenvolvedor
Documentação atualizada em: 2024 Versão: 1.0.0 Status: ✅ Em desenvolvimento