Settings — Pricing & Flags

Pricing knobs (config-live — applied on the next quote, no redeploy)

editable

Each knob maps 1:1 to a calc.billing.PricingConfig field and is re-read fresh on every pricing computation. Saving writes one config row (roofing_aeo.<knob>) via the engine admin API. A knob pinned by a Fly env var is authoritative and cannot be changed here — its input is disabled.

envcurrent: 1000env-pinned
Pinned by a Fly env var — editing here is ignored (a config row only wins on the next redeploy, and a real env var always wins). Change it in Fly secrets.roofing_aeo.audit_fee
envcurrent: 2500env-pinned
Pinned by a Fly env var — editing here is ignored (a config row only wins on the next redeploy, and a real env var always wins). Change it in Fly secrets.roofing_aeo.engagement_base
defaultcurrent: 4000
roofing_aeo.full_search_base
defaultcurrent: 750
roofing_aeo.per_metro_add
defaultcurrent: 600
roofing_aeo.per_metro_add_mid
defaultcurrent: 400
roofing_aeo.per_metro_add_floor
defaultcurrent: 1500
roofing_aeo.migration_fee_low
defaultcurrent: 3500
roofing_aeo.migration_fee_high_floor
defaultcurrent: 7500
roofing_aeo.migration_fee_high
defaultcurrent: 1
roofing_aeo.founding_partner_pct

Pricing structure (fixed business table — code change, NOT editable here)

read-only
Taper breakpoints
metros 2–3 → headline add · 4–5 → mid (from 4) · 6+ → floor (from 6)
Competitiveness multiplier
standard ×1 · competitive ×1.25 · high ×1.5
High-equity threshold
0.5 (above → scaled migration fee)
Tiers
aeo, full_search

Live quote preview (computed by calc/billing against the current config)

Reflects the knobs above as currently saved — save a knob, then preview to see its effect. No engagement is written; this is a read-only deterministic quote via POST /admin/pricing.

Runtime flags (set via env + redeploy — read-only here)

env_redeploy

These three flags are read from the process env at request/cycle time; a config-table row only reaches the env at startup and a real env var always wins. So a live toggle here would silently no-op — the cockpit shows current effective value + source and you change them in Fly + redeploy.

AEO_REQUIRE_SIGNED_WEBHOOKSfalsedefaultset via env + redeploy
LOUD WARNING: turning this ON would REJECT every keyless webhook — clay, smartlead, dialpad, fireflies (Clay is intentionally keyless — operator decision — and would be hard-blocked). Wire those signing secrets BEFORE enabling, or those captures fail-closed.
RouteSigning secretIf require-signed ON
clay✗ absentREJECTED
smartlead✗ absentREJECTED
dialpad✗ absentREJECTED
fireflies✗ absentREJECTED
web_ingest✓ wiredaccepted
AEO_CYCLE_MAX_MODEL_CALLS5000defaultset via env + redeploy
AEO_TECHNICAL_CHECKS_LIVEfalsedefaultset via env + redeploy

Advanced

Raw config key/value editor + current rows (2)

Fallback for arbitrary keys. Writes via POST /admin/config (env vars still win at runtime for env-pinned keys). Do not set locked doctrine values here — review floor, response-rate floor, divergence tolerance and the structural pricing table are code-owned.

roofing_aeo.audit_fee1000
roofing_aeo.engagement_base2500