How we estimate

This page explains how the BIY app works out what you need to buy. It has two sections, because the two tools work from different sources: the Estimator, for building a house, and the Workshop, for things you build yourself.

Contents

  1. Section 1 · Estimator
    1. Cement bag size
    2. Concrete mixtures
    3. Mortar mixtures
    4. Hollow-block walls
    5. Cement plaster
    6. Tile adhesive
    7. Reference tables
    8. Calculations and formulas
    9. Formula language
    10. Worked examples
    11. Materials
  2. Section 2 · Workshop
    1. Supply formulas
    2. Fixed numbers
    3. Values the app gives to the formulas
    4. What BIY adds
    5. How a supply is matched to what we sell
    6. Materials and units

Section 1 · Estimator

The Estimator in the BIY app and the numbers in this section come from the same source. Every table, every formula and every worked example below is read directly from our store data, so what you see here is exactly what the app uses. If a number is ever corrected, this page and the app change together.

Data version 1 · updated 2026-10-17
Estimates are for planning only. Quantities are not rounded inside a calculation, so round up what you buy. Real needs vary with site conditions, workmanship and waste. Have a licensed professional confirm your plans before ordering or building.

Build It Yourself maintains these tables and formulas. Values marked † are calculated from the 40 kg figure using the method described on this page.

Cement bag size

Cement comes in 40 kg and 50 kg bags. Each table lists both. In the formulas the chosen size is the word bag, so a column named cement_40kg or cement_50kg is picked automatically.

† Marked values are calculated, not looked up: the 40 kg figure multiplied by the ratio between 50 kg and 40 kg cement for the same mixture class (concrete or mortar table above). The same method reproduces every 50 kg figure we have measured directly.

Concrete mixtures

Per cubic meter of concrete (concrete mixture table).

ClassProportionCement 40 kg bagsCement 50 kg bagsSand (cu. m.)Gravel (cu. m.)
AA1 : 1.5 : 312.09.50.51.0
A1 : 2 : 49.07.00.51.0
B1 : 2.5 : 57.56.00.51.0
C1 : 3 : 66.05.00.51.0

Mortar mixtures

Per cubic meter of mortar (mortar mixture table).

ClassProportionCement 40 kg bagsCement 50 kg bagsSand (cu. m.)
A1 : 218.014.51.0
B1 : 312.09.51.0
C1 : 49.07.01.0
D1 : 57.56.01.0

Hollow-block walls

Per square meter of wall (block wall table). Cement depends on the mortar class (A to D) and the bag size.

Block (cm)SizeBlocks / sq. m.Sand (cu. m.)A · 40 kgA · 50 kgB · 40 kgB · 50 kgC · 40 kgC · 50 kgD · 40 kgD · 50 kg
10 x 20 x 404 inch12.50.0435 0.7920.638† 0.5220.41325† 0.3940.306444† 0.3280.2624†
12.5 x 20 x 405 inch12.50.06395 1.1590.933639† 0.770.609583† 0.57850.449944† 0.48050.3844†
15 x 20 x 406 inch12.50.0844 1.5261.229278† 1.0180.805917† 0.7630.593444† 0.6330.5064†
20 x 20 x 408 inch12.50.125 2.261.820556† 1.51.1875† 1.1250.875† 0.9380.7504†

Cement plaster

Per square meter, one side (plaster table).

ThicknessSand (cu. m.)A · 40 kgA · 50 kgB · 40 kgB · 50 kgC · 40 kgC · 50 kgD · 40 kgD · 50 kg
8 mm0.008 0.1440.116† 0.0960.076† 0.0720.056† 0.060.048†
12 mm0.012 0.2160.174† 0.1440.114† 0.1080.084† 0.090.072†
16 mm0.016 0.2880.232† 0.1920.152† 0.1440.112† 0.120.096†
20 mm0.02 0.360.29† 0.240.19† 0.180.14† 0.150.12†
25 mm0.025 0.450.3625† 0.30.2375† 0.2250.175† 0.1880.1504†

Tile adhesive

Area covered by one bag of regular tile adhesive, by adhesive thickness.

ThicknessSq. m. per bag
3 mm5.0
6 mm2.6
10 mm1.5

Constants

ConstantValueUnitSource
Tile adhesive pieces per bag of cement in the tile bed
tile_adhesive_per_cement_bag
2.0piecesTile adhesive calculation, tile-bed formula
Cement per cu. m. of sand-cement tile bed (40 kg bags)
tile_bed_cement_bags_per_cubic_m_40kg
12.0bags per cu. m.Tile adhesive calculation, cement formula
Cement per cu. m. of sand-cement tile bed (50 kg bags)
tile_bed_cement_bags_per_cubic_m_50kg
9.5 †bags per cu. m.derived

Reference tables

Lookup tables that the calculations read row by row.

Quantity of cement, sand and gravel for slab and walls per sq. m. of area

Table 1-3

RowThickness (cm)Cement A 40 kgCement A 50 kgCement B 40 kgCement B 50 kgCement C 40 kgCement C 50 kgSand (cu. m.)Gravel (cu. m.)
5.0 cm5.00.450.350.3750.30.30.250.0250.05
7.5 cm7.50.6750.5250.5630.450.450.3750.03750.075
10.0 cm10.00.90.70.750.60.60.50.050.1
12.5 cm12.51.1250.8750.9380.750.750.6250.06250.125
15.0 cm15.01.351.051.1250.90.90.750.0750.15
17.5 cm17.51.5751.2251.3131.051.050.8750.08750.175
20.0 cm20.01.81.41.51.21.21.00.10.2
22.5 cm22.52.0251.5751.6881.351.351.1250.11250.225
25.0 cm25.02.251.751.8751.51.51.250.1250.25
27.5 cm27.52.4751.9252.0631.651.651.3750.13750.275
30.0 cm30.02.72.12.251.81.81.50.150.3

Quantity of cement, sand and gravel per meter length of circular column

Table 1-5

RowDiameter (cm)Cement A 40 kgCement B 40 kgCement A 50 kgCement B 50 kgSand (cu. m.)Gravel (cu. m.)
25 cm25.00.4420.3680.3440.2940.0250.05† Calculated, not looked up. 50 kg class A: 0.344 (= 0.442 x 0.7778); 50 kg class B: 0.294 (= 0.368 x 0.8000).
30 cm30.00.6360.530.4950.4240.0350.07† Calculated, not looked up. 50 kg class A: 0.495 (= 0.636 x 0.7778); class B: 0.424 (= 0.53 x 0.8000); gravel: 0.07 (= 2 x sand 0.035, as in every other row).
35 cm35.00.8660.7220.6730.5770.0480.096
40 cm40.01.1310.9420.880.7540.0630.126
50 cm50.01.7671.4731.3741.1780.0980.196
55 cm55.02.1381.7821.6631.4250.1190.238
60 cm60.02.5452.1211.9791.6960.1410.282
65 cm65.02.9862.4882.3231.9910.1660.332
70 cm70.03.4642.8862.6942.3090.1920.384
75 cm75.03.9763.3133.0932.6510.2210.442
80 cm80.04.5243.773.5193.0160.2510.502
85 cm85.05.1074.2563.9723.4050.2840.568
90 cm90.05.7264.7714.4533.8170.3180.636
100 cm100.07.0695.895.4984.7120.3930.786

