O template Next.js moderno e opinativo para iniciar projetos rapidamente, seguindo as melhores práticas do mercado.
- Framework: Next.js (App Router)
- Linguagem: TypeScript
- Estilização: Tailwind CSS
- Arquitetura: Feature-Based Architecture
- Containers: Podman e Podman Compose
- Node.js: >= 22.x
Este template segue a Feature-Based Architecture
Abaixo está a organização recomendada para manter o projeto escalável e bem estruturado:
src/
├── app/ # Next.js
│ ├── globals.css # Estilos globais
│ ├── layout.tsx # Layout raiz da aplicação
│ └── page.tsx # Página inicial
├── features/ # Funcionalidades por domínio
│ └── home/ # Feature da página inicial
│ ├── components/ # Componentes específicos
│ ├── hooks/ # Hooks personalizados
│ ├── services/ # Lógica de negócio
│ └── types/ # Tipos TypeScript
├── shared/ # Código compartilhado
│ ├── components/ # Componentes reutilizáveis
│ ├── hooks/ # Hooks globais
│ ├── services/ # APIs e integrações
│ ├── types/ # Tipos compartilhados
│ └── utils/ # Funções utilitárias
├── config/ # Configurações da aplicação
│ ├── config.ts # Variáveis de ambiente
│ └── font.ts # Configuração das fontes
└── lib/ # Bibliotecas e utilitários externos
├── api.ts # Cliente HTTP
└── validations.ts # Schemas de validação
- Cada
featurecontém tudo relacionado a uma funcionalidade específica - Facilita manutenção e escalabilidade
- Reduz acoplamento entre diferentes partes da aplicação
- Componentes, hooks e serviços ficam próximos ao seu uso
- Melhora a experiência do desenvolvedor
- Facilita refatoração e exclusão de código
- Shared: Usado por múltiplas features
- Feature: Específico de uma funcionalidade
- Tipagem forte em toda a aplicação
- Interfaces bem definidas
- Melhor experiência de desenvolvimento
- Componentes: PascalCase (
UserProfile.tsx) - Hooks: camelCase com prefixo "use" (
useUserData.ts) - Services: camelCase (
userService.ts) - Types: PascalCase com sufixo "Type" (
UserType.ts) - Utilitários: camelCase (
formatDate.ts) - Diretórios: kebab-Case (
hello-world/)
// Estrutura padrão de um componente
interface ComponentProps {
// Props tipadas
}
export function Component({ prop }: ComponentProps) {
// Hooks
// Lógica
// Return JSX
}
export default Component;# Clone o repositório
git clone <url-do-repositorio>
cd noahjs
# Instale as dependências
npm install
# Execute em modo de desenvolvimento
npm run devAcesse http://localhost:3000 para visualizar a aplicação.
| Script | Comando | Descrição |
|---|---|---|
| Desenvolvimento | npm run dev |
Inicia o servidor de desenvolvimento com hot reload |
| Build | npm run build |
Gera build otimizado para produção |
| Produção | npm run start |
Inicia servidor de produção (requer build) |
As variáveis necessárias estão no arquivo .env.example. Exemplo:
NEXT_PUBLIC_API_URL=http://localhost:3000/api
Nunca faça commit de arquivos com dados sensíveis! Use sempre variáveis de ambiente ou arquivos ignorados pelo Git.
Este projeto utiliza ESLint e Prettier para garantir qualidade e consistência do código.
As regras e definições aplicadas estão nos arquivos abaixo.
| Ferramenta | Arquivo de Configuração | Descrição |
|---|---|---|
| ESLint | eslint.config.mjs |
Regras de linting e integração com Prettier |
| Prettier | .prettierrc |
Regras de formatação de código |
| VS Code | .vscode/settings.json |
Configurações do editor |
| Script | Comando | Descrição |
|---|---|---|
| Linting | npm run lint |
Verifica problemas de código com ESLint |
| Correção de Lint | npm run lint:fix |
Corrige automaticamente problemas ESLint |
| Formatação | npm run format |
Formata código com Prettier |
| Verificar Format. | npm run format:check |
Verifica formatação sem alterar arquivos |
| Verificação | npm run check |
Verifica formatação + lint (CI/CD) |
💡 Dica: Instale as extensões
ESLintePrettier - Code formatterno VS Code para melhor experiência de desenvolvimento.
Este projeto utiliza Husky para automatizar verificações de qualidade antes dos commits e pushes.
Pre-commit Hook: Executa lint-staged para formatar e corrigir automaticamente apenas os arquivos modificados com Prettier e ESLint.
Pre-push Hook: Executa formatação, lint, build e protege a branch main antes do push.
Commit-msg Hook: Valida se a mensagem de commit segue o padrão Conventional Commits usando .husky/commit-msg.
Executa ESLint e Prettier em arquivos JS/TS e apenas Prettier em JSON, CSS e Markdown antes do commit.
- Qualidade Garantida: Código sempre formatado e sem erros
- Automação: Verificações automáticas sem intervenção manual
- Proteção: Evita commits problemáticos no repositório
feat, fix, docs, style, refactor, test, chore, perf, ci, build, revert
Exemplo: feat: add user authentication
# Bypass hooks (use apenas em emergências)
git commit --no-verify- Framework: Jest + React Testing Library + @testing-library/jest-dom
- Cobertura: c8 com threshold de 80%
- Estrutura: Arquivos
__tests__/ao lado dos componentes
npm test # Executar todos os testes
npm run test:watch # Modo watch para desenvolvimento
npm run test:coverage # Testes com cobertura (80% threshold)
npm run test:ci # Testes para CI/CDimport { render, screen, fireEvent } from '@shared/utils/test-utils'
describe('MyComponent', () => {
it('should render and handle clicks', () => {
const mockClick = jest.fn()
render(<MyComponent onClick={mockClick} />)
fireEvent.click(screen.getByRole('button'))
expect(mockClick).toHaveBeenCalled()
})
})tailwind.config.js- Configuração principal e pastas monitoradassrc/style/globals.css- Estilos globais e diretivas
- Ordem de Classes: Layout → Dimensões → Espaçamento → Tipografia → Cores → Bordas → Efeitos → Responsividade → Estados
- Mobile-First:
text-sm md:text-base lg:text-lgem vez de desktop-first - Organização: Agrupe classes por função para melhor legibilidade
- Componentes Reutilizáveis: Extraia patterns repetidos em componentes com variants
- Dark Mode: Use
dark:prefix para temas escuros (bg-white dark:bg-gray-900) - Helper cn(): Combine classes condicionais com
clsx+tailwind-merge - Evite: Classes conflitantes (
p-4 p-6), valores arbitrários desnecessários, classes não utilizadas
- VS Code: Tailwind CSS IntelliSense, Headwind
- Prettier: prettier-plugin-tailwindcss (já configurado)
- Configuração: JIT mode + purge CSS otimizado para performance
- Adicione no
.env.local:NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX - Estrutura:
src/lib/gtag.ts,src/shared/components/GoogleAnalytics.tsx,src/shared/hooks/useGoogleAnalytics.ts
import { useGoogleAnalytics } from '@shared/hooks/useGoogleAnalytics';
const { trackEvent, trackButtonClick, trackError, isEnabled } = useGoogleAnalytics();
// Rastrear cliques
trackButtonClick('hero-button');
// Eventos customizados
trackEvent({ action: 'download', category: 'file', label: 'template.pdf' });
// Rastrear erros
trackError('Failed to load data', 'HomePage');- ✅ Page Views: Rastreamento automático de mudanças de rota
- ✅ Hook personalizado:
useGoogleAnalytics()para eventos - ✅ Compatível: Next.js App Router e client-side routing
- ✅ Privacidade: Configuração LGPD ready com anonimização de IP
Suas contribuições são muito bem-vindas! Para colaborar com o projeto de forma eficiente e seguindo nossas diretrizes, consulte o guia completo no CONTRIBUTING.md. Lá você encontrará um passo a passo detalhado, padrões de commit, regras de validação e dicas importantes para garantir que sua contribuição seja aceita rapidamente.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
