{
  "data": {
    "summary": "A simplified FAO-56-style soil water balance. It answers one question — should you water this specific garden bed today, and roughly how much — using live modeled soil moisture, forecast evapotranspiration, and forecast rain for your exact coordinates. Every number below is a documented approximation, not a lab measurement; treat the verdict as decision support, not an irrigation controller.",
    "upstream_data": {
      "provider": "Open-Meteo (https://open-meteo.com)",
      "endpoints_used": [
        "https://api.open-meteo.com/v1/forecast (hourly soil_moisture_0_to_1cm/1_to_3cm/3_to_9cm/9_to_27cm, daily et0_fao_evapotranspiration/precipitation_sum/precipitation_probability_max, past_days=3, forecast_days=4)",
        "https://geocoding-api.open-meteo.com/v1/search (place-name to lat/lon)"
      ],
      "license_note": "Open-Meteo's free tier is licensed for non-commercial use (CC-BY 4.0); this app is free and non-commercial. Commercial use of the same data would require Open-Meteo's paid plan."
    },
    "plant_profiles": {
      "lawn_turf": { "root_zone_cm": 15, "kc": 0.8, "depletion_fraction_p": 0.4, "moisture_layers_weight": { "0_1": 0.3, "1_3": 0.5, "3_9": 0.2, "9_27": 0.0 } },
      "vegetables_annuals": { "root_zone_cm": 30, "kc": 1.05, "depletion_fraction_p": 0.45, "moisture_layers_weight": { "0_1": 0.1, "1_3": 0.25, "3_9": 0.4, "9_27": 0.25 } },
      "shrubs_perennials": { "root_zone_cm": 45, "kc": 0.6, "depletion_fraction_p": 0.5, "moisture_layers_weight": { "0_1": 0.05, "1_3": 0.15, "3_9": 0.35, "9_27": 0.45 } },
      "established_trees": { "root_zone_cm": 60, "kc": 0.5, "depletion_fraction_p": 0.55, "moisture_layers_weight": { "0_1": 0.0, "1_3": 0.1, "3_9": 0.3, "9_27": 0.6 } },
      "note": "root_zone_cm and kc are commonly-cited FAO-56 / extension-service midpoints for mature, established plantings, not per-species values. Real crop coefficients vary by growth stage and species; this app intentionally trades precision for a usable default."
    },
    "soil_profiles": {
      "sand": { "field_capacity_vwc": 0.12, "wilting_point_vwc": 0.05 },
      "sandy_loam": { "field_capacity_vwc": 0.18, "wilting_point_vwc": 0.08 },
      "loam": { "field_capacity_vwc": 0.27, "wilting_point_vwc": 0.12 },
      "clay_loam": { "field_capacity_vwc": 0.32, "wilting_point_vwc": 0.17 },
      "clay": { "field_capacity_vwc": 0.38, "wilting_point_vwc": 0.22 },
      "note": "field_capacity_vwc / wilting_point_vwc are typical volumetric-water-content midpoints by USDA soil texture class, used to normalize Open-Meteo's modeled soil moisture (m3/m3) into a 0-100% plant-available-water score. Actual values vary with organic matter and structure."
    },
    "calculation": [
      "1. Weight Open-Meteo's four modeled soil-moisture depth layers (0-1cm, 1-3cm, 3-9cm, 9-27cm) by the selected plant's moisture_layers_weight to get a single root-zone volumetric water content (VWC).",
      "2. paw_pct = clamp( (VWC - wilting_point_vwc) / (field_capacity_vwc - wilting_point_vwc), 0, 1 ) * 100 — percent of plant-available water remaining in the root zone right now.",
      "3. raw_threshold_pct = (1 - depletion_fraction_p) * 100 — the refill point below which the plant is considered water-stressed (readily-available-water threshold).",
      "4. net_demand_next_48h_mm = sum(et0 * kc) for the next 2 forecast days - sum(effective_precip) for the next 2 days, where effective_precip = min(precip_sum, 25mm) * 0.8 (a simple runoff/infiltration efficiency factor for the first 25mm of any given day's rain, standard-ish approximation, no credit for anything beyond that).",
      "5. Verdict: WATER NOW if paw_pct < raw_threshold_pct and net_demand_next_48h_mm > 2mm. SKIP if paw_pct >= raw_threshold_pct or net_demand_next_48h_mm <= 0 (rain covers the deficit). LIGHT / OPTIONAL otherwise.",
      "6. Suggested depth (mm) when watering = field_capacity_vwc_deficit_to_full * root_zone_cm * 10, capped to a sane single-session max of 25mm; shown converted to inches and to 'minutes at a typical 25mm/hr sprinkler' as a rough real-world translation, explicitly labeled approximate."
    ],
    "known_limitations": [
      "Open-Meteo's soil moisture is a regional weather-model estimate (roughly 1-11km grid depending on model), not a probe in your actual bed — mulch, raised beds, containers, and irrigation history will shift the true value from the model.",
      "kc and root_zone_cm are generic per plant-category defaults, not per-species or per-growth-stage.",
      "No slope/runoff/wind/humidity adjustment beyond ET0's own FAO Penman-Monteith formulation (computed upstream by Open-Meteo).",
      "The 'last watered' log is stored only in your browser (localStorage) — it is not sent anywhere and does not sync across devices; clearing browser data clears it."
    ]
  },
  "ui": {
    "title": "Methodology",
    "message": "The exact formula, thresholds, and data source behind every verdict, so you (or an auditing agent) can reproduce or challenge the calculation without reading the JS.",
    "navigation": [
      { "label": "Back to the app", "href": "/" },
      { "label": "Discovery manifest", "href": "/.well-known/add.json" },
      { "label": "Feedback", "href": "/feedback" }
    ]
  }
}
