Eli Banchik

Rate My Stack

Wallet-Aware Credit Card Calculator

ReactTypeScriptFinanceVite
Visit Live Site

Every card calculator shows gross value: add up every credit at face value, ignore the fee, ignore whether you'll use any of it. Rate My Stack shows net value adjusted for how you actually redeem points, how much of each credit you really use, and the cards you already hold — because a card's perks are often already covered by another card in your wallet. The headline insight: a card can look great in isolation and be worthless in your specific wallet.

What Makes It Different

  • Marginal value model — shows how much worse off you'd be if you dropped each card, not just its standalone value
  • Wallet-level spend optimization — spend is a shared resource the wallet competes to earn on, eliminating triple-counting
  • Three-bucket redemption split — honesty-by-construction: transfer partners, cash back, or statement credit at different cpp rates
  • Dead weight detection — flags cards whose fee exceeds what they return once your other cards cover the same perks
  • Breakeven analysis — how much more you'd need to spend for a negative card to become worth keeping
  • Shareable results — URL-encoded wallet state for sharing your stack analysis

Technical Stack

ReactTypeScriptViteTailwind CSSZustandVercel

The Process

Built to answer a question issuer marketing never will: is this card actually worth it in YOUR wallet?

The Problem

  • Issuer marketing shows gross value: add up every credit at face value, ignore the fee, ignore whether you'll use any of it. Every 'is this card worth it?' article does the same math — points earned minus fee, done.
  • But that misses the real question. If you already have a card that earns 4x on dining, adding a second card that earns 3x on dining gives you zero additional dining value. The second card's 'value' is already covered. You're paying its fee for nothing.

Step 1 — Best Multiplier Per Category

  • Spend belongs to the person, not the card. The user enters spend per category once. Spend is a shared resource the wallet competes to earn on — this is what kills the triple-counting bug that plagues every other calculator.
  • For each spend category, the wallet earns at the best multiplier any held card offers: best_mult(category) = max across all cards of card.multiplier(category). Total wallet points = sum across categories of spend(category) × best_mult(category).
  • Cards with category caps (e.g. 'earn 4x on dining up to $25K/yr, then 1x') use greedy allocation — spend fills the capped card first, then overflows to the next-best rate.

Step 2 — Valuing Points Honestly (cpp)

  • Most calculators ask 'what's your cpp?' — a single guessed number that is the biggest, most subjective lever in the model. That's the exact dishonesty this tool exists to beat.
  • Instead, the user splits their redemption into three buckets: Cash out (~0.6–1.0 cpp), Portal travel (~1.0–1.25 cpp), and Transfer to airline/hotel partners (~1.5–2.5+ cpp). The blended cpp falls out of the weighting — easier to answer honestly ('I mostly just use the portal') and more accurate than a blind slider.
  • Cashback cards are pinned at 1.0 cpp — they don't participate in the redemption split because their points are always worth a cent. Transferable-point cards use the blended band.
  • Results show a range, not a point estimate (e.g. 'worth $180–$520/year depending on redemption'). A range entirely positive is a clear keep. A range that straddles zero means 'depends on you.' This is the most intellectually honest move in the build.

Step 3 — Credits, Fees, and Net Value

  • Credit value = sum across all cards of sum across each credit of (face value × redemption%). That $200 airline credit at 50% usage is worth $100, not $200. Coupon-type credits (monthly chunks) realistically get lower redemption due to friction.
  • Wallet fees = sum of all annual fees. Wallet net = points value + credit value − fees.

Step 4 — Marginal Value (The Smart Part)

  • How much worse off are you if you drop card X? Recompute the wallet without it: Marginal(X) = walletNet(full wallet) − walletNet(full wallet minus X).
  • What's happening inside that difference: you lose X's effective credits, you save X's fee, and you lose points only in categories where X was the best card — and only by the gap to the second-best card, because that spend falls back to the next-best card rather than vanishing.
  • Because walletNet uses max() over the card set, removing X automatically falls back to the next-best rate. You don't need a separate second-best calculation — just recompute on the smaller set.
  • If Marginal(X) < 0: X is dead weight. Its fee exceeds what it returns once you account for your other cards covering most of what it does. Cancel flag.

Step 5 — Breakeven

  • For a flagged card, hold spend fixed and solve for the credit-redemption % that makes Marginal(X) = 0: required_redemption = (fee − points_lost_value) ÷ total_credit_face_value.
  • If required redemption > 100%: the card can't be saved by using credits harder — it's structurally dead weight, drop it. Otherwise: 'Your [card] is worth keeping only if you redeem >X% of its credits. You're at Y%. Drop it or change how you use it.'

The Insight

  • A card can look great in isolation and be worthless in your specific wallet. The Amex Platinum might be the 'best travel card' — but if your Venture X already covers lounge access and your Sapphire Reserve already gets the best dining rate, the Platinum is just a $695 fee for perks you already have.
  • That's the counterintuitive, shareable finding the tool surfaces: which card in your wallet is dead weight.

Challenges & Iterations

  • Building a correct marginal model — the leave-one-out approach where removing a card falls back to the next-best rate per category, not zero
  • Handling cashback vs. transferable points — cashback cards are pinned at 1.0 cpp, transferable use a blended band from the redemption split
  • Cap-aware spend allocation — cards with 'earn 4x on dining up to $25K/yr then 1x' need greedy allocation that respects category caps
  • Data integrity — verified flag system with a prebuild guard that refuses to ship placeholder card data to production
  • Making the math transparent — 'See the math' breakdowns so users don't have to trust a black box