How I Built GiftHive: An AI Gift Finder That Actually Picks Gifts People Want A developer built GiftHive, a quiz-driven AI gift recommender that ranks real Amazon products by recipient fit rather than keyword match. The site uses a weighted scoring system based on tag overlap, budget, and occasion, and includes route-aware conversion optimizations. The developer shared the architecture and lessons learned, noting that route-aware components significantly improved quiz completion rates. Most "AI gift finders" are a search box with a chatbot glued on. I wanted to build something different — GiftHive , a quiz-driven gift recommender that ranks real Amazon products by who the recipient In this post I'll walk through the architecture, the conversion tricks I learned shipping it, and the bits I'm proudest of. Picking gifts is emotionally expensive. You scroll Amazon for an hour, second-guess every option, and end up buying a gift card. Existing tools don't help because they optimize for keyword match , not recipient fit . GiftHive flips the input: instead of "show me gifts under $50", you answer a 30-second quiz about the person relationship, interests, occasion, budget and get a ranked shortlist with explanations of why each gift fits. The whole site is a 3-step conversion funnel: Every step has a single primary CTA. The exit-intent modal is route-aware — it only fires on / and stays silent on /quiz and /results so it never interrupts the funnel mid-flow. That bug cost me ~15% of quiz completions before I caught it. Each quiz answer maps to a vector of attributes interests, style, budget, relationship . Products in the catalog have matching tags. Ranking is a weighted score: score = tag overlap w1 + budget match w2 + occasion match w3 No ML model needed — a few hundred products and clean tagging is enough to feel personal. Every product link runs through getAmazonUrl which: tag= param — if so, replaces it with ours ?tag=gifthive08-20 js export function getAmazonUrl gift: Gift { const AFFILIATE TAG = "gifthive08-20"; if gift.amazonUrl { return / ?& tag=/i.test gift.amazonUrl ? gift.amazonUrl.replace / ?& tag= ^& /i, $1tag=${AFFILIATE TAG} : ${gift.amazonUrl}${gift.amazonUrl.includes "?" ? "&" : "?"}tag=${AFFILIATE TAG} ; } return https://www.amazon.com/s?k=${encodeURIComponent gift.name }&tag=${AFFILIATE TAG} ; } Every ASIN in the catalog is real and verified, so clicks register in the Associates dashboard. A few things that moved the needle: Deployed on Cloudflare Pages via wrangler . The default .pages.dev domain works fine, but some startup directories like BetaList reject it as "free hosting" — something to keep in mind if you're planning a launch there. GiftHive is live at https://gifthive.pages.dev — I'd love feedback, especially on the quiz flow and the quality of recommendations. If you're building something with a similar funnel, the biggest lesson was: route-aware components beat global components . A social proof toast that fires on every page feels spammy; one that only fires on /results feels like proof. Happy hacking