Contribuindo¶
Obrigado por seu interesse em contribuir com o Grompt! Este guia explica como você pode ajudar a melhorar o projeto.
🎯 Formas de Contribuir¶
📝 Reportar Bugs¶
Encontrou um bug? Ajude-nos a corrigi-lo!
- Verifique se já existe uma issue sobre o problema
- Crie uma nova issue com informações detalhadas:
- Descrição clara do problema
- Passos para reproduzir
- Comportamento esperado vs atual
- Screenshots ou logs, se aplicável
- Informações do ambiente (SO, versão do Go, etc.)
Template de Bug Report:
## Descrição
[Descrição clara e concisa do bug]
## Passos para Reproduzir
1. Execute o comando '...'
2. Acesse a página '...'
3. Clique em '...'
4. Veja o erro
## Comportamento Esperado
[O que deveria acontecer]
## Comportamento Atual
[O que está acontecendo]
## Ambiente
- OS: [e.g. Ubuntu 22.04]
- Grompt Version: [e.g. v1.2.3]
- Go Version: [e.g. 1.21.5]
- Browser: [e.g. Chrome 120]
## Logs/Screenshots
[Adicione logs ou screenshots]
✨ Solicitar Funcionalidades¶
Tem uma ideia para melhorar o Grompt?
- Verifique se já foi solicitada nas issues
- Descreva claramente a funcionalidade desejada
- Explique o caso de uso e benefícios
- Considere a implementação se possível
Template de Feature Request:
## Funcionalidade
[Descrição clara da funcionalidade]
## Motivação
[Por que esta funcionalidade é útil]
## Solução Proposta
[Como você imagina que deveria funcionar]
## Alternativas Consideradas
[Outras abordagens que você considerou]
## Contexto Adicional
[Screenshots, mockups, links, etc.]
💻 Contribuir com Código¶
Configuração do Ambiente¶
- Fork o repositório
- Clone seu fork:
- Configure o ambiente:
Fluxo de Desenvolvimento¶
- Crie uma branch para sua funcionalidade:
-
Faça suas alterações seguindo os padrões do projeto
-
Execute os testes:
- Commit suas alterações:
- Push para seu fork:
- Abra um Pull Request
📋 Padrões de Código¶
Go (Backend)¶
- Siga os padrões do Go: use
gofmt
,golint
,go vet
- Documentação: todas as funções exportadas devem ter comentários
- Testes: mantenha cobertura de testes alta
- Nomenclatura: use convenções idiomáticas do Go
Exemplo:
// Package engine provides prompt engineering capabilities
package engine
// GeneratePrompt creates a structured prompt from raw ideas
func GeneratePrompt(ideas []string, purpose Purpose) (*Prompt, error) {
if len(ideas) == 0 {
return nil, errors.New("at least one idea is required")
}
// Implementation...
return prompt, nil
}
TypeScript/React (Frontend)¶
- TypeScript: use tipagem estrita
- Componentes funcionais: prefira hooks
- Styled-components: para estilização
- ESLint/Prettier: para formatação consistente
Exemplo:
interface PromptFormProps {
onSubmit: (ideas: string[]) => void;
isLoading?: boolean;
}
export const PromptForm: React.FC<PromptFormProps> = ({
onSubmit,
isLoading = false
}) => {
const [ideas, setIdeas] = useState<string[]>([]);
const handleSubmit = useCallback((e: FormEvent) => {
e.preventDefault();
onSubmit(ideas);
}, [ideas, onSubmit]);
return (
<StyledForm onSubmit={handleSubmit}>
{/* Component implementation */}
</StyledForm>
);
};
Commits¶
Use Conventional Commits:
feat:
nova funcionalidadefix:
correção de bugdocs:
documentaçãostyle:
formatação (sem mudança de código)refactor:
refatoraçãotest:
adição/correção de testeschore:
tarefas de manutenção
Exemplos:
feat: adiciona suporte para provedor Gemini
fix: corrige erro de timeout em requests longos
docs: atualiza guia de instalação
test: adiciona testes para módulo de templates
🔍 Process de Review¶
Checklist do Pull Request¶
- Código segue os padrões estabelecidos
- Testes passam e cobertura não diminui
- Documentação está atualizada
- Commit messages seguem conventional commits
- Breaking changes estão documentadas
- Performance não foi degradada
O que Esperamos¶
- Código limpo e legível
- Testes abrangentes
- Documentação atualizada
- Compatibilidade mantida
- Performance considerada
Processo de Review¶
- Automated checks devem passar
- Manual review por pelo menos um mantenedor
- Feedback pode ser solicitado
- Merge após aprovação
🏗️ Arquitetura do Projeto¶
Estrutura de Diretórios¶
grompt/
├── cmd/ # CLI entrypoints
│ ├── main.go # Servidor principal
│ └── cli/ # Comandos CLI
├── internal/ # Código interno
│ ├── engine/ # Core prompt engineering
│ ├── providers/ # AI providers
│ ├── services/ # Business logic
│ └── types/ # Type definitions
├── frontend/ # React application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom hooks
│ │ └── utils/ # Utilities
├── docs/ # Documentação
├── tests/ # Testes
└── support/ # Scripts de build
Componentes Principais¶
- Engine: Core prompt engineering logic
- Providers: Integrações com APIs de IA
- Services: Lógica de negócio e orquestração
- Frontend: Interface React
- CLI: Interface de linha de comando
🧪 Testes¶
Executar Testes¶
# Todos os testes
make test
# Testes do backend
make test-backend
# Testes do frontend
make test-frontend
# Testes de integração
make test-integration
# Coverage
make coverage
Escrevendo Testes¶
Go (Backend Tests)¶
func TestGeneratePrompt(t *testing.T) {
tests := []struct {
name string
ideas []string
purpose Purpose
expected *Prompt
wantErr bool
}{
{
name: "valid ideas",
ideas: []string{"create API", "use Node.js"},
purpose: PurposeCode,
expected: &Prompt{
Content: "Create a Node.js API...",
Purpose: PurposeCode,
},
wantErr: false,
},
// More test cases...
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := GeneratePrompt(tt.ideas, tt.purpose)
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.expected, result)
})
}
}
React (Frontend)¶
describe('PromptForm', () => {
it('should submit ideas when form is submitted', () => {
const onSubmit = jest.fn();
render(<PromptForm onSubmit={onSubmit} />);
const input = screen.getByLabelText('Add idea');
const submitButton = screen.getByRole('button', { name: 'Generate' });
fireEvent.change(input, { target: { value: 'test idea' } });
fireEvent.click(screen.getByRole('button', { name: 'Add' }));
fireEvent.click(submitButton);
expect(onSubmit).toHaveBeenCalledWith(['test idea']);
});
});
📚 Documentação¶
Onde Documentar¶
- README: visão geral e quick start
- Docs: documentação detalhada (MkDocs)
- Código: comentários inline
- API: documentação de endpoints
Atualizando Documentação¶
# Servir docs localmente
cd support/docs
mkdocs serve
# Build da documentação
mkdocs build
# Deploy (apenas mantenedores)
mkdocs gh-deploy
🎯 Primeiras Contribuições¶
Good First Issues¶
Procure por issues marcadas com:
good-first-issue
: ideal para inicianteshelp-wanted
: ajuda é bem-vindadocumentation
: melhorias na documentaçãobug
: correção de bugs simples
Áreas que Precisam de Ajuda¶
- Documentação: sempre pode ser melhorada
- Testes: aumentar cobertura
- Performance: otimizações
- UI/UX: melhorias na interface
- Provedores de IA: novos integrações
💬 Comunicação¶
Onde Buscar Ajuda¶
- GitHub Issues: problemas específicos
- GitHub Discussions: discussões gerais
- Código: comentários em PRs
Diretrizes de Comunicação¶
- Seja respeitoso e profissional
- Use português ou inglês conforme preferir
- Seja específico em perguntas e descrições
- Compartilhe contexto relevante
🏆 Reconhecimento¶
Contributors¶
Todos os contribuidores são reconhecidos:
- README: lista de contributors
- CHANGELOG: créditos por release
- Commits: histórico permanente
Como ser Reconhecido¶
- Contribua regularmente
- Ajude outros contribuidores
- Mantenha qualidade alta
- Participe de discussões
📄 Licença¶
Ao contribuir, você concorda que suas contribuições serão licenciadas sob a MIT License.
📞 Contato¶
- GitHub Issues: github.com/rafa-mori/grompt/issues
- GitHub Discussions: github.com/rafa-mori/grompt/discussions
- Email: através do GitHub
Obrigado por contribuir! 🙏
Cada contribuição, por menor que seja, faz a diferença na comunidade open source.