diff --git a/website/docs/quickstart.md b/website/docs/quickstart.md
new file mode 100644
index 0000000..b2b37f2
--- /dev/null
+++ b/website/docs/quickstart.md
@@ -0,0 +1,103 @@
+---
+sidebar_position: 3
+title: Início Rápido
+---
+
+# Início Rápido (Quickstart)
+
+Aprenda a instalar, executar sua primeira varredura e proteger seu repositório Git com o **`envguard`** em menos de 3 minutos.
+
+---
+
+## 1. Instalação Instantânea
+
+Se você possui o Go instalado (1.22+):
+
+```bash
+go install github.com/joaooncode/envguard/cmd/envguard@latest
+```
+
+Ou no Windows com PowerShell:
+
+```powershell
+# Verifique a versão instalada
+envguard version
+```
+
+> Para binários pré-compilados do Linux, macOS e Windows sem Go, consulte o [Guia de Instalação](./installation.md).
+
+---
+
+## 2. Execute sua Primeira Varredura
+
+Navegue até a raiz do seu projeto com Git e execute o comando `scan`:
+
+```bash
+envguard scan
+```
+
+O `envguard` varrerá todos os arquivos e diretórios recursivamente, identificando arquivos de ambiente e cruzando o status com o Git e o `.gitignore`.
+
+### Exemplo de Saída:
+
+```text
+[envguard] Iniciando varredura no repositório...
+
+✗ .env CRITICAL Arquivo rastreado no Git (commitado)
+⚠ .env.production WARNING Não ignorado no .gitignore
+✓ .env.example INFO Template padrão identificado
+
+Status: 2 problema(s) encontrado(s).
+```
+
+---
+
+## 3. Gerar Arquivo de Configuração
+
+Inicialize um arquivo `.envguard.yaml` para customizar permissões e regras do projeto:
+
+```bash
+envguard init
+```
+
+Isso gerará o arquivo de configuração `.envguard.yaml` na raiz do repositório:
+
+```yaml
+version: 1
+patterns:
+ - '.env*'
+ignore:
+ - '.env.example'
+ - '.env.template'
+fail_on: 'warning' # Interrompe a execução com warning ou critical
+```
+
+---
+
+## 4. Corrigir Problemas Automaticamente
+
+Se o `envguard` detectar arquivos `.env` soltos que precisam ser adicionados ao `.gitignore` ou removidos do tracking do Git:
+
+```bash
+envguard fix
+```
+
+---
+
+## 5. Instalar Git Hook Automático (Pre-Commit)
+
+Garanta que nenhum arquivo de ambiente seja commitado por acidente instalando o hook nativo:
+
+```bash
+envguard hook install
+```
+
+Pronto! Toda vez que alguém executar `git commit`, o `envguard check` será executado automaticamente antes do commit ser gravado.
+
+---
+
+## Próximos Passos
+
+- Explore todos os [Comandos da CLI](./commands/scan.md).
+- Entenda a classificação dos [Níveis de Severidade](./severity-levels.md).
+- Configure a integração com [GitHub Actions e CI/CD](./cicd-integration.md).
diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts
index 882ff27..1e1ca0a 100644
--- a/website/docusaurus.config.ts
+++ b/website/docusaurus.config.ts
@@ -44,9 +44,27 @@ const config: Config = {
],
],
+ themes: [
+ [
+ require.resolve('@easyops-cn/docusaurus-search-local'),
+ {
+ hashed: true,
+ language: ['en'],
+ indexDocs: true,
+ indexBlog: true,
+ indexPages: true,
+ docsRouteBasePath: '/docs',
+ highlightSearchTermsOnTargetPage: true,
+ searchResultLimits: 8,
+ searchResultContextMaxLength: 60,
+ },
+ ],
+ ],
+
themeConfig: {
image: 'img/docusaurus-social-card.jpg',
colorMode: {
+ defaultMode: 'dark',
respectPrefersColorScheme: true,
},
navbar: {
@@ -58,11 +76,12 @@ const config: Config = {
items: [
{
type: 'docSidebar',
- sidebarId: 'tutorialSidebar',
+ sidebarId: 'docsSidebar',
position: 'left',
label: 'Documentação',
},
- { to: '/blog', label: 'Blog / Notas de Versão', position: 'left' },
+ { to: '/docs/quickstart', label: 'Início Rápido', position: 'left' },
+ { to: '/blog', label: 'Blog & Versões', position: 'left' },
{
href: 'https://github.com/joaooncode/envguard',
label: 'GitHub',
@@ -74,29 +93,29 @@ const config: Config = {
style: 'dark',
links: [
{
- title: 'Documentação',
+ title: 'Começando',
items: [
{ label: 'Visão Geral', to: '/docs/intro' },
{ label: 'Instalação', to: '/docs/installation' },
- { label: 'Comandos CLI', to: '/docs/commands/scan' },
- { label: 'Níveis de Severidade', to: '/docs/severity-levels' },
+ { label: 'Início Rápido', to: '/docs/quickstart' },
],
},
{
- title: 'Integrações',
+ title: 'Comandos & Regras',
items: [
- { label: 'CI/CD & Git Hooks', to: '/docs/cicd-integration' },
- { label: 'Guia de Contribuição', to: '/docs/contributing' },
+ { label: 'Varredura (scan)', to: '/docs/commands/scan' },
+ { label: 'Verificação (check)', to: '/docs/commands/check' },
+ { label: 'Níveis de Severidade', to: '/docs/severity-levels' },
+ { label: 'Configuração (.envguard.yaml)', to: '/docs/configuration' },
],
},
{
- title: 'Comunidade',
+ title: 'Automação & Comunidade',
items: [
- { label: 'Repositório GitHub', href: 'https://github.com/joaooncode/envguard' },
- {
- label: 'Reportar Problema (Issue)',
- href: 'https://github.com/joaooncode/envguard/issues',
- },
+ { label: 'CI/CD & Git Hooks', to: '/docs/cicd-integration' },
+ { label: 'Guia de Contribuição', to: '/docs/contributing' },
+ { label: 'GitHub Repository', href: 'https://github.com/joaooncode/envguard' },
+ { label: 'Reportar Problema', href: 'https://github.com/joaooncode/envguard/issues' },
],
},
],
diff --git a/website/package-lock.json b/website/package-lock.json
index 6d9fc6e..f6d10d6 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -11,6 +11,7 @@
"@docusaurus/core": "3.10.2",
"@docusaurus/faster": "3.10.2",
"@docusaurus/preset-classic": "3.10.2",
+ "@easyops-cn/docusaurus-search-local": "^0.55.3",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
@@ -4148,6 +4149,125 @@
"node": ">=20.0"
}
},
+ "node_modules/@easyops-cn/autocomplete.js": {
+ "version": "0.38.1",
+ "resolved": "https://registry.npmjs.org/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz",
+ "integrity": "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "immediate": "^3.2.3"
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local": {
+ "version": "0.55.3",
+ "resolved": "https://registry.npmjs.org/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.55.3.tgz",
+ "integrity": "sha512-PlMKmxuonvZ1C+/zJS1hJaF1xaxD1TsUvOMzpP6DdQMtZqmTaYjcLGM12ePzl0m1rp3AgfTBeDbFNHQhwnH/dA==",
+ "license": "MIT",
+ "dependencies": {
+ "@docusaurus/plugin-content-docs": "^2 || ^3",
+ "@docusaurus/theme-translations": "^2 || ^3",
+ "@docusaurus/utils": "^2 || ^3",
+ "@docusaurus/utils-common": "^2 || ^3",
+ "@docusaurus/utils-validation": "^2 || ^3",
+ "@easyops-cn/autocomplete.js": "^0.38.1",
+ "@node-rs/jieba": "^1.6.0",
+ "cheerio": "^1.0.0",
+ "clsx": "^2.1.1",
+ "comlink": "^4.4.2",
+ "debug": "^4.2.0",
+ "fs-extra": "^10.0.0",
+ "klaw-sync": "^6.0.0",
+ "lunr": "^2.3.9",
+ "lunr-languages": "^1.4.0",
+ "mark.js": "^8.11.1",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "@docusaurus/theme-common": "^2 || ^3",
+ "open-ask-ai": "^0.7.3",
+ "react": "^16.14.0 || ^17 || ^18 || ^19",
+ "react-dom": "^16.14.0 || 17 || ^18 || ^19"
+ },
+ "peerDependenciesMeta": {
+ "open-ask-ai": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local/node_modules/cheerio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz",
+ "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==",
+ "license": "MIT",
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "encoding-sniffer": "^0.2.1",
+ "htmlparser2": "^10.1.0",
+ "parse5": "^7.3.0",
+ "parse5-htmlparser2-tree-adapter": "^7.1.0",
+ "parse5-parser-stream": "^7.1.2",
+ "undici": "^7.19.0",
+ "whatwg-mimetype": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=20.18.1"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local/node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local/node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@easyops-cn/docusaurus-search-local/node_modules/htmlparser2": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
+ "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "entities": "^7.0.1"
+ }
+ },
"node_modules/@emnapi/core": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
@@ -4825,6 +4945,283 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/@node-rs/jieba": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.4.tgz",
+ "integrity": "sha512-GvDgi8MnBiyWd6tksojej8anIx18244NmIOc1ovEw8WKNUejcccLfyu8vj66LWSuoZuKILVtNsOy4jvg3aoxIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "optionalDependencies": {
+ "@node-rs/jieba-android-arm-eabi": "1.10.4",
+ "@node-rs/jieba-android-arm64": "1.10.4",
+ "@node-rs/jieba-darwin-arm64": "1.10.4",
+ "@node-rs/jieba-darwin-x64": "1.10.4",
+ "@node-rs/jieba-freebsd-x64": "1.10.4",
+ "@node-rs/jieba-linux-arm-gnueabihf": "1.10.4",
+ "@node-rs/jieba-linux-arm64-gnu": "1.10.4",
+ "@node-rs/jieba-linux-arm64-musl": "1.10.4",
+ "@node-rs/jieba-linux-x64-gnu": "1.10.4",
+ "@node-rs/jieba-linux-x64-musl": "1.10.4",
+ "@node-rs/jieba-wasm32-wasi": "1.10.4",
+ "@node-rs/jieba-win32-arm64-msvc": "1.10.4",
+ "@node-rs/jieba-win32-ia32-msvc": "1.10.4",
+ "@node-rs/jieba-win32-x64-msvc": "1.10.4"
+ }
+ },
+ "node_modules/@node-rs/jieba-android-arm-eabi": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.10.4.tgz",
+ "integrity": "sha512-MhyvW5N3Fwcp385d0rxbCWH42kqDBatQTyP8XbnYbju2+0BO/eTeCCLYj7Agws4pwxn2LtdldXRSKavT7WdzNA==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-android-arm64": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.10.4.tgz",
+ "integrity": "sha512-XyDwq5+rQ+Tk55A+FGi6PtJbzf974oqnpyCcCPzwU3QVXJCa2Rr4Lci+fx8oOpU4plT3GuD+chXMYLsXipMgJA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-darwin-arm64": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.4.tgz",
+ "integrity": "sha512-G++RYEJ2jo0rxF9626KUy90wp06TRUjAsvY/BrIzEOX/ingQYV/HjwQzNPRR1P1o32a6/U8RGo7zEBhfdybL6w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-darwin-x64": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.10.4.tgz",
+ "integrity": "sha512-MmDNeOb2TXIZCPyWCi2upQnZpPjAxw5ZGEj6R8kNsPXVFALHIKMa6ZZ15LCOkSTsKXVC17j2t4h+hSuyYb6qfQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-freebsd-x64": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.10.4.tgz",
+ "integrity": "sha512-/x7aVQ8nqUWhpXU92RZqd333cq639i/olNpd9Z5hdlyyV5/B65LLy+Je2B2bfs62PVVm5QXRpeBcZqaHelp/bg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm-gnueabihf": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.10.4.tgz",
+ "integrity": "sha512-crd2M35oJBRLkoESs0O6QO3BBbhpv+tqXuKsqhIG94B1d02RVxtRIvSDwO33QurxqSdvN9IeSnVpHbDGkuXm3g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm64-gnu": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.10.4.tgz",
+ "integrity": "sha512-omIzNX1psUzPcsdnUhGU6oHeOaTCuCjUgOA/v/DGkvWC1jLcnfXe4vdYbtXMh4XOCuIgS1UCcvZEc8vQLXFbXQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-arm64-musl": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.10.4.tgz",
+ "integrity": "sha512-Y/tiJ1+HeS5nnmLbZOE+66LbsPOHZ/PUckAYVeLlQfpygLEpLYdlh0aPpS5uiaWMjAXYZYdFkpZHhxDmSLpwpw==",
+ "cpu": [
+ "arm64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-x64-gnu": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.10.4.tgz",
+ "integrity": "sha512-WZO8ykRJpWGE9MHuZpy1lu3nJluPoeB+fIJJn5CWZ9YTVhNDWoCF4i/7nxz1ntulINYGQ8VVuCU9LD86Mek97g==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "glibc"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-linux-x64-musl": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.10.4.tgz",
+ "integrity": "sha512-uBBD4S1rGKcgCyAk6VCKatEVQb6EDD5I40v/DxODi5CuZVCANi9m5oee/MQbAoaX7RydA2f0OSCE9/tcwXEwUg==",
+ "cpu": [
+ "x64"
+ ],
+ "libc": [
+ "musl"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-wasm32-wasi": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.10.4.tgz",
+ "integrity": "sha512-Y2umiKHjuIJy0uulNDz9SDYHdfq5Hmy7jY5nORO99B4pySKkcrMjpeVrmWXJLIsEKLJwcCXHxz8tjwU5/uhz0A==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@node-rs/jieba-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-arm64-msvc": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.10.4.tgz",
+ "integrity": "sha512-nwMtViFm4hjqhz1it/juQnxpXgqlGltCuWJ02bw70YUDMDlbyTy3grCJPpQQpueeETcALUnTxda8pZuVrLRcBA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-ia32-msvc": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.10.4.tgz",
+ "integrity": "sha512-DCAvLx7Z+W4z5oKS+7vUowAJr0uw9JBw8x1Y23Xs/xMA4Em+OOSiaF5/tCJqZUCJ8uC4QeImmgDFiBqGNwxlyA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@node-rs/jieba-win32-x64-msvc": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.10.4.tgz",
+ "integrity": "sha512-+sqemSfS1jjb+Tt7InNbNzrRh1Ua3vProVvC4BZRPg010/leCbGFFiQHpzcPRfpxAXZrzG5Y0YBTsPzN/I4yHQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7731,6 +8128,12 @@
"node": ">=10"
}
},
+ "node_modules/comlink": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz",
+ "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==",
+ "license": "Apache-2.0"
+ },
"node_modules/comma-separated-tokens": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
@@ -8950,6 +9353,31 @@
"node": ">= 0.8"
}
},
+ "node_modules/encoding-sniffer": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
+ "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "whatwg-encoding": "^3.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+ }
+ },
+ "node_modules/encoding-sniffer/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.24.5",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz",
@@ -10541,6 +10969,12 @@
"node": ">=16.x"
}
},
+ "node_modules/immediate": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
+ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==",
+ "license": "MIT"
+ },
"node_modules/import-fresh": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
@@ -11137,6 +11571,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/klaw-sync": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.11"
+ }
+ },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -11564,6 +12007,24 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "license": "MIT"
+ },
+ "node_modules/lunr-languages": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.21.0.tgz",
+ "integrity": "sha512-Hj0VwJP1FGwZzVMMZdDtWY2GB2VVKtvVElYtVajzCZCDr2RTucyLpPibrOPGgTlcq2ENQy2gYLtPnzyFu9jZCg==",
+ "license": "MPL-1.1"
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "license": "MIT"
+ },
"node_modules/markdown-extensions": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
@@ -14613,6 +15074,18 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/parse5-parser-stream": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+ "license": "MIT",
+ "dependencies": {
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/parse5/node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -18451,6 +18924,15 @@
"node": ">=14.17"
}
},
+ "node_modules/undici": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz",
+ "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
"node_modules/undici-types": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
@@ -19311,6 +19793,40 @@
"node": ">=0.8.0"
}
},
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/website/package.json b/website/package.json
index 4e43af3..f8770cd 100644
--- a/website/package.json
+++ b/website/package.json
@@ -18,6 +18,7 @@
"@docusaurus/core": "3.10.2",
"@docusaurus/faster": "3.10.2",
"@docusaurus/preset-classic": "3.10.2",
+ "@easyops-cn/docusaurus-search-local": "^0.55.3",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
diff --git a/website/sidebars.ts b/website/sidebars.ts
index 68d3ae9..6e715a9 100644
--- a/website/sidebars.ts
+++ b/website/sidebars.ts
@@ -1,33 +1,51 @@
import type { SidebarsConfig } from '@docusaurus/plugin-content-docs';
-// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
-
-/**
- * Creating a sidebar enables you to:
- - create an ordered group of docs
- - render a sidebar for each doc of that group
- - provide next/previous navigation
-
- The sidebars can be generated from the filesystem, or explicitly defined here.
-
- Create as many sidebars as you want.
- */
const sidebars: SidebarsConfig = {
- // By default, Docusaurus generates a sidebar from the docs folder structure
- tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
-
- // But you can create a sidebar manually
- /*
- tutorialSidebar: [
- 'intro',
- 'hello',
+ docsSidebar: [
+ {
+ type: 'category',
+ label: '🚀 Primeiros Passos',
+ collapsed: false,
+ items: ['intro', 'installation', 'quickstart'],
+ },
+ {
+ type: 'category',
+ label: '🛡️ Conceitos & Segurança',
+ collapsed: false,
+ items: ['severity-levels'],
+ },
+ {
+ type: 'category',
+ label: '💻 Comandos da CLI',
+ collapsed: false,
+ items: [
+ 'commands/scan',
+ 'commands/check',
+ 'commands/init',
+ 'commands/fix',
+ 'commands/hook',
+ 'commands/version',
+ ],
+ },
+ {
+ type: 'category',
+ label: '⚙️ Configuração',
+ collapsed: false,
+ items: ['configuration'],
+ },
+ {
+ type: 'category',
+ label: '🔄 Automação & CI/CD',
+ collapsed: false,
+ items: ['cicd-integration'],
+ },
{
type: 'category',
- label: 'Tutorial',
- items: ['tutorial-basics/create-a-document'],
+ label: '🤝 Comunidade',
+ collapsed: true,
+ items: ['contributing'],
},
],
- */
};
export default sidebars;
diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx
index 9c5189a..f4415e9 100644
--- a/website/src/components/HomepageFeatures/index.tsx
+++ b/website/src/components/HomepageFeatures/index.tsx
@@ -4,46 +4,95 @@ import Heading from '@theme/Heading';
import styles from './styles.module.css';
type FeatureItem = {
+ icon: string;
+ badge?: string;
title: string;
description: ReactNode;
};
const FeatureList: FeatureItem[] = [
{
+ icon: '🛡️',
+ badge: 'Detecção Ativa',
title: 'Git-Aware & Inteligente',
description: (
<>
- O envguard analisa a árvore do Git e identifica se arquivos .env{' '}
- estão rastreados, preparados para commit (staged), ignorados ou desprotegidos.
+ O envguard analisa a árvore de trabalho do Git e diferencia se arquivos{' '}
+ .env estão comitados (tracked), preparados (staged) ou
+ desprotegidos pelo .gitignore.
>
),
},
{
- title: 'Rápido & 100% Local',
+ icon: '⚡',
+ badge: 'Zero Telemetria',
+ title: 'Ultrarrápido & 100% Local',
description: (
<>
- Construído em Go nativo, roda instantaneamente e 100% offline. Nunca envia dados para a
- internet e nunca expõe valores de variáveis.
+ Construído em Go nativo, executa instantaneamente e 100% offline. Nunca envia dados para
+ servidores remotos e jamais expõe o conteúdo dos seus segredos.
>
),
},
{
+ icon: '🤖',
+ badge: 'Pre-Commit & CI',
title: 'Pronto para CI/CD & Hooks',
description: (
<>
- Códigos de saída determinísticos e saída estruturada em JSON (--format json)
- para integração fácil com GitHub Actions e pre-commit hooks.
+ Instale pre-commit hooks nativos com envguard hook install e utilize saídas
+ JSON determinísticas para automação no GitHub Actions e pipelines.
+ >
+ ),
+ },
+ {
+ icon: '🛠️',
+ badge: 'Autocorreção',
+ title: 'Remediação com 1 Comando',
+ description: (
+ <>
+ Com o comando envguard fix, você remove arquivos sensíveis do cache do Git e
+ adiciona as regras necessárias no .gitignore automaticamente.
+ >
+ ),
+ },
+ {
+ icon: '📊',
+ badge: 'Diagnóstico Claro',
+ title: 'Níveis de Severidade',
+ description: (
+ <>
+ Classificação precisa dos alertas em CRITICAL, WARNING e{' '}
+ INFO, com suporte a flags como --fail-on para bloquear builds
+ arriscados.
+ >
+ ),
+ },
+ {
+ icon: '⚙️',
+ badge: 'Flexível',
+ title: 'Configuração Simplificada',
+ description: (
+ <>
+ Personalize padrões de busca, exceções de templates e regras customizadas através do arquivo
+ central .envguard.yaml gerado via envguard init.
>
),
},
];
-function Feature({ title, description }: FeatureItem) {
+function Feature({ icon, badge, title, description }: FeatureItem) {
return (
-
{description}
+{description}
+ Simplicidade, velocidade e segurança máxima sem atrapalhar a produtividade do time de + engenharia. +
+{siteConfig.tagline}
+.env e credenciais de ambiente vazem ou cheguem ao
+ histórico de versionamento do Git.
+
+
+