Developer tools
A local audit product for agencies
Audit Kit is a hybrid CLI and landing page I built for agency website audits. Rust runs audit folders, quick HTML checks, security headers, and report generation. The product site explains the workflow clearly so agencies can understand, trust, and try it quickly.
Product landing page
The CLI needed a clean product surface so people could understand the value before reading the repo.
A developer tool is harder to trust when the first impression is only a repository. Agencies needed a quick way to understand what Audit Kit does, why it is local, and how the workflow fits client audit work.
Designed and shipped a compact landing page with command-led positioning, clear product sections, GitHub and docs entry points, and a simple explanation of the three-command audit workflow.
The project now feels like a complete product rather than just a CLI: easier to share, easier to evaluate, and more credible for non-technical buyers.
Three commands, full report
The workflow is deliberately small: create a workspace, inspect the site, then generate files you can send to a client.
Turning raw checks into a coherent client deliverable meant copying Lighthouse output, security notes, and manual findings into separate documents.
Standardised on `ak new` for workspace setup, `ak inspect latest` for automated feedback, security headers, and Lighthouse in one pass, and `ak report latest` for markdown reports and a draft client email.
Agencies can move from URL to structured audit folder to sendable report without leaving the terminal.
Hybrid architecture
Rust owns the core workflow so audits start quickly; Node is isolated to the Lighthouse bridge.
A Node only CLI would be slower to start and harder to ship as a single dependable binary for folder management and report generation.
Implemented the core in Rust (audit folders, `ak check`, `ak security`, report generation) and kept a thin Node helper for Lighthouse, with browser auto detection for Chrome, Edge, Brave, and Helium.
Fast local runs with a clear split of responsibilities and tests across both Rust and the Node helper.