Obrigado por considerar contribuir com o ModelHub! Este documento fornece diretrizes para contribuir com o projeto.
- Código de Conduta
- Como Posso Contribuir?
- Configuração do Ambiente
- Processo de Desenvolvimento
- Padrões de Código
- Commits e Pull Requests
- Reportar Bugs
- Sugerir Melhorias
Este projeto adota o Contributor Covenant. Ao participar, você concorda em seguir o CODE_OF_CONDUCT.md.
- 🐛 Reportar bugs - Encontrou um problema? Abra uma issue
- 💡 Sugerir features - Tem uma ideia? Compartilhe conosco
- 📝 Melhorar documentação - Docs nunca são demais
- 🔧 Corrigir bugs - Escolha uma issue e resolva
- ✨ Implementar features - Adicione novas funcionalidades
- 🧪 Escrever testes - Aumente a cobertura de testes
- 🌍 Traduzir - Ajude a internacionalizar o projeto
- Node.js >= 22.0.0
- pnpm >= 10.0.0
- Git
- Conta no Neon (para banco de dados)
-
Fork o repositório
# Clique em "Fork" no GitHub -
Clone seu fork
git clone https://github.com/SEU-USUARIO/modelhub.git cd modelhub -
Adicione o repositório original como upstream
git remote add upstream https://github.com/actus7/modelhub.git
-
Instale as dependências
pnpm install
-
Configure as variáveis de ambiente
cp .env.example .env # Edite .env com suas credenciais -
Execute as migrações
pnpm prisma:migrate
-
Inicie o servidor de desenvolvimento
pnpm dev
- Procure issues com labels
good first issueouhelp wanted - Comente na issue que você quer trabalhar nela
- Aguarde aprovação de um maintainer
# Atualize sua main
git checkout main
git pull upstream main
# Crie uma branch descritiva
git checkout -b feature/nome-da-feature
# ou
git checkout -b fix/nome-do-bug- Escreva código limpo e bem documentado
- Siga os padrões de código do projeto
- Adicione testes quando aplicável
- Atualize a documentação se necessário
# Execute os testes
pnpm test
# Verifique o linting
pnpm lint
# Verifique os tipos
pnpm typecheck
# Teste manualmente no navegador
pnpm devgit add .
git commit -m "tipo: descrição curta"git push origin feature/nome-da-featureAbra um Pull Request no GitHub seguindo o template.
- Use TypeScript para todo código novo
- Evite
any, prefira tipos específicos - Use interfaces para objetos públicos
- Use types para unions e intersections
// ✅ Bom
interface User {
id: string;
name: string;
email: string;
}
// ❌ Evite
const user: any = { ... };- Use componentes funcionais com hooks
- Prefira Server Components quando possível
- Use
"use client"apenas quando necessário - Extraia lógica complexa para hooks customizados
// ✅ Bom
export default function MyComponent({ data }: Props) {
return <div>{data.title}</div>;
}
// ❌ Evite
export default function MyComponent(props: any) {
return <div>{props.data.title}</div>;
}- Use 2 espaços para indentação
- Use aspas simples para strings
- Use ponto e vírgula
- Máximo 100 caracteres por linha
- Use Prettier para formatação automática
# Formate o código
pnpm prettier --write .- Arquivos: kebab-case (
user-profile.tsx) - Componentes: PascalCase (
UserProfile) - Funções: camelCase (
getUserData) - Constantes: UPPER_SNAKE_CASE (
API_BASE_URL) - Tipos/Interfaces: PascalCase (
UserData)
feature/
├── components/
│ ├── feature-component.tsx
│ └── feature-component.test.tsx
├── hooks/
│ └── use-feature.ts
├── lib/
│ └── feature-utils.ts
└── types/
└── feature.types.ts
Use Conventional Commits:
tipo(escopo): descrição curta
Descrição mais detalhada (opcional)
Closes #123
Tipos:
feat: Nova funcionalidadefix: Correção de bugdocs: Documentaçãostyle: Formatação (não afeta código)refactor: Refatoraçãotest: Testeschore: Manutenção
Exemplos:
feat(chat): adiciona suporte a anexos de imagem
fix(auth): corrige erro de login com Google
docs(readme): atualiza instruções de instalação
test(api): adiciona testes para endpoint de chatTítulo: Use o mesmo formato de commits
feat(chat): adiciona suporte a anexos de imagem
Descrição: Use o template fornecido
- Descreva o que foi mudado e por quê
- Referencie issues relacionadas
- Adicione screenshots se aplicável
- Liste breaking changes se houver
Checklist:
- Código segue os padrões do projeto
- Testes passam localmente
- Adicionei testes para novas funcionalidades
- Documentação foi atualizada
- Não há conflitos com a branch main
- Verifique se o bug já foi reportado
- Teste na versão mais recente
- Colete informações sobre o ambiente
**Descrição**
Descrição clara do bug.
**Passos para Reproduzir**
1. Vá para '...'
2. Clique em '...'
3. Veja o erro
**Comportamento Esperado**
O que deveria acontecer.
**Comportamento Atual**
O que está acontecendo.
**Screenshots**
Se aplicável.
**Ambiente**
- OS: [e.g. Windows 11]
- Node: [e.g. 22.0.0]
- Browser: [e.g. Chrome 120]
- Version: [e.g. 1.0.0]
**Contexto Adicional**
Qualquer outra informação relevante.**Problema**
Qual problema esta feature resolve?
**Solução Proposta**
Como você imagina que funcione?
**Alternativas**
Outras soluções que você considerou?
**Contexto Adicional**
Screenshots, mockups, exemplos, etc.import { describe, it, expect } from 'vitest';
describe('MyFunction', () => {
it('should do something', () => {
const result = myFunction('input');
expect(result).toBe('expected');
});
});# Todos os testes
pnpm test
# Watch mode
pnpm test --watch
# Coverage
pnpm test --coverage- Abra uma Discussion
- Entre no nosso Discord
- Envie um email para dev@modelhub.dev
Suas contribuições tornam o ModelHub melhor para todos. Obrigado por dedicar seu tempo! 🙏
Happy Coding! 🚀