diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 0000000..9cdb4a6
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,64 @@
+name: Deploy GitHub Pages
+
+on:
+ push:
+ paths:
+ - 'README.md'
+ - 'docs/**'
+ pull_request:
+ paths:
+ - 'README.md'
+ - 'docs/**'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages-${{ github.ref }}"
+ cancel-in-progress: false
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Setup Ruby
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: '3.1'
+ bundler-cache: true
+
+ - name: Setup Pages
+ id: pages
+ uses: actions/configure-pages@v5
+
+ - name: Build with Jekyll
+ run: |
+ cd docs
+ bundle install
+ bundle exec jekyll build -d ../_site
+ env:
+ JEKYLL_ENV: production
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: _site
+
+ deploy:
+ environment:
+ name: ${{ github.ref == 'refs/heads/main' && 'github-pages' || 'github-pages-preview' }}
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ if: github.event_name != 'pull_request' || github.event.action != 'closed'
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
+
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 0000000..311fe9c
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,6 @@
+source "https://rubygems.org"
+
+gem "jekyll", "~> 4.3"
+gem "jekyll-theme-minimal"
+gem "jekyll-relative-links"
+
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..2985aa7
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,52 @@
+# Blitz Documentation
+
+This directory contains the documentation for Blitz, which is automatically built and deployed to GitHub Pages.
+
+## Local Development
+
+To preview the documentation locally using Jekyll:
+
+```bash
+cd docs
+bundle install
+bundle exec jekyll serve
+```
+
+Then open [http://localhost:4000](http://localhost:4000) in your browser.
+
+## GitHub Pages Setup
+
+The documentation is automatically deployed to GitHub Pages via the `.github/workflows/pages.yml` workflow.
+
+To enable GitHub Pages:
+
+1. Go to your repository settings on GitHub
+2. Navigate to "Pages" in the left sidebar
+3. Under "Source", select "GitHub Actions"
+4. The site will be automatically built and deployed when changes are pushed to the `main` branch
+
+The production site will be available at: `https://observiq.github.io/blitz/`
+
+## Testing on Branches
+
+You can test documentation changes on branches before merging to `main`:
+
+### Pull Request Previews
+
+When you open a pull request that modifies documentation files:
+- The workflow automatically builds and deploys a preview
+- A preview URL will be posted as a comment on the PR
+- The preview is available for review before merging
+
+### Branch Testing
+
+When you push changes to any branch (not just `main`):
+- The workflow builds the site
+- For non-main branches, it deploys to a preview environment
+- You can view the preview URL in the workflow run summary
+
+This allows you to:
+- Test documentation changes in isolation
+- Share preview links with reviewers
+- Verify links and formatting before merging
+
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..6d2452b
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,22 @@
+title: Blitz Documentation
+description: A load generation tool for Bindplane managed collectors
+theme: jekyll-theme-minimal
+plugins:
+ - jekyll-relative-links
+relative_links:
+ enabled: true
+ collections: true
+include:
+ - generator
+ - output
+ - release
+ - man
+exclude:
+ - Gemfile
+ - Gemfile.lock
+ - node_modules
+ - vendor/bundle/
+ - vendor/cache/
+ - vendor/gems/
+ - vendor/ruby/
+
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..3fef624
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,180 @@
+---
+layout: default
+---
+
+
+

+
+
+# Blitz
+
+A load generation tool for Bindplane managed collectors.
+
+## Documentation
+
+- [Configuration Guide](configuration.md) - Complete guide to configuring blitz with YAML files, environment variables, and command-line flags
+- [Architecture Overview](architecture.md) - Detailed explanation of the application architecture, components, and data flow
+- [Metrics Documentation](metrics.md) - Comprehensive guide to monitoring and metrics exposed by blitz
+- [Shell Completion](shell-completion.md) - Guide to installing and using shell autocompletion for bash, zsh, fish, and PowerShell
+- [Development Guide](development.md) - Guidelines for contributing to the project
+- [Contributing Guidelines](CONTRIBUTING.md) - How to contribute to the project
+
+## Components
+
+Blitz consists of generators that create log data and outputs that send data to destinations.
+
+### Generators
+
+- **[nop](generator/nop.md)** - No operation generator for testing infrastructure without generating data
+- **[json](generator/json.md)** - Generates structured JSON logs
+- **[winevt](generator/winevt.md)** - Generates Windows Event logs in unparsed XML format
+- **[palo-alto](generator/palo-alto.md)** - Generates realistic Palo Alto firewall syslog entries
+- **[apache-common](generator/apache-common.md)** - Generates Apache Common Log Format (CLF) entries
+- **[apache-combined](generator/apache-combined.md)** - Generates Apache Combined Log Format entries with referer and user-agent
+- **[apache-error](generator/apache-error.md)** - Generates Apache Error Log Format entries for server diagnostics
+- **[nginx](generator/nginx.md)** - Generates NGINX Combined Log Format entries matching NGINX's default log format
+- **[postgres](generator/postgres.md)** - Generates PostgreSQL log format entries including query logs, connections, and database events
+
+### Outputs
+
+- **[nop](output/nop.md)** - No operation output for testing infrastructure without sending data
+- **[stdout](output/stdout.md)** - Writes logs to standard output for debugging and testing
+- **[tcp](output/tcp.md)** - Sends logs over TCP connections with optional TLS encryption
+- **[udp](output/udp.md)** - Sends logs over UDP connections
+- **[syslog](output/syslog.md)** - Formats and sends logs via syslog (RFC 3164 or 5424) over UDP or TCP
+- **[otlp-grpc](output/otlp-grpc.md)** - Sends logs via OpenTelemetry Protocol (OTLP) over gRPC
+- **[file](output/file.md)** - Writes logs to files with automatic rotation and compression
+
+## Installation
+
+Blitz supports the following platforms:
+- **Operating Systems**: Linux, macOS (Darwin), Windows, FreeBSD
+- **CPU Architectures**: amd64 (x86_64), arm64
+
+If your platform is not listed above, please [open an issue](https://github.com/observiq/blitz/issues)
+and we'll do our best to add support for it.
+
+### CLI
+
+Download the binary for your platform from the [latest release](https://github.com/observiq/blitz/releases/latest):
+
+Extract the archive and run the binary directly in a terminal:
+
+```bash
+tar -xzf blitz_*_linux_amd64.tar.gz
+```
+
+Run with default NOP configuration:
+
+```bash
+./blitz
+```
+
+Run with JSON generator and TCP output:
+
+```bash
+./blitz \
+ --generator-type json \
+ --generator-json-workers 2 \
+ --generator-json-rate 500ms \
+ --output-type tcp \
+ --output-tcp-host logs.example.com \
+ --output-tcp-port 9090 \
+ --output-tcp-workers 3 \
+ --logging-level info
+```
+
+### Linux Systemd Service
+
+Download the appropriate package for your Linux distribution from the [latest release](https://github.com/observiq/blitz/releases/latest):
+
+- **Debian/Ubuntu**: `blitz_amd64.deb` or `blitz_arm64.deb`
+- **Red Hat/CentOS/Fedora**: `blitz_amd64.rpm` or `blitz_arm64.rpm`
+
+Install the package with your package manager:
+
+**Debian**
+
+```bash
+sudo apt-get install -f ./blitz_amd64.deb
+```
+
+**RHEL**
+
+```bash
+sudo dnf install ./blitz_amd64.rpm
+```
+
+Edit the configuration file:
+
+```bash
+sudo vi /etc/blitz/config.yaml
+```
+
+Example minimal configuration for JSON generator and TCP output:
+
+```yaml
+generator:
+ type: json
+ json:
+ workers: 2
+ rate: 500ms
+output:
+ type: tcp
+ tcp:
+ host: logs.example.com
+ port: 9090
+ workers: 3
+logging:
+ level: info
+```
+
+Enable and start the service
+
+```bash
+sudo systemctl enable blitz
+sudo systemctl start blitz
+sudo systemctl status blitz
+```
+
+View service logs:
+
+```bash
+sudo journalctl -u blitz -f
+```
+
+### Container
+
+Pull the Docker image from GitHub Container Registry and run it with environment variables for configuration:
+
+Run with default NOP configuration:
+
+```bash
+docker run --rm ghcr.io/observiq/blitz:latest
+```
+
+Run with JSON generator and TCP output:
+
+```bash
+docker run --rm \
+ -e BINDPLANE_GENERATOR_TYPE=json \
+ -e BINDPLANE_GENERATOR_JSON_WORKERS=2 \
+ -e BINDPLANE_GENERATOR_JSON_RATE=500ms \
+ -e BINDPLANE_OUTPUT_TYPE=tcp \
+ -e BINDPLANE_OUTPUT_TCP_HOST=logs.example.com \
+ -e BINDPLANE_OUTPUT_TCP_PORT=9090 \
+ -e BINDPLANE_OUTPUT_TCP_WORKERS=3 \
+ -e BINDPLANE_LOGGING_LEVEL=info \
+ ghcr.io/observiq/blitz:latest
+```
+
+For detailed configuration options, see the [Configuration Guide](configuration.md).
+
+## Community
+
+The Blitz is an open source project. If you'd like to contribute, take a look at our [contribution guidelines](CONTRIBUTING.md) and [developer guide](development.md). We look forward to building with you.
+
+## Similar Tools
+
+- [flog](https://github.com/mingrammer/flog) - A fake log generator for common log formats
+