Compare commits

...

5 Commits

Author SHA1 Message Date
TopherMayor
86733522eb Add explicit flight origin selector 2026-04-30 21:21:06 -07:00
TopherMayor
16a0252647 Tighten flight search links 2026-04-30 21:18:46 -07:00
TopherMayor
b768990e05 Expand flight search coverage 2026-04-30 21:17:48 -07:00
TopherMayor
bee992e10b Update cabo price watch snapshot 2026-04-30 21:15:54 -07:00
TopherMayor
7d139fead9 Refresh Cabo automation snapshot 2026-04-30 20:57:37 -07:00
5 changed files with 79 additions and 23 deletions

View File

@@ -32,6 +32,7 @@ System seed data auto-refreshes researched options while preserving existing vot
Price-watch automation runs append time-series snapshots in `price-watch/history.jsonl`, which the app turns into per-option trend lines and decision detail cards. Automation output should cover hotels, flights, golf, nightlife, and excursions, with `bookingType` and `priceBasis` separating package quotes from standalone booking prices.
When a run includes calculated `budgetScenarios` or `derivedItineraries`, the app uses those fresh automation calculations instead of the static seed budget scenarios.
Guest access is rostered in `seed-data.js` and `data/votes.json`; Jon is marked as groom and Toph as best man.
The live automation itself runs from `~/.codex/automations/cabo-price-watch/automation.toml`, and its human-readable and machine-readable outputs are written back into this repo under `price-watch/latest-report.md` and `price-watch/history.jsonl`.
For hosted deployments, set `DATA_DIR` or `DATA_FILE` so mutable vote data lives outside the Git checkout.
When price-watch automation updates tracked data files in the repository, commit/push those changes and refresh the Ubuntu deployment so the hosted app picks up the latest option details, price history, itinerary calculations, and budget scenarios.

File diff suppressed because one or more lines are too long

View File

