Methodology
Everything the calculators do is written here. Rules are versioned; a saved estimate keeps the version it was made with.
Units
Lengths are stored in metres, areas in square metres and volumes in litres, using exact factors: 1 ft = 0.3048 m, 1 in = 0.0254 m, 1 US gal = 3.785411784 L. The display unit never changes a stored value. Fractions are parsed explicitly (6 1/2") and ambiguous input is rejected with an example.
Geometry (rule geo-1.0)
- Rectangle: width × height. Triangle: ½ × base × perpendicular height. Known area: entered directly, no edge lengths.
- Rectangular room L × W × H generates walls A, C (L × H), B, D (W × H) and a floor (L × W). Flat ceiling = L × W.
- Symmetric gable: slope = √((W ÷ 2)² + rise²); ceiling area = 2 × L × slope. Gable-end triangles are optional separate walls (½ × W × rise each). No dormers; complex ceilings are entered as planes.
- Openings belong to one host surface. Net = gross − Σ(applicable openings). Negative net is rejected. Overlap cannot be detected; the planner warns when a surface has several openings.
- Each material has its own surface selection. Floor area and wall area are never combined or subtracted from each other.
Drywall (drywall-1.0)
basis = net × (1 + allowance); sheets = ⌈basis ÷ sheet area⌉. Full opening area is deducted by default; an optional threshold keeps small openings in the basis. Compatibility for consolidation: board type, thickness, sheet size, pooling choice. Moisture-resistant and standard boards never merge. Pooled purchasing rounds the aggregate once; room-by-room rounds each room and sums. Output is an area estimate — not a layout.
Accessories (accessory-1.0)
Manual quantity, or coefficient × net installed area × (1 + allowance), or ⌈basis ÷ yield per package⌉. A coefficient records unit, source and review date. No reviewed coefficient → "Quantity required". Corner bead is never inferred from perimeter.
Paint and primer (paint-1.0, primer-1.0)
volume = net × coats ÷ coverage × (1 + loss); containers = ⌈volume ÷ container size⌉ for one chosen size. Grouped by product, finish and colour. Paint never uses drywall waste area.
Flooring (flooring-1.0)
basis = net floor × (1 + waste); boxes = ⌈basis ÷ box coverage⌉. Straight lay only. Wall openings never reduce flooring; floor exclusions are explicit objects. Underlayment and trim are manual.
Pricing (pricing-1.0)
line = packages × entered unit price. Tax = rate × Σ(taxable priced lines, plus delivery and fees if marked taxable), rounded to minor units on the aggregate. A total is shown only when every quantity is complete and every line is priced. Prices are user-entered with a date; there are no live prices.
Rounding safeguards
Canonical values are rounded to 10 decimal places after every operation to remove floating-point drift, and ceilings use a 1e-9 epsilon so an exact 10.0 never becomes 11.
Acceptance tests the engine passes
| Test | Inputs | Expected |
|---|---|---|
| T01 | 12 × 12 ft, 9 ft walls, four walls | 432 sq ft gross |
| T02 | Three walls | 324 sq ft |
| T03 | Less 3 × 7 door and 4 × 4 window | 287 sq ft net |
| T04 | Add 12 × 12 flat ceiling | 431 sq ft drywall net |
| T05 | 10%, 4 × 8 sheets | 474.1 basis; 15 sheets; 480 sq ft |
| T06 | Paint 287 sq ft, 2 coats, 350/gal, 10% | 1.804 gal; 2 cans |
| T07 | Primer 287 sq ft, 1 coat, 300/gal | 0.9567 gal; 1 can |
| T08 | Floor 144 sq ft, 10%, 23.77/box | 158.4 basis; 7 boxes; 166.39 sq ft |
| T09 | Gable W 12, L 12, rise 3 ft | Slope 6.7082 ft; 160.9969 sq ft |
| T10 | Two 100 sq ft rooms, 32 sq ft sheets, 0% | Separate 8; pooled 7 |
| T11 | 100 sq ft wall, 110 sq ft openings | Invalid; no negative output |
| T12 | 10 × 10 ft to metres | 9.290304 m² = 100 sq ft |
| Cost | 15 sheets @ $15, 2 paint @ $35, 1 primer @ $25, 7 boxes @ $50, 6% tax, $50 non-taxable delivery | $670 + $40.20 + $50 = $760.20 |
Limits
20 projects, 50 rooms per project, 100 surfaces per room, 100 shopping items per estimate, 10 MB backup import. These keep the planner fast in a browser; larger takeoffs need a different tool.
What is out of scope
Structural design, building-code approval, installation specifications, exact cutting plans, insulation assemblies, electrical sizing, structural spans, live supplier prices and labour estimates.