Quantity of cement, sand and gravel per concrete pipe

Table 1-6

RowOuter labelInner labelOuter (cm)Inner (cm)Cement A 40 kgCement B 40 kgSand (cu. m.)Gravel (cu. m.)
21 cm21 cm15 cm21.015.00.1520.1270.0090.018
26 cm26 cm20 cm26.020.00.1950.1630.0110.022
33 cm33 cm25 cm33.025.00.3280.2740.0180.037
39 cm39 cm30 cm39.030.00.4360.3630.0250.05
50 cm50 cm40 cm50.040.00.6350.530.0360.072
60 cm60 cm50 cm60.050.00.7790.650.0440.088
78 cm78 cm60 cm78.060.01.7551.4630.0980.196
90 cm90 cm70 cm90.070.02.261.8830.1260.252
100 cm100 cm80 cm100.080.02.5382.1150.1410.282
110 cm110 cm90 cm110.090.02.8262.3550.1570.314
120 cm120 cm100 cm120.0100.03.112.5950.1730.346
144 cm144 cm120 cm144.0120.04.4823.7350.2490.498
174 cm174 cm150 cm174.0150.05.54.5830.3060.612

Quantity of cement and sand per one hundred blocks

Table 2-3

RowCement A 40 kgCement B 40 kgCement C 40 kgCement D 40 kgSand (cu. m.)
10 x 20 x 406.3364.1763.1522.6240.348
15 x 20 x 4012.158.1046.0725.0640.675
20 x 20 x 4018.07212.09.07.5041.0

Quantity of cement, sand and gravel for CHB footing per meter length

Table 2-5

RowCement A 40 kgCement B 40 kgCement C 40 kgSand (cu. m.)Gravel (cu. m.)
10 x 300.270.2250.180.0150.03
10 x 350.3150.2630.210.0180.035
10 x 400.360.30.240.020.04
10 x 500.450.3750.30.0250.05
15 x 400.540.450.360.030.06
15 x 450.6120.510.480.0340.068
15 x 500.6750.5630.550.0380.076
15 x 600.810.6750.540.0450.09

Quantity of reinforcing steel bars in a one-way RC slab (bars per sq. m.)

Table 3-10

RowSpacing (cm)Bars 6 00mBars 7 50mBars 9 00mBars 12 00m
10 cm10.03.7642.9372.4211.769
12.5 cm12.53.0622.3811.9341.427
15 cm15.02.5842.0041.6361.197
17.5 cm17.52.2321.7261.4071.033
20 cm20.01.981.5281.2580.914
22.5 cm22.51.7861.3691.1090.81
25 cm25.01.6271.251.0140.736

Quantity of tie wire on a one-way reinforced concrete slab (kg per sq. m.)

Table 3-11

RowSpacing (cm) kg 6 00m at 0 3 kg 6 00m at 0 4 kg 7 50m at 0 3 kg 7 50m at 0 4 kg 9 00m at 0 3 kg 9 00m at 0 4 kg 12 00m at 0 3
10 cm10.00.4740.6320.4620.6160.460.6140.448
12.5 cm12.50.3160.4220.3070.4090.2950.3940.293
15 cm15.00.2280.3030.2170.2890.2140.2850.207
17.5 cm17.50.1680.2240.1620.2160.1580.210.153
20 cm20.00.1320.1750.1260.1680.1250.1670.12
22.5 cm22.50.110.1470.1020.1350.0990.1320.095
25 cm25.00.0890.1180.0860.1140.0810.1080.077

Commercial lengths of rebar (m)

Table REBAR

RowLength m
6 m6.0
7.5 m7.5
9 m9.0
10.5 m10.5
12 m12.0

Calculations and formulas

Each calculation lists what you enter, then the steps in order. A step marked step is an intermediate figure; result steps are the quantities you get. Quantities are not rounded inside a calculation.

Concrete

