Gravity Forms template

Pool chemical dosing calculator template

Chlorine, shock, muriatic acid and baking soda doses from pool volume, test readings and the product in hand. Eight inputs, four calculation fields, no submit.

Try the live Pool chemical dosing calculator first
Template $9
  • Import-ready Gravity Forms JSON
  • One-page install guide
  • The plugins it needs, with links
Buy the template

What you'll need

Check these before you buy so there are no surprises. Links may be affiliate links.

Free build guide: Pool chemical dosing calculator for WordPress

This guide rebuilds the Pool chemical dosing calculator from this site in Gravity Forms: 8 inputs, 4 live results and no submit button. Expect about 36 minutes by hand. The template above is the same form as an import file, and the bundle adds a PDF version of this guide with a screenshot of every setting, plus the stylesheet.

You will end up with:

  • Chlorine to add
  • Shock dose (raise 10 ppm)
  • Muriatic acid to lower pH (fl oz)
  • Baking soda to raise alkalinity (lb)

What you need

Everything here is core Gravity Forms. No add-ons.

1. Create the form

  1. Go to Forms → New Form and name it Pool chemical dosing.
  2. In Form Settings → Form Layout, set the CSS Class Name to fo-live-only. Step 3 uses it to hide the submit button.
  3. Leave the form open in the editor; the fields come next.

2. Add the fields, in this order

Field IDs are assigned as you add fields. If yours come out differently, change the {Label:ID} references in the formulas to match your IDs. Settings not mentioned stay at their defaults.

1. Pool volume (gallons) · Number · ID 1
Number Format 9,999.99; Default Value 20000; Description “The Pool volume calculator on this site works it out from the dimensions.”.

2. Free chlorine now (ppm) · Number · ID 2
Number Format 9,999.99; Default Value 1; Description “From a test strip or kit.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

3. Target free chlorine (ppm) · Number · ID 3
Number Format 9,999.99; Default Value 3; Description “2–4 ppm for a residential pool; higher with cyanuric acid above 50.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

4. Chlorine product · Drop Down · ID 4

Choices (tick show values and enter each value):

  • Liquid chlorine 12.5% (fl oz) — value 10.7 (selected by default)
  • Household bleach 6% (fl oz) — value 21.3
  • Cal-hypo 65% granules (oz by weight) — value 2
  • Dichlor 56% granules (oz by weight) — value 2.4
  • Trichlor 90% (oz by weight) — value 1.5

5. pH now · Number · ID 5
Number Format 9,999.99; Default Value 7.8; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

6. Target pH · Number · ID 6
Number Format 9,999.99; Default Value 7.5; Description “7.4–7.6 is the range.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

7. Total alkalinity now (ppm) · Number · ID 7
Number Format 9,999.99; Default Value 60; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

8. Target alkalinity (ppm) · Number · ID 8
Number Format 9,999.99; Default Value 100; Description “80–120 ppm keeps pH steady.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed).

9. Chlorine to add · Number · ID 9
Number Format 9,999.99; Description “In the unit shown for the product. Add with the pump running, in the evening, and retest after an hour.”; Custom CSS Class (Appearance tab) fo-result; tick Enable Calculation, Rounding 1.

( {Target FC:3} - {FC now:2} ) * ( {Volume:1} / 10000 ) * {Product:4}

10. Shock dose (raise 10 ppm) · Number · ID 10
Number Format 9,999.99; Description “For algae or after heavy use. Keep swimmers out until chlorine drops below 5 ppm.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.

10 * ( {Volume:1} / 10000 ) * {Product:4}

11. Muriatic acid to lower pH (fl oz) · Number · ID 11
Number Format 9,999.99; Description “31.45% acid, about 8 fl oz per 10,000 gal per 0.1 pH at normal alkalinity. Add half, wait, retest. Negative means pH is already low.”; Layout: half width, on the same row as its neighbour (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.

( {pH now:5} - {Target pH:6} ) * 10 * 8 * ( {Volume:1} / 10000 )

12. Baking soda to raise alkalinity (lb) · Number · ID 12
Number Format 9,999.99; Description “1.5 lb per 10,000 gal raises alkalinity 10 ppm. Negative means it is already high.”; Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1.

( {Target TA:8} - {TA now:7} ) / 10 * 1.5 * ( {Volume:1} / 10000 )

3. Hide the submit button

The results are live, so nothing needs submitting. Add this filter to your theme’s functions.php or a code-snippets plugin; it hides the button on any form carrying the fo-live-only class:

add_filter( 'gform_submit_button', function ( $button, $form ) {
	return str_contains( (string) rgar( $form, 'cssClass' ), 'fo-live-only' ) ? '' : $button;
}, 10, 2 );

Or with CSS alone: .fo-live-only_wrapper .gform_footer { display: none; }

4. Put it on a page and make it look like this

Add the form to any page with the Gravity Forms block, or the shortcode [gravityform id="X" title="false" ajax="false"]. The form inherits your theme’s styles; the classes you set in step 2 are hooks for the look you see on this site:

  • fo-result on a calculation field makes it the big teal result panel.
  • fo-result fo-result--sub makes the smaller secondary figures.
  • fo-segmented on a radio field turns it into a segmented switch.
  • Two fields on one row is the editor’s own column layout: drag a field beside another and the row splits in half. No CSS class is needed, and the old gf_left_half Ready Classes are deprecated.

The bundle includes the two stylesheets that implement those classes, with notes on matching your brand colours. Without them the form still works; it just looks like your theme’s default Gravity Forms styling.

How the maths works is explained under “How it’s calculated” on the live Pool chemical dosing calculator.