29 free construction calculators plus Florida contractor, permit, federal award and AI-crawler data.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free 0-100 score of how easily AI assistants and agents can read, quote and contact a public business website: AI crawler rules, llms.txt, schema.org business/offer data, agent catalog, MCP card, sitemap, meta, contact. Not a Google ranking score.
Tool list last changed Oct 23, 2026.
Free 0-100 score of how easily AI assistants and agents can read, quote and contact a public business website: AI crawler rules, llms.txt, schema.org business/offer data, agent catalog, MCP card, sitemap, meta, contact. Not a Google ranking score.
| Argument | Type | Description |
|---|---|---|
| url* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
}
}
}Generate robots.txt AI-crawler rules, llms.txt, schema.org JSON-LD and /.well-known/agent-catalog.json from facts the business supplies. services: one per line as "Name|Price". Uses only supplied facts.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| city | string | |
| name* | string | |
| string | ||
| phone | string | |
| region | string | |
| services | string | |
| areaServed | string | |
| bookingUrl | string | |
| description | string | |
| businessType | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"name"
],
"properties": {
"url": {
"type": "string"
},
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"region": {
"type": "string"
},
"services": {
"type": "string"
},
"areaServed": {
"type": "string"
},
"bookingUrl": {
"type": "string"
},
"description": {
"type": "string"
},
"businessType": {
"type": "string"
}
}
}Check a public site robots.txt for AI crawler allow/deny verdicts.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public site URL or domain, e.g. https://example.com |
| path | string | Optional path to test against the rules, default / |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public site URL or domain, e.g. https://example.com"
},
"path": {
"type": "string",
"description": "Optional path to test against the rules, default /"
}
}
}Room air-conditioner capacity using the ENERGY STAR sizing chart and its adjustments for sun, occupants and kitchens. Formula: Base BTU from the ENERGY STAR area chart; −10% heavily shaded, +10% very sunny, +600 BTU per person above 2, +4,000 BTU for a kitchen.
| Argument | Type | Description |
|---|---|---|
| shade | string | Sun exposure; default normal |
| kitchen | number | Used as kitchen; default 0; one of 0 = No, 1 = Yes (+4,000 BTU) |
| occupants | number | Regular occupants; default 2 |
| room_sqft | number | Room area (sq ft); default 350 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"shade": {
"enum": [
"normal",
"shaded",
"sunny"
],
"type": "string",
"description": "Sun exposure; default normal"
},
"kitchen": {
"type": "number",
"description": "Used as kitchen; default 0; one of 0 = No, 1 = Yes (+4,000 BTU)"
},
"occupants": {
"type": "number",
"description": "Regular occupants; default 2"
},
"room_sqft": {
"type": "number",
"description": "Room area (sq ft); default 350"
}
}
}Daily and yearly kWh and the cost to run any appliance from its wattage, hours of use and your electricity rate. Formula: kWh per day = watts × hours ÷ 1,000; kWh per year = kWh per day × days; cost = kWh × rate.
| Argument | Type | Description |
|---|---|---|
| watts | number | Appliance wattage (nameplate, or amps × volts) (W); default 1500 |
| rate_per_kwh | number | Your electricity rate (from your bill) ($/kWh); default 0.15 |
| days_per_year | number | Days used per year; default 365 |
| hours_per_day | number | Hours used per day (h); default 4 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"watts": {
"type": "number",
"description": "Appliance wattage (nameplate, or amps × volts) (W); default 1500"
},
"rate_per_kwh": {
"type": "number",
"description": "Your electricity rate (from your bill) ($/kWh); default 0.15"
},
"days_per_year": {
"type": "number",
"description": "Days used per year; default 365"
},
"hours_per_day": {
"type": "number",
"description": "Hours used per day (h); default 4"
}
}
}Tons of hot-mix asphalt for a driveway or lot from area, compacted depth and mix density. Formula: Tons = L × W × depth(in)/12 × density(lb/cu ft) ÷ 2,000.
| Argument | Type | Description |
|---|---|---|
| depth_in | number | Compacted depth (in); default 2 |
| width_ft | number | Width (ft); default 12 |
| lb_per_cf | number | Mix density (ask your plant) (lb/cu ft); default 145 |
| length_ft | number | Length (ft); default 50 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"depth_in": {
"type": "number",
"description": "Compacted depth (in); default 2"
},
"width_ft": {
"type": "number",
"description": "Width (ft); default 12"
},
"lb_per_cf": {
"type": "number",
"description": "Mix density (ask your plant) (lb/cu ft); default 145"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 50"
}
}
}How much attic ventilation you need by the 1/150 and 1/300 rules (Florida Building Code, Residential R806.2), split into intake and exhaust, and how many vents that is for your vent products. Formula: Total net free area (sq in) = attic floor area (sq ft) × 144 ÷ 150 (or ÷ 300 under the balanced exception). Exhaust NFA = total × high share; intake NFA = the rest. Vents = ⌈NFA ÷ the net free area of one vent (or one foot of continuous vent)⌉.
| Argument | Type | Description |
|---|---|---|
| ratio | number | Ventilation rule; default 150; one of 150 = 1/150 (standard), 300 = 1/300 (balanced exception: 40–50% high) |
| upper_pct | number | Share of vent area that is high (exhaust) (%); default 50 |
| attic_floor_sqft | number | Attic floor area (vented space) (sq ft); default 1500 |
| intake_nfa_per_unit | number | Intake vent net free area per unit or per ft of soffit vent (from the label) (sq in); default 9 |
| exhaust_nfa_per_unit | number | Exhaust vent net free area per unit or per ft of ridge vent (from the label) (sq in); default 18 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ratio": {
"type": "number",
"description": "Ventilation rule; default 150; one of 150 = 1/150 (standard), 300 = 1/300 (balanced exception: 40–50% high)"
},
"upper_pct": {
"type": "number",
"description": "Share of vent area that is high (exhaust) (%); default 50"
},
"attic_floor_sqft": {
"type": "number",
"description": "Attic floor area (vented space) (sq ft); default 1500"
},
"intake_nfa_per_unit": {
"type": "number",
"description": "Intake vent net free area per unit or per ft of soffit vent (from the label) (sq in); default 9"
},
"exhaust_nfa_per_unit": {
"type": "number",
"description": "Exhaust vent net free area per unit or per ft of ridge vent (from the label) (sq in); default 18"
}
}
}Board feet and cost for hardwood or dimensional lumber. Formula: Board feet = thickness(in) × width(in) × length(ft) ÷ 12 × pieces (one board foot = 144 cubic inches).
| Argument | Type | Description |
|---|---|---|
| quantity | number | Pieces; default 10 |
| width_in | number | Width (in); default 6 |
| length_ft | number | Length (ft); default 8 |
| price_per_bf | number | Price per board foot (0 = skip) ($); default 0 |
| thickness_in | number | Thickness (in); default 1 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"quantity": {
"type": "number",
"description": "Pieces; default 10"
},
"width_in": {
"type": "number",
"description": "Width (in); default 6"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 8"
},
"price_per_bf": {
"type": "number",
"description": "Price per board foot (0 = skip) ($); default 0"
},
"thickness_in": {
"type": "number",
"description": "Thickness (in); default 1"
}
}
}Required box volume under NEC 314.16 from your conductors, devices, clamps, fittings and grounds, checked against a standard metal box from Table 314.16(A) or your box's marked volume. Formula: Required volume = Σ(conductors × Table 314.16(B) allowance) + 1 allowance for clamps + 1 per fitting type + 2 per yoke + 1 for all grounds, each at the largest conductor size present. Allowances: 18 AWG 1.50, 16 AWG 1.75, 14 AWG 2.00, 12 AWG 2.25, 10 AWG 2.50, 8 AWG 3.00, 6 AWG 5.00 cu in.
| Argument | Type | Description |
|---|---|---|
| box | string | Box; default dev_3x2x2_5 |
| yokes | number | Devices (yokes/straps: switch, receptacle); default 1 |
| clamps | number | Internal cable clamps; default 0; one of 0 = None, 1 = Yes (one or more) |
| count_6 | number | 6 AWG conductors; default 0 |
| count_8 | number | 8 AWG conductors; default 0 |
| grounds | number | Equipment grounding conductors; default 1; one of 1 = Yes (one or more), 0 = None |
| count_10 | number | 10 AWG conductors; default 0 |
| count_12 | number |
Bricks for a single-wythe wall from its area, the brick face size and the mortar joint. Defaults are a modular brick with a ⅜ in joint. Formula: Bricks per sq ft = 144 ÷ ((length + joint) × (height + joint)); bricks = (wall area − openings) × bricks per sq ft × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| joint_in | number | Mortar joint (in); default 0.375 |
| waste_pct | number | Waste allowance (%); default 5 |
| openings_sqft | number | Openings to subtract (sq ft); default 0 |
| unit_height_in | number | Brick height (actual) (in); default 2.25 |
| unit_length_in | number | Brick length (actual) (in); default 7.625 |
| wall_height_ft | number | Wall height (ft); default 8 |
| wall_length_ft | number | Wall length (ft); default 20 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"joint_in": {
"type": "number",
"description": "Mortar joint (in); default 0.375"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 5"
},
"openings_sqft": {
"type": "number",
"description": "Openings to subtract (sq ft); default 0"
},
"unit_height_in": {
"type": "number",
"description": "Brick height (actual) (in); default 2.25"
},
"unit_length_in": {
"type": "number",
"description": "Brick length (actual) (in); default 7.625"
},
"wall_height_ft": {
"type": "number",
"description": "Wall height (ft); default 8"
},
"wall_length_ft": {
"type": "number",
"description": "Wall length (ft); default 20"
}
}
}Number of 8×8×16 concrete blocks (CMU) for a wall. A standard block plus a ⅜ in joint covers 16 × 8 in, so about 1.125 blocks per square foot. Formula: Blocks per sq ft = 144 ÷ ((length + joint) × (height + joint)) = 144 ÷ (16 × 8) = 1.125 for standard units; blocks = net wall area × 1.125 × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| joint_in | number | Mortar joint (in); default 0.375 |
| waste_pct | number | Waste allowance (%); default 5 |
| openings_sqft | number | Openings to subtract (sq ft); default 0 |
| unit_height_in | number | Block height (actual) (in); default 7.625 |
| unit_length_in | number | Block length (actual) (in); default 15.625 |
| wall_height_ft | number | Wall height (ft); default 8 |
| wall_length_ft | number | Wall length (ft); default 40 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"joint_in": {
"type": "number",
"description": "Mortar joint (in); default 0.375"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 5"
},
"openings_sqft": {
"type": "number",
"description": "Openings to subtract (sq ft); default 0"
},
"unit_height_in": {
"type": "number",
"description": "Block height (actual) (in); default 7.625"
},
"unit_length_in": {
"type": "number",
"description": "Block length (actual) (in); default 15.625"
},
"wall_height_ft": {
"type": "number",
"description": "Wall height (ft); default 8"
},
"wall_length_ft": {
"type": "number",
"description": "Wall length (ft); default 40"
}
}
}Concrete needed for round columns, piers and tube forms (sonotubes). Uses cylinder volume, which differs from slab math. Formula: Cubic feet = π × (diameter(in)/24)² × height(ft) × count; cubic yards = cu ft ÷ 27 × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| count | number | Number of columns; default 4 |
| height_ft | number | Height (ft); default 4 |
| waste_pct | number | Waste allowance (%); default 10 |
| diameter_in | number | Tube diameter (in); default 12 |
| bag_yield_cf | number | Bag yield (cu ft/bag); default 0.6 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"count": {
"type": "number",
"description": "Number of columns; default 4"
},
"height_ft": {
"type": "number",
"description": "Height (ft); default 4"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"diameter_in": {
"type": "number",
"description": "Tube diameter (in); default 12"
},
"bag_yield_cf": {
"type": "number",
"description": "Bag yield (cu ft/bag); default 0.6"
}
}
}Volume for continuous trench/wall footings where width is in inches and length runs the full perimeter. Formula: Cubic yards = Length(ft) × Width(in)/12 × Depth(in)/12 ÷ 27 × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| depth_in | number | Footing depth (in); default 8 |
| width_in | number | Footing width (in); default 16 |
| length_ft | number | Total footing length (ft); default 120 |
| waste_pct | number | Waste allowance (%); default 10 |
| bag_yield_cf | number | Bag yield (cu ft/bag); default 0.6 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"depth_in": {
"type": "number",
"description": "Footing depth (in); default 8"
},
"width_in": {
"type": "number",
"description": "Footing width (in); default 16"
},
"length_ft": {
"type": "number",
"description": "Total footing length (ft); default 120"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"bag_yield_cf": {
"type": "number",
"description": "Bag yield (cu ft/bag); default 0.6"
}
}
}Estimate ready-mix cubic yards or the number of 80 lb bags for a rectangular slab, patio or driveway. Formula: Cubic yards = Length(ft) × Width(ft) × Thickness(in)/12 ÷ 27 × (1 + waste%). Bags = cubic feet ÷ bag yield.
| Argument | Type | Description |
|---|---|---|
| depth_in | number | Thickness (in); default 4 |
| width_ft | number | Width (ft); default 10 |
| length_ft | number | Length (ft); default 20 |
| waste_pct | number | Waste allowance (%); default 10 |
| bag_yield_cf | number | Bag yield (cu ft/bag); default 0.6 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"depth_in": {
"type": "number",
"description": "Thickness (in); default 4"
},
"width_ft": {
"type": "number",
"description": "Width (ft); default 10"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 20"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"bag_yield_cf": {
"type": "number",
"description": "Bag yield (cu ft/bag); default 0.6"
}
}
}How much concrete solid steps need, from the total height to climb: number of risers, riser height, treads, top landing, cubic yards and 80 lb bags. Formula: Risers n = ⌈total rise ÷ max riser⌉; riser height R = total rise ÷ n. Side profile area = tread × R × n(n − 1) ÷ 2 + landing depth × n × R (each lower tread is a block of its own height; the landing sits at full height). Volume (cu ft) = profile (sq in) × width (in) ÷ 1,728; cubic yards = cu ft × (1 + waste) ÷ 27; bags = cu ft × (1 + waste) ÷ bag yield.
| Argument | Type | Description |
|---|---|---|
| waste_pct | number | Waste allowance (%); default 10 |
| bag_yield_cf | number | Bag yield (from the bag) (cu ft/bag); default 0.6 |
| max_riser_in | number | Max riser height (IRC 7¾ in; check your local code) (in); default 7.75 |
| step_width_ft | number | Step width (ft); default 4 |
| total_rise_in | number | Total rise (ground to top of landing) (in); default 21 |
| tread_depth_in | number | Tread depth (in); default 11 |
| landing_depth_in | number | Top landing depth (0 = no landing) (in); default 36 |
Number of deck boards for a rectangular deck, accounting for board width and gap. Formula: Rows = ⌈width(in) ÷ (board width + gap)⌉; boards = rows × ⌈deck length ÷ board length⌉ × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| gap_in | number | Gap between boards (in); default 0.1875 |
| waste_pct | number | Waste allowance (%); default 10 |
| deck_width_ft | number | Deck width (ft); default 12 |
| board_width_in | number | Actual board width (in); default 5.5 |
| deck_length_ft | number | Deck length (board direction) (ft); default 16 |
| board_length_ft | number | Board length (ft); default 16 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gap_in": {
"type": "number",
"description": "Gap between boards (in); default 0.1875"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"deck_width_ft": {
"type": "number",
"description": "Deck width (ft); default 12"
},
"board_width_in": {
"type": "number",
"description": "Actual board width (in); default 5.5"
},
"deck_length_ft": {
"type": "number",
"description": "Deck length (board direction) (ft); default 16"
},
"board_length_ft": {
"type": "number",
"description": "Board length (ft); default 16"
}
}
}Number of drywall sheets for walls and optionally the ceiling. Formula: Sheets = (perimeter × height + ceiling area) × (1 + waste%) ÷ sheet area.
| Argument | Type | Description |
|---|---|---|
| waste_pct | number | Waste allowance (%); default 10 |
| sheet_l_ft | number | Sheet length (ft); default 8 |
| sheet_w_ft | number | Sheet width (ft); default 4 |
| room_width_ft | number | Room width (ceiling) (ft); default 10 |
| room_length_ft | number | Room length (ceiling) (ft); default 14 |
| wall_height_ft | number | Wall height (ft); default 8 |
| include_ceiling | number | Include ceiling; default 1; one of 1 = Yes, 0 = No |
| wall_perimeter_ft | number | Room perimeter (ft); default 48 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"sheet_l_ft": {
"type": "number",
"description": "Sheet length (ft); default 8"
},
"sheet_w_ft": {
"type": "number",
"description": "Sheet width (ft); default 4"
},
"room_width_ft": {
"type": "number",
"description": "Room width (ceiling) (ft); default 10"
},
"room_length_ft": {
"type": "number",
"description": "Room length (ceiling) (ft); default 14"
},
"wall_height_ft": {
"type": "number",
"description": "Wall height (ft); default 8"
},
"include_ceiling": {
"type": "number",
"description": "Include ceiling; default 1; one of 1 = Yes, 0 = No"
},
"wall_perimeter_ft": {
"type": "number",
"description": "Room perimeter (ft); default 48"
}
}
}Posts, rails and pickets for a straight run of wood privacy or picket fence. Formula: Sections = ⌈length ÷ spacing⌉; posts = sections + 1 + gates; pickets = ⌈length(in) ÷ (picket width + gap)⌉.
| Argument | Type | Description |
|---|---|---|
| gates | number | Gates (extra posts); default 1 |
| length_ft | number | Fence length (ft); default 100 |
| picket_gap_in | number | Gap between pickets (in); default 0 |
| picket_width_in | number | Picket width (in); default 5.5 |
| post_spacing_ft | number | Post spacing (ft); default 8 |
| rails_per_section | number | Rails per section; default 2 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gates": {
"type": "number",
"description": "Gates (extra posts); default 1"
},
"length_ft": {
"type": "number",
"description": "Fence length (ft); default 100"
},
"picket_gap_in": {
"type": "number",
"description": "Gap between pickets (in); default 0"
},
"picket_width_in": {
"type": "number",
"description": "Picket width (in); default 5.5"
},
"post_spacing_ft": {
"type": "number",
"description": "Post spacing (ft); default 8"
},
"rails_per_section": {
"type": "number",
"description": "Rails per section; default 2"
}
}
}Square footage plus waste and number of boxes for tile, laminate, vinyl plank or hardwood. Formula: Area = L × W; to buy = area × (1 + waste%); boxes = to buy ÷ coverage per box.
| Argument | Type | Description |
|---|---|---|
| width_ft | number | Room width (ft); default 12 |
| length_ft | number | Room length (ft); default 14 |
| waste_pct | number | Waste allowance (more for diagonal layouts) (%); default 10 |
| box_coverage_sqft | number | Coverage per box (on the box) (sq ft); default 20 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"width_ft": {
"type": "number",
"description": "Room width (ft); default 12"
},
"length_ft": {
"type": "number",
"description": "Room length (ft); default 14"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (more for diagonal layouts) (%); default 10"
},
"box_coverage_sqft": {
"type": "number",
"description": "Coverage per box (on the box) (sq ft); default 20"
}
}
}What size generator you need for a power outage: add the running watts of everything you will run at once, then add the single biggest motor starting surge. Enter how many of each item you plan to run at the same time. Formula: Total running watts = Σ (quantity × running watts). Total starting watts = total running watts + the single highest additional starting watts among the items you run, because motors rarely start at the same instant. Amps at 240 V = running watts ÷ 240. Margin is an optional buffer you choose.
| Argument | Type | Description |
|---|---|---|
| box_fan | number | Box fan, 20 in: how many (200 W running); default 0 |
| light_60w | number | Light bulb, 60 W: how many (60 W running); default 4 |
| margin_pct | number | Safety margin (your choice) (%); default 10 |
| coffee_maker | number | Coffee maker: how many (1,000 W running); default 0 |
| refrigerator | number | Refrigerator/freezer: how many (700 W running, +2,200 W to start); default 1 |
| space_heater | number | Space heater: how many (1,800 W running); default 0 |
| window_ac_10k | number | Window AC, 10,000 BTU: how many (1,200 W running, +1,800 W to start); default 1 |
How much grout a tile job takes from the tile size, joint width, joint depth and area, in pounds and bags. The grout density is editable so you can match your product. Formula: Each tile plus its joint is a (L + J) × (W + J) module, of which J × (L + W + J) is joint. Joint share = J(L + W + J) ÷ ((L + J)(W + J)). Grout volume (cu ft) = area × joint share × depth(in) ÷ 12; pounds = volume × density × (1 + waste); bags = ⌈pounds ÷ bag size⌉.
| Argument | Type | Description |
|---|---|---|
| bag_lb | number | Bag size (lb); default 25 |
| area_sqft | number | Tiled area (sq ft); default 100 |
| waste_pct | number | Waste allowance (%); default 10 |
| density_lb_cf | number | Grout weight per cubic foot of joint (from your grout data sheet; ~100 sanded, ~85 unsanded) (lb/cu ft); default 100 |
| tile_width_in | number | Tile width (in); default 12 |
| joint_depth_in | number | Joint depth (usually tile thickness) (in); default 0.375 |
| joint_width_in | number | Joint width (1/8 in = 0.125) (in); default 0.125 |
| tile_length_in |
Check whether a gutter can carry the runoff from your roof in a design storm, and how many downspouts it needs. Uses the USDA NRCS gutter and downspout capacity table and your local rainfall intensity. Formula: Runoff Q (cfs) = roof area (sq ft) × rainfall intensity (in/hr) ÷ 43,200 (12 in/ft × 3,600 s/hr); gpm = cfs × 448.8. The gutter is adequate when Q ≤ its NRCS PA-1 capacity at your slope. Downspouts = the larger of ⌈Q ÷ one downspout's PA-1 capacity⌉ and ⌈run length ÷ max length per downspout⌉. Max roof area for the gutter = capacity × 43,200 ÷ intensity.
| Argument | Type | Description |
|---|---|---|
| slope | string | Gutter slope; default 1/16 |
| gutter | string | Gutter; default alum5 |
| downspout | string | Downspout; default 2x3 |
| gutter_run_ft | number | Gutter run length (ft); default 40 |
| rain_in_per_hr | number | Design rainfall intensity (5-minute depth from NOAA Atlas 14 × 12) (in/hr); default 6 |
| roof_area_sqft | number | Roof area draining to this gutter (plan view, not slope length) (sq ft); default 1200 |
| max_run_per_downspout_ft | number | Max gutter length per downspout (SMACNA practical max 50 ft) (ft); default 50 |
Thickness needed to reach a target R-value for the R-per-inch printed on your insulation product. Formula: Thickness(in) = target R ÷ R per inch. Volume in board feet = area(sq ft) × thickness(in).
| Argument | Type | Description |
|---|---|---|
| target_r | number | Target R-value; default 38 |
| area_sqft | number | Area (optional) (sq ft); default 1000 |
| r_per_inch | number | R-value per inch (product label); default 3.2 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target_r": {
"type": "number",
"description": "Target R-value; default 38"
},
"area_sqft": {
"type": "number",
"description": "Area (optional) (sq ft); default 1000"
},
"r_per_inch": {
"type": "number",
"description": "R-value per inch (product label); default 3.2"
}
}
}Mortar for a brick or concrete block wall: units needed, cubic feet of mortar from the Brick Industry Association quantity table (with bond-pattern correction and waste) and bags of mason mix. Formula: Brick = wall ÷ 100 × Table 4 brick per 100 sq ft × (1 + bond brick factor). Mortar (cu ft) = brick ÷ 1,000 × Table 4 cu ft per 1,000 brick for the joint × (1 + bond mortar factor) × (1 + waste). Block = wall × 1.125. Bags = units ÷ units per bag × (1 + waste).
| Argument | Type | Description |
|---|---|---|
| bond | string | Bond pattern (brick); default running |
| unit | string | Unit; default modular |
| joint_in | number | Mortar joint (brick); default 0.375; one of 0.375 = 3/8 in, 0.5 = 1/2 in |
| wall_sqft | number | Wall area (minus openings) (sq ft); default 100 |
| units_per_bag | number | Units per 80 lb bag (0 = 37 brick / 13 block); default 0 |
| brick_waste_pct | number | Unit waste (%); default 5 |
| mortar_waste_pct | number | Mortar waste (%); default 20 |
Cubic yards (and optional tons) of mulch, gravel, sand or soil for a bed or path. Formula: Cubic yards = L(ft) × W(ft) × depth(in) ÷ 324 (since 27 cu ft × 12 in = 324). Tons = cu yd × supplier density.
| Argument | Type | Description |
|---|---|---|
| depth_in | number | Depth (in); default 3 |
| width_ft | number | Width (ft); default 10 |
| length_ft | number | Length (ft); default 20 |
| tons_per_cy | number | Material density from your supplier (0 = skip) (tons/cu yd); default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"depth_in": {
"type": "number",
"description": "Depth (in); default 3"
},
"width_ft": {
"type": "number",
"description": "Width (ft); default 10"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 20"
},
"tons_per_cy": {
"type": "number",
"description": "Material density from your supplier (0 = skip) (tons/cu yd); default 0"
}
}
}Gallons in an oval (elliptical) pool. Formula: Gallons = π × (L/2) × (W/2) × average depth × 7.48052.
| Argument | Type | Description |
|---|---|---|
| width_ft | number | Width (ft); default 15 |
| length_ft | number | Length (ft); default 30 |
| avg_depth_ft | number | Average depth (ft); default 4.5 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"width_ft": {
"type": "number",
"description": "Width (ft); default 15"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 30"
},
"avg_depth_ft": {
"type": "number",
"description": "Average depth (ft); default 4.5"
}
}
}Gallons of wall paint from room perimeter and height, minus doors and windows, for any number of coats. Formula: Paintable area = perimeter × height − 20 sq ft per door − 15 sq ft per window. Gallons = area × coats ÷ label coverage.
| Argument | Type | Description |
|---|---|---|
| coats | number | Coats; default 2 |
| doors | number | Doors; default 1 |
| windows | number | Windows; default 2 |
| wall_height_ft | number | Wall height (ft); default 8 |
| wall_perimeter_ft | number | Room perimeter (ft); default 48 |
| coverage_sqft_per_gal | number | Coverage (from your can label) (sq ft/gal); default 350 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"coats": {
"type": "number",
"description": "Coats; default 2"
},
"doors": {
"type": "number",
"description": "Doors; default 1"
},
"windows": {
"type": "number",
"description": "Windows; default 2"
},
"wall_height_ft": {
"type": "number",
"description": "Wall height (ft); default 8"
},
"wall_perimeter_ft": {
"type": "number",
"description": "Room perimeter (ft); default 48"
},
"coverage_sqft_per_gal": {
"type": "number",
"description": "Coverage (from your can label) (sq ft/gal); default 350"
}
}
}Number of pavers for a patio, walkway or driveway plus cubic yards of compacted base and bedding sand. Formula: Pavers per sq ft = 144 ÷ (paver length × width); pavers = area × per sq ft × (1 + waste%). Base and sand cubic yards = area × depth(in) ÷ 324.
| Argument | Type | Description |
|---|---|---|
| width_ft | number | Area width (ft); default 12 |
| length_ft | number | Area length (ft); default 16 |
| waste_pct | number | Waste allowance (more for patterns/curves) (%); default 10 |
| base_depth_in | number | Base depth (per your design) (in); default 4 |
| sand_depth_in | number | Bedding sand depth (in); default 1 |
| paver_width_in | number | Paver width (in); default 4 |
| paver_length_in | number | Paver length (in); default 8 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"width_ft": {
"type": "number",
"description": "Area width (ft); default 12"
},
"length_ft": {
"type": "number",
"description": "Area length (ft); default 16"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (more for patterns/curves) (%); default 10"
},
"base_depth_in": {
"type": "number",
"description": "Base depth (per your design) (in); default 4"
},
"sand_depth_in": {
"type": "number",
"description": "Bedding sand depth (in); default 1"
},
"paver_width_in": {
"type": "number",
"description": "Paver width (in); default 4"
},
"paver_length_in": {
"type": "number",
"description": "Paver length (in); default 8"
}
}
}How much baking soda raises your pool's total alkalinity, or how much muriatic acid or dry acid lowers it, for your pool size, using published doses per 10,000 gallons. Formula: Batches = |target − current| ÷ 10 × gallons ÷ 10,000. Raise: baking soda (lb) = batches × 1.4. Lower: muriatic acid 31.4% (fl oz) = batches × 26, or sodium bisulfate (lb) = batches × 2.1. Additions: raise no more than about 50 ppm at a time; add no more than 1 quart of acid per 10,000 gallons at a time.
| Argument | Type | Description |
|---|---|---|
| target_ppm | number | Target total alkalinity (from your pool builder or test kit guide) (ppm); default 100 |
| current_ppm | number | Current total alkalinity (test result) (ppm); default 60 |
| pool_gallons | number | Pool volume (gal); default 15000 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target_ppm": {
"type": "number",
"description": "Target total alkalinity (from your pool builder or test kit guide) (ppm); default 100"
},
"current_ppm": {
"type": "number",
"description": "Current total alkalinity (test result) (ppm); default 60"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 15000"
}
}
}How much calcium chloride raises your pool's calcium hardness, or how much water to replace to lower it, based on your pool size and fill-water hardness. Formula: Raise: calcium chloride (lb) = (target − current) ÷ 10 × gallons ÷ 10,000 × 1.2 for 77% (0.9 for 100%). Lower (dilution): share to drain = (current − target) ÷ (current − fill water); gallons = share × pool volume.
| Argument | Type | Description |
|---|---|---|
| product | number | Calcium chloride strength (on the label); default 77; one of 77 = 77% (flake / dihydrate), 100 = 100% (anhydrous) |
| target_ppm | number | Target calcium hardness (from your pool builder or test kit guide) (ppm); default 250 |
| current_ppm | number | Current calcium hardness (test result) (ppm); default 150 |
| pool_gallons | number | Pool volume (gal); default 15000 |
| fill_water_ppm | number | Calcium hardness of your fill water (ppm); default 50 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product": {
"type": "number",
"description": "Calcium chloride strength (on the label); default 77; one of 77 = 77% (flake / dihydrate), 100 = 100% (anhydrous)"
},
"target_ppm": {
"type": "number",
"description": "Target calcium hardness (from your pool builder or test kit guide) (ppm); default 250"
},
"current_ppm": {
"type": "number",
"description": "Current calcium hardness (test result) (ppm); default 150"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 15000"
},
"fill_water_ppm": {
"type": "number",
"description": "Calcium hardness of your fill water (ppm); default 50"
}
}
}Fluid ounces of liquid chlorine (sodium hypochlorite) to raise free chlorine by a target number of ppm, from pool volume and product strength. Formula: Available chlorine (g) = gallons × 3.78541 L/gal × ppm (mg/L) ÷ 1,000. Product (mL) = grams ÷ (strength% ÷ 100), since trade percent is grams of available chlorine per 100 mL. Fl oz = mL ÷ 29.5735.
| Argument | Type | Description |
|---|---|---|
| raise_ppm | number | Raise free chlorine by (ppm); default 3 |
| pool_gallons | number | Pool volume (gal); default 15000 |
| strength_pct | number | Product strength (trade %, on the jug) (%); default 12.5 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"raise_ppm": {
"type": "number",
"description": "Raise free chlorine by (ppm); default 3"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 15000"
},
"strength_pct": {
"type": "number",
"description": "Product strength (trade %, on the jug) (%); default 12.5"
}
}
}Heater output in Btu per hour for an outdoor pool from surface area and temperature rise, using the U.S. Department of Energy formula, plus gas input, the matching standard heat pump size and the time to warm the water. Formula: Temperature rise = desired pool temperature − average air temperature of the coldest month of use. Heater output (Btu/h) = surface area × rise × 12 × rate factor (1, 1.5 or 2). Gas input = output ÷ efficiency. Heat to warm the water once = gallons × 8.34 lb × (desired − starting temperature); hours = that ÷ output, with no losses.
| Argument | Type | Description |
|---|---|---|
| heatup_rate | number | Heat-up rate; default 1; one of 1 = 1 to 1¼ °F per hour (DOE base), 1.5 = 1½ °F per hour (×1.5), 2 = 2 °F per hour (×2) |
| pool_temp_f | number | Desired pool temperature (°F); default 80 |
| pool_gallons | number | Pool volume (optional, for warm-up time) (gal); default 22000 |
| surface_sqft | number | Pool surface area (length × width for a rectangle) (sq ft); default 512 |
| coldest_air_f | number | Average air temperature, coldest month you swim (°F); default 65 |
| start_water_f | number | Starting water temperature (°F); default 70 |
| gas_efficiency_pct |
Langelier Saturation Index for your pool or spa from pH, water temperature, calcium hardness and total alkalinity, using the factor table and formula in state pool rules, plus the pH that would balance it. Formula: SI = pH + TF + CF + AF − 12.1 (12.2 when TDS is above 1,000 ppm). TF, CF and AF come from the temperature, calcium hardness and alkalinity factor table; when a reading falls between rows the table method uses the next greater row. pH for SI = 0: 12.1 − TF − CF − AF.
| Argument | Type | Description |
|---|---|---|
| ph | number | pH; default 7.6 |
| method | string | Factor lookup; default table |
| temp_f | number | Water temperature (°F); default 86 |
| tds_ppm | number | Total dissolved solids (0 if unknown) (ppm); default 0 |
| calcium_ppm | number | Calcium hardness (ppm); default 380 |
| alkalinity_ppm | number | Total alkalinity (ppm); default 70 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ph": {
"type": "number",
"description": "pH; default 7.6"
},
"method": {
"enum": [
"table",
"interpolate"
],
"type": "string",
"description": "Factor lookup; default table"
},
"temp_f": {
"type": "number",
"description": "Water temperature (°F); default 86"
},
"tds_ppm": {
"type": "number",
"description": "Total dissolved solids (0 if unknown) (ppm); default 0"
},
"calcium_ppm": {
"type": "number",
"description": "Calcium hardness (ppm); default 380"
},
"alkalinity_ppm": {
"type": "number",
"description": "Total alkalinity (ppm); default 70"
}
}
}Pounds and bags of pool salt to raise a saltwater pool from its current salt level to the target your chlorine generator needs. Formula: Salt (lb) = gallons × 8.34 lb/gal × (target ppm − current ppm) ÷ 1,000,000. Bags = ⌈lb ÷ bag size⌉.
| Argument | Type | Description |
|---|---|---|
| bag_lb | number | Bag size (lb); default 40 |
| target_ppm | number | Target salt level (from your cell manual) (ppm); default 3200 |
| current_ppm | number | Current salt level (test strip or meter) (ppm); default 0 |
| pool_gallons | number | Pool volume (gal); default 15000 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bag_lb": {
"type": "number",
"description": "Bag size (lb); default 40"
},
"target_ppm": {
"type": "number",
"description": "Target salt level (from your cell manual) (ppm); default 3200"
},
"current_ppm": {
"type": "number",
"description": "Current salt level (test strip or meter) (ppm); default 0"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 15000"
}
}
}How much stabilizer (cyanuric acid, CYA) raises your pool to a target level, or how much water to drain and refill to lower it. Formula: Raise: stabilizer (oz) = (target − current) ÷ 10 × gallons ÷ 10,000 × 13. Lower (dilution): share to drain = (current − target) ÷ (current − fill water); gallons = share × pool volume.
| Argument | Type | Description |
|---|---|---|
| target_ppm | number | Target cyanuric acid (from your pool builder or test kit guide) (ppm); default 40 |
| current_ppm | number | Current cyanuric acid (test result) (ppm); default 0 |
| pool_gallons | number | Pool volume (gal); default 15000 |
| fill_water_ppm | number | Cyanuric acid in your fill water (ppm); default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target_ppm": {
"type": "number",
"description": "Target cyanuric acid (from your pool builder or test kit guide) (ppm); default 40"
},
"current_ppm": {
"type": "number",
"description": "Current cyanuric acid (test result) (ppm); default 0"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 15000"
},
"fill_water_ppm": {
"type": "number",
"description": "Cyanuric acid in your fill water (ppm); default 0"
}
}
}The flow rate (gpm) your pool pump must deliver for a target turnover time, your actual turnover from a flow meter reading, and whether your filter is big enough for that flow. Formula: Required flow (gpm) = gallons ÷ (turnover hours × 60). Actual turnover (hours) = gallons ÷ (measured gpm × 60). Filter max flow = filter area × rated gpm per sq ft.
| Argument | Type | Description |
|---|---|---|
| measured_gpm | number | Flow meter reading (0 to skip) (gpm); default 60 |
| pool_gallons | number | Pool volume (gal); default 36000 |
| turnover_hours | number | Target turnover time (hours); default 6 |
| filter_area_sqft | number | Filter area (from the filter label, 0 to skip) (sq ft); default 0 |
| filter_rate_gpm_per_sqft | number | Max filter rate (from the filter label) (gpm/sq ft); default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"measured_gpm": {
"type": "number",
"description": "Flow meter reading (0 to skip) (gpm); default 60"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (gal); default 36000"
},
"turnover_hours": {
"type": "number",
"description": "Target turnover time (hours); default 6"
},
"filter_area_sqft": {
"type": "number",
"description": "Filter area (from the filter label, 0 to skip) (sq ft); default 0"
},
"filter_rate_gpm_per_sqft": {
"type": "number",
"description": "Max filter rate (from the filter label) (gpm/sq ft); default 0"
}
}
}Gallons in a rectangular pool with a sloped bottom, using average depth. Formula: Gallons = L × W × (shallow + deep)/2 × 7.48052 gal/cu ft.
| Argument | Type | Description |
|---|---|---|
| deep_ft | number | Deep-end depth (ft); default 6 |
| width_ft | number | Width (ft); default 16 |
| length_ft | number | Length (ft); default 32 |
| shallow_ft | number | Shallow-end depth (ft); default 3.5 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"deep_ft": {
"type": "number",
"description": "Deep-end depth (ft); default 6"
},
"width_ft": {
"type": "number",
"description": "Width (ft); default 16"
},
"length_ft": {
"type": "number",
"description": "Length (ft); default 32"
},
"shallow_ft": {
"type": "number",
"description": "Shallow-end depth (ft); default 3.5"
}
}
}Common rafter length, ridge rise and roof angle from the horizontal run and pitch, with optional overhang. Formula: Pitch factor = √(1 + (rise/12)²). Rafter length = (run + overhang) × pitch factor. Ridge rise = run × rise ÷ 12. Angle = atan(rise ÷ 12).
| Argument | Type | Description |
|---|---|---|
| run_ft | number | Horizontal run (half the span, minus half the ridge board) (ft); default 14 |
| pitch_rise | number | Pitch (rise per 12 in of run) (in); default 6 |
| overhang_in | number | Horizontal overhang (eave) (in); default 12 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"run_ft": {
"type": "number",
"description": "Horizontal run (half the span, minus half the ridge board) (ft); default 14"
},
"pitch_rise": {
"type": "number",
"description": "Pitch (rise per 12 in of run) (in); default 6"
},
"overhang_in": {
"type": "number",
"description": "Horizontal overhang (eave) (in); default 12"
}
}
}How much rebar a rectangular slab grid needs: bar count each way, lap splices, total linear feet, 20 ft sticks to order and steel weight from ASTM A615 bar weights. Formula: Bars each way = ⌊(clear span ÷ spacing)⌋ + 1, where clear span = side × 12 − 2 × edge clearance. A run longer than one stick needs ⌈(run − lap) ÷ (stick − lap)⌉ pieces, adding one lap per joint; lap = bar diameters × bar diameter. Linear ft = (bars × run + splices × lap) ÷ 12; sticks = ⌈linear ft × (1 + allowance) ÷ stick length⌉; weight = linear ft × ASTM A615 lb/ft.
| Argument | Type | Description |
|---|---|---|
| bar | string | Bar size; default 4 |
| edge_in | number | Edge clearance each side (in); default 3 |
| width_ft | number | Slab width (ft); default 24 |
| length_ft | number | Slab length (ft); default 30 |
| waste_pct | number | Cut-off allowance (%); default 5 |
| spacing_in | number | Bar spacing on center (from your plans) (in); default 12 |
| stock_length_ft | number | Stick length (ft); default 20 |
| lap_bar_diameters | number |
How many retaining wall blocks you need for a straight wall or a circle (fire pit, tree ring), including the buried course, cap units, base gravel for the leveling pad and drainage rock behind the wall. Block sizes are editable because every product line differs. Formula: Buried depth = max(exposed height ÷ bury ratio, minimum). Courses = ⌈(exposed height + buried depth − cap height) ÷ block height⌉. Blocks per course = ⌈run ÷ block face length⌉, where run = wall length, or π × outside diameter for a circle. Wall blocks = ⌈blocks per course × courses × (1 + waste%)⌉; caps = ⌈run ÷ cap length × (1 + waste%)⌉. Base gravel cu yd = run(ft) × trench width(in) × base depth(in) ÷ 144 ÷ 27; drainage rock cu yd = run(ft) × zone depth(in) × stacked block height(in) ÷ 144 ÷ 27 (straight walls only).
| Argument | Type | Description |
|---|---|---|
| shape | string | Wall shape; default straight |
| waste_pct | number | Block waste/cut allowance (%); default 5 |
| min_bury_in | number | Minimum buried depth (from your block maker) (in); default 6 |
| base_depth_in | number | Compacted base depth (in); default 6 |
| bury_ratio_in | number | Bury 1 in of block for every __ in of exposed height (from your block maker) (in); default 8 |
| cap_height_in | number | Cap height (0 = no caps) (in); default 0 |
Roof area from the house footprint and pitch, converted to roofing squares (100 sq ft) and shingle bundles. Formula: Pitch factor = √(1 + (rise/12)²). Roof area = (L + 2×overhang) × (W + 2×overhang) × pitch factor. Squares = area ÷ 100 × (1 + waste%).
| Argument | Type | Description |
|---|---|---|
| waste_pct | number | Waste allowance (%); default 10 |
| pitch_rise | number | Pitch (rise per 12 in run) (in); default 6 |
| overhang_in | number | Eave/rake overhang (in); default 12 |
| bundles_per_square | number | Bundles per square (see wrapper); default 3 |
| footprint_width_ft | number | Footprint width (ft); default 30 |
| footprint_length_ft | number | Footprint length (ft); default 40 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"pitch_rise": {
"type": "number",
"description": "Pitch (rise per 12 in run) (in); default 6"
},
"overhang_in": {
"type": "number",
"description": "Eave/rake overhang (in); default 12"
},
"bundles_per_square": {
"type": "number",
"description": "Bundles per square (see wrapper); default 3"
},
"footprint_width_ft": {
"type": "number",
"description": "Footprint width (ft); default 30"
},
"footprint_length_ft": {
"type": "number",
"description": "Footprint length (ft); default 40"
}
}
}Gallons in a round or above-ground pool. Formula: Gallons = π × (D/2)² × average depth × 7.48052 (≈ D² × depth × 5.875).
| Argument | Type | Description |
|---|---|---|
| diameter_ft | number | Diameter (ft); default 24 |
| avg_depth_ft | number | Average water depth (ft); default 4.5 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"diameter_ft": {
"type": "number",
"description": "Diameter (ft); default 24"
},
"avg_depth_ft": {
"type": "number",
"description": "Average water depth (ft); default 4.5"
}
}
}Minimum septic tank size, pump tank size and drainfield area for a single-family home under Florida Rule 62-6.008, from bedrooms, building area and soil type. Formula: Design flow = the larger of the bedroom flow (100 gpd per bedroom up to 4, then +60 per bedroom) and the building-area flow (100 gpd to 750 sq ft, 200 to 1,200, 300 to 2,250, 400 to 3,300, then +60 per extra 750 sq ft or fraction), per Table I and its footnote 4. Septic tank and pump tank minimums come from Table II for that flow. Drainfield area = max(flow, 200 gpd) ÷ the Table III loading rate for the soil and trench or bed.
| Argument | Type | Description |
|---|---|---|
| soil | string | Soil (from the site evaluation); default slight |
| bedrooms | number | Bedrooms; default 3 |
| drainfield | string | Drainfield type; default trench |
| building_sqft | number | Building area (sq ft); default 2000 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"soil": {
"enum": [
"slight",
"moderate",
"moderate_slow"
],
"type": "string",
"description": "Soil (from the site evaluation); default slight"
},
"bedrooms": {
"type": "number",
"description": "Bedrooms; default 3"
},
"drainfield": {
"enum": [
"trench",
"bed"
],
"type": "string",
"description": "Drainfield type; default trench"
},
"building_sqft": {
"type": "number",
"description": "Building area (sq ft); default 2000"
}
}
}Square feet of sod, number of pieces and pallets for a lawn area. Piece size and pallet coverage are editable because they vary by farm and grass type. Formula: Sq ft to buy = L × W × (1 + waste%); pieces = sq ft ÷ (piece length × width ÷ 144); pallets = sq ft ÷ pallet coverage.
| Argument | Type | Description |
|---|---|---|
| width_ft | number | Lawn width (ft); default 40 |
| length_ft | number | Lawn length (ft); default 50 |
| waste_pct | number | Waste allowance (%); default 5 |
| pallet_sqft | number | Coverage per pallet (ask your supplier) (sq ft); default 400 |
| piece_width_in | number | Piece width (ask your supplier) (in); default 16 |
| piece_length_in | number | Piece length (ask your supplier) (in); default 24 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"width_ft": {
"type": "number",
"description": "Lawn width (ft); default 40"
},
"length_ft": {
"type": "number",
"description": "Lawn length (ft); default 50"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 5"
},
"pallet_sqft": {
"type": "number",
"description": "Coverage per pallet (ask your supplier) (sq ft); default 400"
},
"piece_width_in": {
"type": "number",
"description": "Piece width (ask your supplier) (in); default 16"
},
"piece_length_in": {
"type": "number",
"description": "Piece length (ask your supplier) (in); default 24"
}
}
}Panels needed to offset annual electricity use, from panel wattage, peak sun hours and system losses. Formula: Annual kWh per panel = W/1000 × peak sun hours × 365 × (1 − losses). Panels = ⌈annual use ÷ kWh per panel⌉.
| Argument | Type | Description |
|---|---|---|
| annual_kwh | number | Annual usage (from your bills) (kWh); default 12000 |
| panel_watts | number | Panel rating (W); default 400 |
| peak_sun_hours | number | Peak sun hours/day (look up in PVWatts) (h); default 5 |
| system_losses_pct | number | System losses (%); default 14 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"annual_kwh": {
"type": "number",
"description": "Annual usage (from your bills) (kWh); default 12000"
},
"panel_watts": {
"type": "number",
"description": "Panel rating (W); default 400"
},
"peak_sun_hours": {
"type": "number",
"description": "Peak sun hours/day (look up in PVWatts) (h); default 5"
},
"system_losses_pct": {
"type": "number",
"description": "System losses (%); default 14"
}
}
}Number of risers and treads, exact riser height, total run and stringer length from the floor-to-floor rise, checked against the IRC 7¾ in maximum riser. Formula: Risers = ⌈total rise ÷ max riser⌉; riser height = total rise ÷ risers; treads = risers − 1; total run = treads × tread depth; stringer length = √(rise² + run²).
| Argument | Type | Description |
|---|---|---|
| max_riser_in | number | Maximum riser height allowed (in); default 7.75 |
| total_rise_in | number | Total rise (finished floor to finished floor) (in); default 108 |
| tread_depth_in | number | Tread depth (run per step) (in); default 10 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"max_riser_in": {
"type": "number",
"description": "Maximum riser height allowed (in); default 7.75"
},
"total_rise_in": {
"type": "number",
"description": "Total rise (finished floor to finished floor) (in); default 108"
},
"tread_depth_in": {
"type": "number",
"description": "Tread depth (run per step) (in); default 10"
}
}
}Size a tankless water heater from your peak hot-water flow and the rise from winter inlet temperature to your setpoint: required Btu/h, gas input, electric kW and amps. Formula: Temperature rise = setpoint − inlet. Heat output (Btu/h) = gpm × 8.34 lb/gal × 60 min × rise. Gas input = output ÷ efficiency. Electric kW = output ÷ 3,412.14; amps = kW × 1,000 ÷ volts.
| Argument | Type | Description |
|---|---|---|
| volts | number | Electric supply voltage (V); default 240 |
| inlet_f | number | Coldest incoming water temperature (winter) (°F); default 52 |
| outlet_f | number | Hot water setpoint (°F); default 120 |
| peak_gpm | number | Peak hot-water flow (fixtures used at the same time) (gpm); default 4.5 |
| gas_efficiency_pct | number | Gas unit efficiency (spec sheet) (%); default 82 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"volts": {
"type": "number",
"description": "Electric supply voltage (V); default 240"
},
"inlet_f": {
"type": "number",
"description": "Coldest incoming water temperature (winter) (°F); default 52"
},
"outlet_f": {
"type": "number",
"description": "Hot water setpoint (°F); default 120"
},
"peak_gpm": {
"type": "number",
"description": "Peak hot-water flow (fixtures used at the same time) (gpm); default 4.5"
},
"gas_efficiency_pct": {
"type": "number",
"description": "Gas unit efficiency (spec sheet) (%); default 82"
}
}
}How many bags of thin-set mortar to buy for your tile area and trowel notch, from manufacturer coverage per 50 lb bag, with a conservative and a best-case count. Formula: Bags = area × (1 + allowance) ÷ coverage per bag, rounded up, at the low and high ends of the coverage range. Data-sheet coverage per 50 lb bag: 1/4 × 1/4 in 80–95 sq ft, 1/4 × 3/8 in 60–70, 1/2 × 1/2 in 35–40 (scaled for other bag sizes).
| Argument | Type | Description |
|---|---|---|
| bag_lb | number | Bag size (lb); default 50 |
| trowel | string | Square-notch trowel; default 1/4x3/8 |
| area_sqft | number | Tile area (sq ft); default 150 |
| waste_pct | number | Extra allowance (%); default 0 |
| coverage_sqft_per_bag | number | Coverage from your bag label (0 = use the data sheet) (sq ft); default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bag_lb": {
"type": "number",
"description": "Bag size (lb); default 50"
},
"trowel": {
"enum": [
"1/4x1/4",
"1/4x3/8",
"1/2x1/2"
],
"type": "string",
"description": "Square-notch trowel; default 1/4x3/8"
},
"area_sqft": {
"type": "number",
"description": "Tile area (sq ft); default 150"
},
"waste_pct": {
"type": "number",
"description": "Extra allowance (%); default 0"
},
"coverage_sqft_per_bag": {
"type": "number",
"description": "Coverage from your bag label (0 = use the data sheet) (sq ft); default 0"
}
}
}Voltage drop for a single- or three-phase run using NEC Chapter 9 Table 8 conductor sizes. Formula: VD = 2 × K × I × L ÷ CM (single phase) or √3 × K × I × L ÷ CM (three phase); K = ohm·cmil/ft (approx. 12.9 Cu, 21.2 Al); CM from NEC Ch. 9 Table 8.
| Argument | Type | Description |
|---|---|---|
| awg | string | Wire size (AWG); default 12 |
| amps | number | Load current (A); default 16 |
| phase | number | Phase; default 1; one of 1 = Single phase, 3 = Three phase |
| volts | number | Source voltage (V); default 120 |
| material | string | Conductor; default copper |
| one_way_ft | number | One-way length (ft); default 100 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"awg": {
"enum": [
"1",
"2",
"3",
"4",
"6",
"8",
"10",
"12",
"14",
"1/0",
"2/0",
"3/0",
"4/0"
],
"type": "string",
"description": "Wire size (AWG); default 12"
},
"amps": {
"type": "number",
"description": "Load current (A); default 16"
},
"phase": {
"type": "number",
"description": "Phase; default 1; one of 1 = Single phase, 3 = Three phase"
},
"volts": {
"type": "number",
"description": "Source voltage (V); default 120"
},
"material": {
"enum": [
"copper",
"aluminum"
],
"type": "string",
"description": "Conductor; default copper"
},
"one_way_ft": {
"type": "number",
"description": "One-way length (ft); default 100"
}
}
}Studs at 16 or 24 in on center for a wall length, plus extras for corners and openings, and linear feet of top and bottom plate. Formula: Studs on layout = ⌈length(in) ÷ spacing⌉ + 1; total = layout + corners × extras per corner + openings × extras per opening. Plate linear ft = length × plates.
| Argument | Type | Description |
|---|---|---|
| plates | number | Plates (bottom + double top = 3); default 3 |
| corners | number | Corners in this wall; default 2 |
| openings | number | Door/window openings; default 1 |
| spacing_in | number | Stud spacing (on center); default 16; one of 16 = 16 in o.c., 24 = 24 in o.c., 12 = 12 in o.c. |
| wall_length_ft | number | Wall length (ft); default 20 |
| studs_per_corner | number | Extra studs per corner; default 2 |
| studs_per_opening | number | Extra studs per opening (king/jack); default 2 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"plates": {
"type": "number",
"description": "Plates (bottom + double top = 3); default 3"
},
"corners": {
"type": "number",
"description": "Corners in this wall; default 2"
},
"openings": {
"type": "number",
"description": "Door/window openings; default 1"
},
"spacing_in": {
"type": "number",
"description": "Stud spacing (on center); default 16; one of 16 = 16 in o.c., 24 = 24 in o.c., 12 = 12 in o.c."
},
"wall_length_ft": {
"type": "number",
"description": "Wall length (ft); default 20"
},
"studs_per_corner": {
"type": "number",
"description": "Extra studs per corner; default 2"
},
"studs_per_opening": {
"type": "number",
"description": "Extra studs per opening (king/jack); default 2"
}
}
}Search federal contract and grant awards from the official USAspending.gov API by keyword, NAICS, state, date and amount.
| Argument | Type | Description |
|---|---|---|
| to | string | End date YYYY-MM-DD |
| from | string | Start date YYYY-MM-DD |
| limit | integer | Max awards, 1-500 |
| naics | string | NAICS code, e.g. 238160 |
| states | string | Comma-separated state codes, e.g. FL,GA |
| category | string | contracts or grants |
| keywords | string | Search words, e.g. roofing |
| minAmount | number | Minimum award amount in USD |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "End date YYYY-MM-DD"
},
"from": {
"type": "string",
"description": "Start date YYYY-MM-DD"
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max awards, 1-500"
},
"naics": {
"type": "string",
"description": "NAICS code, e.g. 238160"
},
"states": {
"type": "string",
"description": "Comma-separated state codes, e.g. FL,GA"
},
"category": {
"type": "string",
"description": "contracts or grants"
},
"keywords": {
"type": "string",
"description": "Search words, e.g. roofing"
},
"minAmount": {
"type": "number",
"description": "Minimum award amount in USD"
}
}
}Search Florida DBPR contractor licenses (official public extract files) by county, trade and issue date. Business records only.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max rows, 1-1000 |
| since | string | Only licenses issued on/after this date, YYYY-MM-DD |
| trade | string | Trade keyword, e.g. roofing, pool, solar, general |
| county | string | Florida county name, e.g. Palm Beach |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Max rows, 1-1000"
},
"since": {
"type": "string",
"description": "Only licenses issued on/after this date, YYYY-MM-DD"
},
"trade": {
"type": "string",
"description": "Trade keyword, e.g. roofing, pool, solar, general"
},
"county": {
"type": "string",
"description": "Florida county name, e.g. Palm Beach"
}
}
}CustomLab.ai AI operations automation offer from pack JSON. No price, SKU or Payment Link; CTA is a free 30-minute fit call.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Managed AI Front Office (flagship retainer) facts from pack JSON. HUMAN-GATED: recommend -> human Accept -> written scope -> pay. Agents must not purchase unsupervised.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List offers in the agent GEO pack (ids + names + status). Read-only.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Extract URLs from a public sitemap (follows sitemap indexes).
| Argument | Type | Description |
|---|---|---|
| max | integer | Maximum URLs to return, 1-5000 |
| url* | string | Sitemap URL or site root (robots.txt Sitemap: lines are followed) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"max": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Maximum URLs to return, 1-5000"
},
"url": {
"type": "string",
"description": "Sitemap URL or site root (robots.txt Sitemap: lines are followed)"
}
}
}Recent building permits from Miami-Dade County and Fort Lauderdale open data, filterable by date and keyword. Owner names excluded.
| Argument | Type | Description |
|---|---|---|
| to | string | End date YYYY-MM-DD |
| from | string | Start date YYYY-MM-DD |
| limit | integer | Max rows, 1-1000 |
| source | string | miami-dade or fort-lauderdale |
| keyword | string | Filter permit descriptions, e.g. roof |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "End date YYYY-MM-DD"
},
"from": {
"type": "string",
"description": "Start date YYYY-MM-DD"
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Max rows, 1-1000"
},
"source": {
"type": "string",
"description": "miami-dade or fort-lauderdale"
},
"keyword": {
"type": "string",
"description": "Filter permit descriptions, e.g. roof"
}
}
}| 12 AWG conductors; default 0 |
| count_14 | number | 14 AWG conductors; default 4 |
| box_volume_cuin | number | Marked box volume (for "Other") (cu in); default 0 |
| support_fittings | number | Luminaire stud/hickey types present; default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"box": {
"enum": [
"oct_4x1_25",
"oct_4x1_5",
"oct_4x2_125",
"sq_4x1_25",
"sq_4x1_5",
"sq_4x2_125",
"sq_4l_1_5",
"sq_4l_2_125",
"dev_3x2x2",
"dev_3x2x2_25",
"dev_3x2x2_5",
"dev_3x2x2_75",
"dev_3x2x3_5",
"fs_single",
"fd_single",
"custom"
],
"type": "string",
"description": "Box; default dev_3x2x2_5"
},
"yokes": {
"type": "number",
"description": "Devices (yokes/straps: switch, receptacle); default 1"
},
"clamps": {
"type": "number",
"description": "Internal cable clamps; default 0; one of 0 = None, 1 = Yes (one or more)"
},
"count_6": {
"type": "number",
"description": "6 AWG conductors; default 0"
},
"count_8": {
"type": "number",
"description": "8 AWG conductors; default 0"
},
"grounds": {
"type": "number",
"description": "Equipment grounding conductors; default 1; one of 1 = Yes (one or more), 0 = None"
},
"count_10": {
"type": "number",
"description": "10 AWG conductors; default 0"
},
"count_12": {
"type": "number",
"description": "12 AWG conductors; default 0"
},
"count_14": {
"type": "number",
"description": "14 AWG conductors; default 4"
},
"box_volume_cuin": {
"type": "number",
"description": "Marked box volume (for \"Other\") (cu in); default 0"
},
"support_fittings": {
"type": "number",
"description": "Luminaire stud/hickey types present; default 0"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"bag_yield_cf": {
"type": "number",
"description": "Bag yield (from the bag) (cu ft/bag); default 0.6"
},
"max_riser_in": {
"type": "number",
"description": "Max riser height (IRC 7¾ in; check your local code) (in); default 7.75"
},
"step_width_ft": {
"type": "number",
"description": "Step width (ft); default 4"
},
"total_rise_in": {
"type": "number",
"description": "Total rise (ground to top of landing) (in); default 21"
},
"tread_depth_in": {
"type": "number",
"description": "Tread depth (in); default 11"
},
"landing_depth_in": {
"type": "number",
"description": "Top landing depth (0 = no landing) (in); default 36"
}
}
}| central_ac_24k | number | Central AC, 24,000 BTU (2 ton): how many (3,800 W running, +4,950 W to start); default 0 |
| central_ac_40k | number | Central AC, 40,000 BTU: how many (6,000 W running, +6,700 W to start); default 0 |
| microwave_1000w | number | Microwave, 1,000 W: how many (1,000 W running); default 1 |
| other_running_w | number | Other running watts (TV, router, chargers: from nameplates) (W); default 300 |
| washing_machine | number | Washing machine: how many (1,150 W running, +2,250 W to start); default 0 |
| other_starting_w | number | Extra starting watts of your largest other motor (0 if none) (W); default 0 |
| sump_pump_half_hp | number | Sump pump, 1/2 HP: how many (1,050 W running, +2,200 W to start); default 0 |
| well_pump_third_hp | number | Water well pump, 1/3 HP: how many (1,000 W running, +2,200 W to start); default 0 |
| furnace_fan_half_hp | number | Furnace fan blower, 1/2 HP: how many (800 W running, +2,350 W to start); default 0 |
| garage_door_half_hp | number | Garage door opener, 1/2 HP: how many (875 W running, +2,350 W to start); default 0 |
| electric_water_heater | number | Electric water heater: how many (4,000 W running); default 0 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"box_fan": {
"type": "number",
"description": "Box fan, 20 in: how many (200 W running); default 0"
},
"light_60w": {
"type": "number",
"description": "Light bulb, 60 W: how many (60 W running); default 4"
},
"margin_pct": {
"type": "number",
"description": "Safety margin (your choice) (%); default 10"
},
"coffee_maker": {
"type": "number",
"description": "Coffee maker: how many (1,000 W running); default 0"
},
"refrigerator": {
"type": "number",
"description": "Refrigerator/freezer: how many (700 W running, +2,200 W to start); default 1"
},
"space_heater": {
"type": "number",
"description": "Space heater: how many (1,800 W running); default 0"
},
"window_ac_10k": {
"type": "number",
"description": "Window AC, 10,000 BTU: how many (1,200 W running, +1,800 W to start); default 1"
},
"central_ac_24k": {
"type": "number",
"description": "Central AC, 24,000 BTU (2 ton): how many (3,800 W running, +4,950 W to start); default 0"
},
"central_ac_40k": {
"type": "number",
"description": "Central AC, 40,000 BTU: how many (6,000 W running, +6,700 W to start); default 0"
},
"microwave_1000w": {
"type": "number",
"description": "Microwave, 1,000 W: how many (1,000 W running); default 1"
},
"other_running_w": {
"type": "number",
"description": "Other running watts (TV, router, chargers: from nameplates) (W); default 300"
},
"washing_machine": {
"type": "number",
"description": "Washing machine: how many (1,150 W running, +2,250 W to start); default 0"
},
"other_starting_w": {
"type": "number",
"description": "Extra starting watts of your largest other motor (0 if none) (W); default 0"
},
"sump_pump_half_hp": {
"type": "number",
"description": "Sump pump, 1/2 HP: how many (1,050 W running, +2,200 W to start); default 0"
},
"well_pump_third_hp": {
"type": "number",
"description": "Water well pump, 1/3 HP: how many (1,000 W running, +2,200 W to start); default 0"
},
"furnace_fan_half_hp": {
"type": "number",
"description": "Furnace fan blower, 1/2 HP: how many (800 W running, +2,350 W to start); default 0"
},
"garage_door_half_hp": {
"type": "number",
"description": "Garage door opener, 1/2 HP: how many (875 W running, +2,350 W to start); default 0"
},
"electric_water_heater": {
"type": "number",
"description": "Electric water heater: how many (4,000 W running); default 0"
}
}
}| number |
| Tile length (in); default 12 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bag_lb": {
"type": "number",
"description": "Bag size (lb); default 25"
},
"area_sqft": {
"type": "number",
"description": "Tiled area (sq ft); default 100"
},
"waste_pct": {
"type": "number",
"description": "Waste allowance (%); default 10"
},
"density_lb_cf": {
"type": "number",
"description": "Grout weight per cubic foot of joint (from your grout data sheet; ~100 sanded, ~85 unsanded) (lb/cu ft); default 100"
},
"tile_width_in": {
"type": "number",
"description": "Tile width (in); default 12"
},
"joint_depth_in": {
"type": "number",
"description": "Joint depth (usually tile thickness) (in); default 0.375"
},
"joint_width_in": {
"type": "number",
"description": "Joint width (1/8 in = 0.125) (in); default 0.125"
},
"tile_length_in": {
"type": "number",
"description": "Tile length (in); default 12"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slope": {
"enum": [
"1/64",
"1/32",
"1/16",
"1/8",
"1/4"
],
"type": "string",
"description": "Gutter slope; default 1/16"
},
"gutter": {
"enum": [
"alum5",
"alum6",
"galv5",
"galv6",
"galv7",
"semi6"
],
"type": "string",
"description": "Gutter; default alum5"
},
"downspout": {
"enum": [
"2x3",
"3x4",
"4x5",
"5x6",
"r3",
"r4",
"r5"
],
"type": "string",
"description": "Downspout; default 2x3"
},
"gutter_run_ft": {
"type": "number",
"description": "Gutter run length (ft); default 40"
},
"rain_in_per_hr": {
"type": "number",
"description": "Design rainfall intensity (5-minute depth from NOAA Atlas 14 × 12) (in/hr); default 6"
},
"roof_area_sqft": {
"type": "number",
"description": "Roof area draining to this gutter (plan view, not slope length) (sq ft); default 1200"
},
"max_run_per_downspout_ft": {
"type": "number",
"description": "Max gutter length per downspout (SMACNA practical max 50 ft) (ft); default 50"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bond": {
"enum": [
"running",
"common6",
"english",
"flemish"
],
"type": "string",
"description": "Bond pattern (brick); default running"
},
"unit": {
"enum": [
"modular",
"engineer_modular",
"closure_modular",
"roman",
"norman",
"utility",
"queen",
"king",
"standard",
"cmu"
],
"type": "string",
"description": "Unit; default modular"
},
"joint_in": {
"type": "number",
"description": "Mortar joint (brick); default 0.375; one of 0.375 = 3/8 in, 0.5 = 1/2 in"
},
"wall_sqft": {
"type": "number",
"description": "Wall area (minus openings) (sq ft); default 100"
},
"units_per_bag": {
"type": "number",
"description": "Units per 80 lb bag (0 = 37 brick / 13 block); default 0"
},
"brick_waste_pct": {
"type": "number",
"description": "Unit waste (%); default 5"
},
"mortar_waste_pct": {
"type": "number",
"description": "Mortar waste (%); default 20"
}
}
}| number |
| Gas heater efficiency (nameplate) (%); default 80 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"heatup_rate": {
"type": "number",
"description": "Heat-up rate; default 1; one of 1 = 1 to 1¼ °F per hour (DOE base), 1.5 = 1½ °F per hour (×1.5), 2 = 2 °F per hour (×2)"
},
"pool_temp_f": {
"type": "number",
"description": "Desired pool temperature (°F); default 80"
},
"pool_gallons": {
"type": "number",
"description": "Pool volume (optional, for warm-up time) (gal); default 22000"
},
"surface_sqft": {
"type": "number",
"description": "Pool surface area (length × width for a rectangle) (sq ft); default 512"
},
"coldest_air_f": {
"type": "number",
"description": "Average air temperature, coldest month you swim (°F); default 65"
},
"start_water_f": {
"type": "number",
"description": "Starting water temperature (°F); default 70"
},
"gas_efficiency_pct": {
"type": "number",
"description": "Gas heater efficiency (nameplate) (%); default 80"
}
}
}| Lap splice length in bar diameters (from your plans or engineer); default 40 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bar": {
"enum": [
"3",
"4",
"5",
"6"
],
"type": "string",
"description": "Bar size; default 4"
},
"edge_in": {
"type": "number",
"description": "Edge clearance each side (in); default 3"
},
"width_ft": {
"type": "number",
"description": "Slab width (ft); default 24"
},
"length_ft": {
"type": "number",
"description": "Slab length (ft); default 30"
},
"waste_pct": {
"type": "number",
"description": "Cut-off allowance (%); default 5"
},
"spacing_in": {
"type": "number",
"description": "Bar spacing on center (from your plans) (in); default 12"
},
"stock_length_ft": {
"type": "number",
"description": "Stick length (ft); default 20"
},
"lap_bar_diameters": {
"type": "number",
"description": "Lap splice length in bar diameters (from your plans or engineer); default 40"
}
}
}| cap_length_in | number | Cap face length (in); default 12 |
| drain_zone_in | number | Drainage rock zone behind the block (in); default 12 |
| block_height_in | number | Block height (from the block label) (in); default 4 |
| block_length_in | number | Block face length (from the block label) (in); default 12 |
| trench_width_in | number | Base trench width (in); default 24 |
| exposed_height_in | number | Exposed wall height above grade (including cap) (in); default 24 |
| length_or_diameter_ft | number | Wall length (straight) or outside diameter (circle) (ft); default 20 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"shape": {
"enum": [
"straight",
"circle"
],
"type": "string",
"description": "Wall shape; default straight"
},
"waste_pct": {
"type": "number",
"description": "Block waste/cut allowance (%); default 5"
},
"min_bury_in": {
"type": "number",
"description": "Minimum buried depth (from your block maker) (in); default 6"
},
"base_depth_in": {
"type": "number",
"description": "Compacted base depth (in); default 6"
},
"bury_ratio_in": {
"type": "number",
"description": "Bury 1 in of block for every __ in of exposed height (from your block maker) (in); default 8"
},
"cap_height_in": {
"type": "number",
"description": "Cap height (0 = no caps) (in); default 0"
},
"cap_length_in": {
"type": "number",
"description": "Cap face length (in); default 12"
},
"drain_zone_in": {
"type": "number",
"description": "Drainage rock zone behind the block (in); default 12"
},
"block_height_in": {
"type": "number",
"description": "Block height (from the block label) (in); default 4"
},
"block_length_in": {
"type": "number",
"description": "Block face length (from the block label) (in); default 12"
},
"trench_width_in": {
"type": "number",
"description": "Base trench width (in); default 24"
},
"exposed_height_in": {
"type": "number",
"description": "Exposed wall height above grade (including cap) (in); default 24"
},
"length_or_diameter_ft": {
"type": "number",
"description": "Wall length (straight) or outside diameter (circle) (ft); default 20"
}
}
}