How Edge decides what to recommend.
A tiered data model and a matching engine that turns user profile + query into the best flight and hotel recommendations — and knows when to ask for more.
Five tiers of data, ranked by impact.
Not all preferences matter equally. The engine sorts every data point by how much it changes the answer — from "can't book without it" to "cosmetic." This is what lets Edge ask the right questions and skip the wrong ones.
Every parameter that goes into a recommendation.
Mapped by tier for both hotels and flights. The chips below each tier are the actual data points the engine reads from the user profile, the query, or asks for as a follow-up.
What happens between query and result.
Every user query runs through this six-step pipeline. The total question budget is capped at 2–3 — every step is designed to use it sparingly.
Six steps from query to recommendation
Hard cap on questions
Never ask more than 2–3 questions before showing results. Every additional question is a tax on trust.
Required before high-signal
Tier 0 gaps always come before Tier 1. Don't ask about cabin class if you don't know the destination.
Refine, don't re-ask
Tier 2 and 3 surface as chips after results, not as questions before. Showing results first builds momentum.
Same query, two users.
How the engine behaves differently when the profile is rich vs thin. Same user query, very different number of follow-up questions.
User says: "I need a hotel in Lisbon next week for 3 nights."
Scenario A — Rich profile (Gmail connected)
✓ Duration: 3 nights (dates need confirming)
✓ Loyalty: Hilton Gold, Marriott Gold
✓ Hotel type: chain preference
✓ Trip purpose: client meetings (from profile)
✓ Budget: business policy cap
✗ Specific check-in date
✗ Location anchor (where in Lisbon)
• Check-in Monday June 16, or a different day?
• Anywhere specific — near a meeting, or general area?
Top result: Tivoli Avenida Liberdade · Hilton Gold rate · 0.4mi from anchor.
Refinement chips ready: closer · higher rated · with gym · executive floor.
Scenario B — Thin profile (no Gmail)
✓ Duration: 3 nights
✓ Trip purpose: client meetings (from profile)
· Loyalty: unknown
· Hotel type preference: unknown
✗ Specific check-in date
✗ Location anchor
✗ Budget cap
• Check-in date?
• Anywhere specific in Lisbon — near a meeting, or general area?
• Rough budget per night?
Returns 5 properties. Quietly captures €250/night as profile pref for future trips.
Refinement chips also include: chain hotel · use loyalty (connect Gmail).
Refinement chips, not more questions.
Once results are on screen, additional preferences become one-tap filters. Each chip is generated from Tier 2/3 data points that weren't resolved up front. Tapping a chip re-ranks instantly.
Example refinement row — after Lisbon hotel results
Generated dynamically from the Tier 2/3 data points that are still unresolved. The user taps any; the engine re-ranks without a chat turn.
Four open questions, answered.
Once the tier model and engine flow are agreed, these four questions decide how the system actually behaves at the edges. Each has a recommended approach — the rest of the product is built on top of these choices.
Tier 0 acts as a binary gate — no match, no result. Tier 1–3 contribute to an additive score, weighted by tier. Loyalty status with the property's brand adds a separate stack bonus because using existing rewards is the highest-value match.
- Tier 1 match: +10 · Tier 1 conflict: −5
- Tier 2 match: +3
- Tier 3 match: +1
- Loyalty stack: +15 if user has status with the brand
- Normalize to 0–100% match score · always show "why" reasoning with each result
Defaults are bias-free by design. If the engine guesses wrong, the cost should be a less-personalized result — never a recommendation that violates an implicit preference.
| Unknown | Default behavior |
|---|---|
| Budget | Company travel policy cap; mid-tier if no policy |
| Loyalty | Best total value · no brand bias · surface "connect Gmail" chip |
| Trip purpose | Business (Edge default for the whole product) |
| Location anchor | City center / business district |
| Hotel type | Mixed — no chain or boutique bias |
| Cabin class | Economy short-haul (<4hr) · policy-based long-haul |
| Direct preference | Show both, rank by total travel time |
| Time of day | Mid-day (lowest variance, fewest dealbreaker conflicts) |
The user is here, talking, in this moment. Their query is the strongest signal. But Edge surfaces what's being ignored — quietly, with a one-tap recovery.
- Explicit query overrides profile preference, but only for this trip
- Profile is updated only on repeat behavior or explicit confirmation, never from one-off queries
- Edge shows a small note disclosing the conflict, plus a chip to reverse
- Dealbreakers still apply unless explicitly waived (see Decision 04)
A user who said "no red-eyes" and sees a red-eye in their results loses trust instantly. Dealbreakers are absolute by definition. But edge cases need a path that respects the user's autonomy.
Dealbreaker matches are excluded from results entirely. Never shown, never ranked low.
If filtering would return zero results, Edge stops and asks: "No non-red-eye options for that day. Want me to show red-eyes anyway, or look at different dates?"
The only way a dealbreaker is crossed is by the user choosing to cross it — never by Edge deciding to ignore it.
These decisions are load-bearing for the entire experience.
Scoring determines what users see first. Defaults determine what they see when Edge doesn't know much. Conflict handling determines whether Edge feels like an EA or a paternalistic system. Dealbreakers determine whether trust survives the first bad result. Get these four right and the product feels coherent. Get any one wrong and users will notice.
Three things this design is built around.
The question budget
Every follow-up costs trust. The engine treats questions as scarce, not free. If the profile is rich, the user gets results in zero questions. If thin, three is the maximum before something is shown.
Not all data is equal
A budget cap moves results more than a gym preference. The engine ranks every parameter by impact and asks in order. The bottom three tiers fill in over time without anyone noticing.
Filters > questions
After results show, additional preferences become one-tap chips. The user filters by tapping, not by answering. Every tap also teaches the profile for next time.
Learn by use
Tier 4 and most of Tier 3 are captured silently when the user mentions them, taps refinement chips, or makes a booking. The profile gets richer every session without surveys.