CardFinder: Turning "Which Credit Card Should I Get?" Into a Scoring Problem
My friends and I kept asking each other the same question. Nobody had a good answer. The comparison sites aren't trying to help you — they're affiliate-driven. So I built something that actually is.
The idea came out of a conversation a few of us were having about credit cards. A friend was about to get his first card and had no idea which one to pick. Another one of us had just gotten a card mostly because a parent had it. I'd picked mine because the ad had a nice color scheme, which in retrospect is not a great decision-making process for a financial product.
There are comparison websites for this. None of them are actually useful. If you look at how they work, the cards that show up first are the ones that pay the site the most in affiliate commissions. The "best card for you" result doesn't depend on anything about you; it just surfaces the same five cards they surface for everyone. A student building credit for the first time and someone who travels internationally every month and pays their balance in full are going to get the same recommendations, which is absurd.
A lot of college students in particular end up choosing cards that are genuinely bad for their situation — high APR cards when they might carry a balance, or rewards cards where the annual fee exceeds what they'll ever earn back. The information asymmetry is real and the existing tools don't help. I decided to build something that did.
Turning a fuzzy question into a scoring problem
The core insight is that "which credit card is best for you" is actually a well-defined optimization problem — it just requires knowing your preferences. The problem with most people's card choices is that they don't have a structured way to express those preferences, so they end up defaulting to marketing or word of mouth.
CardFinder asks you a short quiz: What do you mostly spend money on? Do you carry a balance month to month? Do you travel internationally? Are you building credit from scratch? Those answers feed into a weighted scoring matrix where the weights shift based on your profile.
The concrete example that shows why this matters: if you tell CardFinder you carry a balance, it shifts the APR weight in the scoring formula from 0.10 to 0.35. That single weight change reorders the entire ranked list. The card that was best for someone who pays in full every month is now nowhere near the top, because their APR doesn't matter — yours does. These aren't vague lifestyle recommendations; they're different solutions to different optimization problems.
The net annual value calculation
For each card, CardFinder computes a 12-month net annual value based on your projected spend. The math is:
NAV = (welcome bonus / 12) + rewards_earned - annual_fee - interest_cost
Welcome bonus gets amortized over 12 months so you're comparing apples to apples. Rewards are calculated against your actual stated spending in each category. Interest cost is factored in if you carry a balance. Annual fee comes straight off the top.
This isn't complicated finance — it's arithmetic done honestly and applied to your actual situation rather than some hypothetical average user. The reason this matters is that a card with a $95 annual fee and good travel rewards can have a negative NAV for someone who doesn't travel and carries a balance, but a strongly positive NAV for someone who does. The number makes that visible.
The Gemini integration
Gemini explains why a card ranked the way it did for your specific profile. The key decision here was about what to put in the prompt. You could just say "here's a credit card, describe it" — but that produces generic marketing copy. Instead, the prompt includes the user's profile, how the weights shifted from default, and the per-card subscore breakdown.
With that context, the explanation looks like: "Because you carry a balance, APR had a 0.35 weight in your ranking rather than the default 0.10. This card's 18.9% rate placed it 4th despite competitive rewards — the interest cost at your projected balance outweighed the rewards earned." That's actually useful. It's the engine logic in plain English, not a product pitch.
What I'd change
The dataset is from CFPB public records and scraped issuer data. It's not real-time — card terms change and the current setup requires manual updates when they do. In a real product, the data pipeline would need to pull from live sources or at minimum have a freshness check. That's a solved engineering problem, but it's a real limitation of what exists now.
The quiz is intentionally short because I didn't want it to feel like a loan application. The tradeoff is that it can't capture edge cases — gig workers with variable income, people with specific spending categories that don't fit the defaults, those with credit-building constraints I didn't model. A better version would have an "advanced" path for users who want to give more detail and get more precise results.