# Performance measurement No production capacity, minimum resource requirement, SLO, alert threshold, pool size, or autoscaling threshold is known yet. The repository therefore contains a reproducible measurement profile, not a capacity claim or blocking resource preflight. The profile uses a separate Compose project, generated independent secrets, and a separate PostgreSQL volume. Its Traefik instance is constrained to that exact Compose project; its router, service, middleware, and Host rule are unique, so the load profile cannot join the staging router. It exercises: - dynamic public home and Safety pages; - database-backed readiness queries; - Phoenix WebSocket upgrades and protocol heartbeats; - real password login and authenticated LiveView joins; - consent-driven tracking start, authenticated location writes, private chat writes, and explicit tracking stop/position deletion; - the configured number of web and worker replicas; - cross-node Phoenix PubSub after each run. It does not render a real browser, retain a browser tracking session for an unknown real-world trip duration, or reproduce an unknown future production traffic mix. It also does not sample the k6 load-generator container itself. Its results only describe the recorded host, container versions, replica counts, database state, and experiment inputs. ## Create the isolated profile ```sh ./scripts/ensure-local-load-env.sh ./scripts/load-stack-up.sh ``` The generated `.env.load` is ignored, restricted to mode 600, and contains independent PostgreSQL and application secrets. Edit its `LOAD_*` inputs to define a specific experiment. Values in `.env.load.example` are reproducible measurement points, not recommendations. For a one-run duration that must not rewrite `.env.load`, pass an explicit experiment override: ```sh LOAD_DURATION_OVERRIDE=10m ./scripts/load-run.sh local-soak-YYYYMMDD ``` The effective value and whether it came from `.env.load` or the override are recorded in that run's `environment.txt`. ## Run and compare replica counts ```sh ./scripts/load-run.sh two-web ./scripts/load-stack-up.sh 3 # Set LOAD_WEB_REPLICAS=3 in .env.load so the recorded expected topology # matches the running topology, then: ./scripts/load-run.sh three-web ``` Each run writes ignored evidence below `output/performance/