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:
2026-03-15 23:18:43 +00:00
commit a27fcfef61
640 changed files with 179624 additions and 0 deletions

View 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"
]
}

View 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
View 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": []
}

View 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)"
}