braga-project-cli
v1.0.4
Published
đ CLI moderna e interativa para geração rĂĄpida de projetos frontend e backend com configuraçÔes personalizadas
Maintainers
Readme
create-henri-app
đ CLI moderna e interativa para geração rĂĄpida de projetos frontend e backend com configuraçÔes personalizadas.
ïżœ Instalação
Uso com npx (Recomendado - sem instalação)
npx create-henri-appInstalação Global
npm install -g create-henri-app
# ou
pnpm add -g create-henri-app
# ou
yarn global add create-henri-appđ Uso RĂĄpido
Modo Interativo
npx create-henri-appA CLI irå guiå-lo através de perguntas interativas para configurar seu projeto.
Modo CLI com Flags
npx create-henri-app \
--name meu-app \
--type frontend \
--framework nextjs-15 \
--http-client ky \
--linter biome \
--libs tanstack-query,zod,react-hook-form \
--with-shadcn \
--shadcn-color slate \
--installâš CaracterĂsticas
- â Suporte completo para Frontend (NextJS 15, ViteJS 6) e Backend (em desenvolvimento)
- â Escolha entre ky, axios ou fetch nativo como cliente HTTP
- â Configuração automĂĄtica de Biome ou ESLint + Prettier
- â Instalação e configuração de bibliotecas populares
- â Integração completa com shadcn/ui
- â Sistema de providers com injeção automĂĄtica
- â Instalação automĂĄtica de dependĂȘncias
đïž OpçÔes DisponĂveis
| Flag | Tipo | Descrição | Valores |
|------|------|-----------|---------|
| --name | string | Nome do projeto | qualquer string vĂĄlida |
| --type | string | Tipo de aplicação | frontend, backend |
| --framework | string | Framework | nextjs-15, vitejs-6 |
| --http-client | string | Cliente HTTP | ky, axios, fetch |
| --linter | string | Linter | biome, eslint-prettier |
| --libs | string | Libs adicionais (separadas por vĂrgula) | ver documentação |
| --with-shadcn | boolean | Habilita shadcn/ui | - |
| --shadcn-color | string | Cor base | neutral, slate, gray, zinc, stone |
| --install | boolean | Instalar dependĂȘncias | - |
đ Bibliotecas Suportadas
- tanstack-query - TanStack Query (React Query)
- zod - Validação de schemas
- react-hook-form - Gerenciamento de formulĂĄrios
- date-fns - Manipulação de datas
- cookies-next - Gerenciamento de cookies
- nuqs - State na URL
- framer-motion - AnimaçÔes
- lucide-react - Ăcones
- recharts - GrĂĄficos
đĄ Exemplos
Projeto NextJS Completo
npx create-henri-app \
--name ecommerce-app \
--type frontend \
--framework nextjs-15 \
--http-client ky \
--linter biome \
--libs tanstack-query,zod,react-hook-form \
--with-shadcn \
--installProjeto Minimalista
npx create-henri-app \
--name simple-app \
--type frontend \
--framework nextjs-15 \
--http-client fetch \
--linter biomeđ Estrutura Gerada
meu-projeto/
âââ src/
â âââ app/
â â âââ layout.tsx
â â âââ providers.tsx
â â âââ (application)/
â âââ components/
â âââ lib/
â âââ hooks/
â âââ services/
â âââ utils/
âââ public/
âââ .env.example
âââ package.json
âââ ...đ Arquitetura do Sistema
Componentes Principais
- Types (
types.ts) - Define todas as interfaces e tipos TypeScript - Snippet Configs (
configs/*.config.ts) - ConfiguraçÔes de cada biblioteca - Action Executor (
actions.ts) - Executa as açÔes definidas - Snippet Manager (
snippet-manager.ts) - Gerencia snippets disponĂveis - Project Generator (
project-generator.ts) - Orquestra todo o processo
Como Adicionar Nova Biblioteca
- Criar config em
configs/nova-lib.config.ts - Registrar no
snippet-manager.ts - Adicionar na lista de opçÔes em
index.ts
đ€ Contribuindo
ContribuiçÔes são bem-vindas! Visite o repositório no GitHub.
đ Licença
MIT © Henri
đ Links
âš Funcionalidades
- Interface bonita e moderna usando
@clack/prompts - Fluxo interativo de perguntas e respostas
- Suporte para frontend e backend
- MĂșltiplas opçÔes de configuração
- Resumo final das escolhas
đ ïž Como usar
Executar a CLI
npm run start
# ou
npm run devFluxo de Perguntas
- Package Manager: Escolha entre pnpm, yarn ou npm
- Tipo de Aplicação: Frontend ou Backend
- Para Frontend:
- Framework: NextJS 15.x ou ViteJS 6.x
- Cliente HTTP: ky, axios ou fetch nativo
- Linter: Biome ou ESLint + Prettier
- Libs Adicionais: nuqs, tanstack query, date-fns (mĂșltipla escolha)
đŻ Exemplo de Uso
Ao executar a CLI, vocĂȘ verĂĄ uma interface como esta:
đ Bem-vindo ao Gerador de Projetos!
đŠ Qual package manager deseja usar?
⯠pnpm
yarn
npm
đïž Qual tipo de aplicação vocĂȘ quer?
⯠Frontend
Backend
⥠Qual framework?
⯠NextJS 15.x
ViteJS 6.x
đ Qual cliente HTTP deseja usar?
⯠ky
axios
none (fetch)
âš Qual linter deseja usar?
⯠Biome
Eslint + Prettier
đ Libs adicionais (pode selecionar mais de uma):
â» nuqs
â» tanstack query
â» date-fnsResumo Final
ApĂłs responder todas as perguntas, a CLI exibirĂĄ um resumo organizado:
đ RESUMO DAS SUAS ESCOLHAS:
âââââââââââââââââââââââââââââââââââââââ
đŠ Package Manager: pnpm
đïž Tipo de Aplicação: frontend
⥠Framework: nextjs-15
đ Cliente HTTP: ky
âš Linter: biome
đ Libs Adicionais: tanstack-query, date-fns
âââââââââââââââââââââââââââââââââââââââđŠ DependĂȘncias
@clack/prompts: Interface bonita para CLItsx: Executar TypeScripttypescript: Suporte ao TypeScript@types/node: Tipos do Node.js
đ§ Scripts DisponĂveis
npm run start: Executa a CLInpm run dev: Executa a CLI (alias para start)npm run build: Compila o TypeScript
đ ObservaçÔes
- As perguntas especĂficas do frontend sĂł aparecem quando "Frontend" Ă© selecionado
- Suporte a seleção mĂșltipla para libs adicionais
- Interface responsiva e intuitiva
- Geração automåtica de projetos baseada nas escolhas
đ Arquitetura do Sistema
Componentes Principais
1. Types (types.ts)
Define todas as interfaces e tipos TypeScript usados no projeto.
2. Snippet Configs (configs/*.config.ts)
Cada biblioteca tem seu arquivo de configuração que define:
- DependĂȘncias necessĂĄrias
- AçÔes a serem executadas
- Prioridade de execução
Exemplo - Biblioteca Simples (Ky, Axios):
// Apenas copia arquivo para src/lib
{
actions: [{
type: 'copy-file',
source: 'snippets/ky/index.ts',
destination: 'src/lib/api.ts'
}]
}Exemplo - Biblioteca com Provider (TanStack Query, Nuqs):
{
actions: [
// 1. Copia arquivo de configuração
{
type: 'copy-file',
source: 'snippets/react-query/index.tsx',
destination: 'src/lib/query-client.tsx',
priority: 1
},
// 2. Injeta provider no providers.tsx
{
type: 'inject-provider',
providerImport: `import { QueryClientProvider } from '@/lib/query-client';`,
providerWrapper: 'QueryClientProvider',
priority: 2
}
]
}3. Action Executor (actions.ts)
Executa as açÔes definidas nos configs:
executeCopyFile(): Copia arquivos dos snippets para o projetoexecuteInjectProvider(): Injeta providers noproviders.tsx
4. Snippet Manager (snippet-manager.ts)
- Registra todos os snippets disponĂveis
- Seleciona snippets baseado na configuração do usuårio
- Coleta todas as dependĂȘncias necessĂĄrias
5. Project Generator (project-generator.ts)
Orquestra todo o processo de geração:
- Copiar template base
- Processar snippets (copiar arquivos, injetar providers)
- Atualizar package.json com dependĂȘncias
- Criar arquivos de configuração (.env.example)
đ Fluxo de Execução
Usuario â CLI â ProjectGenerator â SnippetManager â ActionExecutor
â
Templates + Snippets â Projeto FinalđŻ Tipos de Actions DisponĂveis
copy-file
Copia arquivo de snippet para projeto
{
type: 'copy-file',
source: 'snippets/lib/index.ts',
destination: 'src/lib/file.ts'
}inject-provider
Adiciona provider no providers.tsx automaticamente
{
type: 'inject-provider',
providerImport: `import { Provider } from 'lib';`,
providerWrapper: 'Provider'
}đ Como Adicionar Nova Biblioteca
1. Criar Config
// configs/nova-lib.config.ts
export const novaLibConfig: SnippetConfig = {
name: 'nova-lib',
dependencies: ['nova-lib'],
actions: [/* suas açÔes */]
}2. Registrar no SnippetManager
// snippet-manager.ts
this.registerSnippet('nova-lib', novaLibConfig);3. Adicionar no Prompt
// index.ts - na lista de additionalLibs
{ value: 'nova-lib', label: 'Nova Lib' }