{"_id":"@alphatechma/expo-rn-template","_rev":"4-33187412aaa9c7f41e11950cd22327f3","name":"@alphatechma/expo-rn-template","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.2":{"name":"@alphatechma/expo-rn-template","version":"1.0.2","keywords":["expo","react-native","template","starter","typescript","mobile","alphatech"],"_id":"@alphatechma/expo-rn-template@1.0.2","maintainers":[{"name":"mesquitadev","email":"mesquitadev@gmail.com"}],"homepage":"https://github.com/alphatechma/expo-rn-template#readme","bugs":{"url":"https://github.com/alphatechma/expo-rn-template/issues"},"dist":{"shasum":"e45f05c70c2c95e9062702e1493b6fe2ceb0d3bd","tarball":"https://registry.npmjs.org/@alphatechma/expo-rn-template/-/expo-rn-template-1.0.2.tgz","fileCount":34,"integrity":"sha512-ZuOV4rVGY0EIgfBUlYoApJDwYubLnXK0xtUbeHdvhVKw/EwAdiyMhRpSsUWkTVy0qwBWc0dTg0OdaiOuza4XbQ==","signatures":[{"sig":"MEQCIAG55i7ZML008Ef20+YINyQj6UMF1PatZNx4uztXP9PPAiAH6LboDtd/R7E86CXBixotEsuTbLPOXsPLJHlt7HKEcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88636},"main":"index.ts","gitHead":"2567a82ec76c831bb5e02507c9625b7b5adf6cb4","scripts":{"ios":"expo start --ios","lint":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src","start":"expo start","format":"prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"","android":"expo start --android","prepare":"husky install","release":"bash -lc '\\\n      VERSION=$1;\\\n      if [ -z \"$VERSION\" ]; then echo \"Usage: npm run release -- <version> (eg. npm run release -- 1.0.0)\"; exit 1; fi;\\\n      git tag -a v$VERSION -m \"Release v$VERSION\" && git push origin v$VERSION;\\\n      echo \"Tagged v$VERSION and pushed. GitHub Action will publish on push tag.\"\"","lint:fix":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src --fix","semantic-release":"semantic-release"},"_npmUser":{"name":"mesquitadev","email":"mesquitadev@gmail.com"},"repository":{"url":"git+https://github.com/alphatechma/expo-rn-template.git","type":"git"},"_npmVersion":"10.9.3","description":"Expo React Native template by Alphatech - base templatizada para apps Expo.","directories":{},"lint-staged":{"src/**/*.{json,css,md}":["npm run format","git add"],"src/**/*.{js,jsx,ts,tsx}":["npm run lint:fix","npm run format","git add"]},"_nodeVersion":"22.20.0","dependencies":{"yup":"^1.7.1","expo":"~54.0.31","react":"19.1.0","buffer":"^6.0.3","core-js":"^3.47.0","date-fns":"^4.1.0","react-dom":"19.1.0","react-redux":"^9.2.0","expo-updates":"^29.0.16","react-native":"0.81.5","expo-location":"^19.0.8","expo-status-bar":"~3.0.9","react-hook-form":"^7.71.1","@reduxjs/toolkit":"^2.11.2","react-native-svg":"^15.15.1","styled-components":"^6.3.8","expo-splash-screen":"^31.0.13","@expo/metro-runtime":"^6.1.2","@hookform/resolvers":"^5.2.2","@gorhom/bottom-sheet":"^5.2.8","react-native-screens":"^4.19.0","@react-navigation/stack":"^7.6.14","react-native-reanimated":"~3.7.0","@react-navigation/native":"^7.1.27","react-native-date-picker":"^5.0.13","@expo-google-fonts/roboto":"^0.4.2","@react-native-picker/picker":"^2.11.4","react-native-gesture-handler":"^2.30.0","react-native-iphone-x-helper":"^1.3.1","@react-native-community/hooks":"^100.1.0","@react-navigation/bottom-tabs":"^7.9.1","@react-navigation/native-stack":"^7.9.1","react-native-safe-area-context":"^5.6.2","@react-native-community/checkbox":"^0.5.20","react-native-responsive-fontsize":"^0.5.1","@react-native-masked-view/masked-view":"^0.3.2","@react-native-community/datetimepicker":"^8.6.0","@react-native-async-storage/async-storage":"^2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.0","eslint":"^8.52.0","prettier":"^3.0.3","typescript":"^5.3.3","lint-staged":"^15.0.0","@types/react":"^19.2.8","semantic-release":"^21.0.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^9.0.0","eslint-config-universe":"^12.0.0","@semantic-release/changelog":"^6.0.0","@semantic-release/commit-analyzer":"^10.0.0","@semantic-release/release-notes-generator":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-rn-template_1.0.2_1768598254599_0.36923953877379256","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3":{"name":"@alphatechma/expo-rn-template","version":"1.0.3","keywords":["expo","react-native","template","starter","typescript","mobile","alphatech"],"_id":"@alphatechma/expo-rn-template@1.0.3","maintainers":[{"name":"mesquitadev","email":"mesquitadev@gmail.com"}],"homepage":"https://github.com/alphatechma/expo-rn-template#readme","bugs":{"url":"https://github.com/alphatechma/expo-rn-template/issues"},"dist":{"shasum":"63cf49ef2c388237f4e5f0933b47fbf686acbe5a","tarball":"https://registry.npmjs.org/@alphatechma/expo-rn-template/-/expo-rn-template-1.0.3.tgz","fileCount":34,"integrity":"sha512-WkJL68kn+90w/3N6LKG84v4jeXEDQOdXQbeCKGAT7Thp8qmQdFY+6/540C3+g5uGXCs5h1YgghNe4nX5hiAAbw==","signatures":[{"sig":"MEUCIBpI+SBCrTRvw5bBg1S7xPIM8VFa3PNWOEUHwEXRnskTAiEAiBF7A3kMzBt1YSjl5WEXCm8yYjq2tpbtYbdsUKxD6KY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91018},"main":"index.ts","gitHead":"9ae94bf7d7f30b40ef3d3cabee53552829b8e71c","scripts":{"ios":"expo start --ios","lint":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src","start":"expo start","format":"prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"","android":"expo start --android","prepare":"husky install","release":"bash -lc '\\\n      VERSION=$1;\\\n      if [ -z \"$VERSION\" ]; then echo \"Usage: npm run release -- <version> (eg. npm run release -- 1.0.0)\"; exit 1; fi;\\\n      git tag -a v$VERSION -m \"Release v$VERSION\" && git push origin v$VERSION;\\\n      echo \"Tagged v$VERSION and pushed. GitHub Action will publish on push tag.\"\"","lint:fix":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src --fix","semantic-release":"semantic-release"},"_npmUser":{"name":"mesquitadev","email":"mesquitadev@gmail.com"},"repository":{"url":"git+https://github.com/alphatechma/expo-rn-template.git","type":"git"},"_npmVersion":"10.9.3","description":"Expo React Native template by Alphatech - base templatizada para apps Expo.","directories":{},"lint-staged":{"src/**/*.{json,css,md}":["npm run format","git add"],"src/**/*.{js,jsx,ts,tsx}":["npm run lint:fix","npm run format","git add"]},"_nodeVersion":"22.20.0","dependencies":{"yup":"^1.7.1","expo":"~54.0.31","react":"19.1.0","buffer":"^6.0.3","core-js":"^3.47.0","date-fns":"^4.1.0","react-dom":"19.1.0","react-redux":"^9.2.0","expo-updates":"^29.0.16","react-native":"0.81.5","expo-location":"^19.0.8","expo-status-bar":"~3.0.9","react-hook-form":"^7.71.1","@reduxjs/toolkit":"^2.11.2","react-native-svg":"^15.15.1","styled-components":"^6.3.8","expo-splash-screen":"^31.0.13","@expo/metro-runtime":"^6.1.2","@hookform/resolvers":"^5.2.2","@gorhom/bottom-sheet":"^5.2.8","react-native-screens":"^4.19.0","@react-navigation/stack":"^7.6.14","react-native-reanimated":"^4.2.1","@react-navigation/native":"^7.1.27","react-native-date-picker":"^5.0.13","@expo-google-fonts/roboto":"^0.4.2","@react-native-picker/picker":"^2.11.4","react-native-gesture-handler":"^2.30.0","react-native-iphone-x-helper":"^1.3.1","@react-native-community/hooks":"^100.1.0","@react-navigation/bottom-tabs":"^7.9.1","@react-navigation/native-stack":"^7.9.1","react-native-safe-area-context":"^5.6.2","@react-native-community/checkbox":"^0.5.20","react-native-responsive-fontsize":"^0.5.1","@react-native-masked-view/masked-view":"^0.3.2","@react-native-community/datetimepicker":"^8.6.0","@react-native-async-storage/async-storage":"^2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.0","eslint":"^8.52.0","prettier":"^3.0.3","typescript":"^5.3.3","lint-staged":"^15.0.0","@types/react":"^19.2.8","semantic-release":"^21.0.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^9.0.0","eslint-config-universe":"^12.0.0","@semantic-release/changelog":"^6.0.0","@semantic-release/commit-analyzer":"^10.0.0","@semantic-release/release-notes-generator":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-rn-template_1.0.3_1768691011730_0.8338180626783269","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.4":{"name":"@alphatechma/expo-rn-template","version":"1.0.4","keywords":["expo","react-native","template","starter","typescript","mobile","alphatech"],"_id":"@alphatechma/expo-rn-template@1.0.4","maintainers":[{"name":"mesquitadev","email":"mesquitadev@gmail.com"}],"homepage":"https://github.com/alphatechma/expo-rn-template#readme","bugs":{"url":"https://github.com/alphatechma/expo-rn-template/issues"},"dist":{"shasum":"e029c367ed54e4cedc5e901faf1bd01e48ecd9b6","tarball":"https://registry.npmjs.org/@alphatechma/expo-rn-template/-/expo-rn-template-1.0.4.tgz","fileCount":35,"integrity":"sha512-ZnUoHlKWZy2A6aZxNJxR/QAhW3MR81klAjwC8R3p/SVCyjjXdobCAy3BOwbhAe1KltOt7qOJtMH8AQpkKfxjVA==","signatures":[{"sig":"MEUCIFJDmoR4AmkDuKdAx4IdsmrohGU1T8esO/8ZebhUxR++AiEAiUQhyw1wFFYxRSgVUHxDWS9yQLyn7NDSVAzGsfMV/ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89283},"main":"index.ts","gitHead":"75a6fb310393b2f48e776db81444efbffc2d3b13","scripts":{"ios":"expo start --ios","lint":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src","start":"expo start","format":"prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"","android":"expo start --android","prepare":"husky install","release":"bash -lc '\\\n      VERSION=$1;\\\n      if [ -z \"$VERSION\" ]; then echo \"Usage: npm run release -- <version> (eg. npm run release -- 1.0.0)\"; exit 1; fi;\\\n      git tag -a v$VERSION -m \"Release v$VERSION\" && git push origin v$VERSION;\\\n      echo \"Tagged v$VERSION and pushed. GitHub Action will publish on push tag.\"\"","lint:fix":"eslint --config .eslintrc.js --ext .js,.jsx,.ts,.tsx src --fix","semantic-release":"semantic-release"},"_npmUser":{"name":"mesquitadev","email":"mesquitadev@gmail.com"},"repository":{"url":"git+https://github.com/alphatechma/expo-rn-template.git","type":"git"},"_npmVersion":"10.9.3","description":"Expo React Native template by Alphatech - base templatizada para apps Expo.","directories":{},"lint-staged":{"src/**/*.{json,css,md}":["npm run format","git add"],"src/**/*.{js,jsx,ts,tsx}":["npm run lint:fix","npm run format","git add"]},"_nodeVersion":"22.20.0","dependencies":{"yup":"^1.7.1","expo":"^52.0.23","react":"18.3.1","buffer":"^6.0.3","core-js":"^3.47.0","date-fns":"^4.1.0","react-dom":"19.1.0","react-redux":"^9.2.0","expo-updates":"^29.0.16","react-native":"0.76.5","expo-location":"^19.0.8","expo-status-bar":"~3.0.9","react-hook-form":"^7.71.1","@reduxjs/toolkit":"^2.11.2","react-native-svg":"^15.15.1","styled-components":"^6.3.8","expo-splash-screen":"^31.0.13","@expo/metro-runtime":"^6.1.2","@hookform/resolvers":"^5.2.2","@gorhom/bottom-sheet":"^5.2.8","react-native-screens":"~4.4.0","react-native-worklets":"0.5.1","@react-navigation/stack":"^7.6.14","react-native-reanimated":"~4.1.1","@react-navigation/native":"^7.1.27","react-native-date-picker":"^5.0.13","@expo-google-fonts/roboto":"^0.4.2","@react-native-picker/picker":"^2.11.4","react-native-gesture-handler":"^2.30.0","react-native-iphone-x-helper":"^1.3.1","@react-native-community/hooks":"^100.1.0","@react-navigation/bottom-tabs":"^7.9.1","@react-navigation/native-stack":"^7.9.1","react-native-safe-area-context":"^5.6.2","@react-native-community/checkbox":"^0.5.20","react-native-responsive-fontsize":"^0.5.1","@react-native-masked-view/masked-view":"^0.3.2","@react-native-community/datetimepicker":"^8.6.0","@react-native-async-storage/async-storage":"^2.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.0","eslint":"^8.52.0","prettier":"^3.0.3","typescript":"^5.3.3","lint-staged":"^15.0.0","@types/react":"^19.2.8","semantic-release":"^21.0.0","@semantic-release/git":"^10.0.0","@semantic-release/npm":"^9.0.0","eslint-config-universe":"^12.0.0","@semantic-release/changelog":"^6.0.0","babel-plugin-module-resolver":"^5.0.0","@semantic-release/commit-analyzer":"^10.0.0","@semantic-release/release-notes-generator":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-rn-template_1.0.4_1768845491063_0.8093209422198262","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2026-01-16T21:17:34.489Z","modified":"2026-09-10T14:53:03.495Z","1.0.2":"2026-01-16T21:17:34.757Z","1.0.3":"2026-01-17T23:03:31.885Z","1.0.4":"2026-01-19T17:58:11.213Z"},"bugs":{"url":"https://github.com/alphatechma/expo-rn-template/issues"},"homepage":"https://github.com/alphatechma/expo-rn-template#readme","keywords":["expo","react-native","template","starter","typescript","mobile","alphatech"],"repository":{"url":"git+https://github.com/alphatechma/expo-rn-template.git","type":"git"},"description":"Expo React Native template by Alphatech - base templatizada para apps Expo.","maintainers":[{"name":"mesquitadev","email":"mesquitadev@gmail.com"}],"readme":"# RNTemplate — Template Expo + React Native\n\nUm template mínimo para iniciar apps Expo + React Native com convenções já preparadas:\n- TypeScript configurado (via `tsconfig.json`)\n- Navegação (React Navigation) com Stack + Bottom Tabs\n- Estrutura de pastas (páginas, features, estilos, routes, store)\n- ESLint + Prettier configurados (Husky + lint-staged incluídos para pre-commit)\n\nEste README explica como usar e personalizar o template rapidamente.\n\n---\n\n## Sumário\n- Quickstart\n- Scripts úteis\n- Lint / Prettier / Husky\n- Estrutura do projeto e como adicionar páginas/rotas\n- Store / API (RTK Query)\n- Tipos TypeScript e módulos sem tipos\n- Troubleshooting comuns\n- Próximos passos e personalizações sugeridas\n- Publicação no npm (via GitHub Actions)\n\n---\n\n## Quickstart\n\n1) Instale dependências\n\n```bash\nnpm install --legacy-peer-deps\n```\n\nSe você usa `yarn` ou `pnpm` adapte o comando conforme a sua preferência.\n\n2) Instale os hooks do Husky (preparar git hooks)\n\n```bash\nnpm run prepare\n# ou (manual)\nnpx husky install\n```\n\n3) Rodar o projeto (Expo)\n\n```bash\nnpm run start\n# abrir no iOS / Android / Web\nnpm run ios\nnpm run android\nnpm run web\n```\n\n4) Validar TypeScript e formatar código\n\n```bash\n# checar tipos (sem emitir build)\nnpx tsc --noEmit\n\n# formatar código (Prettier)\nnpm run format\n```\n\n---\n\n## Scripts importantes (package.json)\n- `npm run start` — inicia o Metro/Expo\n- `npm run ios` / `npm run android` / `npm run web` — abre para a plataforma correspondente\n- `npm run lint` — executa ESLint (configável)\n- `npm run lint:fix` — aplica correções automáticas onde possível\n- `npm run format` — executa Prettier\n- `npm run prepare` — instala os hooks do Husky\n\n---\n\n## Lint / Prettier / Husky\n\nO template já contém configuração mínima:\n- `.eslintrc.js` com `extends: ['universe/native']` (sua preferência de config)\n- `eslint.config.cjs` neutralizado para evitar conflito com flat config\n- `.prettierrc` e `.prettierignore` prontos\n- `husky` + `lint-staged` configurados: pre-commit executa `lint-staged`\n\nSe quiser executar os checks localmente:\n\n```bash\n# listar problemas de lint\nnpm run lint\n\n# tentar corrigir automaticamente\nnpm run lint:fix\n```\n\nSe os hooks não estiverem ativos (por exemplo, em CI ou após clonar):\n\n```bash\nnpm run prepare\n```\n\nNota: em ambientes com problemas de peers ou tokens de npm você pode precisar rodar:\n\n```bash\nnpm config delete //registry.npmjs.org/:_authToken\nnpm login\n# depois\nnpm install --legacy-peer-deps\n```\n\n---\n\n## Estrutura do projeto (visão rápida)\n\nPrincipais pastas:\n- `src/pages/` — telas (ex.: `Home`, `Login`, etc). O template já tem placeholders.\n- `src/routes/` — onde o Router/Navigation vive (`src/routes/index.tsx` já transformado em template)\n- `src/features/` — features domain-driven (ex.: `account`, `api` — RTK Query slices)\n- `src/store/` — configuração do Redux / store\n- `src/styles/` — theme, styled.d.ts e tokens\n- `src/hooks/` — providers / wrappers do app (ThemeProvider, NavigationContainer)\n- `src/@types/` — declarações de módulos e tipos globais\n\nComo adicionar uma tela simples e conectá-la nas rotas:\n\n1. Criar arquivo `src/pages/MinhaPagina/index.tsx` com um componente React Native.\n2. Importar a tela em `src/routes/index.tsx` (ou mover o placeholder para o arquivo novo).\n3. Adicionar um `Tab.Screen` ou `Stack.Screen` conforme desejar.\n\nExemplo rápido (conceptual):\n\n```tsx\n// src/pages/MinhaPagina/index.tsx\nimport React from 'react';\nimport { View, Text } from 'react-native';\nexport default function MinhaPagina() {\n  return (\n    <View><Text>Minha página</Text></View>\n  );\n}\n```\n\nE em `src/routes/index.tsx` adicione a rota ao `Tab.Navigator`.\n\n---\n\n## Store e API (RTK Query)\n\nO template inclui um `apiSlice` pronto para injeção de endpoints e um `setupStore` em `src/store/store.ts`.\n- `src/features/api/apiSlice.ts` — base para RTK Query (configure `baseUrl` e o token se necessário)\n- Para criar endpoints de exemplo, veja o `src/features/account/exampleSlice.ts` já incluído como template CRUD usando `apiSlice.injectEndpoints`.\n\nPara usar o store em sua aplicação, configure o provider no `App.tsx` (ou em `src/hooks`) e passe o `store`:\n\n```tsx\nimport { Provider } from 'react-redux';\nimport { setupStore } from './src/store/store';\nconst store = setupStore();\n\n// ... wrap your App with <Provider store={store}> ...\n```\n\n---\n\n## Tipos TypeScript e módulos sem tipos\n\nAlguns pacotes não fornecem typings. Para evitar erros do TypeScript o template inclui `src/@types/index.d.ts` com declarações genéricas para imagens e alguns pacotes. Recomenda-se instalar tipos oficiais quando existirem:\n\n```bash\nnpm i -D @types/react @types/react-native\n```\n\nSe você adicionar uma dependência que não tem tipos, adicione uma declaração minimal em `src/@types/index.d.ts` como:\n\n```ts\ndeclare module 'nome-do-pacote';\n```\n\n---\n\n## Troubleshooting comum\n\n- Erro ao instalar pacotes: `ERESOLVE` ou conflito de peer\n  - Tente: `npm install --legacy-peer-deps`\n- Erro `Access token expired or revoked` no `npm install`\n  - Refaça login: `npm logout` e `npm login` ou delete o token local:\n\n```bash\nnpm config delete //registry.npmjs.org/:_authToken\nnpm login\n```\n\n- Erro do TypeScript sobre `.tsx` / `--jsx is not set`\n  - Solução: `tsconfig.json` já tem `\"jsx\": \"react-jsx\"` configurado. Se estiver faltando, adicione.\n\n- Regras do ESLint/Flat config conflitando\n  - O template inclui `.eslintrc.js` (legacy) e `eslint.config.cjs` neutralizado. Se preferir usar a config flat, remova `.eslintrc.js` e mantenha `eslint.config.cjs`.\n\n---\n\n## Publicação no npm (via GitHub Actions)\n\nEste template já tem duas opções para publicar no npm a partir do repositório:\n\n1) Publicação por tag (manual)\n- Criar uma tag com formato `vX.Y.Z` e dar push. Exemplo local:\n\n```bash\nnpm run release -- 1.0.2\n# isso executa: git tag -a v1.0.2 -m \"Release v1.0.2\" && git push origin v1.0.2\n```\n\n- O workflow `.github/workflows/publish.yml` será disparado no push da tag e executará (instalação, lint, tsc, build, publish).\n\n2) Publicação automática com `semantic-release` (recomendada para releases automáticas)\n- Push para a branch `main` acionará `.github/workflows/release.yml` que executa `semantic-release`.\n- `semantic-release` analisa commits (conventional commits) e gera a nova versão, atualiza `CHANGELOG.md`, faz `npm publish` e cria uma release no GitHub.\n\n### Requisitos / configurações\n- Adicione o secret `NPM_TOKEN` no repositório (Settings → Secrets and variables → Actions)\n  - Nome: `NPM_TOKEN`\n  - Valor: token de automação do npm (crie em https://www.npmjs.com/settings/tokens)\n- `GITHUB_TOKEN` é provido automaticamente pelo GitHub Actions; não é necessário configurá-lo manualmente.\n\n### Qual usar?\n- Se você prefere controlar as versões manualmente (tagging), use a opção (1).\n- Se quer CI/CD para releases automáticas com base em commits (convencional), use (2) e siga o padrão `conventional commits` (feat, fix, perf, chore, etc.).\n\n---\n\n## Próximos passos e personalizações sugeridas\n\n- Defina `baseUrl` da API em `src/features/api/apiSlice.ts` e configure as rotas reais.\n- Substitua placeholders em `src/pages/*` por componentes reais e desça a árvore.\n- Adicione/atualize tokens e temas em `src/styles/theme.ts`.\n- Ajuste regras do ESLint conforme a sua equipe (ex.: permitir `any` em alguns casos, strenghten rules, etc).\n- Considere adicionar GitHub Actions para rodar `npm run lint` e `npx tsc --noEmit` no CI.\n\n---\n\n## Arquivos importantes para revisão\n- `package.json` — scripts, dependências e hooks\n- `tsconfig.json` — paths e jsx\n- `src/routes/index.tsx` — ponto central de rotas (já convertido para template)\n- `src/features/api/apiSlice.ts` — base para chamadas HTTP (RTK Query)\n- `src/store/store.ts` — setup do Redux\n- `src/@types/index.d.ts` — declare módulos sem tipos\n\n---\n\n## Licença\nColoque aqui a licença do seu template (ex.: MIT) se for público.\n\n---\n\nSe quiser eu:\n- 1) adapto esse README para uma versão curta em inglês;\n- 2) gero instruções de CI (GitHub Actions) que rodem `npm install`, `npm run lint` e `npx tsc --noEmit`;\n- 3) adiciono um script `create-app` simples que copia o template e roda um assistant de setup.\n\nDiga qual das opções acima prefere que eu crie em seguida.\n\n### Nota sobre lockfile (recomendado)\n\nPara builds reprodutíveis e para que o workflow `npm ci` funcione sem problemas, é recomendável commitar o `package-lock.json` no repositório. Porém, alguns ambientes (ou templates) não incluem o lockfile — por isso os workflows desse template utilizam `npm install --legacy-peer-deps --no-audit --no-fund` quando necessário, que é mais tolerante a ausência do lockfile e a conflitos de peer.\n\nSe quiser garantir installs idempotentes em CI, gere o lockfile localmente e commite:\n\n```bash\nnpm install --legacy-peer-deps\ngit add package-lock.json\ngit commit -m \"chore: add package-lock.json\"\n```\n","readmeFilename":"README.md"}