Footing — Square or rectangular footings.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
lengthFooting length number m
widthFooting width number m
thicknessFooting thickness number m
qtyQuantity of footings number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, thickness, qty)Length x width x thickness x number of footings.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Wall footing — Continuous footing under a wall.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
lengthLength or perimeter number m
widthWidth number m
thicknessThickness number m
qtyQuantity of wall footings number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, thickness, qty)Length x width x thickness x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Footing tie beam — Beam tying the footings together.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
lengthBeam length number m
widthBeam width number m
heightBeam height number m
qtyQuantity of beams number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, height, qty)Length x width x height x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Girder / beam — Main beams.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
lengthBeam length number m
widthBeam width number m
heightBeam height number m
qtyQuantity of beams number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, height, qty)Length x width x height x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Lintel beam — Beam over doors and windows.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
lengthLintel beam length number m
widthLintel beam width number m
heightLintel beam height number m
qtyQuantity of lintel beams number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, height, qty)Length x width x height x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Column — Rectangular columns.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
lengthColumn length number m
widthColumn width number m
heightColumn height number m
qtyQuantity of columns number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, height, qty)Length x width x height x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Stiffener column — Small columns that stiffen a wall.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
lengthColumn length number m
widthColumn width number m
heightColumn height number m
qtyQuantity of columns number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(length, width, height, qty)Length x width x height x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Slab — Floor or roof slab, by thickness and area.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
thickness_cmSlab thickness number cm12.5
areaSlab area number sq. m.
qtyQuantity of slabs number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step thickness_cm / 100 * area * qtyThickness in meters x area x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Reinforced concrete wall — Concrete wall, by thickness and area.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
thickness_cmWall thickness number cm30
areaWall area number sq. m.
qtyQuantity of walls number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step thickness_cm / 100 * area * qtyThickness in meters x area x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Stair landing — Landing slab of a staircase.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix BConcrete mix proportion (concrete mixture table).
thickness_cmLanding thickness number cm10
areaLanding area number sq. m.
qtyQuantity of landings number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step thickness_cm / 100 * area * qtyThickness in meters x area x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Stairs — Stair flight with stringer (slab under the steps).

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
stepsNumber of steps number steps
riserRiser height number m
treadTread run number m
widthStair width number m
stringerStringer thickness number m
qtyQuantity of stairs number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step (SQRT(riser^2 + tread^2) * steps * stringer * width + 0.5 * riser * tread * width * steps) * qtySlanted stringer: sloping length of one step x steps x stringer thickness x width. Plus the triangular steps: half x riser x tread x width x steps. All multiplied by the quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Septic tank — Walls plus top and bottom slabs, as volumes you already have.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
walls_volumeWalls volume number cu. m.
top_volumeTop slab volume number cu. m.
bottom_volumeBottom slab volume number cu. m.
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step walls_volume + top_volume + bottom_volumeWalls + top slab + bottom slab.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Concrete gutter — Gutter, from its cross-section and length.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix CConcrete mix proportion (concrete mixture table).
areaCross-sectional area number sq. m.
lengthLength number m
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(area, length)Cross-sectional area x length.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Concrete saddle — Saddle, from its cross-section and thickness.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AAConcrete mix proportion (concrete mixture table).
areaCross-sectional area number sq. m.
thicknessSaddle thickness number m
qtyQuantity number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step PRODUCT(area, thickness, qty)Cross-sectional area x thickness x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Concrete by volume — You already know the volume; get the materials.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
volumeVolume number cu. m.
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.
Slab or wall (area method) — Materials per sq. m. from the slab and wall table.

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick one: A, B, C AThe slab and wall table covers classes A, B and C.
thicknessThickness pick from table 1-3 7.5 cm
areaArea number sq. m.
qtyQuantity number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step LOOKUP("1-3", thickness, "thickness_cm") / 100 * area * qtyThickness in meters (from the slab and wall table) x area x quantity.
Cement
cement
bags · result LOOKUP("1-3", thickness, "cement_" & mix & "_" & bag & "kg") * area * qtyBags per sq. m. for the thickness, class and bag size (slab and wall table) x area x quantity.
Sand
sand
cu. m. · result LOOKUP("1-3", thickness, "sand_cum") * area * qtySand per sq. m. (slab and wall table) x area x quantity.
Gravel
gravel
cu. m. · result LOOKUP("1-3", thickness, "gravel_cum") * area * qtyGravel per sq. m. (slab and wall table) x area x quantity.
Circular column — Round column, per meter length (circular column table).

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick one: A, B AThe circular column table covers classes A and B.
diameterColumn diameter pick from table 1-5 60 cm
heightColumn height number m
qtyQuantity of columns number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step 0.7854 * (LOOKUP("1-5", diameter, "diameter_cm") / 100) ^ 2 * height * qty0.7854 x diameter squared (in meters) x height x quantity.
Cement
cement
bags · result LOOKUP("1-5", diameter, "cement_" & mix & "_" & bag & "kg") * height * qtyBags per meter of column (circular column table) x height x quantity.
Sand
sand
cu. m. · result LOOKUP("1-5", diameter, "sand_cum") * height * qtySand per meter (circular column table) x height x quantity.
Gravel
gravel
cu. m. · result LOOKUP("1-5", diameter, "gravel_cum") * height * qtyGravel per meter (circular column table) x height x quantity.
Concrete pipe — Pipe wall volume from outer and inner diameter (pipe table).

You enter

NameLabelKindUnitDefaultNotes
mixMixture class pick from table est_concrete_mix AConcrete mix proportion (concrete mixture table).
outerOuter diameter pick from table 1-6 110 cm
innerInner diameter pick from table 1-6 90 cm
qtyQuantity of pipes number pcs
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total volume
volume
cu. m. · step (0.7854 * (LOOKUP("1-6", outer, "outer_cm") / 100) ^ 2 - 0.7854 * (LOOKUPBY("1-6", "inner_label", inner, "inner_cm") / 100) ^ 2) * qtyArea of the outer circle minus the inner circle (0.7854 x diameter squared, in meters) x quantity.
Cement
cement
bags · result volume * LOOKUP("est_concrete_mix", mix, "cement_" & bag & "kg")Volume multiplied by the bags of cement per cu. m. for the chosen mix class and bag size.
Sand
sand
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "sand_cum")Volume multiplied by the sand per cu. m. for the mix class.
Gravel
gravel
cu. m. · result volume * LOOKUP("est_concrete_mix", mix, "gravel_cum")Volume multiplied by the gravel per cu. m. for the mix class.

Masonry

Hollow-block wall — Blocks and mortar for a wall (block wall table).

You enter

NameLabelKindUnitDefaultNotes
mortarMortar mixture class pick one: A, B, C, D CMortar proportion (mortar mixture table).
chbBlock size (cm) pick from table est_chb_size 10 x 20 x 40
lengthWall length number m
heightWall height number m
deductionsDeductions to wall area number sq. m.0Doors and windows.
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total wall area
area
sq. m. · step length * height - deductionsLength x height, minus the area of doors and windows.
Cement
cement
bags · result area * LOOKUP("est_chb_size", chb, "cement_" & mortar & "_" & bag & "kg")Wall area x bags of cement per sq. m. for the block size, mortar class and bag size (block wall table).
Sand
sand
cu. m. · result area * LOOKUP("est_chb_size", chb, "sand_cum_per_sqm")Wall area x sand per sq. m. (block wall table).
Hollow blocks
blocks
pcs · result area * LOOKUP("est_chb_size", chb, "pieces_per_sqm")Wall area x blocks per sq. m. (12.5). Not rounded; round up when buying.
Cement plaster — Plaster over a wall (plaster table).

You enter

NameLabelKindUnitDefaultNotes
mortarMortar mixture class pick one: A, B, C, D CMortar proportion (mortar mixture table).
thicknessPlaster thickness pick from table est_plaster_thickness 12 mm
sidesSides to plaster number side/s11 or 2.
lengthSurface length number m
heightSurface height number m
deductionsDeductions to surface area number sq. m.0
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total surface area
area
sq. m. · step sides * length * height - deductionsSides x length x height, minus deductions.
Cement
cement
bags · result area * LOOKUP("est_plaster_thickness", thickness, "cement_" & mortar & "_" & bag & "kg")Area x bags of cement per sq. m. for the thickness, mortar class and bag size (plaster table).
Sand
sand
cu. m. · result area * LOOKUP("est_plaster_thickness", thickness, "sand_cum_per_sqm")Area x sand per sq. m. (plaster table).

Tiling

Tile adhesive — Adhesive, or cement and sand, for floor and wall tiles.

You enter

NameLabelKindUnitDefaultNotes
floor_areaFloor area number sq. m.
wall_areaWall area number sq. m.0
tile_cmTile size (one side) pick one: 30, 40, 50, 60 cm60Square tiles.
thicknessAdhesive thickness pick from table est_tile_coverage 10 mm
bagCement bag sizepick one: 40, 50kg40Chosen in the app.

