Summary
Personalized card finder: user picks a spending intent + optional monthly spend → ranked card results. Surfaces as /goi-y-the page and a compact homepage widget.
Design ref: public/card-rec.png
Roadmap: roadmap/recommendation-feature.md
Algorithm
Reuse rankCards(cards, { [intentSlug]: spend }) — no new ranking logic.
UI
Two-column layout:
- Left: Hero + tab toggle (Cá nhân / Doanh nghiệp) + Step 1 intent chips + Step 2 spend selector (optional)
- Right: Top 5 results with bank logo, card name, cashback tagline, "Xem Thẻ" CTA
Key behaviors
- URL params
?intent=du-lich&spend=3000000 → shareable results
- State priority: URL params > localStorage > defaults
- "Doanh nghiệp" tab → "Coming soon"
- Homepage widget: compact (3 results) + "Xem đầy đủ" button → full page with current params
Files
| File |
Change |
components/marketing/recommendation-finder.tsx |
New |
app/(marketing)/goi-y-the/page.tsx |
New |
lib/spend-options.ts |
New — extract SPEND_OPTIONS |
components/marketing/card-ranking-table.tsx |
Import shared SPEND_OPTIONS |
app/(marketing)/page.tsx |
Add widget |
| sitemap |
Add /goi-y-the |
Acceptance Criteria
Summary
Personalized card finder: user picks a spending intent + optional monthly spend → ranked card results. Surfaces as
/goi-y-thepage and a compact homepage widget.Design ref:
public/card-rec.pngRoadmap:
roadmap/recommendation-feature.mdAlgorithm
Reuse
rankCards(cards, { [intentSlug]: spend })— no new ranking logic.UI
Two-column layout:
Key behaviors
?intent=du-lich&spend=3000000→ shareable resultsFiles
components/marketing/recommendation-finder.tsxapp/(marketing)/goi-y-the/page.tsxlib/spend-options.tscomponents/marketing/card-ranking-table.tsxapp/(marketing)/page.tsx/goi-y-theAcceptance Criteria
/goi-y-thematches designpnpm build+pnpm lintpass