webserve 1.3.0

A lightweight web server
Documentation
# TODO list — webserve

Backlog and ideas. Check items off as you go.

## Git hooks

- [x] `.githooks/pre-push`**no-op by default**; `WEBSERVE_HOOK_VERSION_CHECK=1` before tag push if wanted
- [x] Team onboarding: run `git config core.hooksPath .githooks` after clone

## CI / release

- [ ] Confirm `publish.yml` Rust setup action (e.g. `dtolnay/rust-toolchain@stable`) if jobs fail before `cargo publish`
- [ ] Optional: skip `cargo publish` when version already on crates.io (avoid red runs on retagged releases)
- [ ] Optional: separate workflows — publish only on new `Cargo.toml` version, release binaries on tag

## crates.io / packaging

- [ ] Keep `[package]` metadata filled: `repository`, `homepage`, `documentation`
- [x] Commit `Cargo.lock` before every publish; tag must match `version` in `Cargo.toml`
- [ ] After each release, bump patch (or minor) for the next publish attempt

## Performance (when needed)

- [ ] Add `Cache-Control` / `ETag` for static assets
- [ ] Optional: gzip/brotli (middleware or document reverse proxy)
- [x] Optional: reduce per-request work for `--watch` HTML (cache injected body or inject once)

## Features (DX)

- [ ] Optional config file (TOML) with CLI overrides
- [ ] CORS headers flag for local API + SPA
- [x] Open browser on start (`--open`)
- [x] Trailing-slash redirect (`--no-redirect-dir-slash` to disable) + normalized URL paths (`//`, `.`, reject `..`)

## Features (production-ish)

- [ ] Optional HTTPS (dev certs via `rustls`) or README section for Caddy/nginx
- [ ] Range requests for large files (video)

## Code quality

- [x] Split `lib.rs` into modules (`serve`, `cli`, `path`) when it grows
- [x] More integration tests for CLI and error paths

## Docs

- [x] README: `cargo install webserve` from crates.io
- [x] README: troubleshooting (port in use, missing `--dir`, publish/tag flow)

---

*Last updated: session backlog — edit freely.*