Steps

StepGivesFormulaIn plain words
Total area
total_area
sq. m. · step floor_area + wall_areaFloor area + wall area.
Number of tiles
tiles
pcs · result ROUNDUP(total_area / ((tile_cm / 100) * (tile_cm / 100)), 0)Total area divided by the area of one tile, rounded up.
Tile adhesive (bagged)
adhesive
bags · result total_area / LOOKUP("est_tile_coverage", thickness, "sqm_per_bag")Total area divided by the area one bag covers at the chosen thickness.
Cement (sand-cement alternative)
bed_cement
bags · result total_area * (LOOKUP("est_tile_coverage", thickness, "thickness_mm") / 1000) * CONSTANT("tile_bed_cement_bags_per_cubic_m_" & bag & "kg")Total area x thickness in meters x bags of cement per cu. m. of tile bed.
Sand (sand-cement alternative)
bed_sand
cu. m. · result total_area * (LOOKUP("est_tile_coverage", thickness, "thickness_mm") / 1000)Total area x thickness in meters.
Tile adhesive (with the cement alternative)
adhesive_pcs
pcs · result bed_cement * CONSTANT("tile_adhesive_per_cement_bag")Bags of cement x tile adhesive pieces per bag of cement.

Steel

Rebar cutting list — Which commercial rebar length wastes the least for a cut length.

You enter

NameLabelKindUnitDefaultNotes
cut_lengthCut length number m1.4

Steps

The app tries every commercial rebar length, counts how many pieces of the cut length fit in each, and picks the length that leaves the least waste.

Formula language

  • Numbers, text in "quotes", names of inputs and earlier steps.
  • Operators: + - * / ^, & joins text, comparisons = <> < > <= >=.
  • PRODUCT, SUM, MIN, MAX, ABS, SQRT, COUNT, IF, ROUNDUP, ROUNDDOWN.
  • LOOKUP(table, row, column) reads a value from a table row. LOOKUPBY(table, column, value, result) finds the row by a column value instead.
  • CONSTANT(name) reads a constant. bag is the chosen cement bag size (40 or 50).

Worked examples

Each example has a known-good answer. The BIY app checks every one of them against the current numbers; if any disagree, the app flags the estimate instead of showing it.

