尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A phone-friendly web app that tells you which card to use for a purchase. The standout features are:
Other features:
App link: https://pick-a-card.github.io/credit-card-picker/
The same steps are in the app under ☰ → Settings → Install on your phone.
Then add your cards with ☰ → + Add cards, and set what your points are worth in ☰ → Point values. Tick Activated on rotating-category cards once you've activated the quarter with your bank.
About widgets: a web app can't add a real home-screen widget. On Android, the launcher shortcut is the closest thing. iPhone doesn't support app shortcuts for web apps.
Card terms live in data/cards.json. The app re-checks it every time it opens.
A scheduled Claude routine follows UPDATING.md on the 16th of every month and on the 1st of each quarter. It checks:
It also verifies cards still marked "terms not yet verified". It publishes only if the data checks (npm test) pass.
Cards you've edited yourself are never overwritten; you get "Use the update / Keep mine" instead.
If you have an account and turned on email updates, you get an email about these changes.
Pick-A-Card is free, with no ads. If it's useful, you can buy me a coffee ☕. Questions, or a card that's wrong or missing: [email protected]
Pick-A-Card is an independent tool and isn't affiliated with, or endorsed by, any bank or card issuer. Recommendations are estimates based on published card terms, which change often and may be out of date or wrong. This isn't financial advice: confirm rates, caps and fees with your issuer before relying on them.
Your cards, spending log and settings stay on your phone, or in your own Firebase account if you turn on sync. When you tap What card here?, only your location is sent, and only to these US/EU-based services:
| Service | Run by | Used for |
|---|---|---|
| Photon | komoot (Germany) | Finding nearby stores (main) |
| Overpass, overpass-api.de | OpenStreetMap volunteers (Germany) | Backup store lookup |
| Nominatim | OpenStreetMap Foundation (UK) | Last-resort backup |
| gstatic.com | Google (US) | Internet check after a failed lookup (no location sent) |
No build step. Plain HTML/CSS/ES modules.
npm start # serves on http://localhost:8080
npm test # ranking, sync, email-diff and card-data validation tests (Node 20+)
| File | What it does |
|---|---|
data/cards.json | Cards, benefits, rotating quarters, partner deals, point currencies, changelog |
js/engine.js | Ranking: earn rate × point value, caps, rotating quarters, store deals, foreign fees, benefit tie-breaks |
js/data.js | Categories, merchant directory (each merchant also gets an m:<id> category), OpenStreetMap mapping |
js/catalog.js, js/sync.js | Load card data and apply updates to your wallet (auto-update, undo, keep-mine) |
js/cloud.js, js/sync-merge.js, js/firebase-config.js | Optional accounts and cross-device sync |
js/location.js | GPS + Overpass lookup of nearby stores; abroad detection |
scripts/card-diff.mjs, scripts/notify.mjs | Email updates when card data changes |
js/store.js, js/app.js | Local storage and UI |
Store data © OpenStreetMap contributors.