Product case study
Why I built a stakeholder sandbox instead of a slide, who it's actually for, and the product decisions behind it.
Try the live prototype →My first instinct was to build something a traveler would see. That's the wrong user. A member never sees eligibility logic or a relevance score directly, only the one offer that survives it. The people who actually need to interrogate this logic, argue about its edge cases, and sign off on it before it ships are Product, Legal/Compliance, Finance, the Brand GM, and the InsurTech partner underwriting the benefit. So I rebuilt Assurance Fit as what it should have been from the start: a sandbox for that room, not a mockup for a member.
A loyalty assurance benefit (trip protection, flexible dates, weather guarantees) only earns its place in a program if two separate questions get answered well, in front of the people who own each answer. First: who is even allowed to have it, which is a policy fact Legal and Finance need to see plainly, without it being buried inside a scoring model. Second, and much harder: of everything a member is eligible for, what should actually get surfaced to them right now, which is a judgment call Product owns and needs to be able to defend, not just assert. I wanted to see what it looked like to build both as visibly separate systems that a cross-functional room could each push on.
Eligibility is a compliance question. Relevance is a product question. Conflating them is how you end up either annoying members with irrelevant upsells or hiding a benefit they actually needed.
The prototype runs two layers that never talk to each other except through a shared list of what's eligible.
| Layer | Job | Example |
|---|---|---|
| Eligibility (deterministic) | Fixed rules: brand, tier, rate type, trip value, lead time. No scoring, no ambiguity. | Trip Cancellation Protection only appears if the rate is non-refundable. That's a policy fact, not a judgment call. |
| Relevance (weighted) | Among eligible products, rank by signals that predict actual member value. | A non-refundable, high-value, first-tier booking weights Cancellation Protection higher than a returning Platinum member on a fully refundable stay. |
This mirrors a split I've used before in AI product work: let deterministic code own anything that has a single correct answer, and let a scoring or model layer own anything that's actually a matter of context and judgment. Baking both into one rules engine tends to produce something that's either too rigid to personalize or too opaque to trust.
What I wanted this to prove is narrower than "I can build a loyalty feature." It's that I can take a role's hardest modeling problem (eligibility versus relevance, rules versus judgment) and actually build the thing, not just describe it.