CalculationExampleInputsExpected
concrete_volumeClass A, 3.768 cu. m. (40 kg bags) mix=A, volume=3.768 cement=33.912, sand=1.884, gravel=3.768
concrete_volumeClass A, 3.768 cu. m. (50 kg bags) mix=A, volume=3.768 cement=26.376, sand=1.884, gravel=3.768
footingClass A, 1.5 x 1.2 x 0.4 m, 12 pcs (40 kg bags) mix=A, length=1.5, width=1.2, thickness=0.4, qty=12 volume=8.64, cement=77.76, sand=4.32, gravel=8.64
footingClass A, 1.5 x 1.2 x 0.4 m, 12 pcs (50 kg bags) mix=A, length=1.5, width=1.2, thickness=0.4, qty=12 volume=8.64, cement=60.48, sand=4.32, gravel=8.64
slab_wall_by_areaClass B, 7.5 cm, 23 sq. m. (40 kg bags) mix=B, thickness=7.5 cm, area=23, qty=1 volume=1.725, cement=12.949, sand=0.8625, gravel=1.725
slab_wall_by_areaClass B, 7.5 cm, 23 sq. m. (50 kg bags) mix=B, thickness=7.5 cm, area=23, qty=1 volume=1.725, cement=10.35, sand=0.8625, gravel=1.725
concrete_stairsClass A, 7 steps, 0.2 / 0.3 / 1.2 / 0.15 m (40 kg bags) mix=A, steps=7, riser=0.2, tread=0.3, width=1.2, stringer=0.15, qty=1 volume=0.7063, cement=6.3567, sand=0.3531, gravel=0.7063
concrete_stairsClass A, 7 steps, 0.2 / 0.3 / 1.2 / 0.15 m (50 kg bags) mix=A, steps=7, riser=0.2, tread=0.3, width=1.2, stringer=0.15, qty=1 volume=0.7063, cement=4.9441, sand=0.3531, gravel=0.7063
circular_columnClass A, 60 cm, 2 m high, 3 pcs (40 kg bags) mix=A, diameter=60 cm, height=2, qty=3 volume=1.6965, cement=15.27, sand=0.846, gravel=1.692
circular_columnClass A, 60 cm, 2 m high, 3 pcs (50 kg bags) mix=A, diameter=60 cm, height=2, qty=3 volume=1.6965, cement=11.874, sand=0.846, gravel=1.692
concrete_pipeClass A, 110 / 90 cm, 1 pc (40 kg bags) mix=A, outer=110 cm, inner=90 cm, qty=1 volume=0.3142, cement=2.8274, sand=0.1571, gravel=0.3142
concrete_pipeClass A, 110 / 90 cm, 1 pc (50 kg bags) mix=A, outer=110 cm, inner=90 cm, qty=1 volume=0.3142, cement=2.1991, sand=0.1571, gravel=0.3142
tile_adhesive32 sq. m. floor + 9 sq. m. wall, 60 x 60, 10 mm (40 kg bags) floor_area=32, wall_area=9, tile_cm=60, thickness=10 mm total_area=41, tiles=114, adhesive=27.3333, bed_cement=4.92, bed_sand=0.41, adhesive_pcs=9.84
wall_footingClass AA, 24 x 0.4 x 0.2 m, 1 pc (40 kg) mix=AA, length=24, width=0.4, thickness=0.2, qty=1 volume=1.92, cement=23.04, sand=0.96, gravel=1.92
footing_tie_beamClass A, 3 x 0.2 x 0.3 m, 8 pcs (40 kg) mix=A, length=3, width=0.2, height=0.3, qty=8 volume=1.44, cement=12.96, sand=0.72, gravel=1.44
girder_beamClass AA, 4 x 0.25 x 0.4 m, 6 pcs (40 kg) mix=AA, length=4, width=0.25, height=0.4, qty=6 volume=2.4, cement=28.8, sand=1.2, gravel=2.4
lintel_beamClass AA, 2 x 0.15 x 0.2 m, 10 pcs (40 kg) mix=AA, length=2, width=0.15, height=0.2, qty=10 volume=0.6, cement=7.2, sand=0.3, gravel=0.6
concrete_columnClass A, 0.3 x 0.3 x 3 m, 8 pcs (40 kg) mix=A, length=0.3, width=0.3, height=3, qty=8 volume=2.16, cement=19.44, sand=1.08, gravel=2.16
stiffener_columnClass A, 0.15 x 0.15 x 2.8 m, 12 pcs (40 kg) mix=A, length=0.15, width=0.15, height=2.8, qty=12 volume=0.756, cement=6.804, sand=0.378, gravel=0.756
concrete_slabClass AA, 12.5 cm, 30 sq. m. (40 kg) mix=AA, thickness_cm=12.5, area=30, qty=1 volume=3.75, cement=45.0, sand=1.875, gravel=3.75
concrete_wallClass A, 30 cm, 12 sq. m. (40 kg) mix=A, thickness_cm=30, area=12, qty=1 volume=3.6, cement=32.4, sand=1.8, gravel=3.6
stair_landingClass B, 10 cm, 4 sq. m. (40 kg) mix=B, thickness_cm=10, area=4, qty=2 volume=0.8, cement=6.0, sand=0.4, gravel=0.8
septic_tankClass AA, 6 + 2 + 2 cu. m. (40 kg) mix=AA, walls_volume=6, top_volume=2, bottom_volume=2 volume=10, cement=120.0, sand=5.0, gravel=10
concrete_gutterClass C, 0.04 sq. m. x 12 m (40 kg) mix=C, area=0.04, length=12 volume=0.48, cement=2.88, sand=0.24, gravel=0.48
concrete_saddleClass AA, 0.5 sq. m. x 0.1 m, 3 pcs (40 kg) mix=AA, area=0.5, thickness=0.1, qty=3 volume=0.15, cement=1.8, sand=0.075, gravel=0.15
wall_footingClass AA, 24 x 0.4 x 0.2 m, 1 pc (50 kg) mix=AA, length=24, width=0.4, thickness=0.2, qty=1 volume=1.92, cement=18.24, sand=0.96, gravel=1.92
footing_tie_beamClass A, 3 x 0.2 x 0.3 m, 8 pcs (50 kg) mix=A, length=3, width=0.2, height=0.3, qty=8 volume=1.44, cement=10.08, sand=0.72, gravel=1.44
girder_beamClass AA, 4 x 0.25 x 0.4 m, 6 pcs (50 kg) mix=AA, length=4, width=0.25, height=0.4, qty=6 volume=2.4, cement=22.8, sand=1.2, gravel=2.4
lintel_beamClass AA, 2 x 0.15 x 0.2 m, 10 pcs (50 kg) mix=AA, length=2, width=0.15, height=0.2, qty=10 volume=0.6, cement=5.7, sand=0.3, gravel=0.6
concrete_columnClass A, 0.3 x 0.3 x 3 m, 8 pcs (50 kg) mix=A, length=0.3, width=0.3, height=3, qty=8 volume=2.16, cement=15.12, sand=1.08, gravel=2.16
stiffener_columnClass A, 0.15 x 0.15 x 2.8 m, 12 pcs (50 kg) mix=A, length=0.15, width=0.15, height=2.8, qty=12 volume=0.756, cement=5.292, sand=0.378, gravel=0.756
concrete_slabClass AA, 12.5 cm, 30 sq. m. (50 kg) mix=AA, thickness_cm=12.5, area=30, qty=1 volume=3.75, cement=35.625, sand=1.875, gravel=3.75
concrete_wallClass A, 30 cm, 12 sq. m. (50 kg) mix=A, thickness_cm=30, area=12, qty=1 volume=3.6, cement=25.2, sand=1.8, gravel=3.6
stair_landingClass B, 10 cm, 4 sq. m. (50 kg) mix=B, thickness_cm=10, area=4, qty=2 volume=0.8, cement=4.8, sand=0.4, gravel=0.8
septic_tankClass AA, 6 + 2 + 2 cu. m. (50 kg) mix=AA, walls_volume=6, top_volume=2, bottom_volume=2 volume=10, cement=95.0, sand=5.0, gravel=10
concrete_gutterClass C, 0.04 sq. m. x 12 m (50 kg) mix=C, area=0.04, length=12 volume=0.48, cement=2.4, sand=0.24, gravel=0.48
concrete_saddleClass AA, 0.5 sq. m. x 0.1 m, 3 pcs (50 kg) mix=AA, area=0.5, thickness=0.1, qty=3 volume=0.15, cement=1.425, sand=0.075, gravel=0.15
chb_wall4 inch block, class C, 10 x 2.4 m, 3 sq. m. deducted (40 kg) mortar=C, chb=10 x 20 x 40, length=10, height=2.4, deductions=3 area=21.0, cement=8.274, sand=0.9135, blocks=262.5
chb_wall6 inch block, class B, 8 x 3 m (40 kg) mortar=B, chb=15 x 20 x 40, length=8, height=3, deductions=0 area=24, cement=24.432, sand=2.0256, blocks=300.0
chb_wall4 inch block, class C, 10 x 2.4 m, 3 sq. m. deducted (50 kg) mortar=C, chb=10 x 20 x 40, length=10, height=2.4, deductions=3 area=21.0, cement=6.4353, sand=0.9135, blocks=262.5
chb_wall6 inch block, class B, 8 x 3 m (50 kg) mortar=B, chb=15 x 20 x 40, length=8, height=3, deductions=0 area=24, cement=19.342, sand=2.0256, blocks=300.0
cement_plaster12 mm, class C, 2 sides, 10 x 2.4 m (40 kg) mortar=C, thickness=12 mm, sides=2, length=10, height=2.4, deductions=3 area=45.0, cement=4.86, sand=0.54
cement_plaster25 mm, class A, 1 side, 5 x 3 m (40 kg) mortar=A, thickness=25 mm, sides=1, length=5, height=3, deductions=0 area=15, cement=6.75, sand=0.375
cement_plaster12 mm, class C, 2 sides, 10 x 2.4 m (50 kg) mortar=C, thickness=12 mm, sides=2, length=10, height=2.4, deductions=3 area=45.0, cement=3.78, sand=0.54
cement_plaster25 mm, class A, 1 side, 5 x 3 m (50 kg) mortar=A, thickness=25 mm, sides=1, length=5, height=3, deductions=0 area=15, cement=5.4375, sand=0.375
tile_adhesive32 + 9 sq. m., 60 x 60, 10 mm (50 kg bags) floor_area=32, wall_area=9, tile_cm=60, thickness=10 mm total_area=41, tiles=114, adhesive=27.3333, bed_cement=3.895, bed_sand=0.41, adhesive_pcs=7.79
rebar_cutCut length 1.4 m cut_length=1.4 best_length_m=6.0, best_waste_m=0.4, best_pieces=4

Materials

The quantities above are in these units. Pricing and product links are not part of the calculation.

MaterialUnit
Cementbags
Concrete hollow block 4"pcs
Concrete hollow block 5"pcs
Concrete hollow block 6"pcs
Concrete hollow block 8"pcs
Gravelcu. m.
Reinforcing barpcs
Sandcu. m.
Tile adhesive (bagged)bags
Tile adhesive (tile-bed mix)pcs
Tilespcs

