Inspiration

Every one of us has a banking app that knows exactly where we spend money, a browser full of coupon extensions, and a wallet with a few credit cards whose reward rules we can never remember. None of these talk to each other. Deal apps try to fix this by showing more offers: hundreds of coupons, almost none of which matter to you.

We flipped the question. Instead of "what's on sale?", we asked:

Given what this person already spends money on, which few deals are actually worth their attention?

Visa's challenge to reimagine shopping with generative AI felt like the right moment to build that: a shopping companion where deals find you, instead of you digging for them.

What it does

PerkPilot follows a purchase through four steps: Discover → Explore → Act → Verify.

  • Spend DNA: With consent, PerkPilot builds a profile of the stores and categories you return to, how often, and how much you usually spend. Every insight links back to the transactions behind it, and you can correct it: exclude a one-off gift, mute a store, or add an interest.
  • Deals that find you: New merchant promotions and card-linked offers are scored against your Spend DNA. Only offers that clear a relevance threshold reach your feed or become notifications, and each explains why it matched. In our sample data, a 40%-off headphone sale, the biggest discount in the catalog, ranks near the bottom for one shopper and at the top for another.
  • Research before you buy: Ask something like "noise-cancelling headphones for long flights under $350" and get candidates, evidence-backed strengths and tradeoffs, side-by-side comparisons, and watchlists. Live listings come from Google Shopping.
  • Deal Stack and best card: A deterministic engine separates what you pay today from credits and rewards you get later, and ranks the cards you already have.
  • Chrome extension and "I'm at…": The same quote engine runs in a browser side panel on supported stores, and a location-aware picker suggests the best card for the category of place you're at.
  • Buy with PerkPilot: With one click, you authorize an AI agent to buy one specific item, within a maximum price, using only the cards you chose. The agent checks the cart, picks the best card, and pays in Stripe test mode. A separate server check refuses anything outside your permission.
  • Verified savings: Your savings total only grows when a benefit actually posts, never when you merely view a deal.

How we built it

  • Backend: Node.js 20 with the built-in HTTP server and ES modules. No web framework and only two runtime dependencies (pg and stripe).
  • Frontend: Plain HTML, CSS, and JavaScript, with a calm visual style inspired by Apple Card and Apple Wallet.
  • Data: PostgreSQL for registered users, imported bank data, and checkout. A local JSON store powers clearly labeled sample profiles.
  • Integrations: Plaid Sandbox for bank linking and transaction sync, Google Gemini for the assistant and the checkout agent, SerpApi Google Shopping for live product listings, OpenStreetMap for nearby places and city-level location, and Stripe test mode for payments.
  • Chrome extension: A Manifest V3 side panel that reads a minimal cart snapshot and pairs securely with the portal.
  • Testing and deployment: 200+ automated tests using Node's built-in test runner, Playwright browser tests, and a Render deployment configuration.

The main architectural rule was: AI understands and explains; deterministic code does the math. Every dollar figure comes from one quote engine working in integer cents, so the portal, the extension, and checkout always agree. Effective cost = charge today − card-linked credit − estimated reward For our sample jacket, the effective cost is $104 − $20 − $1.04 = $82.96 once an offer is activated. On a flat 2% card, it is $104 − $2.08 = $101.92. Offer relevance combines evidence signals: familiar store, category history, stated interests, active shopping requests, and discount strength. Every score comes with a human-readable reason.

Challenges we ran into

  • Keeping AI away from the money. Language models are great at interpreting "a black running jacket under $120" and bad at reliably adding up credits and rewards. We had to draw a hard line between AI interpretation and deterministic calculation.
  • Letting an agent pay without giving it the keys. The checkout agent gets only four narrow tools: read cart, rank cards, execute purchase, and check status. It also has strict call limits and a time deadline. Your permission (item, destination, card set, and maximum total) is re-checked by independent server code right before payment. If the price jumps from $104 to $140 on a $110 approval, the purchase is blocked and no payment is submitted, even when a product description contains planted instructions telling the agent to ignore limits.
  • Messy real-world finance data. Plaid transactions arrive pending, then get replaced by posted versions, modified, or removed. Refunds shouldn't count as spending. Syncing these correctly in single database transactions took real care.
  • Not double-counting savings. A sale already included in the price can't be subtracted again. A credit counts only after activation and qualification. Replaying the same reward event must never inflate the ledger, and a return must reverse it.
  • Honesty under uncertainty. Card reward rates come from published issuer terms, but that doesn't prove anyone owns a card or qualifies for an offer. We labeled every value as observed, self-reported, estimated, or confirmed, and kept sample data strictly separate from real data.
  • Provider reality. Visa Intelligent Commerce documentation is restricted, so our spending limits are enforced by PerkPilot rather than the card network. Free-tier model rate limits also forced us to handle "model unavailable" gracefully.

Accomplishments that we're proud of

  • The same catalog produces genuinely different, explainable feeds for different shoppers, and the app is as deliberate about what it hides as what it shows.
  • One source of financial truth shared by the portal, the Chrome extension, and checkout.
  • A bounded purchasing agent that visibly refuses purchases outside the user's permission.
  • End-to-end real integrations for bank data, live shopping listings, and AI answers.
  • A privacy-first design: the AI never sees card numbers, raw transactions, or login credentials. Bank tokens are encrypted at rest, and precise location is never stored.

What we learned

  • Personalization is mostly about filtering, not generating: the value is in the deals you don't show.
  • The most trustworthy AI features are the ones with clear boundaries. Let the model reason and explain, and let code enforce.
  • Financial products need precise language. "Estimated," "pending," and "received" are different promises, and users deserve to know which one they're getting.
  • Agentic commerce needs permission scoped like a contract: one item, one price ceiling, one short time window.

What's next for PerkPilot

  • Integrate Visa Intelligent Commerce agent tokens so purchase limits are enforced at the network level.
  • Connect the Visa Offers Platform for real card-linked offers and automatic benefit tracking.
  • Move from Plaid Sandbox to production bank connections with full consent and account-recovery flows.
  • Extend the Chrome extension beyond our controlled test stores to real merchant partners.

Built With

Share this project:

Updates

Submission history