Changelog
What's changed in the Giant checkout
Every release, newest first.
-
- Details: a phone number typed as +44 with the 0 kept is filed as a national number
- Orders: a switch at an address with one fibre box carries its ONT reference and port
- Packages: the saving against an uploaded bill is worked out against the real price
- Packages: a short featured row is filled from the rest of the range
- Payments: card and bank transactions are filed in WHMCS again
- Features: the progress list is in the catalogue
- Payment: a step-by-step progress list while the order is placed
- Features: the feed is JSON only, the page is gone
- Features: the domains entry describes what it does, not what runs it
- Features: a feed of what the checkout can do, as a page and JSON
- Changelog: releases carry semantic version numbers
- Changelog: every release of the checkout, as a page, an RSS feed and JSON
- Leased lines: the mobile-only business page gets its own upsell wording
- Leased lines: the business package list upsells to a live quote
- Leased lines: a live quoter for business customers, per brand
-
v3.4.0 11 October 2026
- Pre-order notifier: always checks, reports every run, and can check one now
- Admin pre-orders: edit, watch again and delete a registration
- Pre-orders: register interest in Full Fibre and Copper separately
-
v3.3.0 8 October 2026
- Customise: the install-type cards read well on a phone
- Customise: install-type card titles in the heading colour
- Customise: the install-type question is cards that say what each choice means
- Packages: the date chips fit the list view column
- Packages: a second chip for the new-line visit
- Packages: the date chip is one line again
- Packages: the date chip reads its dates from itself, not the card
- Packages: the card leads with the earliest the service could go live
- Package resync: update what it syncs, never reset what it does not know
- Coverage: an empty cached answer is asked again past the feed's cache
-
v3.2.0 2 October 2026
- Stripe: card payments carry the customer's name, email, phone and address
- Stripe intent endpoint: only for an order at the payment step
- Checkout: payments recorded in WHMCS with their amount, fee and Stripe payment id
-
v3.1.0 30 September 2026
- Orders carry every custom field, admin-only ones included
- Ordering API: config-options lists the product's custom fields
-
v3.0.0 28 September 2026
- Abandoned carts: the whole basket, priced and totalled
- Admin Payments: the Direct Debit round trips, so a paid-but-unplaced order is seen
- Checkout: payment is the last step, and the order is placed the moment it is authorised
-
v2.19.0 27 September 2026
- External API: networks carry logo and the range of speeds, on the catalogue and coverage too
- External API: WHMCS credentials primed for the answers that never build a catalogue
- External API: public bundles priced as the checkout prices them
- External API: the marketing endpoints -- interest, brand, package, changes, popularity, promotions, bundles, feeds
- API docs: the endpoints coming next, named so integrations can plan for them
- External API: GET /networks -- the networks the brand sells on
-
v2.18.0 26 September 2026
- Packages: pre-order only -- shown and priced, but the button registers interest
-
v2.17.0 24 September 2026
- Package Mapper: the import preview names the network and ISP
- Package Mapper: CSV calls name their escape character
- Package Mapper: prices in bulk -- CSV out, CSV in, WHMCS too if asked
- Admin config options: option and value names shown decoded
- Ordering API: a product description older than its maps is re-read
- Ordering API: option maps cut to the product, and ALK orders get an address
- Ordering API: a refused config option says why
- Abandoned carts: an order closes the person's carts, by any route
- Abandoned carts: the reminder cap is per person, not per cart
-
v2.16.0 23 September 2026
- API docs: the journey drawn top-down, so it reads at page width
- API docs: the integration guide on the page, with its diagrams
- API docs: every ordering call with its request and answer
- Ordering API: the VoIP number flow on a bundle
- API docs: contracts, bundle options and acceptance on the ordering flow
- Ordering API: contracts signed, bundles with their own options, orders accepted
- Ordering API: order type and Installation Type are one decision
- White-label checkout module: a metric provider, so the cart page loads
- API docs: the Ordering section
- Ordering API: an order end to end, with no browser
-
v2.15.0 22 September 2026
- API docs: addresses without a UPRN, network logos, the catalog default
- Catalog cache: a new key for the new meaning of the flag
- /catalog lists every mapped, unhidden package by default
- /packages logos come from the whole catalogue feed
- Network logos on the catalog, coverage and packages API answers
-
v2.14.0 17 September 2026
- An ALK in the link picks the address; the integrator API takes ALK + district
- WHMCS custom fields named "Key|Label" are matched by either half
- ALK-only addresses: the embed takes them, and the order carries what provisioning needs
- api/products.php: initialise the app before asking it for products
- Addresses without a UPRN go through the checkout by ALK and district
-
v2.13.0 13 September 2026
- List row: promo codes join the foot stripe
- List row: the guarantee and install chips spaced, and centred as a group
- List row: the tags as a stripe across the foot
- List view refitted: six tracks that fit the page, no tile, features as chips
- Line endings: products.php stored as LF again
- Card price block back to the centred stack
- Price block: no stray rule above the rise schedule
- List view: speed and price take the room, not the description
- List view: page width, description clamped to two lines
- Logos back, one-off charges under the price, list given room
- Business packages get an office tile, not a house
- Grid and list views built to the mockup
- List view designed on fixed tracks, so rows line up
- Restore products.php
- Make list view mean something on a phone
- The logo stands in for the network name, and the name for the logo
- Show every package's logo, Openreach included
- Sort on a price that exists, and lay the list out as a row
- Make the theme toggle work, and serve a logo a card can use
- Sort and a list view on the package list
- Fix the theme toggle: styled, pinned, one icon
- Key the logo tokens from a file, not the environment
- Require the token helper in the logo endpoint
- Network logos on the cards, without naming our suppliers
- Say when we can actually come, on the package list
- Appointments: show the products nothing is mapped to, and link them in bulk
- No installation dates must not be a wall
- Stop keeping our own copy of the coverage and catalogue feeds
-
v2.12.0 12 September 2026
- Package Mapper: filters that match the data, sorting, and two views
- Picking a network shows that network, fold or no fold
- Show what WHMCS will charge, beside what the mapper shows
- Price the ports: kept numbers are transfers in, and a transfer is a one-off
- Say what the bill reader is doing while it does it
- One "with us" figure, and what it includes
- Pass the indicative total through to the page
- Give the bill reader room for a schedule, and a reason when it fails
- Read service schedules, and price them without an address
-
v2.11.0 11 September 2026
- Leave promo codes out of the catalogue
- Only publish a promo code against products it is assigned to
- Cap the key expiry picker at what the column can hold
- Cache /catalog, give it its own scope, and let keys be edited
- Stop the public API publishing whmcs_pid: null
- Publish the whole range, not just what one address can have
- Bring the API docs back in line with what the API returns
- Put the annual price rise in the external API
- Let a link carry the postcode into the checkout
- Show contract price rises inc VAT, like every other price on the card
- Say whose prices these are, with a logo
- Report how long a promotion actually runs
- Fix the zero monthly price in contract_terms, and stop stalling integrators
- Centre the contract preloader icon
- Ask how the money due today gets paid
- Measure the contract step and the moment a payment agreement exists
- Take the setup fee at the bank, not five working days later
-
v2.10.0 9 September 2026
- Keep the package grid in step with the network filter
- Retry the appointment helper when it stalls
- Fix the doubled namespace that was killing every order
- Stop a WHMCS account that already exists being a dead end
-
v2.9.0 8 September 2026
- Carry the ONT reference as well as the port
- Separate fields for the access line and the ONT port, and drop the lightbox
- Let the circuit panel sit in its row, and size every picture the same
- Make the enlarged picture a proper lightbox
- Show every version of the kit, and let a tap enlarge it
- Show what the line ends at, and keep the powered-on warning to fibre
- Guard the merge helper against the layout's second include
- Stop empty per-product rows cancelling the shared group rules
- Temporary: show where a config map row came from, and its contents
- Temporary: list every config map key, not the first four
- Temporary: state the config map lookup's own numbers in the page
- Report the brand and its rule count from the appointments endpoint
- Scope order-type lookup to the brand, and say when rules sit on another
- Make the config map loader say what happened
- Check the saved rules, not just the ones on screen
- Route the address check past the layout
- Check config rules against a real address, from the page that writes them
- Offer every order type coverage actually returns
- Name the brand your config rules actually landed on
- Say which brand the config rules belong to
- Let the customer say which line we are switching
- Put the circuit under the installation question, and call it an access line
- Put the circuit under the options, and say what kind of line it is
- Never guess at a .env above the document root
- Let the .env live where the web server cannot reach it
- Stop serving credentials over the web
- Show the existing circuit even where the config mapper is unset
- Only ask for an install date when an engineer is actually coming
- Show the circuit a switch order would take over
- Open the confirm dialog at the slot that was clicked
- Scroll the host page to the widget on every step, and fix the list gaps
- Stop pinning the Continue bar to the viewport when embedded
- Rebook the appointment when a saved order is resumed
- Make Back follow the steps the customer actually has
- Drop a held appointment when it stops matching the order
- Show the booked installation slot in the cart and on the confirmation
- Widen the picker, and let them switch view or filter by time of day
- Pick the install date from a calendar, not a list
- Send AppointmentRequestDate with the reference, always, or neither
- Centre the confirm dialog, and make changing the date actually re-ask
- Give the installation date its own step
- Stop appointment lookups calling the order-creation endpoint, and refresh stale dates
- Ask before booking, and only once the installation type is chosen
- Read the custom fields from the WHMCS database, as the product is typed
- Pick the custom field the appointment reference is sent to
- Take the appointment links from coverage instead of a mapping table
- Map products to carrier appointments, and hold a slot for the order
-
v2.8.0 6 September 2026
- Let a brand order configurable option values
- Count one-off charges in the GA4 basket, and in fraud screening
- Clean the contract term labels and fill in the minimum term
- Make the coverage payload safe for an aggregator to publish
- Let a key holder see what their own key reaches
- Add read-only integrator keys for coverage aggregators
- Fix "show more" doing nothing on the Add-ons step
- Show hardware on the Add-ons step too
- Name the hardware even when a choice holds only one thing
- Fold away extra router choices behind a "show more"
- Count units in the "+N" chip, not lines
- Show how many of each, and say "+2" for what has no picture
- Stop a missing hardware shot leaving a plus pointing at nothing
- Make the hardware tile full width and actually white
- Trust the stock status the API worked out, and read the new listing
- Put the hardware pictures on a white tile, and show the whole bundle
- Show what is in the box on the Customise step
-
v2.7.0 3 September 2026
- Audit 2/2: one VAT rule, and stop quoting business customers twice
- Audit 1/2: stop discarding orders, unblock first paint, clear the decks
- Collapse the order summary on every page, not just the one
- Fix the collapsed basket, its missing chevron, and iOS focus zoom
- Anchor the mobile price bar, fix its contrast, and VAT the port fee
- Keep the remove button on the same line as the port number
- Fix port row on mobile, and guard the overflow bug site-wide
- VoIP: check each number can be ported as it's entered
-
v2.6.0 2 September 2026
- Fix fatal: billcheck::money() was declared twice
- Bill checker: random references, rebuilt email, per-line ordering
-
v2.5.0 1 September 2026
- Fix bill checker layout on mobile
- Create 045_bill_check_callback.sql
- Update bill-checker.php
- Update sureswitch-match.php
- Update integrations.php
- Update payment.php
-
v2.4.0 30 August 2026
- Update style.css
- Update addons.php
-
v2.3.0 29 August 2026
- Update addons.php
- Update checkout.php
- Update voip-number-picker.php
- Update bundles.php
- Update voip.php
- Create voip-number-picker.php
- Update voip-numbers.php
- Create voip-numbers.php
- Fix: guest checkout could place an order with an empty name (WHMCS AddClient failed)
- Abandoned-cart marketing: PECR soft opt-in, suppression, unsubscribe, sequence
- Admin: Abandoned Carts page with per-cart history
- Pre-orders admin: per-preorder history timeline
-
v2.2.0 28 August 2026
- External API: auto-select brand from hostname, drop brand_id param
- External API docs: enrich page + brand logo/favicon; surface speed guarantees
- Update index.php
- External API: hide internal whmcs_pid from public bases
- Public API docs: /external-api/docs is now a nice HTML page, no key required
- Public API: expose the v1 API at /external-api/ and /integrator/api/
- Public API: coverage endpoint now returns contract terms + live promotions
- GA4 ecommerce: forward events to the host page in embedded mode
- docs: add GA4 ecommerce to Node rebuild spec
- GA4 ecommerce: fire the full funnel across the pages
- GA4 ecommerce: foundation (per-brand tag, gaEvent helper, items builder)
-
v2.1.0 15 August 2026
- Fix migration runner choking on semicolons inside SQL comments
- docs: complete Node.js rebuild master spec
- Accessibility pass: keyboard focus, skip link, reduced motion, ARIA
- Abandoned-cart recovery: auto-snapshot at details step + hourly recovery cron
- D8: pre-mount the Stripe card form on load (no stall when opening the Card tab)
- Contract term change now syncs the associated Contract Length config option
- Fix: Companies House billing offer showed before a company was selected
- Save & Resume (CC3): email a link to pick up checkout later
- Fix: prevent password-manager autofill from clobbering the Stripe key
- Companies House billing offer: visible feedback on Use it / No thanks
- Checkout UX: 'Change address' carries the postcode so it doesn't restart empty
- Checkout UX batch 5: add-ons step required-field fix + sticky mobile CTA
- Checkout UX: email lookup no longer traps the customer (C6)
- Companies House: offer to pre-fill billing address for business orders
- Checkout UX: editable contract term (C2)
- Checkout UX batch 4: config step (Customise) restores choices on Back + sticky mobile CTA
- Checkout UX batch 3: guest checkout, mobile autofill, neutralize dead second flow
- Checkout UX batch 2: payment/review/completion trust + safety (Agent D)
- Checkout UX batch 1: dedupe coverage auto-search, 'from' pricing, business ex-VAT default, product-load retry, neutral address icons, OTS reword + poll timeout
- Company search: match field styling + resume search on re-focus
- Add Companies House company search on business/pre-order forms
-
v2.0.0 9 August 2026
- Fix cron fatal: add/self-heal contract_reminder_stage column
- Pre-order emails: full address from UPRN + honest contract-reminder promise
- Fix front-end logo showing as text when brand loads via SELECT-* fallback
- Fix admin Live Preview showing brand text instead of blob logo
- Fix logos not showing in admin (blob check used wrong field)
- Add temporary upload diagnostic to branding page
- Fix logo/favicon upload: show rejection reason, stop wiping on failure
- Self-heal Brevo settings save when migration 028 not applied
- Fix logo/favicon appearing not to update (stale cache)
- Pre-order notifications via Brevo (per brand, branded emails)
- Update preorder.php
- Update preorders.php
- Self-heal pre-order whmcs_pid NOT NULL on save
- Create 027_preorders_nullable_pid.sql
-
v1.14.0 4 August 2026
- Render enriched config options as picture cards on the live Extras step
-
v1.13.0 25 July 2026
- Extend analytics date range beyond 90 days
-
v1.12.0 24 July 2026
- Add Node/Next.js checkout port — foundation + address & package steps
- Add complete Next.js rebuild specification
-
v1.11.0 7 July 2026
- Resolve address from UPRN via OR address-match fallback
-
v1.10.0 4 July 2026
- Cache-bust static assets with ?v=<mtime>
- Update style.css
- Update addons.php
- Update layout.php
-
v1.9.0 21 May 2026
- Update layout.php
- Update cart.php
- Update style.css
- Update embed.js
- Update brand.php
-
v1.8.0 19 May 2026
- Update products.php
-
v1.7.0 16 May 2026
- Update index.php
- Update home.php
-
v1.6.0 13 May 2026
- Update config-image.php
- Update products.php
-
v1.5.0 5 May 2026
- Update 024_config_value_enrichment.sql
-
v1.4.0 28 April 2026
- Update products.php
-
v1.3.0 19 April 2026
- Update addons.php
- Update 023_bundle_group_description.sql
- Update bundles.php
- Update products.php
-
v1.2.0 16 April 2026
- Update whmcsbroadbandwhitelabelcheckout.php
- Update index.php
- Update .htaccess
- whmcs admin api fix
- Update checkout.php
-
v1.1.0 12 April 2026
- Update home.php
-
v1.0.0 11 April 2026
- Update app.js
- Update checkout.php
- Update checkout-switching.php
- Update ots.php
- Update sureswitch-providers.php
- Update sureswitch.php
- Update sureswitch-match.php
- ots updates
- Update brand.php