Section 2 · Workshop

The Workshop is for things you build yourself: a shelf, a cabinet, a table, a gate. It works out the parts, how to cut them from the plywood or boards we sell, and the other supplies the job needs. These formulas are separate from the Estimator's formulas for the house, which come from BIY's own workbook. Everything here is an estimate for budgeting and shopping. Check the final quantities against your own plan before you buy.

Supply formulas

Every number below is read directly from our store data, the same data the app uses, so this table and the app cannot disagree. For hinges, handles, glue, finish, wall fixings and nails we use the rules of the open-source project WoodworkingShop by Ryair (MIT licence), rewritten for the app. Where a rule is ours, the source column says "BIY rule". A supply can use the result of the one before it by its key, and a supply that does not apply counts as 0.

SupplyUnitApplies when How manyIn plain wordsSearched in our store asSource
Doors and hinges
Cabinet hinge
hinge
pcs doors>0 doors*IF(door_height<=600,2,IF(door_height<=1200,3,IF(door_height<=1800,4,IF(door_height<=2200,5,6)))) Hinges per door by the height of the door: 2 up to 600 mm, 3 up to 1,200, 4 up to 1,800, 5 up to 2,200, otherwise 6. concealed hinge 35mm
or: cabinet hinge, hinge
WoodworkingShop src/engine/geometry/dimensions.ts (computeHingesPerDoor); WoodworkingShop src/engine/hardware/hardware.ts
Hinge mounting plate
hinge_plate
pcs doors>0 hinge One plate for each hinge. hinge mounting plate
or: hinge plate
WoodworkingShop src/engine/hardware/hardware.ts
Door handle
door_handle
pcs doors>0 doors One handle for each door. cabinet handle
or: pull handle, cabinet knob
WoodworkingShop src/engine/hardware/hardware.ts
Door bumper pad
door_bumper
pcs doors>0 doors*CONSTANT("bumper_pads_per_door") Two pads for each door. bumper pad
or: rubber bumper, furniture glide
WoodworkingShop src/engine/hardware/hardware.ts
Drawers
Drawer slide, pair
drawer_slide
pairs drawers>0 drawers One pair for each drawer; the longest standard slide that fits the depth minus 50 mm. drawer slide
or: drawer guide
WoodworkingShop src/engine/hardware/hardware.ts
Drawer handle
drawer_handle
pcs drawers>0 drawers One handle for each drawer. cabinet handle
or: pull handle, cabinet knob
WoodworkingShop src/engine/hardware/hardware.ts
Screws and nails
Wood screw
wood_screw
pcs 1 joints*(CONSTANT("assembly_screws_per_join")+CONSTANT("camlock_screws_per_join"))+CONSTANT("base_screws")+IF(height>CONSTANT("tall_height_mm"),CONSTANT("tall_extra_screws"),0) The repo's counts: 12 assembly screws and 4 in place of cam locks for each panel join, 8 base screws, and 4 more for a unit taller than 1,200 mm. Screw length = thickness of the piece fixed + 25 mm (BIY rule). wood screw
or: screw
WoodworkingShop src/engine/hardware/hardware.ts (assembly screws, confirmat screws and cam locks, converted to wood screws)
Back panel nail
back_nail
pcs has_back>0 ROUNDUP(back_perimeter_mm/CONSTANT("back_nail_spacing_mm"),0) One nail every 150 mm around the edge of the back panel. common nail 1 in
or: wire nail
WoodworkingShop src/engine/hardware/hardware.ts
Wall fixing
Wall bracket
wall_bracket
pcs height>CONSTANT("tall_height_mm") IF(width>=CONSTANT("wall_bracket_wide_width_mm"),4,2) 4 brackets for a unit 800 mm wide or more, otherwise 2. Used when the unit is taller than 1,200 mm. angle bracket
or: L bracket, corner brace, shelf bracket
WoodworkingShop src/engine/hardware/hardware.ts (L-brackets); BIY rule for when it applies
Wall plug
wall_plug
pcs IF(height>CONSTANT("tall_height_mm"),1,IF(wall_run_mm>0,1,0)) IF(height>CONSTANT("tall_height_mm"),2*wall_bracket,0)+IF(wall_run_mm>0,ROUNDUP(wall_run_mm/CONSTANT("wall_fixing_spacing_mm"),0)+1,0) 2 plugs for each bracket; for a cleat or rack, one about every 300 mm along the wall plus one. wall plug 8mm
or: wall plug, plastic anchor, tox
WoodworkingShop src/engine/hardware/hardware.ts (wall screw + dowel); BIY rule for cleats and racks
Wall screw
wall_screw
pcs IF(wall_plug>0,1,0) wall_plug One wall screw for each wall plug. wood screw 3 in
or: screw
WoodworkingShop src/engine/hardware/hardware.ts (wall screw + dowel)
Cabinet parts
Shelf pin
shelf_pin
pcs adjustable_shelves>0 adjustable_shelves*CONSTANT("shelf_pins_per_shelf") 4 pins for each adjustable shelf. shelf support pin 5mm
or: shelf pin
WoodworkingShop src/engine/hardware/hardware.ts
Leveller foot
leveller_foot
pcs floor_standing>0 CONSTANT("leveller_feet") Four feet for a cabinet standing on the floor. adjustable furniture leg
or: leveller, plinth foot
WoodworkingShop src/engine/hardware/hardware.ts
Corner brace
corner_brace
pcs is_carcass>0 CONSTANT("corner_braces") Four braces for a box of panels. corner brace
or: flat corner brace
WoodworkingShop src/engine/hardware/hardware.ts
Edge banding
edge_banding
m edge_run_m>0 edge_run_m The visible edge: twice the width plus the height. PVC edging
or: edge banding
WoodworkingShop src/engine/hardware/hardware.ts
Hanging rail
hanging_rail
pcs has_hanging_rail>0 has_hanging_rail A wardrobe has one hanging rail. closet rod
or: hanging rail, clothes rod
BIY rule
Gate
Gate hinge
gate_hinge
pcs is_gate>0 3 Three hinges on the hinge side of a gate. bearing hinge 4 in
or: gate hinge, heavy hinge
BIY rule
Gate latch
gate_latch
pcs is_gate>0 1 One latch. barrel bolt
or: gate latch, tower bolt
BIY rule
Glue, finish and sanding
Wood glue
wood_glue
bottles 1 MAX(1,ROUNDUP(glue_area_mm2/1000000/CONSTANT("glue_pva_spread_m2_per_l")*1000*CONSTANT("glue_waste_factor")/CONSTANT("glue_bottle_ml"),0)) Glued area / 180 m2 per litre, plus 15% for waste, in 237 mL bottles; at least one bottle, as in the repo's list. wood glue
or: carpenter glue, pva glue
WoodworkingShop src/engine/calculators/glue-coverage.ts; WoodworkingShop src/engine/hardware/hardware.ts
Paint
finish_paint
litres 1 finish_area_m2*CONSTANT("finish_coats_paint")/CONSTANT("finish_coverage_paint_m2_per_l") Area x 2 coats / 12 m2 per litre. enamel paint
or: paint, boysen, enamel
WoodworkingShop src/engine/calculators/finish-calculator.ts
Sandpaper
sandpaper
sheets 1 CONSTANT("sandpaper_sheets") The repo lists one assorted pack; BIY uses 3 sheets, one of each grit. sandpaper
or: sanding paper
WoodworkingShop src/engine/hardware/hardware.ts; BIY rule for the count
Boards
Sheet board
sheet_board
sheets sheets>0 sheets One 4 x 8 ft sheet each, in the thickness picked on the Measure tab. Ordinary plywood comes first; marine plywood, plyboard and laminated MDF of the same thickness are offered under Swap. plywood ordinary
or: plywood marine, plyboard, mdf laminated, laminated mdf
BIY rule
Lumber
Lumber 1" x 2" x 8 ft
lumber_1x2_8
pcs boards_1x2_8>0 boards_1x2_8 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 1x2x8
or: coco lumber 1x2x8, pine wood 1x2x8
BIY rule
Lumber 1" x 2" x 10 ft
lumber_1x2_10
pcs boards_1x2_10>0 boards_1x2_10 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 1x2x10
or: coco lumber 1x2x10, pine wood 1x2x10
BIY rule
Lumber 1" x 2" x 12 ft
lumber_1x2_12
pcs boards_1x2_12>0 boards_1x2_12 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 1x2x12
or: coco lumber 1x2x12, pine wood 1x2x12
BIY rule
Lumber 2" x 2" x 8 ft
lumber_2x2_8
pcs boards_2x2_8>0 boards_2x2_8 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x2x8
or: coco lumber 2x2x8, pine wood 2x2x8
BIY rule
Lumber 2" x 2" x 10 ft
lumber_2x2_10
pcs boards_2x2_10>0 boards_2x2_10 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x2x10
or: coco lumber 2x2x10, pine wood 2x2x10
BIY rule
Lumber 2" x 2" x 12 ft
lumber_2x2_12
pcs boards_2x2_12>0 boards_2x2_12 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x2x12
or: coco lumber 2x2x12, pine wood 2x2x12
BIY rule
Lumber 2" x 3" x 8 ft
lumber_2x3_8
pcs boards_2x3_8>0 boards_2x3_8 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x3x8
or: coco lumber 2x3x8, pine wood 2x3x8
BIY rule
Lumber 2" x 3" x 10 ft
lumber_2x3_10
pcs boards_2x3_10>0 boards_2x3_10 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x3x10
or: coco lumber 2x3x10, pine wood 2x3x10
BIY rule
Lumber 2" x 3" x 12 ft
lumber_2x3_12
pcs boards_2x3_12>0 boards_2x3_12 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x3x12
or: coco lumber 2x3x12, pine wood 2x3x12
BIY rule
Lumber 2" x 4" x 8 ft
lumber_2x4_8
pcs boards_2x4_8>0 boards_2x4_8 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x4x8
or: coco lumber 2x4x8, pine wood 2x4x8
BIY rule
Lumber 2" x 4" x 10 ft
lumber_2x4_10
pcs boards_2x4_10>0 boards_2x4_10 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x4x10
or: coco lumber 2x4x10, pine wood 2x4x10
BIY rule
Lumber 2" x 4" x 12 ft
lumber_2x4_12
pcs boards_2x4_12>0 boards_2x4_12 Boards for the frame, from the cutting plan: pine wood or coco lumber, whichever the store has at the best price. lumber 2x4x12
or: coco lumber 2x4x12, pine wood 2x4x12
BIY rule

