{
  "comment": "Single source of truth for all pricing (P4). Consumed by the contact-page pricing block (S3), the dynamic-currency worker (S5) and the pricing/geo API. No price may be written down anywhere else — site copy quotes USD from here, other currencies are derived here and only here.",
  "version": 1,
  "anchor": "USD",
  "currencies": ["USD", "ZAR", "GBP", "EUR"],
  "prices": {
    "specSmall": {
      "label": "Specification engagement — smaller scope",
      "unit": "fixed fee",
      "USD": 2500,
      "ZAR": 40500,
      "GBP": 1850,
      "EUR": 2150
    },
    "specSubstantial": {
      "label": "Specification engagement — substantial scope",
      "unit": "fixed fee",
      "USD": 5500,
      "ZAR": 88500,
      "GBP": 4050,
      "EUR": 4750
    },
    "hourly": {
      "label": "Working sessions — finishing a partial spec, post-sign-off changes",
      "unit": "per hour",
      "USD": 120,
      "ZAR": 1950,
      "GBP": 90,
      "EUR": 105
    }
  },
  "buildCredit": { "percentOfFee": 50, "label": "Credited against the build price if you build with me" },
  "floor": {
    "hourlyUSD": 120,
    "note": "P1.4: the hourly rate is the floor — below USD 120/hr, no. The fixed-fee floor is the published tier price; the spec is not the thing to discount."
  },
  "terms": {
    "payable": "on commencement",
    "pricedIn": "USD",
    "invoicedIn": ["ZAR", "USD", "GBP", "EUR"],
    "invoiceCurrencyAgreed": "up front"
  },
  "fx": {
    "policy": "hybrid",
    "rule": "Derived prices (ZAR, GBP, EUR) are recalculated from the USD anchor at the start of each calendar quarter, regardless of movement. Off-cycle: recalculate immediately if USD/ZAR moves more than 5% from lastRefresh.crossRates.ZAR. USD anchor prices only change by an explicit pricing decision, never by FX.",
    "source": {
      "name": "ECB euro foreign exchange reference rates (daily, ~16:00 CET)",
      "url": "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
    },
    "threshold": { "pair": "USD/ZAR", "percent": 5 },
    "rounding": {
      "direction": "always up, never below the USD anchor equivalent",
      "ZAR": { "fixedFee": "nearest 500", "hourly": "nearest 50" },
      "GBP": { "fixedFee": "nearest 50", "hourly": "nearest 5" },
      "EUR": { "fixedFee": "nearest 50", "hourly": "nearest 5" }
    },
    "trigger": "Recurring ClickUp task at each quarter start (manual recalculation against this file); off-cycle refresh triggered by the >5% check in the same task or on noticing a major USD/ZAR move.",
    "lastRefresh": {
      "date": "2026-08-31",
      "ecbReferenceDate": "2026-08-28",
      "eurRates": { "USD": 1.1643, "ZAR": 18.6309, "GBP": 0.8572 },
      "crossRates": { "base": "USD", "ZAR": 16.0018, "GBP": 0.7362, "EUR": 0.8589 }
    }
  }
}
