Peapod User Manual - Guest Guide Appendix
Version: v0.19.0 Last Updated: December 17, 2025 Platform: iOS (iPhone, iPad)
β Back to Guest Guide | Back to Index
Table of Contents
- Appendix A: Commute Filter Technical Details
- Appendix B: Map View Technical Details
- Appendix C: Experience Bundles (Future Feature)
- Appendix D: Cancellation & Refund Policy
Appendix A: Commute Filter Technical Details
Geocoding Details
The filter accepts various address formats: - Full address: β123 Main St, San Francisco, CA 94102β - Partial address: βGolden Gate Park, SFβ - Landmarks: βMoscone Centerβ - Business names: βApple Parkβ
Geocoding Support: - Uses Appleβs MapKit geocoding service - Converts address text to GPS coordinates (latitude/longitude) - Green checkmark appears when location is successfully verified - Red error message shows if address canβt be found
Troubleshooting Geocoding: - βUnable to geocode addressβ: Try a more specific address or use a landmark name - βLocation verifiedβ not showing: Tap βSetβ button after entering address - Wrong location: Re-enter address with more detail (add city, state)
Filtering Algorithm
How Travel Time is Calculated: 1. User enters destination address 2. System geocodes destination to GPS coordinates 3. For each listing in database: - Calculate travel time from listing to destination - Use selected transport mode (Drive/Transit/Bicycle/Walk) - Compare against maximum time threshold 4. Only show listings within time limit
Transport Mode Details: - Drive: Uses car routing with real-time traffic data - Transit: Uses public transportation routes (bus, subway, train schedules) - Bicycle: Uses bike-friendly routes and paths - Walk: Uses pedestrian walkways
Per-Mode Persistence: Each transport mode remembers its own time setting: - Drive: 20 minutes - Transit: 40 minutes - Bicycle: 30 minutes - Walk: 15 minutes
When you switch modes, the last-used time for that mode is restored.
Performance
Session Memory: Your destination and time settings are saved when you close the app using UserDefaults:
UserDefaults.standard.set(destination, forKey: "commute_destination")
UserDefaults.standard.set(drivingTime, forKey: "commute_time_drive")
UserDefaults.standard.set(transitTime, forKey: "commute_time_transit")Example User Flow:
Day 1: Set "123 Market St, SF" as destination
Configure Drive: 20 min, Transit: 40 min
Find and book a property
Day 2: Reopen app - settings automatically restored!
Same destination, same time limits
Continue searching without re-entering
Limitations
Known Limitations: - Travel times are estimates and may vary with traffic conditions - Transit times assume service is running (check schedules) - Bicycle times assume moderate fitness level - Walking times assume average walking speed (3-4 mph) - Remote areas may have limited transit/bicycle routing data
Best Practices: - Set realistic times per mode (20 min drive β 20 min walk!) - Use landmarks for easier entry (βSalesforce Towerβ vs full address) - Compare Drive vs Transit modes (transit often faster in cities) - Increase max time if no results found - Combine with price filters for affordable & convenient options
Appendix B: Map View Technical Details
Search Circle Architecture
Visual Feedback: - Pink Circle Overlay: Shows your active search radius - Circle Center: Your search location (pin icon) - Dynamic Sizing: Circle grows/shrinks as you adjust radius - Auto-Zoom: Map zooms to fit entire circle when radius changes
Radius Control: - Range: 5-50 miles (8-80 km) - Default: 25 miles (40 km) - Adjustable: Via inline slider - Persistent: Saved in UserDefaults (survives app restart)
Understanding the Search Circle: - Pink circle overlay shows your active search radius - Default radius: 25 miles - Circle center marks your search location - Only listings inside the circle are displayed - Map automatically zooms to fit the entire circle
Inline Radius Control
What Changed (v0.14.7): - Before: Radius control buried in Filter sheet (4 taps to adjust) - After: Inline slider directly on map (instant adjustment)
Slider Interface: - Location: Bottom of map view (above listing cards) - Design: Horizontal slider with value labels - Range: 5 mi ββββββββ 50 mi - Value Display: β25 miβ updates in real-time - Interaction: Drag slider, circle updates immediately - Persistence: Preference saved to UserDefaults
How to Adjust Radius: 1. Open Map view 2. Find the inline slider at the bottom showing current radius (e.g., β25 miβ) 3. Drag slider left to decrease radius: - Circle shrinks in real-time - Listings outside new radius disappear - Result count updates 4. Drag slider right to increase radius: - Circle expands - More listings appear - Result count increases 5. Release slider - map updates with new results
Session Persistence:
// Saved to UserDefaults
UserDefaults.standard.set(radiusMiles, forKey: "search_radius_preference")
// Restored on app launch
let savedRadius = UserDefaults.standard.double(forKey: "search_radius_preference")Example User Flow:
Day 1: User sets radius to 10 miles β Searches San Francisco β Quits app
Day 2: User launches app β Radius automatically 10 miles (not 25 default!)
Day 3: User increases to 35 miles β Searches Seattle β Closes app
Day 4: User launches app β Radius still 35 miles β
Map Search Controls
Top Navigation Bar:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Search π] [AI Search β¨] [Sort] [Filter] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Search Button (Left Side): - Icon: Magnifying glass - Label: βSearchβ - Action: Opens SearchView sheet - Behavior: Search results update map immediately - Use Case: Enter specific city, address, or landmark
AI Search Button (Left of Sort): - Icon: Sparkles (β¨) - Label: βAI Searchβ - Action: Opens AI natural language search - Behavior: AI interprets query β Updates map pins - Use Case: βBeachfront condos under $200 with poolβ
Sort Button (Top Right): - Icon: Sparkles (default) or arrows (price sort) - Label: βSortβ - Color: Gray (default) β Pink (custom sort active) - Action: Opens SimpleSortSheet - Behavior: Re-orders map pins and list cards
Using Map Search: 1. Tap βSearchβ button (top left) on Map view 2. Enter your destination (e.g., βSan Diegoβ) 3. Map pans to the location and loads nearby listings
Using Map AI Search: 1. Tap βAI Searchβ button (sparkles icon) on Map view 2. Describe what youβre looking for (e.g., βDog-friendly cabins near Lake Tahoe under $150β) 3. AI interprets your query and updates the map with matching properties
Distance Display on Listing Cards
Distance Badge Design: - Location: Top-right corner of listing card - Format: βX.X miβ or βX.X kmβ - Background: White with shadow - Font: System, 12pt, semibold - Precision: 1 decimal place (e.g., β2.4 miβ, not β2.37 miβ)
When Distance Shows: - β Map view (always visible) - β List view (if Nearby Search used or βNearest Firstβ sort active) - β List view with no location context (search by city name only)
Distance Calculation:
// Haversine formula for accurate geodesic distance
func distance(from: CLLocationCoordinate2D, to: CLLocationCoordinate2D) -> Double {
let earthRadius = 3959.0 // miles (use 6371.0 for km)
let dLat = (to.latitude - from.latitude) * .pi / 180.0
let dLon = (to.longitude - from.longitude) * .pi / 180.0
let a = sin(dLat/2) * sin(dLat/2) +
cos(from.latitude * .pi / 180.0) * cos(to.latitude * .pi / 180.0) *
sin(dLon/2) * sin(dLon/2)
let c = 2 * atan2(sqrt(a), sqrt(1-a))
return earthRadius * c
}Map Style Toggle
Map Styles:
- Standard (Default)
- Clean street map
- Labels for streets, landmarks, neighborhoods
- Best for: General browsing, urban areas
- Colors: Light gray roads, green parks, blue water
- Satellite
- Aerial imagery
- No street labels (pure satellite view)
- Best for: Beachfront, scenic areas, understanding terrain
- Use Case: βIs this really on the beach?β βHow close to mountains?β
- Hybrid
- Satellite imagery + street labels
- Best of both worlds
- Best for: Detailed location verification
- Use Case: βWhich side of highway?β βExact building location?β
How to Change Map Style: 1. Tap map style button (bottom-right corner) 2. Choose from Standard, Satellite, or Hybrid 3. Map transitions to your selected style 4. Your preference is automatically saved for future sessions
Saved Preference:
// UserDefaults key: "map_style_preference"
// Values: "standard" | "satellite" | "hybrid"
UserDefaults.standard.set("satellite", forKey: "map_style_preference")PostGIS Backend Integration
Backend Filtering Benefits: - PostgreSQL PostGIS extension performs circle filtering on server - 30-40% less data transferred (only listings in radius sent to client) - Accurate geodesic distance calculations (not approximations) - Faster performance with database spatial indexes (GIST)
Before v0.14.7 (Frontend Filtering):
Client β "Get all listings in San Diego" β Server
Server β Sends 10,000 listings β Client
Client β Filters 10,000 down to 142 in 25-mile radius
Result: 9,858 listings transferred but discarded (wasted bandwidth)
After v0.14.7 (Backend Filtering):
Client β "Get listings within 25 miles of (32.7157Β°N, 117.1611Β°W)" β Server
Server β PostGIS ST_DWithin() query β Filters to 142 listings
Server β Sends only 142 listings β Client
Result: 30-40% less data, faster load times
Database Query (PostGIS ST_DWithin):
-- Migration 061: Added PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;
-- Query listings within radius (meters)
SELECT *
FROM listings
WHERE ST_DWithin(
geography(ST_MakePoint(longitude, latitude)),
geography(ST_MakePoint(-117.1611, 32.7157)),
40233.6 -- 25 miles in meters
);
-- Performance: Uses GIST spatial index
CREATE INDEX idx_listings_geog ON listings
USING GIST (geography(ST_MakePoint(longitude, latitude)));Performance Benefits: - β‘ 30-40% faster map loads (less data over network) - β‘ Accurate distances (geodesic, not Euclidean approximation) - β‘ Scalable (handles millions of listings efficiently) - β‘ Battery savings (less client-side processing)
Appendix C: Experience Bundles (Future Feature)
β οΈ Note: Experience Bundles are NOT available in CN Release 1.0. This feature is planned for a future release.
What Are Experience Bundles?
Optional add-ons during booking that let you enhance your stay with curated local activities, services, and amenities. Think of them as pre-packaged experiences that complement your accommodation.
Current Status: Not Available
Experience Bundles are NOT available in CN Release 1.0 (China). This section describes the planned functionality for future releases.
How Experience Bundles Will Work:
During checkout, youβll see optional bundles tailored to: - Your destination city/region - Trip duration and dates - Detected trip type (romantic, family, adventure, etc.) - Property amenities and location - Seasonal events and activities
Example Bundle Categories:
π· Welcome & Essentials: - Welcome basket (local snacks, wine, coffee) - Pre-stocked groceries (breakfast essentials, dinner ingredients) - Fresh flowers and candles - Local guidebook and maps
π― Adventure & Activities: - Guided hiking tours - Kayak/paddleboard rentals - Wine tasting passes - Surf lessons - Rock climbing day passes - Bike rental packages
π¨βπ©βπ§βπ¦ Family Experiences: - Zoo/aquarium tickets - Theme park passes - Kidsβ activity kits - Babysitting service (2-4 hours) - Family photo session
π Romantic Add-Ons: - Couples massage (in-unit or spa) - Champagne and chocolate - Rose petal setup - Private chef dinner - Sunset sailing
πΌ Business & Productivity: - Mobile hotspot rental (high-speed backup internet) - Printer/scanner rental - Meeting room access (coworking space) - Executive car service to meetings
π Food & Dining: - Restaurant reservations (hard-to-book spots) - Private chef dinner service - Wine/beer tasting tour - Cooking class - Meal delivery credits
How Bundles Will Be Presented:
- During Booking Flow:
- After selecting dates and guests
- Before payment confirmation
- Bundles displayed as optional add-ons
- Smart Recommendations:
- AI suggests 3-5 most relevant bundles
- Based on trip intent, season, and property location
- Examples: βPopular with familiesβ or βGreat for couplesβ
- Bundle Details:
- Clear pricing (one-time fee added to booking total)
- Whatβs included (itemized)
- When itβs delivered/activated (upon check-in, day 2, etc.)
- Cancellation policy (refundable up to 48 hours before check-in)
- Provider information (vetted local partners)
Example Booking Flow:
Booking Summary:
- 3 nights Γ $120/night = $360
- Cleaning fee = $50
- Service fee = $41
βββββββββββββββββββββββ
Subtotal: $451
Add Experience Bundles:
βββββββββββββββββββββββββββββββββββββββ
β π· Welcome Wine & Snacks Bundle β
β Local wine, artisan cheese, crackersβ
β Delivered upon check-in β
β + $45 β
β [Add to Booking] β
βββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ
β π΄ Mountain Bike Rental (2 days) β
β 2 bikes + helmets + trail map β
β Pick up at property β
β + $80 β
β [Add to Booking] β
βββββββββββββββββββββββββββββββββββββββ
[Skip and Continue to Payment]
Key Features:
- β Curated Quality - All providers pre-vetted by Peapod team
- β Seamless Integration - One payment, one confirmation
- β Host Coordination - Bundles coordinated with host for delivery/access
- β Flexible Cancellation - Refundable up to 48 hours before check-in
- β Local Expertise - Partnerships with best local providers
- β Dynamic Pricing - Discounts for bundling multiple experiences
Benefits to Guests:
- Save Time - No need to research and book activities separately
- Guaranteed Quality - Vetted partners and experiences
- Better Pricing - Bundle discounts vs booking individually
- Convenience - Everything coordinated and delivered
- Local Discovery - Curated by people who know the area
Pricing Model:
- Most bundles: $25-$150 per bundle
- Premium experiences: $150-$500 (private chef, guided tours)
- Add-on fee charged once (not per night)
- Taxes included in displayed price
- Payment processed with booking (single transaction)
Cancellation & Refunds:
- Full refund if cancelled 48+ hours before check-in
- 50% refund if cancelled 24-48 hours before check-in
- No refund if cancelled <24 hours before check-in
- Bundle cancellation does NOT cancel the accommodation booking
Provider Network:
Peapod partners with: - Licensed tour operators - Verified local businesses - Background-checked service providers - Insured activity companies - Established restaurants and venues
Safety & Quality Standards:
All experience providers must meet: - β Proper licensing and insurance - β Background checks for service providers - β Safety certifications (for adventure activities) - β 4+ star ratings from previous customers - β COVID-19 safety protocols (as applicable)
Future Enhancements (Post-Launch):
- Multi-Day Packages - Bundles spanning entire trip (e.g., β3-Day Ski Packageβ)
- Group Discounts - Pricing tiers for larger parties
- Loyalty Integration - Earn points on bundle purchases
- Host-Created Bundles - Hosts can offer custom local experiences
- Gift Bundles - Purchase bundles for other guests as gifts
Feedback Welcome:
This feature is in active development. If you have ideas or requests for experience bundles youβd like to see, please contact support or leave feedback in the app.
Stay Updated:
- Follow Peapod on social media for launch announcements
- Check the app for beta testing opportunities
- Email notifications when bundles launch in your area
Appendix D: Cancellation & Refund Policy (CN Release 1.0)
This appendix explains the cancellation policies available on Peapod. When you book a property, the hostβs chosen cancellation policy is displayed before you confirm your reservation.
Understanding Cancellation Policies
Hosts choose one of the following cancellation policies for their listings:
Flexible Policy
Best for: Travelers who need maximum flexibility
| When You Cancel | Refund Amount |
|---|---|
| 24+ hours before check-in | 100% refund |
| Less than 24 hours before check-in | No refund |
Moderate Policy
Best for: Travelers with reasonably firm plans
| When You Cancel | Refund Amount |
|---|---|
| 5+ days before check-in | 100% refund |
| 2-5 days before check-in | 50% refund |
| Less than 2 days before check-in | No refund |
Strict Policy
Best for: Budget-conscious travelers who commit early
| When You Cancel | Refund Amount |
|---|---|
| 7+ days before check-in | 100% refund |
| 7-30 days before check-in | 50% refund |
| Less than 7 days before check-in | No refund |
How to Cancel a Booking
- Go to Trips tab
- Select the booking you want to cancel
- Tap Cancel Booking
- Review the refund amount based on the propertyβs cancellation policy
- Confirm cancellation
- Refund is processed automatically
Refund Processing Time
- Credit/Debit Card: 5-10 business days
- Apple Pay: 5-10 business days
- Bank Account: 5-10 business days
Refunds are issued to the original payment method used for the booking.
Service Fees
- Service fees are refundable only if the cancellation results in a full refund of the accommodation fees
- Partial refunds do not include a service fee refund
Host Cancellations
If a host cancels your booking: - You receive a full refund including all service fees - You may receive booking credits for the inconvenience - Hosts who cancel frequently may have their listings penalized
Extenuating Circumstances
Full refunds may be provided outside the normal cancellation policy for: - Natural disasters affecting the property or your travel - Government-mandated travel restrictions - Serious illness or death (documentation required) - Other documented emergencies
Contact Peapod Support with documentation to request an extenuating circumstances review.
Tips for Guests
- β Check the policy before booking β itβs displayed on the listing detail page and at checkout
- β Book Flexible if your plans may change
- β Cancel early to maximize your refund
- β Message the host β some hosts may offer goodwill refunds outside their stated policy