PRD: Guest Personalization
Product Principle: Outcome Over Features
The requirements, ideas, examples, and proposed features in this PRD are not mandatory implementation instructions.
They should be treated as hypotheses or possible solutions to achieve the product goals. Some ideas may be incorrect, incomplete, too complex, or less effective than alternative approaches.
The most important requirement is to improve the actual goal metrics, such as engagement, CTR, booking conversion, repeat booking, coverage, and recommendation relevance.
The team should not implement a feature only because it is written in the PRD. Each feature should be evaluated based on expected impact, feasibility, data availability, user value, and measurable contribution to the success metrics.
If there is a simpler, faster, or more effective solution that can better improve the goal metrics, the team should propose and prioritize that solution instead.
1. Overview
We are building a dynamic personalization system for guest users who are not logged in.
The system will personalize homepage sections, section titles, restaurant recommendations, destination recommendations, and content ordering based on anonymous user signals such as country, city, device, language, browsing behavior, and cookies.
The goal is to make the guest experience feel relevant even before the user creates an account or logs in.
Example: An Indonesian guest browsing Bangkok on iOS may see sections such as:
- Popular with Indonesian Travelers
- Recommended for You
- Halal-Friendly Favorites
- Trending This Week in Bangkok
2. Goals
Primary Goals
- Increase engagement from guest users.
- Improve click-through rate on personalized sections.
- Help anonymous users discover relevant restaurants, cities, and experiences.
- Support personalization without requiring login.
- Enable dynamic section ordering and section title changes based on user context.
- Support scalable guest segmentation across countries, cities, devices, and browsing behavior.
Business Goals
- Increase booking conversion from guest traffic.
- Improve SEO discovery through city-specific and segment-relevant landing pages.
- Cross-sell restaurants, destinations, and experiences.
- Support campaign-based targeting for anonymous users.
3. User Type
Guest users are users who are not logged in.
Guest personalization should use anonymous signals only.
Examples of guest user signals:
- IP country
- Browsing city
- Device type
- Browser language
- Cookie/session history
- Viewed restaurants
- Viewed destinations
- Referral source
- Current location if available
- Country-to-city travel pattern
4. Scope
In Scope
- Personalized homepage sections for guest users.
- Dynamic section titles.
- Dynamic section ordering.
- Dynamic restaurant and destination recommendations.
- Country-based personalization.
- City-based personalization.
- Device-based personalization.
- Language-based personalization.
- Anonymous collaborative filtering.
- Manual segmentation from CMS.
- Automatic segmentation using rules and machine learning.
- Admin controls to enable, disable, and prioritize guest sections.
- Internal links and redirects to city-specific landing pages.
Out of Scope
- Personalization using member-only data such as booking history, saved restaurants, loyalty status, or profile preferences.
- Member-specific rebooking recommendations.
- Logged-in user preference management.
- Loyalty-based targeting.
5. Key Guest Personalization Features
5.1 Country-Based Recommendations
The system should personalize content based on the guest user’s detected country.
Examples:
- Indonesian guest browsing Bangkok -> “Popular with Indonesian Travelers”
- Korean guest browsing Bangkok -> “Korean-Loved in Bangkok”
- Singapore guest browsing Pattaya -> “Popular with Singapore Travelers”
5.2 City-Specific Landing and Redirects
The system should support city-specific landing pages and internal linking.
Examples:
- Bangkok landing page
- Singapore landing page
- Pattaya landing page
Guest traffic should be redirected or guided to the most relevant city page based on:
- IP location
- Browsing history
- Search intent
- Referral source
- Selected destination
5.3 Dynamic Homepage Sections
The system should dynamically change:
- Section titles
- Section order
- Section content
- Restaurant cards
- Destination cards
- Promotional modules
Examples:
- “Recommended for You”
- “Popular in Bangkok”
- “Popular with Indonesian Travelers”
- “Halal-Friendly Favorites”
- “Trending This Week”
- “Near You”
- “New & Worth Trying”
5.4 Anonymous Recommendation Engine
For guest users, the recommendation engine should use anonymous signals.
Inputs may include:
- IP country
- Current city being browsed
- Device type
- Browser language
- Cookie/session behavior
- Viewed restaurants
- Viewed destinations
- Co-visitation behavior
- Popular items from similar anonymous users
Recommendation methods:
- Collaborative filtering
- Co-visitation recommendations
- Trending content
- Country-to-city popularity
- Device-based behavior patterns
- Session-based recommendations
Example: If many Indonesian iOS guests browsing Bangkok also view Savoey, After You, and Greyhound Cafe, those restaurants may appear in the “Recommended for You” section.
5.5 Manual Guest Segmentation
Admins should be able to create manual guest segments in CMS.
Example segments:
indonesian_guests_browsing_bangkokkorean_travelers_browsing_bangkoksingapore_guests_browsing_pattayaios_guests_in_thailandchinese_new_year_guestscampaign_bangkok_anniversary_guest_audience
Manual segmentation rules may include:
- Country
- City
- Device
- Language
- Login status = guest
- Campaign eligibility
- Promo eligibility
- Referral source
5.6 Automatic Guest Segmentation
The system should automatically detect guest segments using rules and machine learning.
Example automatic segments:
traveler_from_KRtraveler_from_IDios_userandroid_userinterested_in_japaneseinterested_in_buffetinterested_in_halalbrowsing_bangkokbrowsing_singaporebrowsing_pattaya
Example rule:
If IP country = Korea and browsing city = Bangkok and user is not logged in, assign segment = traveler_from_KR.
Example use: Show “Korean-Loved in Bangkok” and “Hotpot & K-BBQ Right Now.”
6. Guest Segmentation Inputs
The system should support the following guest segmentation inputs:
Location Inputs
- IP country
- IP city
- Selected browsing city
- Geo lookup
- Latitude/longitude if available
- Country-to-city mismatch
Example:
IP country = Korea, browsing city = Bangkok -> traveler_from_KR.
Device Inputs
- iOS
- Android
- Desktop
- Tablet
- Browser type
Example:
Device = iOS -> segment = ios_user.
Language and Region Inputs
- Browser language
- Region setting
- Country detected from IP
- Country selected by user
Example: Browser language = Korean and browsing city = Bangkok -> prioritize Korean-friendly content.
Behavioral Inputs
- Restaurants viewed in current session
- Destination pages viewed
- Search keywords
- Clicked sections
- Clicked restaurant cards
- Time spent on pages
- Cookie/session history
- Referral campaign
Example: If a guest views multiple Japanese restaurants, the system may show “Japanese Picks in Bangkok.”
7. Guest Segmentation Outputs
Guest segmentation should produce:
- Personalized section list.
- Personalized section titles.
- Personalized restaurant recommendations.
- Personalized destination recommendations.
- Personalized section order.
- Personalized landing page links.
- Campaign-specific sections.
- Country-specific content groups.
- City-specific content groups.
8. CMS and Admin Requirements
Admins should be able to:
- Create guest segments.
- Edit guest segment rules.
- Enable or disable guest segments.
- Assign sections to guest segments.
- Configure section priority.
- Configure fixed and dynamic sections.
- Configure fixed and dynamic section ordering.
- Preview homepage output by segment.
- Set campaign start and end dates.
- Set promo eligibility.
- Monitor section performance.
9. Section Configuration Rules
Each section should support the following configuration:
Section Type
- Fixed section
- Dynamic section
Fixed section: The section must always appear for the selected segment.
Dynamic section: The section may be replaced by another section depending on ranking logic.
Section Order
- Fixed order
- Dynamic order
Fixed order: The section must remain in the configured position.
Dynamic order: The section position may change depending on relevance score.
Example
For guest users:
- “Recommended for You” is a fixed section.
- It appears in position 1.
- “Popular with Indonesian Travelers” is a dynamic section.
- It may appear in positions 2 to 4 depending on relevance.
- “Trending This Week in Bangkok” is dynamic.
- It may move up if engagement velocity is high.
10. Recommendation Ranking Logic
Guest recommendation ranking should consider:
- Country relevance
- City relevance
- Device relevance
- Language relevance
- Session behavior
- Popularity among similar anonymous users
- Restaurant availability
- Promotional relevance
- Trending velocity
- Freshness
- Distance, if location is available
- Business rules from CMS
Example ranking formula:
Guest Recommendation Score =
Country Match Score
+ City Match Score
+ Device/Language Score
+ Session Behavior Score
+ Collaborative Filtering Score
+ Trending Score
+ Promo Score
+ Availability Score
+ CMS Priority Score
11. Example Guest Scenario
Scenario: Anonymous Guest
User context:
- IP country: Indonesia
- Device: iOS
- Logged-in status: Guest
- Browsing city: Bangkok
Recommended homepage sections:
- Limited-Time Deals in Bangkok
- Copper Beyond Buffet
- Goji Kitchen
- Kub Kao’ Kub Pla
- Bar-B-Q Plaza
- Recommended for You
- Savoey
- After You Dessert
- Greyhound Cafe
- Somtum Der
- Popular with Indonesian Travelers
- Goji Kitchen
- Audrey Cafe
- Savoey
- Bar-B-Q Plaza
- After You
- Halal-Friendly Favorites
- Yana Restaurant
- Usman Thai Muslim
- Saman Islam
- Santan
- Trending This Week in Bangkok
- Pe Aor Tom Yum
- Nara
- Charmgang
- Khao
- Near You in Bangkok
- Thonglor Picks
- Asok & Phrom Phong
- Siam & Chidlom
- New & Worth Trying
- Nusara
- Haoma
- Elena
- Sushi Masa
12. Functional Requirements
FR1: Detect Guest Context
The system must detect anonymous user context using available signals such as IP, device, browser language, cookies, and browsing behavior.
FR2: Assign Guest Segment
The system must assign one or more guest segments to the user.
Example:
- guest
- traveler_from_ID
- ios_user
- browsing_bangkok
- interested_in_halal
FR3: Generate Personalized Sections
The system must generate a list of homepage sections based on guest segments.
FR4: Rank Sections
The system must rank sections using relevance, CMS rules, campaign priority, and business rules.
FR5: Rank Restaurant Cards
The system must rank restaurants inside each section based on relevance, availability, popularity, and segment fit.
FR6: Support CMS Overrides
Admins must be able to override section visibility, title, order, and priority for guest segments.
FR7: Support Anonymous Collaborative Filtering
The system must recommend content based on behavior from similar anonymous users.
FR8: Support Real-Time Updates
Guest recommendations should update based on session behavior in near real time.
13. Technical Requirements
Data Inputs
- IP address
- Geo lookup
- Device metadata
- Browser language
- Cookie/session ID
- Viewed restaurants
- Viewed cities
- Click events
- Search events
- Promo data
- Restaurant metadata
- Availability data
- CMS section configuration
System Components
The system should include:
- Segmentation Engine
- Assigns guest segments using rules and ML.
- Recommendation Engine
- Generates restaurant and destination recommendations.
- Ranking Engine
- Scores and orders sections and cards.
- CMS
- Manages sections, rules, priorities, and campaigns.
- Tracking System
- Collects guest behavior events.
- API Layer
- Serves personalized homepage content.
Performance Requirements
- API response time should be less than 200ms.
- System should support 1,000+ dynamic segments.
- System should support real-time or near-real-time recommendation updates.
- System should support high traffic from anonymous users.
- Recommendation logic should degrade gracefully if some signals are missing.
14. Success Metrics
Engagement Metrics
- Increase CTR on personalized guest sections by 20%.
- Increase guest session time.
- Increase number of restaurant card clicks.
- Increase number of city page clicks.
Conversion Metrics
- Increase guest-to-booking conversion rate by 15%.
- Increase guest-to-member signup conversion.
- Increase booking conversion from personalized sections.
Coverage Metrics
- 90% of guest users receive at least one personalized section.
- 90% of guest sessions receive country or city-based personalization when enough signals are available.
System Metrics
- API response time below 200ms.
- Support 1,000+ guest segments.
- Recommendation fallback available when signals are missing.
- CMS rules applied correctly.
15. Fallback Logic
If guest signals are limited, the system should fall back in this order:
- Current browsing city.
- IP country.
- Browser language.
- Device type.
- Trending in selected city.
- Global popular restaurants.
- Editor’s picks.
Example: If the system only knows the guest is browsing Bangkok, show:
- Popular in Bangkok
- Trending This Week in Bangkok
- Editor’s Picks in Bangkok
16. Open Questions
- What anonymous signals are currently available from tracking?
- How long should guest cookie history be stored?
- Should guest segments be persisted across sessions?
- Which sections must always be fixed for guest users?
- What is the minimum data required before showing “Recommended for You”?
- How should SEO pages differ from personalized homepage sections?