Files
holiday-travel-app/TERMINAL_USAGE_GUIDE.md

349 lines
9.3 KiB
Markdown

# Holiday Travel App - Terminal Usage Guide
This guide shows you how to use the Holiday Travel App **entirely from the terminal** using PowerShell commands (no web browser needed).
## Prerequisites
Make sure the development server is running:
```powershell
cd "d:\Projects\Dev\Holiday Travel App"
npm run dev
```
The server will be available at `http://localhost:4000`
---
## Example 1: Basic Caribbean Search
Search for flights from Ottawa to Caribbean destinations for a holiday trip:
```powershell
# Create the search criteria
$searchData = @{
origin = "YOW"
destinations = @("CUN", "PUJ", "MBJ") # Cancun, Punta Cana, Montego Bay
startDate = "2025-12-15"
endDate = "2026-01-15"
tripLengthMin = 5
tripLengthMax = 9
budget = 1000
currency = "CAD"
nonStopOnly = $false
sources = @("Deals", "Skyscanner", "GoogleFlights", "AirCanada")
} | ConvertTo-Json -Depth 3
# Send the request
$response = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $searchData -ContentType "application/json"
# View all results
$response.results
# View just the first 5 results
$response.results | Select-Object -First 5 | Format-Table title, source, price, nights
```
---
## Example 2: Budget-Friendly European Search
Looking for cheap flights to Europe with non-stop preference:
```powershell
$euroSearch = @{
origin = "YYZ" # Toronto
destinations = @("LHR", "CDG", "FCO", "BCN") # London, Paris, Rome, Barcelona
startDate = "2026-06-01"
endDate = "2026-07-15"
tripLengthMin = 7
tripLengthMax = 14
budget = 800
currency = "CAD"
nonStopOnly = $true
sources = @("Deals", "Skyscanner", "GoogleFlights", "AirCanada")
} | ConvertTo-Json -Depth 3
$euroResults = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $euroSearch -ContentType "application/json"
# Show only deals under $750
$euroResults.results | Where-Object { $_.price -lt 750 } | Format-Table
```
---
## Example 3: Quick Weekend Getaway
Short trips, flexible on destinations:
```powershell
$weekendSearch = @{
origin = "YUL" # Montreal
destinations = @("NYC", "BOS", "YYZ", "YOW") # New York, Boston, Toronto, Ottawa
startDate = "2025-11-15"
endDate = "2025-12-15"
tripLengthMin = 2
tripLengthMax = 4
currency = "CAD"
nonStopOnly = $false
sources = @("Skyscanner", "GoogleFlights", "AirCanada")
} | ConvertTo-Json -Depth 3
$weekendResults = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $weekendSearch -ContentType "application/json"
# Display results grouped by destination
$weekendResults.results | Group-Object destination | Format-Table Count, Name
```
---
## Example 4: Deal Sites Only (No Link Generation)
Only fetch from curated deal sites like YOWDeals, YYZDeals, etc.:
```powershell
$dealsOnly = @{
origin = "YVR" # Vancouver
destinations = @("HNL", "LAX", "SEA") # Hawaii, LA, Seattle
startDate = "2026-02-01"
endDate = "2026-03-31"
tripLengthMin = 5
tripLengthMax = 10
sources = @("Deals") # Only deal sites
} | ConvertTo-Json -Depth 3
$dealsResults = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $dealsOnly -ContentType "application/json"
$dealsResults.results | Format-List
```
---
## Example 5: Export Results to CSV
Save search results to a CSV file for further analysis:
```powershell
$searchData = @{
origin = "YYC" # Calgary
destinations = @("LAX", "LAS", "PHX")
startDate = "2026-01-15"
endDate = "2026-02-28"
tripLengthMin = 5
tripLengthMax = 7
budget = 600
currency = "CAD"
sources = @("Skyscanner", "GoogleFlights")
} | ConvertTo-Json -Depth 3
$results = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $searchData -ContentType "application/json"
# Export to CSV
$results.results | Export-Csv -Path "travel_deals_$(Get-Date -Format 'yyyy-MM-dd').csv" -NoTypeInformation
Write-Host "Results exported to travel_deals_$(Get-Date -Format 'yyyy-MM-dd').csv"
```
---
## Example 6: Filter and Sort Results
Advanced filtering and sorting:
```powershell
$searchData = @{
origin = "YOW"
destinations = @("MCO", "FLL", "TPA") # Orlando, Fort Lauderdale, Tampa
startDate = "2026-03-01"
endDate = "2026-04-15"
tripLengthMin = 6
tripLengthMax = 9
currency = "CAD"
sources = @("Deals", "Skyscanner", "GoogleFlights", "AirCanada")
} | ConvertTo-Json -Depth 3
$results = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $searchData -ContentType "application/json"
# Filter: Only show results with prices
$withPrices = $results.results | Where-Object { $null -ne $_.price }
# Sort by price (cheapest first)
$sortedByPrice = $withPrices | Sort-Object price
# Display top 10 cheapest
$sortedByPrice | Select-Object -First 10 | Format-Table title, price, currency, nights, source
```
---
## Example 7: Compare Multiple Sources
Get results and compare which source provides the most deals:
```powershell
$compareSearch = @{
origin = "YEG" # Edmonton
destinations = @("YVR", "YYC", "YWG")
startDate = "2025-12-01"
endDate = "2026-01-31"
tripLengthMin = 3
tripLengthMax = 5
sources = @("Skyscanner", "GoogleFlights", "AirCanada")
} | ConvertTo-Json -Depth 3
$compareResults = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $compareSearch -ContentType "application/json"
# Count results by source
$compareResults.results | Group-Object source | Select-Object Name, Count | Sort-Object Count -Descending
```
---
## Example 8: Use with cURL (Alternative to PowerShell)
If you prefer using `curl` in PowerShell:
```powershell
curl.exe -X POST "http://localhost:4000/api/search" `
-H "Content-Type: application/json" `
-d '{
"origin": "YOW",
"destinations": ["CUN", "PUJ"],
"startDate": "2025-12-20",
"endDate": "2026-01-10",
"tripLengthMin": 7,
"tripLengthMax": 10,
"budget": 900,
"currency": "CAD",
"sources": ["Deals", "Skyscanner"]
}'
```
---
## Understanding the Response
The API returns JSON with this structure:
```json
{
"results": [
{
"id": "unique-id",
"title": "Ottawa → Cancun (7 nights)",
"source": "Skyscanner Link",
"link": "https://www.skyscanner.ca/...",
"price": 685,
"currency": "CAD",
"startDate": "2025-12-20",
"endDate": "2025-12-27",
"nights": 7,
"origin": "YOW",
"destination": "CUN",
"stops": null,
"score": 9815
}
]
}
```
---
## Available Airport Codes (Examples)
- **Canada**: YOW (Ottawa), YYZ (Toronto), YUL (Montreal), YVR (Vancouver), YYC (Calgary), YEG (Edmonton)
- **USA**: NYC (New York), LAX (Los Angeles), MIA (Miami), ORD (Chicago), SEA (Seattle)
- **Caribbean**: CUN (Cancun), PUJ (Punta Cana), MBJ (Montego Bay), NAS (Nassau)
- **Europe**: LHR (London), CDG (Paris), FCO (Rome), BCN (Barcelona), AMS (Amsterdam)
---
## Troubleshooting
**Server not responding?**
```powershell
# Check if server is running
Get-Process -Name node -ErrorAction SilentlyContinue
# Restart the server if needed
cd "d:\Projects\Dev\Holiday Travel App"
npm run dev
```
**Invalid date format?**
- Dates must be in `YYYY-MM-DD` format (e.g., "2025-12-31")
**No results returned?**
- Try removing budget constraints
- Set `nonStopOnly` to `$false`
- Expand the date range
- Add more destination options
---
## Tips for Best Results
1. **Multiple Destinations**: Add 3-5 destination codes for more options
2. **Flexible Dates**: Wider date ranges (30-60 days) yield more results
3. **Trip Length Range**: Use a range (e.g., 5-9 nights) instead of exact days
4. **Mix Sources**: Enable all sources for comprehensive results
5. **Budget Buffer**: Set budget 10-15% higher than your actual limit
6. **Off-Peak Travel**: Search for shoulder seasons for better deals
---
## Automation Example
Create a scheduled task to search daily and email results:
```powershell
# search_and_notify.ps1
$searchData = @{
origin = "YOW"
destinations = @("CUN", "PUJ", "MBJ")
startDate = "2026-01-15"
endDate = "2026-02-28"
tripLengthMin = 7
tripLengthMax = 10
budget = 800
currency = "CAD"
sources = @("Deals")
} | ConvertTo-Json -Depth 3
$results = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $searchData -ContentType "application/json"
# Get deals under $750
$goodDeals = $results.results | Where-Object { $_.price -lt 750 }
if ($goodDeals.Count -gt 0) {
$goodDeals | Export-Csv -Path "good_deals.csv" -NoTypeInformation
Write-Host "Found $($goodDeals.Count) deals under $750!"
# Add email notification here if needed
}
```
Run with Task Scheduler:
```powershell
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\path\to\search_and_notify.ps1"
Register-ScheduledTask -TaskName "DailyTravelDeals" -Trigger $trigger -Action $action
```
---
## Docker Usage
If using Docker instead of local dev server:
```powershell
# Build and run
docker compose up -d
# Then use the same API calls as above
$searchData = @{ ... } | ConvertTo-Json -Depth 3
$response = Invoke-RestMethod -Uri "http://localhost:4000/api/search" -Method POST -Body $searchData -ContentType "application/json"
```
---
Enjoy finding your next holiday deal from the command line! 🏖️✈️