Skip to content

Architecture

Web Check is a monorepo containing a Python/FastAPI backend, a React/Vite frontend, and Docker Compose orchestration for a suite of security scanner sidecars.

Repository layout

web-check/
├── apps/
│   ├── api/          # FastAPI application (Python 3.12, uv)
│   ├── cli/          # Typer CLI entry point
│   ├── my_check/     # Core security checks and reporters
│   ├── alembic/      # Database migrations
│   ├── alembic.ini   # Alembic config (SQLite by default)
│   └── config/       # Static config (wordlists, settings)
├── Dockerfile        # API image (multi-stage, uv + Python 3.12)
├── docker-compose.yml
├── pyproject.toml    # Python project config (uv, ruff, pytest, ty)
└── docs/             # This documentation

Services

ServiceImagePurpose
apiCustom (repo Dockerfile)FastAPI REST API + scan orchestrator
zapzaproxy/zap-stableOWASP ZAP dynamic analysis proxy
nucleiprojectdiscovery/nucleiTemplate-based vulnerability scanner
niktoalpine/niktoWeb server misconfiguration scanner
ffufsecsi/ffufDirectory/path fuzzer (tools profile)

Networking

All containers share the scanner-net bridge network. The API communicates with scanners by their container name (e.g. http://zap:8090). The DOCKER_NETWORK environment variable allows overriding the network name for external integration.

API design

The FastAPI app exposes scan endpoints under /api/:

PrefixDescription
/api/healthLiveness / readiness checks
/api/quickFast, low-impact scans
/api/deepThorough scans (longer runtime)
/api/securityDedicated security tool integrations
/api/advancedAdvanced / multi-tool chained scans
/api/scansScan history and results management

Database: SQLite via SQLAlchemy async + Alembic migrations (auto-run on startup).

Frontend

The project no longer ships a bundled frontend. Interact with the API via the Swagger UI at http://localhost:8001/docs, the my-check CLI, or any HTTP client.