@@ -4,21 +4,19 @@ Checked: 2026-04-30 (America/Los_Angeles)
## Biggest price changes
- Added exact-date KAYAK flights for LAX to SJD. Cheapest is $273 per person, best nonstop is $380, and Delta nonstop is $377. Source: [KAYAK LAX search](https://www.kayak.com/flights/LAX-SJD/2027-02-03/2027-02-07?sort=bestflight_a)
- Added exact-date KAYAK flights for ONT to SJD. Cheapest is $412 per person, best is $413, and quickest is $827. Source: [KAYAK ONT search](https://www.kayak.com/flights/ONT-SJD/2027-02-03/2027-02-07?sort=bestflight_a)
- 12-person budget scenario moved from $1,392 to $1,139 per person after replacing placeholders with live flight, hotel, golf, excursion, and nightlife inputs.
- 12-person balanced scenario moved from $1,677 to $1,764 per person, mainly because the live Costco Dreams package and Palmilla rate are higher than the old planning assumptions.
- 12-person splurge scenario moved from $2,289 to $2,658 per person, driven by the live Costco Secrets package, Quivira, private whale watch, and Taboo shares.
- No material price moves were confirmed from the last visible live snapshot. The exact-date baseline remains the working comparison set for flights, hotels, golf, nightlife, and excursions.
## Missing prices
- Costco Travel package quotes remain gated behind login and were not re-surfaced in a readable quote flow during this run.
- Apple Vacations date-specific package pages resolved, but the current fetch did not expose a fresh quote table for direct extraction.
- KAYAK exact-date flight and hotel pages still resolve for 2027-02-03 to 2027-02-07, but the rendered text fetch only exposed the shell/navigation, not the result rows.
- Cabo del Sol public pricing is still not visible from the official booking pages checked today.
- CheapCaribbean exact-date pricing for Secrets Puerto Los Cabos is not available even though the date-matched page loads.
## Sold out or unavailable
- Costco Travel search for LAX, Feb 3, 2027 to Feb 7, 2027 showed Corazon Cabo as Not Available.
- Costco Travel search for LAX, Feb 3, 2027 to Feb 7, 2027 showed Hard Rock Los Cabos as Not Available.
- No new sold-out states were confirmed in this run.
- Prior Costco Travel availability flags for Corazon Cabo and Hard Rock Los Cabos remain the last visible unavailability signals, but they were not rechecked in a readable results view today.
## Login-required sources
@@ -26,24 +24,29 @@ Checked: 2026-04-30 (America/Los_Angeles)
## New options worth adding
- LAX flight tracking option on KAYAK for the Feb 3, 2027 to Feb 7, 2027 window. Cheapest $273, best nonstop $380. Source: [KAYAK LAX search](https://www.kayak.com/flights/LAX-SJD/2027-02-03/2027-02-07?sort=bestflight_a)
- ONT flight tracking option on KAYAK for the same dates. Cheapest $412, best $413. Source: [KAYAK ONT search](https://www.kayak.com/flights/ONT-SJD/2027-02-03/2027-02-07?sort=bestflight_a)
- Hacienda del Mar Los Cabos remains worth adding as a Costco package candidate because the results flow surfaced it as a live package path with savings messaging, even though todays run did not capture a visible final total.
- No clearly new public options were surfaced beyond the current tracked set.
- The app should continue tracking the existing LAX and ONT KAYAK flight options, the Apple/Costco package hotels, and the golf/nightlife/excursion set already in the history feed.
## Current package and standalone signals
- Costco package prices carried into this run: Breathless $1,678.99 pp, Dreams $1,447.80 pp, Secrets $2,005.80 pp, Zoetry $1,717.42 pp.
- Apple Vacations exact-date package prices carried into this run include Breathless $2,016 pp, Grand Fiesta $2,111 pp, Dreams $1,757 pp, Hyatt Ziva $2,178 pp, Riu Palace Cabo San Lucas $1,529 pp, and Hard Rock $3,343 pp.
- KAYAK exact-date hotel signals carried into this run include Grand Fiesta $212 per night, Secrets $335 per night, Comfort Inn $129 per night, Capital O Hotel Dos Mares $48 per night, and Esperanza $3,243 per night.
- Public activity pricing carried into this run includes Palmilla $194.53, Quivira $306, public whale watch $76, private whale watch $1,504 total, ATV $78, sunset sail $108.94, Mango Deck deposit $40, Cabo Wabo VIP table $155, Taboo pool island $884, and Cabo Bash Gold $1,700.
- Costco package prices carried forward in the working baseline: Breathless $1,678.99 pp, Dreams $1,447.80 pp, Secrets $2,005.80 pp, Zoetry $1,717.42 pp.
- Apple Vacations exact-date package prices carried forward in the working baseline include Breathless $2,016 pp, Grand Fiesta $2,111 pp, Dreams $1,757 pp, Hyatt Ziva $2,178 pp, Riu Palace Cabo San Lucas $1,529 pp, and Hard Rock $3,343 pp.
- KAYAK exact-date hotel signals carried forward in the working baseline include Grand Fiesta $212 per night, Secrets $335 per night, Comfort Inn $129 per night, Capital O Hotel Dos Mares $48 per night, and Esperanza $3,243 per night.
- Public activity pricing carried forward in the working baseline includes Palmilla $194.53, Quivira $306, public whale watch $76, private whale watch $1,504 total, ATV $78, sunset sail $108.94, Mango Deck deposit $40, Cabo Wabo VIP table $155, Taboo pool island $884, and Cabo Bash Gold $1,700.
## Package-vs-standalone caveats
- Package prices should not be combined with separate flight or hotel costs unless the package explicitly excludes them.
- Standalone hotel prices still need the 4-night conversion in comparison logic when the source is quoting a nightly rate.
- The history feed keeps package and standalone records separate through `bookingType` and `includedComponents` metadata.
## Budget impact
- Budget recommendation is now materially cheaper than the old baseline if the group accepts the cheapest LAX flight and a room-only hotel strategy. New per-person totals: 8 guys $1,150, 10 guys $1,143, 12 guys $1,139.
- Balanced recommendation stays the cleanest value package mix. New per-person totals: 8 guys $1,771, 10 guys $1,767, 12 guys $1,764.
- Splurge recommendation is now clearly premium-tier. New per-person totals: 8 guys $2,721, 10 guys $2,727, 12 guys $2,658.
- Budget recommendation remains around $1,150 per person for 8 guys, $1,143 for 10 guys, and $1,139 for 12 guys using the current baseline mix.
- Balanced recommendation remains around $1,771 per person for 8 guys, $1,767 for 10 guys, and $1,764 for 12 guys.
- Splurge recommendation remains around $2,721 per person for 8 guys, $2,727 for 10 guys, and $2,658 for 12 guys.
## Notes
- This run consolidates today's live hotel, golf, nightlife, excursion, and flight research into one latest snapshot the app can read directly.
- Package prices and standalone prices remain differentiated in the history feed via bookingType and includedComponents metadata.
- This run revalidated the current automation baseline and kept the output files in sync for the app.
- If the browser session exposes row-level prices again on a later run, those should replace the carried-forward signals in the history feed.

View File

@@ -44,8 +44,11 @@
"categories": ["flight"],
"bookingType": "standalone",
"requiredChecks": [
"LAX to SJD date-matched round trip",
"ONT to SJD date-matched round trip",
"LAX to SJD date-matched round trip on airline and travel sites",
"ONT to SJD date-matched round trip on airline and travel sites",
"Google Flights exact-date search",
"KAYAK exact-date flight search",
"airline direct-booking results when publicly visible",
"capture airline, stops, schedule window, baggage caveats, and total price per traveler"
]
},
@@ -164,6 +167,7 @@
"notes": [
"Use seed-data.js as the current baseline for names, links, and budget assumptions.",
"Check hotels, flights, golf, nightlife, and excursions on every run before updating itinerary or budget recommendations.",
"For flights, search both airline direct-booking pages and travel aggregators such as Google Flights, KAYAK, Expedia, and similar public flight search tools when available.",
"Differentiate bundled package prices from standalone booking prices using bookingType and priceBasis on every price point.",
"For package quotes, list the included and excluded components so budgets do not double-count flights, hotels, transfers, or resort credits.",
"For standalone quotes, list the exact unit being priced: per night, per traveler, per person, per group, per round, or per table.",

View File

@@ -136,6 +136,23 @@
min-width: 120px;
}
#map-search-input::placeholder { color: #7a8499; }
#flight-origin-select {
background: transparent;
border: none;
border-left: 1px solid #252a38;
color: #e0e6f0;
font-size: 0.72rem;
font-weight: 700;
padding: 8px 10px;
outline: none;
cursor: pointer;
flex-shrink: 0;
max-width: 96px;
}
#flight-origin-select option {
background: #13161f;
color: #e0e6f0;
}
.provider-tabs {
display: flex;
align-items: center;
@@ -1541,6 +1558,10 @@
<div id="map-search-wrap">
<span style="color:#7a8499;font-size:0.8rem;padding-left:8px;flex-shrink:0;">🔍</span>
<input type="text" id="map-search-input" placeholder="Search Los Cabos…" autocomplete="off" />
<select id="flight-origin-select" aria-label="Flight origin airport">
<option value="LAX">LAX</option>
<option value="ONT">ONT</option>
</select>
<div class="provider-tabs">
<button class="provider-tab active-yelp" id="tab-yelp" onclick="setProvider('yelp')">🍴 Yelp</button>
<button class="provider-tab" id="tab-osm" onclick="setProvider('osm')">📍 OSM</button>
@@ -3128,10 +3149,34 @@
function quickBook(type) {
const q = (document.getElementById('map-search-input').value || '').trim() || 'Los Cabos Mexico';
const originSelect = document.getElementById('flight-origin-select');
const origin = originSelect?.value || (/ont\b/i.test(q) ? 'ONT' : /lax\b/i.test(q) ? 'LAX' : 'LAX');
const depart = '2027-02-03';
const ret = '2027-02-07';
const googleFlightsQuery = `Flights from ${origin} to SJD on ${depart} to ${ret}`;
const expediaFlightUrl = `https://www.expedia.com/Flights-Search?trip=roundtrip&leg1=from:${origin},to:SJD,departure:${depart}TANYT&leg2=from:SJD,to:${origin},departure:${ret}TANYT&passengers=adults:1&options=cabinclass:economy&mode=search`;
let url;
switch(type) {
case 'gmaps': url = `https://www.google.com/maps/search/${encodeURIComponent(q)}`; break;
case 'flights': url = `https://www.google.com/travel/flights/search?q=${encodeURIComponent(q)}&tfpla=on`; break;
case 'flights':
case 'flights-google':
url = `https://www.google.com/travel/flights/search?q=${encodeURIComponent(googleFlightsQuery)}&tfpla=on`;
break;
case 'flights-kayak':
url = `https://www.kayak.com/flights/${origin}-SJD/${depart}/${ret}?sort=bestflight_a`;
break;
case 'flights-expedia':
url = expediaFlightUrl;
break;
case 'flights-united':
url = `https://www.united.com/en-us/flights?f=1&from=${origin}&to=SJD&d=${depart}&tt=${ret}&px=1`;
break;
case 'flights-delta':
url = `https://www.delta.com/flight-search/search?tripType=roundtrip&departureAirportCode=${origin}&arrivalAirportCode=SJD&departureDate=${depart}&returnDate=${ret}&adultPassengerCount=1`;
break;
case 'flights-alaska':
url = `https://www.alaskaair.com/`;
break;
case 'hotels': url = `https://www.kayak.com/hotels/${encodeURIComponent(q)}/2admins`; break;
case 'viator': url = `https://www.viator.com/search/${encodeURIComponent(q)}`; break;
case 'expedia': url = `https://www.expedia.com/Thotel-Search?destination=${encodeURIComponent(q)}`; break;