Este documento descreve os padrões e práticas para contribuir com o projeto Eventos - Comunidade Café Bugado.
# Instalar dependências
pnpm install
# Iniciar ambiente de desenvolvimento
pnpm dev| Comando | Descrição |
|---|---|
pnpm dev |
Inicia o servidor de desenvolvimento |
pnpm build |
Gera build de produção |
pnpm preview |
Preview da build de produção |
pnpm lint |
Verifica erros de linting |
pnpm lint:fix |
Corrige erros de linting automaticamente |
pnpm format |
Formata todos os arquivos com Prettier |
pnpm format:check |
Verifica se os arquivos estão formatados |
pnpm test |
Executa testes em modo watch |
pnpm test:run |
Executa testes uma vez |
pnpm test:coverage |
Relatório de cobertura de testes |
pnpm test:e2e |
Testes E2E com Playwright |
Utilizamos o padrão Conventional Commits para manter um histórico limpo e gerar changelogs automaticamente.
<tipo>(<escopo>): <descrição>
[corpo opcional]
[rodapé opcional]
| Tipo | Descrição | Exemplo |
|---|---|---|
feat |
Nova funcionalidade | feat(auth): adiciona login com Google |
fix |
Correção de bug | fix(eventos): corrige filtro de data |
docs |
Documentação | docs: atualiza README |
style |
Formatação (não afeta código) | style: aplica prettier |
refactor |
Refatoração de código | refactor(api): simplifica chamadas HTTP |
perf |
Melhorias de performance | perf(lista): adiciona virtualização |
test |
Adição/correção de testes | test(auth): adiciona testes de login |
build |
Alterações no build | build: atualiza vite para v7 |
ci |
Alterações no CI/CD | ci: adiciona workflow de deploy |
chore |
Tarefas gerais | chore: atualiza dependências |
revert |
Reverter commit anterior | revert: reverte feat(auth) |
- Tipo: obrigatório, minúsculas
- Escopo: opcional, entre parênteses
- Descrição: obrigatória, minúsculas, máximo 72 caracteres
- Header total: máximo 100 caracteres
# Boa prática
git commit -m "feat(eventos): adiciona exportação para CSV"
git commit -m "fix(admin): corrige validação de formulário"
git commit -m "docs: adiciona guia de contribuição"
# Evitar
git commit -m "Adicionei feature" # Sem tipo
git commit -m "FEAT: nova feature" # Maiúsculas
git commit -m "feat: implementei a funcionalidade de exportação de eventos para arquivo CSV com suporte a múltiplos formatos" # Muito longoO projeto utiliza ESLint com regras específicas:
- Sem
console.log: Useconsole.warnouconsole.errorquando necessário - Sempre use
===: Comparações estritas - Prefira
const: Useletapenas quando necessário - Arrow functions: Prefira em callbacks
- Sem variáveis não utilizadas: Exceto as que começam com
_ou maiúsculas
Formatação automática configurada:
- Sem ponto e vírgula
- Aspas simples
- 2 espaços de indentação
- Vírgula final (trailing comma)
- Máximo 100 caracteres por linha
Os hooks são executados automaticamente:
Antes de cada commit:
- Executa ESLint nos arquivos modificados
- Formata com Prettier
- Bloqueia commit se houver erros
Valida a mensagem de commit seguindo o padrão Conventional Commits.
Este projeto segue um fluxo de branches rigoroso para garantir qualidade e revisão de código.
feature/* ──┐
fix/* ──┼──► developer ──► main (produção)
hotfix/* ──┘
(1 aprovação) (2 aprovações)
| Branch | Pode receber PR de | Aprovações necessárias |
|---|---|---|
developer |
feature/*, fix/*, hotfix/* |
1 aprovação |
main |
Apenas developer |
2 aprovações |
-
Crie uma branch a partir de
developer:# Atualize a developer primeiro git checkout developer git pull origin developer # Crie sua branch de feature git checkout -b feature/nome-da-feature
-
Faça commits seguindo o padrão:
git commit -m "feat(escopo): descrição clara" -
Mantenha atualizado com a developer:
git pull origin developer --rebase
-
Envie sua branch para o repositório:
git push -u origin feature/nome-da-feature
-
Abra um Pull Request para
developer:- Descreva as mudanças claramente
- Aguarde o CI passar (lint, testes, build)
- Solicite revisão de 1 pessoa
- Após aprovação, faça o merge
-
Para enviar para produção (developer → main):
- Abra um PR de
developerparamain - Aguarde o CI passar
- Solicite revisão de 2 pessoas
- Após 2 aprovações, faça o merge
- Abra um PR de
Toda branch e PR passa pelos seguintes checks:
- Lint: Verifica formatação (Prettier) e erros (ESLint)
- Testes: Executa todos os testes com Vitest
- Build: Garante que o projeto compila sem erros
# Features
feature/adicionar-login
feature/exportar-csv
feature/melhorar-dashboard
# Correções
fix/corrigir-filtro-data
fix/resolver-erro-login
# Hotfixes (correções urgentes)
hotfix/corrigir-crash-producao- ❌ Push direto na
main - ❌ Push direto na
developer - ❌ PR de feature diretamente para
main - ❌ Merge sem aprovações necessárias
- ❌ Merge com CI falhando
src/
├── admin/ # Painel administrativo (Login, Dashboard, AdminSidebar, GalleryAdmin, CommunityAdmin, GithubStats, AuditLog)
├── pages/ # Páginas públicas (Home, EventsPage, EventDetails, About, Contact, Gallery, NotFound)
├── components/ # Componentes reutilizáveis
│ ├── Modal/ # Sistema unificado de modais (Modal, ConfirmModal)
│ ├── EventCard # Card de evento (variant compact/full)
│ ├── CalendarView/ # Visualização em calendário
│ ├── LocationSelector/
│ ├── PwaInstallBanner/ PwaInstallButton/ PwaUpdateBanner/
│ ├── gallery/ # GalleryEventCard, GalleryPhotoModal
│ └── ... # Header, Footer, Pagination, ShareButtons, SEOHead, etc.
├── services/ # Serviços de API (Supabase): event, tag, auth, contributor, community, galeria, profile, role, github, audit
├── hooks/ # Custom hooks: useUserRole, useMediaQuery, usePagination, useSidebarCollapse, useGallery
├── lib/ # Configurações base: supabase.js, apiClient.js (withRetry), sentry.js, vitals.js, pwa.js
├── utils/ # Funções utilitárias: eventSearch.js, richText.js
├── constants/ # Constantes da aplicação: messages.js
├── context/ # React Context: ThemeProvider
├── test/ # Infraestrutura de testes: setup.js, utils.jsx, mocks/
├── assets/ # Arquivos estáticos
├── App.jsx # Listagem de eventos (/eventos)
└── main.jsx # Entry point (rotas, providers)
Se tiver dúvidas sobre os padrões, converse com a equipe antes de fazer alterações significativas.