{
    "system": "multibrand-checkout",
    "name": "Multibrand Checkout",
    "version": "3.5.0",
    "tag": "v3.5.0",
    "released": "2026-10-16",
    "notes": [
        "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"
    ],
    "built": "2026-10-16T17:57:57Z",
    "releases": [
        {
            "version": "3.5.0",
            "tag": "v3.5.0",
            "released": "2026-10-16",
            "notes": [
                "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"
            ],
            "commit": "0e700f20bfcb",
            "url": "https://join.giant.net.uk/changelog#v3.5.0"
        },
        {
            "version": "3.4.0",
            "tag": "v3.4.0",
            "released": "2026-10-11",
            "notes": [
                "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"
            ],
            "commit": "01e09f49c0db",
            "url": "https://join.giant.net.uk/changelog#v3.4.0"
        },
        {
            "version": "3.3.0",
            "tag": "v3.3.0",
            "released": "2026-10-08",
            "notes": [
                "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"
            ],
            "commit": "da8eb7edf0c5",
            "url": "https://join.giant.net.uk/changelog#v3.3.0"
        },
        {
            "version": "3.2.0",
            "tag": "v3.2.0",
            "released": "2026-10-02",
            "notes": [
                "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"
            ],
            "commit": "43fa3133e3fd",
            "url": "https://join.giant.net.uk/changelog#v3.2.0"
        },
        {
            "version": "3.1.0",
            "tag": "v3.1.0",
            "released": "2026-09-30",
            "notes": [
                "Orders carry every custom field, admin-only ones included",
                "Ordering API: config-options lists the product's custom fields"
            ],
            "commit": "85e489f02d74",
            "url": "https://join.giant.net.uk/changelog#v3.1.0"
        },
        {
            "version": "3.0.0",
            "tag": "v3.0.0",
            "released": "2026-09-28",
            "notes": [
                "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"
            ],
            "commit": "89cf2703fadc",
            "url": "https://join.giant.net.uk/changelog#v3.0.0"
        },
        {
            "version": "2.19.0",
            "tag": "v2.19.0",
            "released": "2026-09-27",
            "notes": [
                "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"
            ],
            "commit": "4b10a404d4eb",
            "url": "https://join.giant.net.uk/changelog#v2.19.0"
        },
        {
            "version": "2.18.0",
            "tag": "v2.18.0",
            "released": "2026-09-26",
            "notes": [
                "Packages: pre-order only -- shown and priced, but the button registers interest"
            ],
            "commit": "006ca242db8f",
            "url": "https://join.giant.net.uk/changelog#v2.18.0"
        },
        {
            "version": "2.17.0",
            "tag": "v2.17.0",
            "released": "2026-09-24",
            "notes": [
                "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"
            ],
            "commit": "bf74f56ee20b",
            "url": "https://join.giant.net.uk/changelog#v2.17.0"
        },
        {
            "version": "2.16.0",
            "tag": "v2.16.0",
            "released": "2026-09-23",
            "notes": [
                "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"
            ],
            "commit": "338a76864ebd",
            "url": "https://join.giant.net.uk/changelog#v2.16.0"
        },
        {
            "version": "2.15.0",
            "tag": "v2.15.0",
            "released": "2026-09-22",
            "notes": [
                "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"
            ],
            "commit": "da6eb0d62568",
            "url": "https://join.giant.net.uk/changelog#v2.15.0"
        },
        {
            "version": "2.14.0",
            "tag": "v2.14.0",
            "released": "2026-09-17",
            "notes": [
                "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"
            ],
            "commit": "4a1c7ec879a6",
            "url": "https://join.giant.net.uk/changelog#v2.14.0"
        },
        {
            "version": "2.13.0",
            "tag": "v2.13.0",
            "released": "2026-09-13",
            "notes": [
                "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"
            ],
            "commit": "c7a57aa27fb9",
            "url": "https://join.giant.net.uk/changelog#v2.13.0"
        },
        {
            "version": "2.12.0",
            "tag": "v2.12.0",
            "released": "2026-09-12",
            "notes": [
                "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"
            ],
            "commit": "ce7a6776bcb2",
            "url": "https://join.giant.net.uk/changelog#v2.12.0"
        },
        {
            "version": "2.11.0",
            "tag": "v2.11.0",
            "released": "2026-09-11",
            "notes": [
                "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"
            ],
            "commit": "9d1d688cca4f",
            "url": "https://join.giant.net.uk/changelog#v2.11.0"
        },
        {
            "version": "2.10.0",
            "tag": "v2.10.0",
            "released": "2026-09-09",
            "notes": [
                "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"
            ],
            "commit": "375facc14053",
            "url": "https://join.giant.net.uk/changelog#v2.10.0"
        },
        {
            "version": "2.9.0",
            "tag": "v2.9.0",
            "released": "2026-09-08",
            "notes": [
                "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"
            ],
            "commit": "426a64b3b909",
            "url": "https://join.giant.net.uk/changelog#v2.9.0"
        },
        {
            "version": "2.8.0",
            "tag": "v2.8.0",
            "released": "2026-09-06",
            "notes": [
                "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"
            ],
            "commit": "1b387a01cb7f",
            "url": "https://join.giant.net.uk/changelog#v2.8.0"
        },
        {
            "version": "2.7.0",
            "tag": "v2.7.0",
            "released": "2026-09-03",
            "notes": [
                "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"
            ],
            "commit": "b47e28ce8edf",
            "url": "https://join.giant.net.uk/changelog#v2.7.0"
        },
        {
            "version": "2.6.0",
            "tag": "v2.6.0",
            "released": "2026-09-02",
            "notes": [
                "Fix fatal: billcheck::money() was declared twice",
                "Bill checker: random references, rebuilt email, per-line ordering"
            ],
            "commit": "e7d620227623",
            "url": "https://join.giant.net.uk/changelog#v2.6.0"
        },
        {
            "version": "2.5.0",
            "tag": "v2.5.0",
            "released": "2026-09-01",
            "notes": [
                "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"
            ],
            "commit": "c2ed4a076c55",
            "url": "https://join.giant.net.uk/changelog#v2.5.0"
        },
        {
            "version": "2.4.0",
            "tag": "v2.4.0",
            "released": "2026-08-30",
            "notes": [
                "Update style.css",
                "Update addons.php"
            ],
            "commit": "fe1a8187a31c",
            "url": "https://join.giant.net.uk/changelog#v2.4.0"
        },
        {
            "version": "2.3.0",
            "tag": "v2.3.0",
            "released": "2026-08-29",
            "notes": [
                "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"
            ],
            "commit": "14228d8d7fd7",
            "url": "https://join.giant.net.uk/changelog#v2.3.0"
        },
        {
            "version": "2.2.0",
            "tag": "v2.2.0",
            "released": "2026-08-28",
            "notes": [
                "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)"
            ],
            "commit": "febd33f0f11a",
            "url": "https://join.giant.net.uk/changelog#v2.2.0"
        },
        {
            "version": "2.1.0",
            "tag": "v2.1.0",
            "released": "2026-08-15",
            "notes": [
                "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"
            ],
            "commit": "be64dc25236a",
            "url": "https://join.giant.net.uk/changelog#v2.1.0"
        },
        {
            "version": "2.0.0",
            "tag": "v2.0.0",
            "released": "2026-08-09",
            "notes": [
                "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"
            ],
            "commit": "acfa70f3e2a2",
            "url": "https://join.giant.net.uk/changelog#v2.0.0"
        },
        {
            "version": "1.14.0",
            "tag": "v1.14.0",
            "released": "2026-08-04",
            "notes": [
                "Render enriched config options as picture cards on the live Extras step"
            ],
            "commit": "0cba5dd0be6a",
            "url": "https://join.giant.net.uk/changelog#v1.14.0"
        },
        {
            "version": "1.13.0",
            "tag": "v1.13.0",
            "released": "2026-07-25",
            "notes": [
                "Extend analytics date range beyond 90 days"
            ],
            "commit": "7fde434524ec",
            "url": "https://join.giant.net.uk/changelog#v1.13.0"
        },
        {
            "version": "1.12.0",
            "tag": "v1.12.0",
            "released": "2026-07-24",
            "notes": [
                "Add Node/Next.js checkout port — foundation + address & package steps",
                "Add complete Next.js rebuild specification"
            ],
            "commit": "58e36421a63c",
            "url": "https://join.giant.net.uk/changelog#v1.12.0"
        },
        {
            "version": "1.11.0",
            "tag": "v1.11.0",
            "released": "2026-07-07",
            "notes": [
                "Resolve address from UPRN via OR address-match fallback"
            ],
            "commit": "338f3d475992",
            "url": "https://join.giant.net.uk/changelog#v1.11.0"
        },
        {
            "version": "1.10.0",
            "tag": "v1.10.0",
            "released": "2026-07-04",
            "notes": [
                "Cache-bust static assets with ?v=<mtime>",
                "Update style.css",
                "Update addons.php",
                "Update layout.php"
            ],
            "commit": "135cfe3d26f2",
            "url": "https://join.giant.net.uk/changelog#v1.10.0"
        },
        {
            "version": "1.9.0",
            "tag": "v1.9.0",
            "released": "2026-05-21",
            "notes": [
                "Update layout.php",
                "Update cart.php",
                "Update style.css",
                "Update embed.js",
                "Update brand.php"
            ],
            "commit": "d242733c2156",
            "url": "https://join.giant.net.uk/changelog#v1.9.0"
        },
        {
            "version": "1.8.0",
            "tag": "v1.8.0",
            "released": "2026-05-19",
            "notes": [
                "Update products.php"
            ],
            "commit": "e55f9133f210",
            "url": "https://join.giant.net.uk/changelog#v1.8.0"
        },
        {
            "version": "1.7.0",
            "tag": "v1.7.0",
            "released": "2026-05-16",
            "notes": [
                "Update index.php",
                "Update home.php"
            ],
            "commit": "0d23b92ef333",
            "url": "https://join.giant.net.uk/changelog#v1.7.0"
        },
        {
            "version": "1.6.0",
            "tag": "v1.6.0",
            "released": "2026-05-13",
            "notes": [
                "Update config-image.php",
                "Update products.php"
            ],
            "commit": "d9622cf87938",
            "url": "https://join.giant.net.uk/changelog#v1.6.0"
        },
        {
            "version": "1.5.0",
            "tag": "v1.5.0",
            "released": "2026-05-05",
            "notes": [
                "Update 024_config_value_enrichment.sql"
            ],
            "commit": "4c581e4a1c9b",
            "url": "https://join.giant.net.uk/changelog#v1.5.0"
        },
        {
            "version": "1.4.0",
            "tag": "v1.4.0",
            "released": "2026-04-28",
            "notes": [
                "Update products.php"
            ],
            "commit": "e540777418d5",
            "url": "https://join.giant.net.uk/changelog#v1.4.0"
        },
        {
            "version": "1.3.0",
            "tag": "v1.3.0",
            "released": "2026-04-19",
            "notes": [
                "Update addons.php",
                "Update 023_bundle_group_description.sql",
                "Update bundles.php",
                "Update products.php"
            ],
            "commit": "8508726c6076",
            "url": "https://join.giant.net.uk/changelog#v1.3.0"
        },
        {
            "version": "1.2.0",
            "tag": "v1.2.0",
            "released": "2026-04-16",
            "notes": [
                "Update whmcsbroadbandwhitelabelcheckout.php",
                "Update index.php",
                "Update .htaccess",
                "whmcs admin api fix",
                "Update checkout.php"
            ],
            "commit": "448c495da483",
            "url": "https://join.giant.net.uk/changelog#v1.2.0"
        },
        {
            "version": "1.1.0",
            "tag": "v1.1.0",
            "released": "2026-04-12",
            "notes": [
                "Update home.php"
            ],
            "commit": "ccac7d2d0ef3",
            "url": "https://join.giant.net.uk/changelog#v1.1.0"
        },
        {
            "version": "1.0.0",
            "tag": "v1.0.0",
            "released": "2026-04-11",
            "notes": [
                "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"
            ],
            "commit": "cdb05eabecf0",
            "url": "https://join.giant.net.uk/changelog#v1.0.0"
        }
    ],
    "url": "https://join.giant.net.uk/changelog",
    "feed": "https://join.giant.net.uk/changelog.xml"
}
