{
  "schemaVersion": 1,
  "slug": "shelving-weight-capacity-calculator",
  "category": "household",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "7363597f8253ad98af62d24caa9a4f34f85c504ee4de0bdd2798b7a2433678c1",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/shelving-weight-capacity-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "C = 284×m×t²×d÷s; W = C÷f; T = W×n; sag = 0.15C",
    "vars": [
      [
        "t",
        "Shelf thickness (in)"
      ],
      [
        "d",
        "Shelf depth (in)"
      ],
      [
        "s",
        "Span (in)"
      ],
      [
        "m",
        "Material factor"
      ],
      [
        "f",
        "Safety factor"
      ],
      [
        "n",
        "Number of shelves"
      ],
      [
        "W",
        "Safe load per shelf (lb)"
      ],
      [
        "C",
        "Theoretical load capacity (lb)"
      ],
      [
        "T",
        "Total rack capacity (lb)"
      ],
      [
        "sag",
        "Load causing visible sag (lb)"
      ]
    ],
    "note": "m lookup: pine 1.0, oak 1.6, plywood 1.3, MDF 0.8, particle board 0.6, steel 8.0; advised max span 120 in for steel, otherwise 48 in (t≥1), 36 in (t≥0.75), 24 in."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "sources": [
      {
        "name": "Sagulator — Shelf span, load and deflection assumptions",
        "url": "https://woodbin.com/calcs/sagulator/"
      }
    ],
    "referenceRole": "context",
    "implementationHash": "7363597f8253ad98af62d24caa9a4f34f85c504ee4de0bdd2798b7a2433678c1",
    "basis": "C = 284×m×t²×d÷s; W = C÷f; T = W×n; sag = 0.15C",
    "limitations": "The references provide context and limitations. They do not validate this page’s illustrative multipliers, lookup values or predictions."
  },
  "contract": {
    "compute": "const mat = { pine: 1.0, oak: 1.6, plywood: 1.3, mdf: 0.8, particle: 0.6, steel: 8 }[material] || 1; const capacity = 284*mat*thickness*thickness*depth/Math.max(1, span); const safe = capacity/Math.max(1, safetyFactor); const limitSpan = material === 'steel' ? 120 : thickness >= 1 ? 48 : thickness >= 0.75 ? 36 : 24; return { loadPerShelf: safe, loadPerShelfKg: safe*0.453592, totalCapacity: safe*shelves, maxSpanAdvised: limitSpan, verdict: span > limitSpan ? 'Span is longer than advised for this thickness — add a support' : safe < 20 ? 'Light duty only' : safe < 60 ? 'Moderate load' : 'Heavy duty' };",
    "inputs": [
      {
        "name": "material",
        "type": "select",
        "default": "pine",
        "options": [
          {
            "value": "pine"
          },
          {
            "value": "oak"
          },
          {
            "value": "plywood"
          },
          {
            "value": "mdf"
          },
          {
            "value": "particle"
          },
          {
            "value": "steel"
          }
        ]
      },
      {
        "name": "thickness",
        "type": "number",
        "default": 0.75,
        "min": 0.125,
        "max": 3,
        "step": 0.125,
        "slider": true
      },
      {
        "name": "depth",
        "type": "number",
        "default": 12,
        "min": 2,
        "max": 36,
        "step": 1,
        "slider": true
      },
      {
        "name": "span",
        "type": "number",
        "default": 32,
        "min": 4,
        "max": 240,
        "step": 1,
        "slider": true
      },
      {
        "name": "shelves",
        "type": "number",
        "default": 5,
        "min": 1,
        "max": 100,
        "step": 1,
        "slider": true
      },
      {
        "name": "safetyFactor",
        "type": "number",
        "default": 3,
        "min": 1,
        "max": 10,
        "step": 0.5,
        "slider": true
      }
    ],
    "outputs": [
      {
        "name": "loadPerShelf",
        "precision": 1,
        "unit": "lb"
      },
      {
        "name": "loadPerShelfKg",
        "precision": 1,
        "unit": "kg"
      },
      {
        "name": "totalCapacity",
        "precision": 0,
        "unit": "lb"
      },
      {
        "name": "maxSpanAdvised",
        "precision": 0,
        "unit": "in"
      },
      {
        "name": "verdict",
        "precision": 0,
        "unit": "",
        "type": "text"
      }
    ],
    "interpret": null
  }
}