Fixed numbers

NumberValueUnitSource
Assembly screws per panel join
assembly_screws_per_join
12.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Back panel nail spacing
back_nail_spacing_mm
150.0 mm WoodworkingShop src/engine/hardware/hardware.ts
Base screws for a carcass
base_screws
8.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Door bumper pads per door
bumper_pads_per_door
2.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Screws per panel join in place of cam locks
camlock_screws_per_join
4.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Corner braces per cabinet
corner_braces
4.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Edge banding roll length
edge_roll_m
50.0 m WoodworkingShop src/engine/hardware/hardware.ts
Oil coats
finish_coats_oil
2.0 coats WoodworkingShop src/engine/calculators/finish-calculator.ts
Paint coats
finish_coats_paint
2.0 coats WoodworkingShop src/engine/calculators/finish-calculator.ts
Primer coats
finish_coats_primer
1.0 coats WoodworkingShop src/engine/calculators/finish-calculator.ts
Stain coats
finish_coats_stain
2.0 coats WoodworkingShop src/engine/calculators/finish-calculator.ts
Varnish coats
finish_coats_varnish
3.0 coats WoodworkingShop src/engine/calculators/finish-calculator.ts
Oil coverage
finish_coverage_oil_m2_per_l
12.0 m2 per litre per coat WoodworkingShop src/engine/calculators/finish-calculator.ts
Paint coverage
finish_coverage_paint_m2_per_l
12.0 m2 per litre per coat WoodworkingShop src/engine/calculators/finish-calculator.ts
Primer coverage
finish_coverage_primer_m2_per_l
8.0 m2 per litre per coat WoodworkingShop src/engine/calculators/finish-calculator.ts
Stain coverage
finish_coverage_stain_m2_per_l
10.0 m2 per litre per coat WoodworkingShop src/engine/calculators/finish-calculator.ts
Varnish coverage
finish_coverage_varnish_m2_per_l
6.0 m2 per litre per coat WoodworkingShop src/engine/calculators/finish-calculator.ts
Wood glue bottle
glue_bottle_ml
237.0 mL BIY rule
PVA glue spread rate
glue_pva_spread_m2_per_l
180.0 m2 per litre WoodworkingShop src/engine/calculators/glue-coverage.ts
Glue waste factor
glue_waste_factor
1.15 x WoodworkingShop src/engine/calculators/glue-coverage.ts
Leveller feet per cabinet
leveller_feet
4.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Sandpaper sheets per project
sandpaper_sheets
3.0 sheets BIY rule
A screw must go this far into the second piece
screw_penetration_mm
25.0 mm BIY rule
Shelf pins per adjustable shelf
shelf_pins_per_shelf
4.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
Extra screws for a tall unit
tall_extra_screws
4.0 pcs WoodworkingShop src/engine/hardware/hardware.ts
A unit taller than this is fixed to the wall
tall_height_mm
1200.0 mm WoodworkingShop src/engine/hardware/hardware.ts
A unit this wide or wider takes 4 wall brackets
wall_bracket_wide_width_mm
800.0 mm WoodworkingShop src/engine/hardware/hardware.ts
A wall plug about every
wall_fixing_spacing_mm
300.0 mm BIY rule

