Working example, built for Pool Table Guy

The instant quote your own pricing page already supports

Your pricing page already lays out every number a self-serve quote tool would need: cloth grade and size tiers, cushion rubber options, and a full postcode-zone travel surcharge table. Right now getting a number means a form, call, or email. Here's what a live calculator over that same data looks like.

Every price and rule below is copied from your own pricing page, not invented: cloth grade and size tiers, cushion rubber prices, and the four-tier postcode surcharge table with the Congestion Charge Zone add-on. VAT is shown separately, matching your page's "all prices exclude 20% VAT" note.

What I'd flag before you roll this out anywhere else

Postcode matching is prefix-only, not address-verified. This checks the letters at the start of what someone types (BN, SW, and so on), the same way your printed table is organized. It doesn't verify the postcode is real or resolve edge cases like a district split across two of your zones, if any exist. Real deployment would want a proper postcode lookup.
The Congestion Charge Zone toggle is a judgment call, not a lookup. Your page says SE splits into an "Outside CC Zone" tier and an "Inside CC Zone" tier, and the £50 Congestion Charge itself is waived if parking is provided. I built this as a manual toggle the customer ticks rather than guessing from a postcode, since I can't tell from the pricing page alone which SE postcodes fall inside the zone.
Cushion rubber and cloth replacement are priced as separate services here, matching your page. If a customer wants both done in one visit, this calculator totals them independently rather than assuming a combined-job discount, since your page doesn't mention one.
This calculates a price, it doesn't book anything. No calendar, no payment, no confirmation email. The honest next step after "here's your number" is still your existing quote form or a call, this just gets someone to that point already knowing what to expect.
Your own pricing page currently shows the postcode table twice with different contents. Earlier on the page GU and LU sit in the +£40 tier and AL isn't listed at all, later on the same page GU moves to the base tier and AL and LU both appear in the +£70 tier. This calculator uses the second, later version. Worth fixing on the live page regardless of this demo, since right now a customer could read two different numbers for the same postcode depending which part of the page they check.