Honest pricing review with disclaimers
What Changed: - Added VERIFIED-PRICES.md with honest assessment - Added BUDGET-REALITY.md explaining challenges - Added disclaimers to all option files - Clearly marked estimates vs verified data Key Findings: - Could NOT get live quotes due to cookie popups - £2,000 budget is VERY TIGHT for July/Aug peak - Realistic Eurocamp: £1,500-2,500 for 14 nights - Brittany Ferries: £850-1,100 return with cabin Verified Data: - Siblu Kerlann: €250/week (June OFF-PEAK) - Eurotunnel: £250-400 return avg - Budgeting Mum: £600/10 nights OFF-PEAK User action needed: - Manually check Eurocamp.co.uk - Consider shorter duration - Consider gîte instead of mobile home
This commit is contained in:
380
prices/brittany-ferries-plymouth-roscoff.json
Normal file
380
prices/brittany-ferries-plymouth-roscoff.json
Normal file
@@ -0,0 +1,380 @@
|
||||
{
|
||||
"searchDate": "2026-03-15T23:17:51.313Z",
|
||||
"route": "Plymouth to Roscoff",
|
||||
"outboundDate": "2026-07-18",
|
||||
"returnDate": "2026-08-02",
|
||||
"passengers": {
|
||||
"adults": 2,
|
||||
"children": 1,
|
||||
"childAges": [
|
||||
6
|
||||
]
|
||||
},
|
||||
"vehicle": "1 car",
|
||||
"screenshots": [
|
||||
"v3-01-homepage.png",
|
||||
"v3-02-no-cookies.png",
|
||||
"v3-03-before-interaction.png",
|
||||
"v3-06-after-routes.png",
|
||||
"v3-07-dates.png",
|
||||
"v3-08-passengers.png",
|
||||
"v3-09-results.png"
|
||||
],
|
||||
"status": "completed",
|
||||
"steps": [
|
||||
"Loaded homepage: https://www.brittany-ferries.co.uk/",
|
||||
"Accepted cookies",
|
||||
"Clicked Ferry tab",
|
||||
"Clicked search"
|
||||
],
|
||||
"pageStructure": [
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Ferry",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Holidays",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Offers",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Search",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Sailing Updates",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "My account",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Ferry",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Holidays",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Offers",
|
||||
"class": "mdc-button mat-mdc-button-base mat-mdc-button mat-",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "keyboard_arrow_down",
|
||||
"class": "mdc-icon-button mat-mdc-icon-button mat-mdc-button",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "keyboard_arrow_down",
|
||||
"class": "mdc-icon-button mat-mdc-icon-button mat-mdc-button",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "BOOK NOW",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--uneleva",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "More offers",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "More info",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "More holidays",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--outline",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "SUBMIT",
|
||||
"class": "mdc-button mat-mdc-button-base mdc-button--uneleva",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cookie Preferences",
|
||||
"class": "mdc-button mat-mdc-button-base ot-sdk-show-setting",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "mdc-fab mat-mdc-fab-base mat-mdc-fab mat-mdc-butto",
|
||||
"id": "fake-messenger"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Yes, I accept!",
|
||||
"class": "",
|
||||
"id": "onetrust-accept-btn-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Continue without Accepting",
|
||||
"class": "",
|
||||
"id": "onetrust-reject-all-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Customise",
|
||||
"class": "cookie-setting-link",
|
||||
"id": "onetrust-pc-btn-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "ot-close-icon",
|
||||
"id": "close-pc-btn-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Accept all and close",
|
||||
"class": "",
|
||||
"id": "accept-recommended-btn-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cookies Details",
|
||||
"class": "ot-link-btn category-host-list-handler",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cookies Details",
|
||||
"class": "ot-link-btn category-host-list-handler",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cookies Details",
|
||||
"class": "ot-link-btn category-host-list-handler",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cookies Details",
|
||||
"class": "ot-link-btn category-host-list-handler",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Back Button",
|
||||
"class": "ot-link-btn back-btn-handler",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Filter Icon",
|
||||
"class": "",
|
||||
"id": "filter-btn-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Clear",
|
||||
"class": "",
|
||||
"id": "clear-filters-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Apply",
|
||||
"class": "",
|
||||
"id": "filter-apply-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Cancel",
|
||||
"class": "",
|
||||
"id": "filter-cancel-handler"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"text": "Save choices",
|
||||
"class": "save-preference-btn-handler onetrust-close-btn-han",
|
||||
"id": ""
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"class": "mat-mdc-select mat-mdc-select-empty ng-untouched n",
|
||||
"id": "mat-select-0"
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"class": "mat-mdc-select mat-mdc-select-disabled mat-mdc-sel",
|
||||
"id": "mat-select-1"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "radio",
|
||||
"placeholder": "",
|
||||
"name": "mat-radio-group-0",
|
||||
"id": "mat-radio-0-input"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "radio",
|
||||
"placeholder": "",
|
||||
"name": "mat-radio-group-0",
|
||||
"id": "mat-radio-1-input"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "radio",
|
||||
"placeholder": "",
|
||||
"name": "mat-radio-group-0",
|
||||
"id": "mat-radio-2-input"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "text",
|
||||
"placeholder": "Outbound date",
|
||||
"name": "",
|
||||
"id": "mat-input-3"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "text",
|
||||
"placeholder": "Inbound date",
|
||||
"name": "",
|
||||
"id": "mat-input-4"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "text",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "mat-input-0"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "text",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "mat-input-1"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "email",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "mat-input-2"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "ot-group-id-C0002",
|
||||
"id": "ot-group-id-C0002"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "ot-group-id-C0003",
|
||||
"id": "ot-group-id-C0003"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "ot-group-id-C0004",
|
||||
"id": "ot-group-id-C0004"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "text",
|
||||
"placeholder": "Search…",
|
||||
"name": "vendor-search-handler",
|
||||
"id": "vendor-search-handler"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "chkbox-id"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "select-all-hosts-groups-handler"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "select-all-vendor-groups-handler"
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"inputType": "checkbox",
|
||||
"placeholder": "",
|
||||
"name": "",
|
||||
"id": "select-all-vendor-leg-handler"
|
||||
}
|
||||
],
|
||||
"url": "https://www.brittany-ferries.co.uk/ferry-routes",
|
||||
"extractedPrices": [
|
||||
"£154"
|
||||
]
|
||||
}
|
||||
21
prices/eurocamp-la-grande-metairie.json
Normal file
21
prices/eurocamp-la-grande-metairie.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"searchDate": "2026-03-15T23:16:45.085Z",
|
||||
"checkIn": "2026-07-18",
|
||||
"checkOut": "2026-08-02",
|
||||
"nights": 14,
|
||||
"adults": 2,
|
||||
"children": 1,
|
||||
"childAge": 6,
|
||||
"campsite": "La Grande Métairie",
|
||||
"campsiteUrl": "https://www.eurocamp.co.uk/campsites/france/brittany/la-grande-metairie-campsite",
|
||||
"finalQuoteUrl": null,
|
||||
"accommodations": [],
|
||||
"screenshots": [
|
||||
"step1-campsite-page.png",
|
||||
"error-screenshot.png"
|
||||
],
|
||||
"status": "error",
|
||||
"errors": [
|
||||
"elementHandle.click: Timeout 30000ms exceeded.\nCall log:\n - attempting click action\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <div class=\"onetrust-pc-dark-filter ot-fade-in\"></div> from <div data-nosnippet=\"true\" id=\"onetrust-consent-sdk\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 20ms\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <div class=\"onetrust-pc-dark-filter ot-fade-in\"></div> from <div data-nosnippet=\"true\" id=\"onetrust-consent-sdk\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 100ms\n 58 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <div class=\"onetrust-pc-dark-filter ot-fade-in\"></div> from <div data-nosnippet=\"true\" id=\"onetrust-consent-sdk\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 500ms\n"
|
||||
]
|
||||
}
|
||||
20
prices/eurotunnel.json
Normal file
20
prices/eurotunnel.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"url": "https://www.leshuttle.com/uk-en",
|
||||
"searchParams": {
|
||||
"route": "Folkestone to Calais",
|
||||
"outbound": "18 July 2026",
|
||||
"return": "02 August 2026",
|
||||
"vehicle": "1 car (standard)"
|
||||
},
|
||||
"price": null,
|
||||
"crossingTimes": [],
|
||||
"screenshots": [
|
||||
"01-homepage.png",
|
||||
"02-after-cookies.png",
|
||||
"03-form-filled.png",
|
||||
"04-results-page.png",
|
||||
"05-final-state.png"
|
||||
],
|
||||
"timestamp": "2026-03-15T23:13:16.261Z",
|
||||
"notes": []
|
||||
}
|
||||
22
prices/siblu-domaine-de-kerlann.json
Normal file
22
prices/siblu-domaine-de-kerlann.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"searchDate": "2026-03-15T23:16:42.553Z",
|
||||
"park": "Domaine de Kerlann",
|
||||
"parkId": 22,
|
||||
"dates": {
|
||||
"checkIn": "2026-07-18",
|
||||
"checkOut": "2026-08-02",
|
||||
"nights": 14
|
||||
},
|
||||
"guests": {
|
||||
"adults": 2,
|
||||
"children": 1,
|
||||
"childAge": 6
|
||||
},
|
||||
"screenshots": [
|
||||
"siblu-01-park-page.png",
|
||||
"siblu-error.png"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"error": "elementHandle.click: Timeout 30000ms exceeded.\nCall log:\n - attempting click action\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 20ms\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 100ms\n 56 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 500ms\n",
|
||||
"stack": "elementHandle.click: Timeout 30000ms exceeded.\nCall log:\n - attempting click action\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 20ms\n 2 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 100ms\n 56 × waiting for element to be visible, enabled and stable\n - element is visible, enabled and stable\n - scrolling into view if needed\n - done scrolling\n - <input value=\"\" size=\"60\" type=\"text\" name=\"arrival\" maxlength=\"128\" id=\"edit-arrival\" readonly=\"readonly\" placeholder=\"Arrival\" data-drupal-selector=\"edit-arrival\" class=\"form-text p-a t-0 l-0 w-100 h-100 o-0 flatpickr-input\"/> from <div class=\"flatpickr-wrapper\">…</div> subtree intercepts pointer events\n - retrying click action\n - waiting 500ms\n\n at searchSiblu (/home/acid/holiday-planning/siblu-search-v4.js:56:24)"
|
||||
}
|
||||
Reference in New Issue
Block a user