Values the app gives to the formulas

The app works these out from the sizes you type and the design you pick, then runs the formulas above on them.

ValueUnitWhat it is
Adjustable shelves
adjustable_shelves
pcs 0: the designs use fixed shelves.
Back panel edge length
back_perimeter_mm
mm Twice height plus width; 0 without a back.
Boards 1x2 x 10 ft
boards_1x2_10
pcs The boards of this section and length the cutting plan needs.
Boards 1x2 x 12 ft
boards_1x2_12
pcs The boards of this section and length the cutting plan needs.
Boards 1x2 x 8 ft
boards_1x2_8
pcs The boards of this section and length the cutting plan needs.
Boards 2x2 x 10 ft
boards_2x2_10
pcs The boards of this section and length the cutting plan needs.
Boards 2x2 x 12 ft
boards_2x2_12
pcs The boards of this section and length the cutting plan needs.
Boards 2x2 x 8 ft
boards_2x2_8
pcs The boards of this section and length the cutting plan needs.
Boards 2x3 x 10 ft
boards_2x3_10
pcs The boards of this section and length the cutting plan needs.
Boards 2x3 x 12 ft
boards_2x3_12
pcs The boards of this section and length the cutting plan needs.
Boards 2x3 x 8 ft
boards_2x3_8
pcs The boards of this section and length the cutting plan needs.
Boards 2x4 x 10 ft
boards_2x4_10
pcs The boards of this section and length the cutting plan needs.
Boards 2x4 x 12 ft
boards_2x4_12
pcs The boards of this section and length the cutting plan needs.
Boards 2x4 x 8 ft
boards_2x4_8
pcs The boards of this section and length the cutting plan needs.
Depth
depth
mm The depth typed on the Measure tab.
Door height
door_height
mm 0 when there are no doors.
Doors
doors
pcs One door under 600 mm wide, otherwise two; none for open designs.
Drawers
drawers
pcs None of the current designs has drawers.
Visible edge length
edge_run_m
m The repo's visible carcass edge: 2 x (width + height).
Area to finish
finish_area_m2
m2 Both faces and the edges of every piece (the repo's method).
Thickness of the piece fixed
fix_thickness
mm The plywood thickness, or 50 for lumber.
Stands on the floor
floor_standing
0 or 1
Glued area
glue_area_mm2
mm2 The faces that meet at every joint.
Has a back panel
has_back
0 or 1
Has a hanging rail
has_hanging_rail
0 or 1
Height
height
mm The height typed on the Measure tab.
Is a box of panels
is_carcass
0 or 1
Is a gate
is_gate
0 or 1
Panel joins
joints
pcs The repo's count: 4 + shelves for a cabinet; the number of frame joints for lumber designs.
Sheets
sheets
pcs The sheets of plywood, plyboard or MDF the cutting plan needs.
Shelves
shelves
pcs The shelves (or the count the design asks for).
Plywood thickness
thickness
mm The plywood thickness picked.
Length fixed along a wall
wall_run_mm
mm The width of a cleat or rack; 0 for other designs.
Width
width
mm The width typed on the Measure tab.

What BIY adds

  • Cutting plans. Plywood parts are placed on 1,220 × 2,440 mm sheets with a 4 mm saw cut between them. "Straight cuts" runs every cut from edge to edge; "Save more material" packs the pieces tighter and is used only when it saves a sheet or leaves a clearly bigger offcut. Lumber parts are cut from the 8, 10 and 12 ft boards we sell, longest first, choosing the board length that wastes least.
  • Shelf and table-top sag. The standard beam formula, 5 × load × span⁴ ÷ (384 × stiffness × section stiffness), checked against span ÷ 360. We use a plywood stiffness of 6,500 N/mm², a little lower than the 8,300 N/mm² WoodworkingShop uses, so the warnings lean cautious. Loads: 15 kg for every metre of a book shelf, 25 kg for every metre of a desk top. These are still set in the app, not in the table above.
  • Sizes of parts. The sizes of the sides, tops, shelves, doors, aprons, rails and pickets are our own design for each project.

How a supply is matched to what we sell

The formulas give an amount and, for screws, plugs, hinges and slides, a size. The app then searches our store with the words in the "Searched in our store as" column, the same search you use in the app. Every variant that comes back is scored: how many of the words its title, type and tags have, whether the size written in its title fits (a screw must be long enough, a plug the right width), and whether it is sold by the piece or in a pack with a count. A product with a word it must not have, such as a metal screw for wood, is left out. The best match is shown first, with the others one tap away under "Swap". A supply nothing in our store fits is listed as "Not in our store yet", so you still see how many you need. The sheets and boards are found the same way: the cutting plan says how many, and the search finds them by kind and thickness (ordinary or marine plywood, plyboard or laminated MDF; a nominal 3/4 in sheet is sold as 18 mm) or by section and length (pine wood or coco lumber, whichever costs less comes first).

Materials and units

MaterialUnit
Door handlepcs
Gate latchpcs
Cabinet hingepcs
Pine wood 1" × 2" × 10 ftpcs
Pine wood 1" × 2" × 12 ftpcs
Pine wood 1" × 2" × 8 ftpcs
Coco lumber 2" × 2" × 10 ftpcs
Coco lumber 2" × 2" × 12 ftpcs
Coco lumber 2" × 2" × 8 ftpcs
Coco lumber 2" × 3" × 10 ftpcs
Coco lumber 2" × 3" × 12 ftpcs
Coco lumber 2" × 3" × 8 ftpcs
Coco lumber 2" × 4" × 10 ftpcs
Coco lumber 2" × 4" × 8 ftpcs
Plywood 1/2"sheets
Plywood 1/4"sheets
Plywood 3/4"sheets
Wall bracketpcs
Wall plugpcs
Hanging railpcs
Wood screw 2"pcs
Wood screw 1½"pcs
Wood screw 3"pcs
Paint for woodlitres
Wood glue (PVA)bottles
Hinge mounting platepcs

Quantities are rounded up to whole items. If a supply is not sold yet, the app still tells you how many you need so you can find it elsewhere.

WoodworkingShop is Copyright (c) 2026 Ryair and is used under the MIT licence (licence text).

Slideshow