FettlePlumber WordPress Theme
The trades site that tells you the price, and the calculator that tells you why your radiators will not work on a heat pump.
Open live preview ↗
Overview
Who it is for
A heating and plumbing engineer — the kind of business that is two vans and a mobile number. Its website has to do two things: say what it costs to get somebody through the door, and prove they know what they are talking about. Fettle computes both rather than typing them.
There is no price field in this theme
Trades websites do not carry prices. The reason given is that every job is different, and that is true of the whole job but not of its parts: an hourly rate is not different every time, and whether Saturday costs more is not different every time. It is the single thing people most want to know before they ring.
So a job carries its labour hours, its materials at cost, and whether it needs a second pair of hands. Everything the visitor sees about money is worked out from those and one rate card in the Customizer — the weekday, evening, Saturday, Sunday and emergency prices side by side on every job page, with the whole breakdown underneath. Put the hourly rate up and every figure on the site moves the same day, including the admin columns.
Three details it is careful about, because getting them wrong is how a quote becomes an argument on the doorstep. The out-of-hours multiplier applies to labour only — a tap does not cost more on a Sunday, and charging the multiplier on the whole invoice is the quiet way weekend work gets overcharged. The first hour is charged whole and includes the visit, because quoting a callout and a full first hour is charging twice for the same hour. And VAT is shown separately and only when the business is actually registered.
What size radiator does this room need?
The real steady-state calculation. Fabric loss is the U-value of every surface facing outdoors times its area times the temperature difference; ventilation loss is the room’s volume times its air change rate times the same difference times the heat capacity of air.
Two things it gets right that shortcuts do not. The window comes out of the wall rather than being added to it — counting both at full area is the commonest arithmetic error in this calculation and it always inflates the answer. And a wall between two rooms held at the same temperature carries no load at all however large it is, which is why a mid-terrace bedroom needs so much less than the same room on a corner.
And then the part nobody is told
Radiators are rated with the water 50 K above the room. Run the same radiator on a heat pump flowing at 45 and the difference is 22.5 K, and output falls with that difference to the power 1.3 — so it gives about a third of what the box said. Nothing is broken; it is the same radiator obeying the same physics. Change the system in the calculator and the answer changes accordingly.
The exponent was checked against published manufacturer correction tables at five points from 20 to 60 K before anything was built on it, along with invariants no implementation can argue with: no temperature difference must mean no loss, doubling the difference must double the loss, newer construction must never lose more, and glazing a whole wall must leave no opaque wall area behind.
A ground that is doing arithmetic
The background is an actual solve of the heat equation on a 256 by 256 grid, stepped on the GPU with ping-ponged floating point textures, with the jobs on the page as its heat sources. Warmth genuinely conducts outward, meets and merges. It does not claim to model anybody’s house. Where a browser cannot give it a float render target it is simply not drawn and the page sits on plain paper.
The hottest value the field can reach sets the contrast budget for the whole design, solved backwards from the requirement that the ink still reaches 4.5:1 against it. Verified by photographing the framebuffer with all text forced transparent: 699 text nodes across eight screens, none below AA.
What is not in it
No page builder, no ACF, no build step, no third-party JavaScript, and no photographs. A job without a cover image gets no image element at all rather than a placeholder announcing there is no picture — a trades site with stock photographs of somebody else’s boiler cupboard is worse than one with none.
What's included
- Full theme source — every template, style sheet & script
- One-click demo importer (idempotent, no page builder)
- Live Customizer controls for copy, colours & content
- Translation-ready .pot file + RTL stylesheet
- HTML documentation + a CHANGELOG file
- Lifetime updates + 6 months support (renewable)
Specifications
| WordPress | 5.6 – 7.0 |
|---|---|
| PHP | 8.0 – 8.3 |
| Browsers | Chrome, Firefox, Safari, Edge (latest) |
| Layout | Fully responsive, mobile → desktop |
| Localization | Translation-ready · RTL included |
| Accessibility | Keyboard-navigable · prefers-reduced-motion |
| Page builder | Not required — native Customizer |
| License | GNU GPL v2 · single-site commercial |
Release
The complete, dated version history ships in the theme’s CHANGELOG file. Every purchase includes lifetime access to future updates.